Jump to content

Bufferbloat-ს მოგვარება ინტერნეტკავშირში


Recommended Posts

მოგესალმებით. დღეს საკმაოდ საინტერესო რამეზე უნდა გესაუბროთ. ესაა თქვენი ინტერნეტკავშირის ხარვეზები, რომლზეც იდეაში ISP-მ უნდა იზრუნოს მაგრამ ინდივიდუალური მომხმარებლისთვის ამ პრობლემის აღმოფხვრა საკმაოდ შრომატევადია და დიდ ფინანსებთანაა დაკავშირებული ამიტომ გასწავლით როგორ მოაგვაროთ პრობლემა, ოღონდ ჯერ გაგაცნობთ მას.

ალბათ ბევრ თქვენგანს შეუნიშნავს ინტერენტის გამოყენების დროს იქნება ეს რამის გადმოწერა, ვიდეოს ყურება თუ სხვა რომ თამაში ან რაიმე სხვა პროცესი ოდნავ ნელდება, ლაგავს და ა.შ. მეც მქონია ასეთი შემთხვევა მაგრამ არ ვიცოდი ეს რისგან იყო გამოწვეული. ამ მოვლენას ეწოდება bufferbloat და ის ძირითადად თქვენს როუტერსა და ISP-ს შორის ხდება რადგან ეს ადგილია ზუსტად bottleneck. 

33f9bb0b0b0d.jpg

1d4929af037e.jpg

მის სანახავად შეგიძლიათ გამოიყენოთ ეს საიტი. http://www.dslreports.com/speedtest  ყველაზე ეფექტურად და ზუსტად სწორედ ეს საიტი ზომავს. A+ დან F-მდეა შეფასების სისტემა. სხვა საიტები როგორიც მაგალითად speedtest-ია მხოლოდ პირველი პაკეტის latency-ს ზომავს და წერს მე 1 ms-ს მიწერს მაგრამ როდესაც სიჩქარის გაზომვა იწყება ანუ bandwith-ს მოხმარება წარმოიქმნება დამატებითი latency-რომლის შესახებ ესეთი საიტები არ გვაძლევენ ინფორმაციას და გვგონია რო 1 ms გვაქ სულ. იმ საიტს კიდევ უპირატესობა ის აქვს რომ ისტორიას იმახსოვრებს ინდივიდუალური მომხმარებლისთვის სტატისტიკის სახით და ამ ფიქსის მერე შეგიძლიათ შეადაროთ წინა შედეგებს.

ეს ტესტ საიტი ასე გამოიყურება

b389e6b8ec64.jpg

ეხლა პრობლემა, პრობლემა იმაში მდგომარეობს რომ სტანდარტულად დაბალფასიანი როუტერები არც ისე ჭკვიანები არიან და იწვევენ არასაჭირო latency-ს იმაზე მეტი პაკეტების ბუფერიზაციით ვიდრე ეს საჭიროა. ესეთი რამ ნებისმიერ network bottleneck-თან ხდება. ამას bufferbloat ეწოდება. გადმოწერისას ისეთი გვერდის გამოყენებაც კი როგორიცაა gmail ნერვების მოშლელია voip სერვისებიც ლაგავენ, online თამაშებზე რომ არაფერი ვთქვათ. ესეთი რამ თუნდაც არაფერს იწერდეთ მაინც დაეხმარება განსაკუთრებით მათ ვისაც aDSL კავშირი აქვთ.

4603d8db0592.jpg

ამ პრობლემის მოსაგვარებლად საჭიროა queue managment სისტემა. ამის მხარდაჭერა უნდა ჰქონდეს როუტერს ან ქსელში უნდა გქონდეთ linux box რომელსაც შეუძლია ეს გააკეთოს. საუკეთესო ვარიანტი კი linux-ს სისტემის როუტერზე დაყენებაა. ასეთი სისტემებია OpenWRT, DD-WRT, Tomato, FreeWRT, Gargoyle და ა.შ. არის კიდევ რამდენიმე. ამ შემთხვევაში განვიხილავ OpenWRT-ს რადგან სწორედ ეს მიყენია ჩემს როუტერზე. 

OpenWRT

a66d151b0a17.jpg

DD WRT

9aa8af50432c.jpg

Gargoyle

4b92cdcc46a9.jpg

 

ამისთვის გამოიყენება საკმაოდ ეფექტური პროგრამა SQM (Smart Queue Management) ახლანდელ OpenWRT-ს ვერსიებს ალგორითმები და სკრიპტები (fq_codel და sqm-scripts) ჩაშენებული აქვთ ისევე როგორც linux-ს kernel-ს და უამრავ კომერციულ ტექნიკას. მის დასაყენებლად საჭიროა წაშალოთ qos-scripts და luci-app-qos თუ ის აყენია და დააყენოთ luci-app-sqm. OpenWRT-ს აქვს შესანიშნავი package managment system მისთვის უამრავი პროგრამა არსებობს სწორედ ამიტომაა OpenWRT ჩემი რჩეული. პროგრამების დასაყენებლად გამოიყენეთ მენიუ 

  • System → Software, და დააჭირეთ Update Lists
  • დააჭირეთ Available packages tab-ს, დამოძებნეთ luci-app-sqm. დააჭირეთ Install
  • ან command line-დან აკრიფეთ opkg update და მერე opkg install "პაკეტის სახელი"
  • ჩართეთ SQM System → Startup
    • დააჭირეთ Start SQM-ს სახელთად
    • დააჭირეთ Enable რომ SQM process-ები რესტარტის ან ჩართვის მერე თვითონ გაეშვას.

SQM-ს აქვს რამდენიმე სეთინგი

1 Basic Settings აკონტროლებს გადმოწერა/ატვირთვის სიჩქარეებს.

2 Queue Discipline სეთინგი ირჩევს რომელი queueing discipline იქნას გამოყენებული WAN-სთვის. დეფოლტ სეთინგები უკვე კარგია მაგრამ შეგიძლიათ კიდევ უფრო დაანავაროტკოთ.

3 Link Layer Adaptation საშუალებას აძლევს OpenWrt-ს გამოთვალოს overhead-ები  WAN link-სთვის როგორიცაა DSL და ADSL. თუ DSL გაქვთ, უნდა წაიკითხოთ ეს სექცია კარგად.
 

SQM: Basic Settings Tab

უნდა დააყენოთ Download და Upload სიჩქარეები web GUI-ში WAN პორტისთვი.

  1. აიღეთ ნიმუშები ახლანდელი სეთაფის.
  2. როდესაც network არ გამოიყენება აქტირუად გამოიყენეთ ეს ტესტი http://www.dslreports.com/speedtest 
    ტესტის გაშვებისას არ მოკიდოთ ხელი მაუსს საერთოდ მოშორდით კომპიუტერს. სასურველია ყველა სახის პროგრამა გათიშოთ, კომპიუტერი იყოს idle რეჟიმში.

  3. Example 1: თუ ISP-ს ნათქვამი სიჩქარეებია "7 megabit გადმოწერა/768 kbps ატვირთვა", დააყენეთ Download 5950 kbit/s და Upload 653 kbit/s. ეს რიცხვები არის 85% სრული სიჩქარეებისა.
  4. Example 2: თუ speed test -თ გაზომეთ სიჩქარე დააყენეთ Download და Upload სიჩქარეები ამის 95%-თ. მაგალითად გაზმომეთ და იყო 6.2 megabits გადმოწერა და 0.67 megabits ატვირთვა (6200 kbps და 670 kbps, შესაბამისად), დააყენეთ Download და Upload სიჩქარეები ამის 95% ანუ (5890 და 637 kbps, შესაბამისად)

SQM: Queue Discipline Tab

Queue Discipline tab აკონტროლებს პაკეტების პრიორიტიზაციას გაგზავნისა და მიღებისთვის. დეფოლტ სეთინგებია:

  • fq_codel queueing discipline
  • simple.qos queue setup script
  • ECN for inbound packets
  • NOECN for outbound packets
  • დეფოლტად Advanced Configuration მშვენივრად მუშაობს, ასე რომ თუ არ ჩაუღმავდებით ისედაც კარგ შედეგებს მიიღებთ.

Queueing Discipline - the details…

The default fq_codel queueing discipline works well in virtually all situations. Feel free to try out other algorithms to see if they work better in your environment.

