Tại sao Internet của bạn giựt lag và cách giải quyết hiệu quả vấn đề

Vào chuyện ngày xưa...
Ngày xưa hồi còn lang bạt mình hay đi chơi ở các quán (cà phê) Internet. Đó là thời đầu năm 2000, khi người ta còn lên mạng để đong đưa nhau qua Yahoo Messenger và các diễn đàn qua đường truyền quay số. Một điểm chung mình thấy ở các quán đó là mọi thứ rất giựt, tải cái gì cũng lề rà lề rề. Lẽ phải thôi, vì một đường truyền 56k chia cho mười mấy máy tính, thì không chậm mới là lạ. Sau này người ta nâng cấp lên DSL, mình vẫn thấy giựt nhưng hồi đó mình đã biết tới GetZilla, Audio Galaxy, LimeWire, Bittorrent cho nên kệ thiên hạ chậm, ta cứ chiếm dụng hết. Tới thời về sau, khi nhà mình có đường truyền DSL riêng qua Wi-Fi có thể mang máy tính vào bồn cầu thay cho sách thì thấy đời đã lên hương từ đây. Thời đó (khoảng 10 năm trước) vì mình không chịu được internet một tháng 300k nên mình có chạy dây chia cho 5-6 nhà hàng xóm, mỗi nhà chỉ phải đóng 50k. Dĩ nhiên mọi người rất nhường nhịn biết điều, nhưng thi thoảng mình vẫn thấy giựt lag mặc dù gói cước đã khá cao. Té ra nguyên nhân nếu bất cứ ai trong mạng tải torrent, xem phim, thì tất cả mọi người đều chậm, ngay cả khi mình chỉ dùng để chat trên mạng, còn có lúc voice chat cũng không được, chơi Counter-Strike thì càng không. Mình vẫn coi chuyện đó là bình thường và khi nào cần mạng nhanh thì truy cập lúc nửa đêm.
Vấn đề của chúng ta vẫn là chuyện khi có nhiều hơn một máy tính truy cập vào mạng và khi một máy sử dụng rất nhiều đường truyền thì làm tất cả các máy tính khác chậm đi trông thấy. Muốn nhanh, nhà mạng nói, bạn cần mua gói cước với tốc độ cao hơn (và thường nhà mạng có lời khuyên kiểu này cho các "game thủ"). Nhưng sự thực có phải như thế không?

Hãy cùng đi siêu thị
Hãy tưởng tượng bạn là quản lý trong siêu thị. Bạn nhìn thấy có một thằng cu hớt ha hớt hải chạy đến vì nhà có khách và nó vinh hạnh được giao nhiệm vụ mua chai nước mắm hay lọ tương ớt. Trước mặt thằng bé là hai hàng dài xếp chờ thanh toán, mỗi hàng có 10 người đang xếp. Có mấy bà mẹ bỉm sữa có một xe hàng đầy những thứ linh tinh chờ thanh toán trước mặt. Như vậy là mất đứt 20 phút để thằng cu mua chai nước mắm vì những người có đầy giỏ hàng này. Bạn tìm cách giải quyết vấn đề.
Cách đầu tiên và dễ nhất cho bạn là thuê thêm hai người thu ngân nữa để có bốn hàng thanh toán. Nhưng như thế bạn phải tăng gấp đôi số máy móc, phải cơi nới thêm hàng thanh toán và chi phí trả cho nhân viên. Và bạn để ý có những lúc có nhiều khi nhân viên không có việc làm thì 3 người ngồi chơi, như thế là rất lãng phí nhân lực. Và trong trường hợp tốt nhất trong ví dụ ở trên, có bốn hàng thanh toán chỉ làm cho thằng cu phải chờ 10 phút thay vì 20 phút.
Hoặc bạn cũng có thể đi thuê người làm nhanh hơn -- thay vì thuê thu ngân có yêu cầu trình độ hết lớp 12 thì bạn thuê người thu ngân trình độ có bằng Thạc sĩ chẳng hạn. Đó cũng là một cách khác.

