Tôi đã đọc bài viết PostScript SIGCOMM '97 gốc về HFSC, nó rất kỹ thuật, nhưng tôi hiểu khái niệm cơ bản. Thay vì đưa ra một đường cong dịch vụ tuyến tính (như với hầu hết các thuật toán lập lịch khác), bạn có thể chỉ định một đường cong dịch vụ lồi hoặc lõm và do đó có thể tách rời băng thông và độ trễ. Tuy nhiên, mặc dù bài báo này đề cập đến loại thuật toán lập lịch được sử dụng (thời gian thực và chia sẻ liên kết), nó luôn chỉ đề cập MỘT đường cong trên mỗi lớp lập lịch (việc tách rời được thực hiện bằng cách chỉ định đường cong này, chỉ cần một đường cong cho điều đó ).
Bây giờ HFSC đã được triển khai cho BSD (OpenBSD, FreeBSD, v.v.) bằng cách sử dụng khung lập lịch ALTQ và nó đã được Linux triển khai bằng cách sử dụng khung lập lịch TC (một phần của iproute2). Cả hai triển khai đều bổ sung hai đường cong dịch vụ bổ sung, KHÔNG có trong bài báo gốc! Đường cong dịch vụ thời gian thực và đường cong dịch vụ giới hạn trên. Một lần nữa, xin lưu ý rằng bài báo gốc đề cập đến hai thuật toán lập lịch (thời gian thực và chia sẻ liên kết), nhưng trong bài báo đó cả hai đều hoạt động với một đường cong dịch vụ duy nhất. Chưa bao giờ có hai đường cong dịch vụ độc lập cho một trong hai như bạn hiện thấy trong BSD và Linux.
Thậm chí tệ hơn, một số phiên bản ALTQ dường như thêm ưu tiên hàng đợi bổ sung vào HSFC (cũng không có thứ gọi là ưu tiên trong bài báo gốc). Tôi đã tìm thấy một số BSD HowTo đề cập đến cài đặt ưu tiên này (mặc dù trang man của bản phát hành ALTQ mới nhất không biết thông số nào như vậy cho HSFC, vì vậy chính thức nó thậm chí không tồn tại).
Tất cả điều này làm cho việc lập lịch trình HFSC thậm chí còn phức tạp hơn thuật toán được mô tả trong bài báo gốc và có rất nhiều hướng dẫn trên Internet thường mâu thuẫn với nhau, một tuyên bố ngược lại với thuật toán khác. Đây có lẽ là lý do chính tại sao dường như không ai thực sự hiểu cách lập lịch trình HFSC thực sự hoạt động. Trước khi tôi có thể đặt câu hỏi của mình, chúng tôi cần một thiết lập mẫu nào đó. Tôi sẽ sử dụng một cái rất đơn giản như trong hình dưới đây:
văn bản thay thế http://f.imagehost.org/0177/hfsc-test-setup.png
Dưới đây là một số câu hỏi tôi không thể trả lời vì các hướng dẫn mâu thuẫn với nhau:
Tôi cần một đường cong thời gian thực để làm gì? Giả sử A1, A2, B1, B2 là tất cả chia sẻ liên kết 128 kbit / s (không có đường cong thời gian thực cho một trong hai), thì mỗi cái sẽ nhận được 128 kbit / s nếu gốc có 512 kbit / s để phân phối (và Tất nhiên A và B đều là 256 kbit / s), phải không? Tại sao tôi cũng cung cấp cho A1 và B1 một đường cong thời gian thực với 128 kbit / s? Điều này sẽ tốt cho cái gì? Để ưu tiên cao hơn cho hai người? Theo bài báo gốc, tôi có thể ưu tiên cao hơn cho họ bằng cách sử dụng đường cong , đó là tất cả những gì HFSC muốn nói. Bằng cách cung cấp cho cả hai lớp một đường cong [256kbit / s 20ms 128kbit / s], cả hai đều có mức độ ưu tiên cao gấp đôi so với A2 và B2 (vẫn chỉ nhận được trung bình 128 kbit / s)
Băng thông thời gian thực có được tính vào băng thông chia sẻ liên kết không? Ví dụ: nếu cả A1 và B1 chỉ có băng thông chia sẻ liên kết thời gian thực 64kbit / giây và 64kbit / giây, điều đó có nghĩa là một khi chúng được phục vụ 64kbit / giây qua thời gian thực, thì yêu cầu chia sẻ liên kết của chúng cũng được thỏa mãn nhận được băng thông dư thừa, nhưng hãy bỏ qua điều đó trong một giây) hoặc điều đó có nghĩa là họ nhận thêm 64 kbit / s thông qua liên kết chia sẻ? Vì vậy, mỗi lớp có một "yêu cầu" băng thông của thời gian thực cộng với chia sẻ liên kết? Hoặc một lớp chỉ có yêu cầu cao hơn đường cong thời gian thực nếu đường cong chia sẻ liên kết cao hơn đường cong thời gian thực (yêu cầu chia sẻ liên kết hiện tại bằng với yêu cầu chia sẻ liên kết đã chỉ định trừ đi băng thông thời gian thực đã cung cấp cho điều này lớp học)?
Là đường giới hạn trên cũng được áp dụng cho thời gian thực, chỉ để chia sẻ liên kết, hoặc có thể cho cả hai? Một số hướng dẫn nói một cách, một số nói theo cách khác. Một số thậm chí cho rằng giới hạn trên là tối đa cho băng thông thời gian thực + băng thông chia sẻ liên kết? Sự thật là gì?
Giả sử A2 và B2 đều là 128 kbit / s, liệu có khác biệt gì không nếu A1 và B1 chỉ là chia sẻ liên kết 128 kbit / s, hoặc 64 kbit / s thời gian thực và chia sẻ liên kết 128 kbit / s, và nếu vậy , khác nhau cái gì?
Nếu tôi sử dụng đường cong thời gian thực riêng biệt để tăng mức độ ưu tiên của các lớp, tại sao tôi lại cần "đường cong"? Tại sao thời gian thực không phải là giá trị cố định và chia sẻ liên kết cũng là giá trị cố định? Tại sao cả hai đường cong? Sự cần thiết cho các đường cong là rõ ràng trong bài báo gốc, bởi vì chỉ có một thuộc tính của loại đó cho mỗi lớp. Nhưng bây giờ, có ba thuộc tính (thời gian thực, chia sẻ liên kết và giới hạn trên), tôi vẫn cần những đường cong nào cho mỗi thuộc tính? Tại sao tôi muốn hình dạng đường cong (không phải băng thông trung bình, nhưng độ dốc của chúng) khác nhau đối với lưu lượng truy cập chia sẻ liên kết và thời gian thực?
Theo tài liệu nhỏ có sẵn, các giá trị đường cong thời gian thực hoàn toàn bị bỏ qua cho các lớp bên trong (lớp A và B), chúng chỉ được áp dụng cho các lớp lá (A1, A2, B1, B2). Nếu đó là sự thật, tại sao cấu hình mẫu ALTQ HFSC (tìm kiếm cấu hình mẫu 3.3 ) đặt các đường cong thời gian thực trên các lớp bên trong và tuyên bố rằng những cái đó đặt tỷ lệ được bảo đảm của các lớp bên trong đó? Điều đó không hoàn toàn vô nghĩa sao? (lưu ý: pshare đặt đường cong chia sẻ liên kết trong ALTQ và ghi lại đường cong thời gian thực; bạn có thể thấy điều này trong đoạn trên cấu hình mẫu).
Một số hướng dẫn nói rằng tổng của tất cả các đường cong thời gian thực có thể không cao hơn 80% tốc độ đường truyền, một số khác nói rằng nó không được cao hơn 70% tốc độ đường truyền. Cái nào đúng hay cả hai đều sai?
Một hướng dẫn cho biết bạn sẽ quên tất cả các lý thuyết. Bất kể mọi thứ thực sự hoạt động như thế nào (bộ lập lịch và phân phối băng thông), hãy tưởng tượng ba đường cong theo "mô hình tâm trí đơn giản hóa" sau: thời gian thực là băng thông được đảm bảo mà lớp này sẽ luôn có được. link-share là băng thông mà lớp này muốn trở nên hoàn toàn hài lòng, nhưng sự hài lòng không thể được đảm bảo. Trong trường hợp có băng thông dư thừa, lớp thậm chí có thể được cung cấp nhiều băng thông hơn mức cần thiết để trở nên hài lòng, nhưng nó có thể không bao giờ sử dụng nhiều hơn giới hạn trên. Để tất cả điều này hoạt động, tổng của tất cả các băng thông thời gian thực có thể không vượt quá xx% tốc độ đường truyền (xem câu hỏi ở trên, tỷ lệ phần trăm khác nhau). Câu hỏi: Điều này nhiều hay ít chính xác hay là sự hiểu lầm hoàn toàn về HSFC?
Và nếu giả định ở trên là thực sự chính xác, ưu tiên ở đâu trong mô hình đó? Ví dụ, mọi lớp có thể có băng thông thời gian thực (được bảo đảm), băng thông chia sẻ liên kết (không được bảo đảm) và có thể có giới hạn trên, nhưng vẫn có một số lớp có nhu cầu ưu tiên cao hơn các lớp khác. Trong trường hợp đó, tôi vẫn phải ưu tiên bằng cách nào đó, ngay cả trong lưu lượng truy cập thời gian thực của các lớp đó. Tôi sẽ ưu tiên theo độ dốc của các đường cong? Và nếu vậy, đường cong nào? Đường cong thời gian thực? Đường cong chia sẻ liên kết? Đường cong giới hạn trên? Tất cả bọn họ? Tôi sẽ cung cấp cho tất cả chúng cùng một độ dốc hoặc mỗi một độ dốc khác nhau và làm thế nào để tìm ra độ dốc phù hợp?
Tôi vẫn không mất hy vọng rằng có ít nhất một tay đầy người trên thế giới này thực sự hiểu HFSC và có thể trả lời chính xác tất cả những câu hỏi này. Và làm như vậy mà không mâu thuẫn với nhau trong các câu trả lời sẽ thực sự tốt đẹp ;-)