The default simple.qos script has a traffic shaper (the Queueing Discipline you select) and three classes with different priorities for traffic. This provides good defaults.

Explicit Congestion Notification (ECN) is a mechanism for notifying a sender that its packets are encountering congestion and that the sender should slow its packet delivery rate. Instead of dropping a packet, fq_codel marks the packet with a congestion notification and passes it along to the receiver. That receiver sends the congestion notification back to the sender, which can adjust its rate. This provides faster feedback than having the router drop the received packet. Note: this technique requires that the TCP stack on both sides enable ECN.

At low bandwidth, we recommend that you turn ECN off for the Upload (outbound, egress) direction, because fq_codel handles and drops packets before they reach the bottleneck, leaving room for more important packets to get out. For the Download (inbound, ingress) link, we recommend you turn ECN on so that fq_codel can inform the local receiver (that will in turn notify the remote sender) that it has detected congestion without loss of a packet.

"Dangerous Configuration" option-ები გაძლევთ საშუალებას შეცვალოთ სხვა სეთინგები მაგრამ ამის გაკეთება არაა საჭირო რადგან დეფოლტადაც კარგი შედეგები გექნებათ.
დეფოლტ სეთინგებია:

  • Hard limit on ingress queues: ეს არის შემომსვლელი პაკეტების (inbound) queue ლიმიტი. ცარიელი დატოვეთ დეფოლტისთვის.
  • Hard limit on egress queues: ეს არის გამავალი პაკეტების (outbound) queue ლიმიტი. ცარიელი დატოვეთ დეფოლტისთვის.
  • Latency target for ingress: codel algorithm აკონკრეტებს სამიზნეს გამოსახულს msec-ბში. გამოიყენეთ "auto" გამოთვლილი კომპენსაციისთვის ნელი სიჩქარეებისთვის (4 mbps-ზე ნაკლებისთვის). ცარიელი დატოვეთ დეფოლტისთვის.
  • Latency target for egress: იგივეს შვება ოღონდ ამ შემთხვევაში ჩვენ მხარეს. ცარიელი დატოვეთ დეფოლტისთვის.
  • Advanced option string for ingress: აქედან შეგიძლიათ დამატებითი პარამეტრები მიაწოდოთ შემომავალ პაკეტების მენეჯერს. ფრთხილად იყავით რადგან ერორ ჩექინგი არ ხდება. ცარიელი დატოვეთ დეფოლტისთვის.
  • Advanced option string for egress: იგივეა გამავალი პაკეტების მენეჯმენტისთვის. ცარიელი დატოვეთ დეფოლტისთვის.

დააყენეთ Link Layer Adaptation option-ები თქვენი ინტერნეტკავშირის ტიპის მიხედვით. მთავარი rule-ბია:

  • აირჩიეთ ATM: მაგალითად: ADSL1, ADSL2, ADSL2+ და Per-packet Overhead დააყენეთ 44 bytes-ზე თუ იყენებთ რაიმე სახის DSL/ADSL connection-ს (ანუ როცა ინტერნეტი ტელეფონის ხაზით მოგეწოდებათ).
  • აირჩიეთ Ethernet with overhead: მაგალითად: VDSL2 და დააყენეთ Per-packet Overhead 8-ზე თუ იცით რომ გაქვთ VDSL2 connection.
  • აირჩიეთ none (default) თუ იყენებთ Cable modem-ს, Fiber-ს (ბოჭკოვანი), direct Ethernet, ან რაიმე სხვა სახის კავშირს. ყველა სხვა პარამეტრები იქნება იგნორირებული..

თუ არ იცით რა სახის კავშირი გაქვთ თავიდან დააყენეთ "None", გაატარეთ სწრაფი Bufferbloat ტესტი. თუ შედეგები გაუმჯობესდა თავიდან გაკეთებულ ტესტებთან შედარებით კარგია. მერე აირჩიეთ ATM, მერე Ethernet რომ ნახოთ რომელზე გაქვთ უკეთესი შედეგი.

Link Layer Adaptation - the details…