Chúng ta có giải pháp nào tốt hơn không?
Một trong những điều bạn có thể nhận thấy là với những người mua rất nhiều đồ, thường họ ít quan tâm hơn việc họ phải chờ bao lâu. Còn những người vào siêu thị của bạn để mua cái bút hay chai nước mắm thì với họ việc xếp hàng làm họ rất sốt ruột. Như vậy cách tốt hơn là bạn chuyển hai hàng xếp hàng bình đẳng thành một hàng nhanh, một hàng chậm. Cho ví dụ là những người mua ít hơn 5 món đồ thì được xếp vào hàng nhanh, ai mua nhiều hơn xếp vào hàng bình thường. Nếu hàng nhanh hết người thì nhân viên thu ngân sẽ gọi người từ hàng chậm sang. Trong trường hợp đó, người mua ít đồ sẽ được đảm bảo được ra trước rất sớm so với người mua nhiều đồ. Nếu thằng cu chạy đi mua chai nước mắm là người duy nhất được xếp hàng nhanh, nó sẽ ra đầu tiên. Như vậy ngay cả không có sự thay đổi về nhân sự, mà bạn cũng đã giải quyết được một phần rất lớn của vấn đề.
Từ QoS đến Cake
Đây không phải là ý tưởng mới, ở nhiều siêu thị đã có chính sách "express lane" như vậy. Nhưng nó có liên quan gì đến đường truyền Internet? 
Thực ra ứng dụng game như Counter-Strike là ứng dụng cần băng thông ít (khác với các ISP và diễn đàn online thường loè bạn) nhưng cần độ trễ nhỏ. Mình dám cá với tất cả mọi người bạn có thể chơi Counter-Strike hay phần lớn các game online với 1/4 Mbps không hề lag, nếu như Counter-Srike là game duy nhất chơi trên mạng. Đó là đứa trẻ cần đi mua chai nước mắm. Với Counter-strike hay voice chat, chậm đi vài chục mili-giây là cả một vấn đề cực lớn, nhưng với Mương 14 chẳng hạn, nếu trang web tải chậm hơn 1 giây bạn cũng không quan tâm. Nếu Youtube buffer thêm vài giây bạn cũng không khó chịu.
Game, voice, lướt web hay chat là những dịch vụ đòi hỏi tương đối ít đường truyền. Nếu chúng ta đi "vẽ" một đồ thị về yêu cầu độ trễ và băng thông của các ứng dụng, thì chúng ta sẽ có một số điểm đại loại như sau (Cảm ơn ggplot2):

Băng thông không phải là tất cả
Dù gì, nếu bạn rút ra được điều gì từ việc đọc những dòng trên, đó là việc internet của bạn giựt hay chất lượng thoại/video của bạn đôi khi sắc nét, nhưng nhiều khi bị giựt hay đứt quãng (lưu ý, giựt hay đứt quãng chứ không phải là mờ) thì không phải tại bạn không đủ băng thông và cần nâng cấp đường truyền. Lý do bạn bị giựt là tại router internet của bạn không đủ thông minh để phân luồng số người xếp hàng mà coi mọi người là như nhau. Vấn đề ở đây là khi số lượng người xếp hàng nhiều, tức là nhiều ứng dụng chạy cùng một lúc trên một hay nhiều máy tính khác nhau, một chiếc router bình thường không biết đâu là giao thông nhỏ nhưng cần nhanh và giao thông nhiều nhưng không cần nhanh. Từ của những người làm chuyên môn cho vấn đề hàng dài này gọi là bufferbloat - hàng đứng chờ dài. Chúng ta phải làm gì khi hàng chờ dài?
Bạn có thể thấy, nếu được ưu tiên, chúng ta sẽ ưu tiên ứng dụng cần độ trễ thấp trước ứng dụng cần độ trễ cao, và ứng dụng cần băng thông thấp trước ứng dụng cần băng thông cao.
Ngày xưa, khi người ta mới phát minh ra chuyện hàng chờ, người ta tìm cách đi phân loại traffic và đánh dấu thủ công ứng dụng gì cần yêu cầu gì để router "xếp hàng" ưu tiên cho các ứng dụng đích đáng. Thủ thuật này gọi là Quality-of-Service, hay còn gọi là QoS, và thường được các router gọi là game mode: Nó có một cơ sở dữ liệu khổng lồ về việc các game sử dụng cổng nào để ưu tiên cho game đó. Nhưng vì có các ứng dụng và các game mới ra hàng ngày nên việc duy trì cơ sở dữ liệu đó gần như là không thể, trừ khi bạn có một đội ngũ IT chuyên đi tìm hiểu việc này.
Thuật toán xếp hàng thông minh - SQM
Gần đây, trong những nghiên cứu mới, người ta đã tìm ra một cơ chế để phân loại giao thông một cách khá hữu hiệu và tự động gắn liền với nhân Linux. Cơ chế này gọi là thuật toán xếp hàng thông minh (Smart Queue Management - SQM - thường đọc là squirm): CoDel (đọc là coddle) hoặc Cake. Ý tưởng chính của CoDel hoặc Cake là nó tự động huỷ những gói tin phải xếp hàng quá lâu, hoá ra việc này là một điều rất rất hữu dụng để hạn chế việc lag. Để hiểu một cách hình tượng, bạn có thể xem video này:
Điều tuyệt vời của Cake là bạn không cần phải trả thêm tiền hàng tháng để dùng, tất cả những gì bạn cần là phần mềm nguồn mở. Để dùng được Cake, bạn phải có một router chạy được  OpenWRT. OpenWRT là hệ điều hành nhúng dựa trên nhân Linux chuyên để chạy trên router, và có các chức năng biến router của bạn thành một cái máy tính thông minh thực thụ. Bạn cần cài OpenWRT vào đó. Tuỳ từng router khác nhau mà cách cài đặt khác nhau, nhưng mình thường sử dụng router của Netgear. Việc mua router tốt có thể chạy được OpenWRT rất quan trọng, và là khâu then chốt. Khi mua router, mình thường vào trang wiki của OpenWRT và tra xem router có được OpenWRT hỗ trợ không, có nhiều hơn 32MB RAM và 8MB Flash hay không (nếu nhỏ hơn thì quên đi). Các router thường có các phiên bản phần cứng khác nhau, nên phải cẩn thận chọn router bạn biết đúng phiên bản. Mình thường chọn Netgear WNDR 3800 hoặc R6100 vì nó chỉ có một phiên bản ở Mỹ, ở Việt Nam bán những cái router hiệu gì mình không rành. Router này sau đó phải được kết nối một cách độc quyền vào modem (không máy tính nào khác kết nối vào modem ngoài router), rồi bạn cài đặt Cake.
Cài đặt Cake
Bạn vào System>Software rồi cài kmod-cake, sqm-scripts, sqm-scripts-extra, luci-app-sqm.

