Я читав оригінальний документ SIGCOMM '97 PostScript про HFSC, це дуже технічно, але я розумію основну концепцію. Замість того, щоб давати лінійну криву обслуговування (як це стосується майже будь-якого іншого алгоритму планування), ви можете вказати опуклу або увігнуту службову криву, і таким чином можна розв'язати пропускну здатність і затримати. Однак, незважаючи на те, що в цьому документі згадуються певні алгоритми планування, що використовуються (в режимі реального часу та обміну посиланням), він завжди згадує лише ОДНУЮ криву на клас планування (розв'язка проводиться шляхом визначення цієї кривої, для цього потрібна лише одна крива ).
Тепер HFSC був реалізований для BSD (OpenBSD, FreeBSD тощо) за допомогою програми планування ALTQ, і він був реалізований Linux, використовуючи рамки планування TC (частина iproute2). Обидві реалізації додали дві додаткові криві обслуговування, які НЕ були в оригінальному документі! Крива обслуговування в режимі реального часу та крива обслуговування верхньої межі. Ще раз зауважте, що в оригінальному папері згадуються два алгоритми планування (в режимі реального часу та обмін посиланнями), але в цьому документі обидва працюють з однією єдиною кривою обслуговування. Ніколи не було двох незалежних кривих сервісу для жодної, як ви знаходите в BSD та Linux.
Ще гірше, що здається, що деяка версія ALTQ додає HSFC додатковий пріоритет черги (в оригінальному документі немає такого пріоритету). Я знайшов кілька BSD HowTo, які згадують цей параметр пріоритету (навіть незважаючи на те, що сторінка man в останньому випуску ALTQ не знає такого параметра для HSFC, тому офіційно його навіть не існує).
Все це робить планування HFSC ще складнішим, ніж алгоритм, описаний в оригінальному документі, і в Інтернеті є безліч навчальних посібників, які часто суперечать один одному, один з яких стверджує протилежне іншому. Це, мабуть, головна причина, чому, схоже, ніхто не розуміє, як насправді працює планування HFSC. Перш ніж я зможу задати свої запитання, нам потрібен зразок налаштування. Я буду використовувати дуже простий, як показано на зображенні нижче:
alt текст http://f.imagehost.org/0177/hfsc-test-setup.png
Ось кілька питань, на які я не можу відповісти, оскільки навчальні посібники суперечать один одному:
Для чого мені взагалі потрібна крива реального часу? Якщо припустимо, що A1, A2, B1, B2 - це всі 128-біт / с посилання (не крива в реальному часі для жодної), то кожен з них отримає 128 кбіт / с, якщо корінь має 512 кбіт / с для розподілу (і І A, і B - звичайно обидва 256 кбіт / с), правда? Чому б я додатково дав криві реального часу A1 і B1 зі швидкістю 128 кбіт / с? Для чого це було б добре? Щоб надати цим двом вищий пріоритет? Згідно з оригінальним документом, я можу надати їм більший пріоритет, використовуючи криву , ось що все-таки HFSC. Надаючи обом класам криву [256 кбіт / с 20 мс 128 кбіт / с], обидва мають вдвічі більше пріоритету, ніж A2 та B2 автоматично (все одно отримуючи лише 128 кбіт / с в середньому)
Чи враховується пропускна здатність у режимі реального часу до пропускної здатності спільного доступу? Наприклад, якщо A1 і B1 мають лише 64 кбіт / с в реальному часі і пропускну здатність обміну посиланням 64 кбіт / с, це означає, що коли вони обслуговуються 64 кбіт / с через реальний час, їхня вимога щодо частки зв'язку також буде задоволена (вони можуть отримати надлишкову пропускну здатність, але дозволяє ігнорувати це на секунду) чи це означає, що вони отримують ще 64 кбіт / с за допомогою link-share? Так чи має кожен клас "вимога" пропускної здатності в режимі реального часу плюс поділка посилання? Або клас має лише більш високу вимогу, ніж крива в режимі реального часу, якщо крива частки посилання вище кривої реального часу (поточна вимога долі посилання дорівнює вказаній вимозі частки посилання з мінусом пропускної здатності в реальному часі, вже наданої до цього клас)?
Чи застосовується також крива верхньої межі і в режимі реального часу, лише для обміну посиланнями, або, можливо, до обох? Деякі підручники говорять в один бік, в інші - в інший. Деякі навіть заявляють, що верхня межа є максимальним для пропускної здатності в режимі реального часу + пропускної здатності посилання-спільного використання? Що таке правда?
Якщо припустити, що A2 і B2 - це 128 кбіт / с, чи має це значення, якщо A1 і B1 - це лише 128 кбіт / с-поділ зв'язку, або 64 кбіт / с в режимі реального часу, і 128 кбіт / с, поділка зв'язку, і якщо так , яка різниця?
Якщо я використовую окрему криву в реальному часі для збільшення пріоритетів занять, навіщо мені взагалі потрібні «криві»? Чому в режимі реального часу не є рівне значення, а частка-посилання також є плоскою величиною? Чому обидві криві? Потреба в кривих ясна в оригінальному документі, оскільки в класі є лише один такий атрибут. Але тепер, маючи три атрибути (у режимі реального часу, обмін посиланнями та верхня межа), для чого мені ще потрібні криві на кожному? Чому я хотів би, щоб форма кривих (не середня пропускна здатність, а їх нахили) відрізнялася для реального часу та трафіку з використанням зв’язків?
Згідно з малою доступною документацією, значення кривих у режимі реального часу повністю ігноруються для внутрішніх класів (клас A і B), вони застосовуються лише для класів листів (A1, A2, B1, B2). Якщо це правда, чому конфігурація зразка ALTQ HFSC (пошук конфігурації 3,3 зразка ) встановлює криві реального часу для внутрішніх класів і стверджує, що вони встановлюють гарантовану швидкість цих внутрішніх класів? Хіба це не зовсім безглуздо? (зауважте: pshare встановлює криву частки зв'язку в ALTQ і натирає криву в режимі реального часу; це можна побачити в абзаці вище конфігурації зразка).
У деяких навчальних посібниках зазначається, що сума всіх кривих у режимі реального часу може бути не вище 80% швидкості лінії, інші кажуть, що вона не повинна бути вище 70% швидкості лінії. Який з них правильний чи вони, можливо, обидва помиляються?
В одному підручнику сказано, що ви забудете всю теорію. Незалежно від того, як реально працюють (планувальники та розподіл пропускної здатності), уявіть три криві відповідно до наступної "спрощеної моделі розуму": в режимі реального часу - це гарантована пропускна здатність, яку цей клас завжди отримуватиме. link-share - пропускна здатність, якою цей клас хоче повністю задовольнити, але задоволення не може бути гарантоване. Якщо є надлишкова пропускна здатність, клас може навіть запропонувати більше пропускної здатності, ніж потрібно для задоволення, але він ніколи не може використовувати більше, ніж говорить верхній межа. Щоб все це працювало, сума всіх смуг пропускання в режимі реального часу може бути не вище xx% від швидкості лінії (див. Питання вище, відсоток змінюється). Питання: Це більш-менш точне або повне непорозуміння HSFC?
І якщо припущення вище справді точно, то де пріоритет у цій моделі? Наприклад, кожен клас може мати пропускну здатність у режимі реального часу (гарантовано), пропускну здатність обміну посиланням (не гарантується) та, можливо, верхню межу, але все ж деякі класи мають більш високі пріоритетні потреби, ніж інші класи. У цьому випадку я все-таки повинен визначити пріоритет, навіть серед трафіку цих класів у режимі реального часу. Я б визначив пріоритет за нахилом кривих? І якщо так, то яка крива? Крива реального часу? Крива посилання-частка? Крива верхньої межі? Усі? Я б дав усім їм однаковий нахил або кожен інший і як дізнатися правильний схил?
Я досі не втрачав надії, що в цьому світі є хоча б рука, повна людей, які справді розуміли HFSC і здатні відповісти на всі ці питання точно. І зробити це, не суперечивши один одному у відповідях, було б дуже приємно ;-)