აუცილებელია და ყველაზე უკეთესი ეგექტი აქვს ამის დაყენებას ATM framing-ს გამომყენებელ კავშირებში (თითქმის ყველა DSL/ADSL იყენებს), რადგან ATM ამატებს overhead-ს 5 byte-ს 48-byte frame-ს. ამიტომ მოკლე პაკეტების გაგზავნას მეტი დრო დაჭირდება. 

SQM ს შეუძლია მოაგვაროს "Ethernet with overhead" (თითქმის ყველა VDSL) კავშირებში. Cable Modem, Fiber (ბოჭკო), და direct Ethernet connection-ები ძირითადად არ საჭიროებენ link layer adaptation.

"Advanced Link Layer" -ს დაყენება საჭიროა თუ აგზავნით packet-ებს რომლებიც 1500 byte-ზე დიდია. თუმცა სახლის შემთხვევაში არაა საჭირო ამის დაყენება რადგან ISP-ები ალიმიტებენ ტრაფიკს 1500 byte-იან პაკეტებზე. ექსპერიმენტის სახით შეგიძლიათ tc_stab (არა htb_private ! ) აირჩიოთ link layer adaptation მექანიზმისთვის და ნახოთ შეიძლება გააუმჯობესოს კიდეც.

ეს მათ საიტზევე ჩატარებული ტესტების შედეგებია

80f686651b3e.jpg

ცადეთ და დაწერეთ თქვენი შედეგები რომლებსაც ზემოთ დალინკულ ტესტის საიტზე იხილავთ.

წარმატებებს გისურვებთ.

  • Upvote 4
Link to comment
Share on other sites

ესეც ჩემი შედეგი, მაგრამ 4 კაცი ვზივართ ჩემ ნეტზე და ამიტომ სიჩქარე ცუდადაა გაზომილი სამაგიეროდ bufferbloat-ს შედეგი გაუმჯობესდა. მერე ჩავუღმავდები ცოტა სეთინგებს. ისე ადრე qos რაც ქონდა openwrt-ს აშკარად გლატკად ამუშავებდა ნეტს, ეგ პირველად რო დავაყენე მაშინვე ვიგრძენი და დავწერე კიდეც მაგაზე მახსოვს მაგრამ ვერ ვხსნიდი რატომ და ახლა უკვე გასაგებია რატომაც.

edit: საბოლოო შედეგი.

b97b05783f72.jpg

Link to comment
Share on other sites

სასწაული რამეა რა. ძალიან კმაყოფილი ვარ მოკლედ იდიალურად მუშაობს. აგერ kali linux-ს ვიწერ ტორენტით და წყალივით მუშაობს გინდა საიტებზე გადასვლა და გინდა ვიდეოების ყურება, ზედმეტი ზადერჟკების გარეშე.

ესეც ტესტი გავატარე ტორენტის პარალელურად და გაითვალისწინეთ რომ 3 კაცი ზის ჩემ გარდა ამ ხაზზე და აშკარად სამივე მოიხმარს ნეტს ვხედავ :D

b3b18491133e.jpg

Link to comment
Share on other sites

  • 6 years later...

როგორც იქნა დადო ამაზე ინფო linustechtip-მა.

აქ ძალიან კარგად ხსნიან თუ რა პრობლემას აგვარებს. ბევრ ძვირიან gaming router-საც კი არ აქვს ეს ფუნქცია. ასე რომ ისეთი როუტერი იყიდეთ რომელზეც openwrt ყენდება და მერე ნახავთ რას ნიშნავს როცა ქსელი მოწესრიგეუბული გაქ განსაკუთრებით gaming-სთვის, თუნდაც ამ დროს ქსელი გადატვირთული იყოს და ტორენტებს იწერდეთ.

 

Link to comment
Share on other sites

სილქნეტის დაყენებულ როუტერზე ვერაფერს გავხდები ხო? :D

ნუ იდეაში არც მაწუხებს რეალურად, მარა მაინც :D 

Link to comment
Share on other sites

არა მაგას კი არა კაი ძვირიან gaming router-ებს არ აქვთ ეს feature. გამოტენიან უსარგებლო ნაგვით დაადებენ ფასს, ვიდს მიცემენ, ერთი ორი ლედი და ხალხს გონია რამე სასწაული გამოუშვეს :D

Link to comment
Share on other sites

  • 6 months later...

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.