Khi khởi động lại router, nó hiển thị một mục mới, Network>SQM ở Control Panel. Sau đó chúng ta cần đo băng thông lý tưởng, tức là xem chúng ta có bao nhiêu "hàng" để thông báo cho thuật toán biết chúng ta có thể phân bổ hàng như thế nào. Thoát hết tất cả các máy tính đang dùng Internet ra, và mở một cửa sổ để theo dõi độ trễ ping (thường với Windows ping -t google.com) đồng thời vào một trang để theo dõi băng thông, ví dụ speedtest.net:

Bạn có thấy khi một ứng dụng như Speedtest sử dụng đường truyền - thì đường truyền rất mạnh 70Mbps của mình cũng lag tới gần 1s?
Việc có đường truyền tốc độ cao chỉ làm bạn khó đạt đến ngưỡng làm tất cả lag, nhưng một khi bạn làm đường truyền lag thì đường truyền tốc độ cao hay thấp không giải quyết được gì
Anyway, khi bạn có số này rồi, nhân băng thông uplink và downlink với hệ số 0.9, rồi thiết lập thông số SQM tương ứng (Chọn Cake nếu có thể ở mục Queuing Discipline). 

Sau khi thiết lập xong, bạn tiếp tục đo bằng speedtest. Bạn chắc chắn sẽ thấy băng thông hữu hiệu của mình giảm xuống một chút.

Nhưng nếu bạn độ trễ lag của ping cũng giảm hẳn (bạn có thấy số ping "lag" của mình giữ ở 20ms từ khi trước 600ms?) -- xin chúc mừng, và bây giờ bạn có thể download Bit Torrent, xem Youtube cùng lúc với chơi game và gọi Facetime mà không sợ giựt nữa.
Nếu bạn đọc bài này, và áp dụng thành công cho mình, xin hãy dành chút thời gian và tiền bạc để đóng góp cho dự án OpenWRT để cảm ơn các nhà phát triển và để họ duy trì các hoạt động của mình. Nếu bạn yêu thích làm việc với phần cứng và firmware, đây là một dự án được tổ chức rất rất tốt, và mình chắc chắn bạn sẽ học được rất nhiều khi tham gia vào dự án này. Mình cũng là một người thỉnh thoảng viết các bản vá lỗi cho OpenWRT và làm cho OpenWRT được hỗ trợ trên nhiều router hơn. OpenWRT là một phần mềm rất tốt mà có bao nhiêu tiền cũng không mua được.
Đôi lời về DD-WRT và Tomato
Có bạn sẽ quen với DD-WRT hơn và hỏi tại sao mình không khuyên dùng DD-WRT hay Tomato. Mình trước có dùng DD-WRT và Tomato nhưng DD- theo những gì mình quan sát được là các dự án này tương đối chắp vá và thua xa OpenWRT. Ngày xưa OpenWRT không có giao diện web tốt mà cái gì cũng phải mó tay vào, và đó là lý do nhiều người biết đến hai dự án trên hơn. Nhưng trong một vài năm gần đây, cả DD-WRT và Tomato đều có sự cập nhật, tổ chức, tính năng thua xa OpenWRT.
Các điểm lưu ý:
- Bài này chỉ áp dụng nếu sóng Wi-Fi yếu không phải là vấn đề. Nhưng thường sóng Wi-Fi từ N/AC trở lên thì nó đã cao hơn gấp nhiều lần đường truyền Internet của bạn rồi. Bạn có thể kiểm tra việc này bằng cách nối dây trực tiếp.
- Nếu bạn nhìn video chat mờ chứ không phải giật thì đúng là đường truyền của bạn quá yếu. Nhưng thường đường truyền từ 10Mbps trở lên thì mình không nghĩ là quá yếu cho 99% các ứng dụng.
- Ở Việt Nam, đường truyền ra quốc tế có những lúc có vấn đề và có hiện tượng nghẽn mà bất kể router của bạn thông minh đến đâu cũng không giải quyết được.
113
2957 lượt xem
113
8
8 bình luận