Thuật toán Mức độ công bằng Độ phức tạp
PBRR O(1)
PWFQ MAX O(logn)
DRR 3MAX O(1)
FQRR 2MAX O(1)
Bảng 2.1 cho ta một các nhìn tổng quát về hai thuộc tính quan trọng của một số thuật toán khác nhau đề cập ở trên. Mức độ công bằng đƣợc định nghĩa nhƣ là sự chênh lệch về thông lƣợng giữa các mẫu tin đến giữa thuật toán đang khảo sát so
với thuật toán GSP lý tƣởng, ở bất kỳ thời điểm nào, tại bất kỳ hàng đợi nào. MAX là kích thƣớc tối đa của gói tin. Theo đó PWFQ đạt đƣợc độ công bằng cao nhất, sau đó là FQRR, DRR và cuối cùng là PBRR.
Các chiến lƣợc FQ mà chúng ta vừa xem xét trên là các chiến lƣợc FQ áp dụng cho từng gói tin (Packet-based Weighted Fair Queuing), theo đó mỗi lần phục vụ server sẽ chọn một gói tin theo trọng số của chúng. Ƣu điểm của chiến lƣợc này là mức độ công bằng cao, tuy nhiên nó có hai hạn chế: Thứ nhất, mặc dù đã có nhiều cải tiến, song chi phí để gán nhãn thời gian cho mỗi gói tin vẫn là khá lớn, dẫn tới hạn chế tốc độ phục vụ của server; Thứ hai, các gói tin thuộc cùng một luồng sẽ không đƣợc phục vụ một lƣợt, mà sẽ bị đứt quãng, điều này không phù hợp cho các ứng dụng multimedia tƣơng tác thời gian thực. Một cách tiếp cận khác là thay vì phải xem xét và gán nhãn thời gian đến từng gói tin, ngƣời ta áp dụng gán trọng số weight cho cả một tập (luồng) các gói tin, trọng số đặc trƣng cho lƣợng dịch vụ đƣợc cấp phát cho mỗi luồng, các gói tin trong cùng một luồng (có cùng trọng số) sẽ đƣợc phục vụ theo chính sách FIFO và các luồng sẽ đƣợc phục vụ theo cơ chế quay vòng (Round Robin). Chúng ta sẽ xét hai trong số những thuật toán theo hƣớng này, đó là Flow-Based Weighted Fair Queuing (viết tắt là WFQ) và
Class-Based Weighted Fair Queuing (viết tắt là CBQ). Chi tiết về hai thuật toán này sẽ đƣợc trình bày trong hai phần tiếp theo.
2.5 Chiến lƣợc Flow-Based Weighted Fair Queuing (WFQ)
Trong WFQ (hình 2.8), các gói tin tới hàng đợi đƣợc phân thành các luồng theo từng mức ƣu tiên, mỗi luồng đƣợc xếp vào một hàng đợi đợi riêng và sẽ nhận đƣợc một dịch vụ khác nhau. Cũng nhƣ cơ chế Round Robin, bộ lập lịch của server cũng phục vụ các lớp theo vòng, từ lớp 1, lớp 2, rồi lớp 3, v.v.. Tuy nhiên, WFQ khác RR ở chỗ, một lớp sẽ nhận đƣợc một lƣợng dịch vụ khác nhau trong mỗi lần phục vụ, tuỳ theo trọng số của lớp đó. Cụ thể, giả sử mỗi luồng i, đƣợc gán cho một
n i j i w w 1 ) ( /
trọng số wi. Trong mỗi khoảng thời gian phục vụ, lớp i sẽ nhận đƣợc một lƣợng dịch vụ bằng tổng dung lƣợng đƣờng truyền, với n là tổng số luồng có gói tin đang chờ. Gọi C là dung lƣợng kênh truyền ra, khi đó mỗi luồng i sẽ đƣợc ít nhất
C* băng thông trong mỗi lần phục vụ [18].
Có nhiều cách xác định trọng số cho mỗi luồng trong cơ chế WFQ. Sau đây chúng tôi xin trình bày cách một cách, cách này đã đƣợc áp dụng trong các router của Cisco [13]. Trong đó, việc tính trọng số của một luồng dựa trên giá trị các bit ƣu tiên (IP precedence bits) của trƣờng ToS (Type of Service) trong cấu trúc gói tin IPv4 của các gói tin trong luồng (hình 2.9). Đó là ba bit bên trái nhất của trƣờng ToS. Các bit này đƣợc tổ hợp để cung cấp các mức ƣu tiên từ 0 đến 5 (các mức 6 và 7 đƣợc dành riêng và không đƣợc phép sử dụng), nhƣ vậy ta có thể phân đƣợc 6 luồng khác nhau. Hình 2.9: IP Precedence bits Hình 2.8: Cơ chế WFQ n i j i w w 1 ) ( /
Vì mỗi luồng là một tập hợp các gói tin có cùng mức ƣu tiên, nên có thể gán trọng số của mỗi luồng bằng giá trị mức ƣu tiên này. Luồng có mức ƣu tiên cao hơn thì đƣợc cấp phát băng thông nhiều hơn, chúng sẽ đƣợc phục vụ nhiều hơn, thời gian đáp ứng nhanh hơn khi có tắc nghẽn xảy ra. Để rõ hơn chúng ta xét ví dụ sau: Giả sử có 6 mức ƣu tiên (IP precedence = 0 5) và mỗi luồng một mức ƣu tiên, mỗi luồng sẽ chiếm một phần băng thông bằng (IP precedence + 1) / (tổng dung lƣợng của cả đƣờng truyền). Tổng dung lƣợng đƣờng truyền là:
1 + 2 + 3 + 4 + 5 + 6 = 21
Các luồng sẽ lần lƣợt nhận đƣợc 1/21, 2/21, 3/21, 4/21, 5/21, 6/21 tổng dung lƣợng đƣờng truyền.
Nếu ở mức ƣu tiên 2 ta có 8 luồng, các luồng còn lại nhƣ trên, khi đó, tổng dung lƣợng đƣờng truyền là:
1 + 2 + 8*3 + 4 + 5 + 6 = 21 + 24 – 3 = 42
các luồng lần lƣợt nhận đƣợc 1/42, 2/42, 3/42, 4/42, 5/42, 6/42 dung lƣợng đƣờng truyền, trong đó mỗi một trong số 8 luồng có mức ƣu tiên 2 sẽ nhận đƣợc xấp xỉ 3/42 dung lƣợng đƣờng truyền.
Nhƣ vậy chúng ta có thể thấy WFQ thực hiện việc phân phối dải thông một cách công bằng cho các luồng lƣu lƣợng theo mức độ ƣu tiên của chúng. Ta nói rằng WFQ đảm bảo chất lƣợng dịch vụ có phân loại (hay là QoS mềm nhƣ đã đề cập trong phần 1.3.2). Trên thực tế, WFQ đƣợc dùng cho những trƣờng hợp yêu cầu thời gian đáp ứng nhất quán cho mạng khi tải nhẹ cũng nhƣ khi tải nặng mà không cần bổ sung băng thông. WFQ đảm bảo cho các hàng đợi không bị “đói” (starve) băng thông, tức là nó bao giờ cũng cung cấp một lƣợng băng thông nhất định cho các gói tin đến chờ, và dịch vụ cung cấp cho mỗi luồng là có thể dự đoán trƣớc đƣợc.
Mặt khác, WFQ hiệu quả trong việc tận dụng dải thông để cung cấp cho các luồng lƣu lƣợng tốc độ thấp khi các luồng tốc độ cao đã đƣợc phục vụ xong. Đây là một ƣu điểm của WFQ so với các hệ thống dồn kênh phân chia thời gian TDM
(Time Division Multiplexing) - chỉ đơn giản chia nhỏ băng thông và cấp cho các luồng, và mỗi phần băng thông đó sẽ không đƣợc sử dụng nếu không có lƣu lƣợng đi qua. WFQ cũng có thể đƣợc kết hợp với giao thức đặt trƣớc tài nguyên (RSVP - Resource Reservation Protocol) [13], để cung cấp QoS đảm bảo chất lƣợng (hay QoS cứng, xem phần 1.3.2).
2.6 Chiến lƣợc Class-Based Weighted Fair Queuing (CBQ)
CBQ là sự mở rộng của WFQ nhằm cung cấp đồng thời hai khả năng: đảm bảo băng thông tối thiểu cho các lớp lƣu lƣợng do ngƣời dùng đặt trƣớc, và đảm bảo sự phân phối công bằng cho các luồng trong mỗi lớp đó. Không giống nhƣ WFQ- mỗi luồng đƣợc cung cấp một hàng đợi riêng biệt, với CBQ, mỗi lớp đƣợc cung cấp một hàng đợi, và mỗi lớp có thể có một hoặc nhiều luồng [13]. Lớp lƣu lƣợng đƣợc xác định dựa trên các tiêu chí nhƣ giao thức (IP, FTP, HTTP, Telnet,..), danh sách điều khiển truy cập ACL và giao diện vào. Các gói tin cùng thoả mãn một tiêu chí đƣợc phân vào một lớp.
CBQ cho phép ngƣời quản trị mạng xác định chính xác lƣợng băng thông đƣợc cấp phát cho một lớp lƣu lƣợng cụ thể dựa vào lƣợng băng thông có sẵn trên giao diện. Đây là điều khác biệt với WFQ – việc tính trọng số là của hệ thống (dựa vào các bit ƣu tiên của trƣờng ToS), chứ không do ngƣời dùng đặt. Điều này giúp quản trị viên có thể phân phối cho một lớp lƣu lƣợng đặc biệt nào đó một lƣợng băng thông tối thiểu để hoạt động. Để làm rõ điều này, ta hãy xét một ví dụ: Giả sử truyền một luồng video có yêu cầu băng thông bằng một nửa dung dƣợng của đƣờng truyền T1 (1.544Mbps). Nếu có 2 luồng lƣu lƣợng (luồng video đang xét và một luồng khác), thì không vấn đề gì nếu dùng WFQ để phân phối. Giả sử có thêm nhiều luồng mới nữa, nếu dùng WFQ thì luồng video sẽ đƣợc cấp lƣợng băng thông nhỏ hơn, vì WFQ đảm bảo công bằng cho các luồng. Khi đó ngƣời quản trị mạng có thể sử dụng CBQ, định nghĩa một lớp riêng cho luồng video, yêu cầu router cấp cho lớp này 768 kbps (một nửa dung lƣợng đƣờng truyền T1). Video giờ đây đã có đủ
băng thông để hoạt động, các luồng còn lại sẽ đƣợc đƣa vào một lớp khác, chia sẻ phần băng thông còn lại (nửa còn lại của đƣờng truyền T1) [13].
Khi một lớp đƣợc xác định, nó đƣợc gán các đặc trƣng nhƣ: băng thông, trọng số, giới hạn độ dài gói tin tối đa, kích thƣớc hàng đợi tối đa. Băng thông đƣợc gán cho lớp là phần băng thông tối thiểu đƣợc phân phát cho lớp trong suốt quá trình tắc nghẽn. Trọng số của một lớp cụ thể đƣợc lấy từ băng thông đƣợc gán cho lớp. Trọng số đặc trƣng cho lớp trở thành trọng số của các gói tin thuộc lớp đó.
Ngoài ra, CBQ còn hỗ trợ sự chia sẻ băng thông giữa các lớp bằng cách sử dụng cấu trúc dạng cây phân cấp theo các lớp. Để rõ hơn ta xét một ví dụ nhƣ trong hình 2.10: Tại cấp cao nhất, ngƣời quản trị mạng cấp phát cho mỗi ngƣời dùng (agency) một phần băng thông của kênh truyền chung; ở cấp hai, mỗi ngƣời dùng này lại lấy phần băng thông đƣợc cấp chia cho các ứng dụng theo một tỷ lệ nào đó; quá trình cứ tiếp tục cho đến khi các ứng dụng thực sự sử dụng băng thông đƣợc cấp phát để truyền.
20% 20%
10%
50% 40%
Hình 2.10: Ví dụ về cấu trúc phân cấp chia sẻ băng thông trong CBQ
Link Real- time telnet ftp 30% 10% 10% 1 2 3 Real- time telnet ftp 3% 2% 5% 1 2 3 Real- time telnet ftp 15% 5% 0% 1 2 3 IP DEC- net Agency A Agency B Agency C
Trong quá trình mạng hoạt động, có thể xẩy ra tình huống là có những lớp không dùng hết phần băng thông đƣợc cấp phát, khi đó các lớp khác cùng cấp có thể mƣợn băng thông dƣ đó thông qua lớp cha của nó, lớp nào có mức ƣu tiên cao hơn sẽ đƣợc mƣợn nhiều băng thông hơn [26]. Để làm đƣợc điều này cần phải có một cơ chế chia sẻ đặc biệt đƣợc cài đặt tại các nút của cây.
CBQ đã đƣợc cài đặt trong Linux bằng cách dùng thuật toán từ bộ mô phỏng NS. Cài đặt ban đầu của CBQ là WRR (Weighted Round Robin), trong Linux là DRR (Deficit Round Robin). Chính sách chia sẻ băng thông giữa hai lớp A và B đƣợc sử dụng trong DRR nhƣ sau: khi lớp A có độ ƣu tiên cao hơn lớp B, cả hai đang mƣợn băng thông từ C thì A sẽ lấy một lƣợng băng thông nó cần, phần còn lại dành cho B. Nếu B có cùng độ ƣu tiên nhƣ A thì hai lớp sẽ cùng đƣợc một tỷ lệ băng thông nhƣ nhau [26].
CHƢƠNG 3 CÁC CHIẾN LƢỢC QUẢN LÝ HÀNG ĐỢI ĐỘNG
Trong Lý thuyết hàng đợi, ngƣời ta đã chứng minh rằng, thời gian trung bình mà các gói tin đi qua hàng đợi, bao gồm thời gian các gói tin phải chờ trong hàng đợi cộng với thời gian chúng đƣợc phục vụ, tỉ lệ thuận với chiều dài trung bình của hàng đợi và tỉ lệ nghịch với tốc độ đến hàng đợi trung bình [3]. Điều này đƣợc Little phát biểu bằng công thức: L = .W ( W = L/), trong đó: L (packets) là chiều dài trung bình của hàng đợi, (packets/s) là tốc độ đến trung bình của các gói tin, và W là thời gian đi qua hàng đợi (s). Mục tiêu chính của các chiến lƣợc quản lý hàng đợi là giữ cho chiều dài hàng đợi có một giá trị đủ nhỏ và ổn định, đảm bảo độ trễ trung bình của các gói tin không vƣợt quá mức cho phép, đồng thời đạt đƣợc hệ số sử dụng đƣờng truyền cao. Hai yêu cầu trên là trái ngƣợc nhau, chính vì vậy cần có sự thoả hiệp. Để biểu diễn sự thoả hiệp, ngƣời ta đƣa ra một đại lƣợng gọi là “công suất”, đó là tỷ lệ giữa thông lƣợng và độ trễ. Điểm làm việc tối ƣu là điểm có “công suất” cực đại. Nội dung chính của chƣơng này là trình bày về chiến lƣợc quản lý hàng đợi động AQM và một số thuật toán tiêu biểu, chiến lƣợc này đảm bảo đáp ứng đƣợc mục tiêu chính nhƣ vừa nêu trên. Trƣớc khi đi sâu tìm hiểu hai thuật toán AQM cụ thể, chúng ta hãy xem lại cách tiếp cận quản lý hàng đợi truyền thống, sau đó là cách tiếp cận AQM và khả năng của nó trong việc khắc phục những hạn chế của chiến lƣợc truyền thống.
3.1 Cách tiếp cận truyền thống và hệ quả
Kỹ thuật truyền thống để quản lý kích thƣớc hàng đợi là dựa vào cơ chế FIFO (nhƣ đã trình bày tại mục 2.1 trên). Theo cơ chế này, tất cả các gói tin đến đƣợc xếp vào hàng đợi; khi hàng đợi đầy thì các gói tin đến sau đều bị loại bỏ; để chọn các gói tin truyền đi thì gói tin nào đến trƣớc đƣợc phục vụ trƣớc. Trong bộ mô phỏng NS, kỹ thuật này đƣợc cài đặt với tên gọi “DropTail”. Do tính đơn giản của nó, kỹ thuật này đƣợc sử dụng nhiều năm trên Internet, tuy nhiên nó có 2 nhƣợc điểm cơ bản sau đây:
3.1.1 Hiện tƣợng Lock-Out và Global Synchronization
Theo cơ chế “DropTail” thì trong nhiều trƣờng hợp, có thể có một hoặc một vài dòng lƣu lƣợng độc quyền chiếm hàng đợi, làm cho các gói tin của các kết nối khác không thể đƣợc nhận vào, ta nói rằng chúng bị “Lock-out”. Khi xảy ra hiện tƣợng “lock-out”, nếu thực thể gửi lƣu lƣợng sử dụng giao thức TCP thì chúng sẽ bị timeout khi đi qua hàng đợi đó, khi đó theo thuật toán tránh tắc nghẽn, chúng sẽ đồng thời giảm kích thƣớc cửa sổ phát và thực hiện rút lui theo hàm mũ, làm cho lƣu lƣợng trên mạng giảm mạnh, gây lãng phí dải thông của mạng. Hiện tƣợng đồng loạt giảm lƣu lƣợng đó đƣợc gọi là hiện tƣợng đồng bộ toàn cầu - “global synchronization”.
3.1.2 Hiện tƣợng Full Queues
Cơ chế “DropTail” làm cho hàng đợi có thể thƣờng xuyên ở trạng thái đầy hoặc gần đầy trong khoảng thời gian dài, vì việc loại bỏ gói tin đến chỉ thực hiện khi hàng đợi đã đầy. Ngoài ra, vì lƣu lƣợng trên Internet thƣờng xuyên có sự bùng nổ, các gói tin thƣờng đến theo từng cụm (bursts) – hàng loạt gói tin đến cùng lúc, nên bộ đệm tại các nút mạng phải có kích thƣớc đủ lớn để có thể hấp thu đƣợc sự bùng nổ này. Tuy nhiên, việc này làm tăng kích thƣớc hàng đợi dẫn đến việc độ trễ và thăng giáng độ trễ của các gói tin đi qua mạng cao. Nhƣ vậy điều quan trọng là phải có cơ chế quản trị hàng đợi tốt, hơn là chỉ đơn giản tăng kích thƣớc của nó.
Ngoài “DropTail”, hai phƣơng pháp khác có thể đƣợc áp dụng khi hàng đợi đầy là loại bỏ ngẫu nhiên Random Drop hoặc loại bỏ ở đầu khi đầy Drop Front. Theo phƣơng pháp Random Drop, router loại bỏ ngẫu nhiên một gói tin trong hàng đợi khi hàng đợi đầy để dành chỗ cho gói tin đến. Còn với phƣơng pháp Drop Font thì ngƣợc lại với DropTail, router sẽ loạt bỏ gói tin ở đầu hàng đợi khi đầy và một gói tin đến. Cả hai cơ chế này có thể giải quyết đƣợc vấn đề “lock-out” nhƣng không giải quyết đƣợc vấn đề thứ hai là “full-queues” nhƣ đã nói ở trên.
3.2 Chiến lƣợc AQM
Các chiến lƣợc truyền thống chỉ thực hiện loại bỏ gói tin khi hàng đợi đầy, điều này không hợp lý vì khi đó tình trạng tắc nghẽn đã ở mức khó kiểm soát. Giải pháp cho vấn đề này là cho phép gateway loại bỏ các gói tin trƣớc khi hàng đợi đầy, khi đó các thực thể đầu cuối có thể phản ứng lại tắc nghẽn khi hiện tƣợng này mới chớm có dấu hiệu xuất hiện. Đây là tƣ tƣởng chính của chiến lƣợc quản trị hàng đợi động – Active Queues Manegement AQM. Điều cần phải chú ý là, AQM phải đƣợc gắn với các giao thức vận chuyển có áp dụng các cơ chế điều khiển lƣu lƣợng và tránh tắc nghẽn kiểu end-to-end (nhƣ TCP), và nó không có tác dụng đối với các giao thức vận chuyển không áp dụng cơ chế điều khiển lƣu lƣợng (nhƣ UDP).
Nhìn chung, các chiến lƣợc AQM đem lại các lợi ích sau: