Я прочитал оригинальную статью SIGCOMM 'PostScript о HFSC, она очень технически, но я понимаю основную концепцию. Вместо того, чтобы давать линейную кривую обслуживания (как почти во всех других алгоритмах планирования), вы можете указать выпуклую или вогнутую кривую обслуживания, и, таким образом, можно разделить пропускную способность и задержку. Однако, хотя в этой статье упоминаются используемые алгоритмы планирования (в режиме реального времени и в общем канале), в нем всегда упоминается только ОДНА кривая на класс планирования (развязка выполняется путем указания этой кривой, для этого требуется только одна кривая). ).
Теперь HFSC был реализован для BSD (OpenBSD, FreeBSD и т. Д.) С использованием инфраструктуры планирования ALTQ, а также был реализован Linux с использованием инфраструктуры планирования TC (часть iproute2). Обе реализации добавили две дополнительные кривые обслуживания, которых не было в оригинальной статье! Кривая обслуживания в реальном времени и кривая обслуживания верхнего предела. Опять же, обратите внимание, что в оригинальной статье упоминаются два алгоритма планирования (в режиме реального времени и с разделением ссылок), но в этом документе оба работают с одной кривой обслуживания. Никогда не было двух независимых кривых обслуживания ни для одной из них, как в настоящее время вы найдете в BSD и Linux.
Хуже того, некоторые версии ALTQ, кажется, добавляют дополнительный приоритет очереди в HSFC (в оригинальной статье также нет такого понятия, как приоритет). Я обнаружил, что несколько BSD HowTo упоминают эту настройку приоритета (даже несмотря на то, что страница руководства последней версии ALTQ не знает такого параметра для HSFC, поэтому официально его даже не существует).
Все это делает планирование HFSC еще более сложным, чем алгоритм, описанный в оригинальной статье, и в Интернете существуют тонны учебных пособий, которые часто противоречат друг другу, одно из которых утверждает противоположность другого. Вероятно, это является основной причиной, почему никто не понимает, как на самом деле работает планирование HFSC. Прежде чем я смогу задать свои вопросы, нам нужен образец установки какого-то рода. Я буду использовать очень простой, как показано на рисунке ниже:
альтернативный текст 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 кбит / с через канал общего доступа? Так есть ли у каждого класса «требования» к пропускной способности в режиме реального времени плюс обмен ссылками? Либо класс имеет более высокое требование, чем кривая в реальном времени, если кривая доли канала выше, чем кривая реального времени (текущее требование доли канала равно заданному требованию доли канала минус полоса пропускания в реальном времени, уже предоставленная этому учебный класс)?
Применяется ли верхняя граничная кривая и к реальному времени, только к обмену ссылками или к обоим? Некоторые учебные пособия говорят одно, а другие - другое. Некоторые даже утверждают, что верхний предел - это максимальная пропускная способность в реальном времени + пропускная способность канала связи? Что правда?
Предполагая, что A2 и B2 равны 128 кбит / с, имеет ли какое-то значение, если A1 и B1 имеют только общий канал 128 кбит / с, или 64 кбит / с в реальном времени и 128 каналов кбит / с, и если да, какая разница?
Если я использую отдельную кривую в реальном времени для увеличения приоритетов классов, зачем мне вообще нужны «кривые»? Почему в режиме реального времени не является фиксированной стоимостью и обмен ссылками, а также фиксированной стоимостью? Почему обе кривые? Потребность в кривых очевидна в оригинальной статье, потому что в классе есть только один такой атрибут. Но теперь, имея три атрибута (в реальном времени, общий доступ к ссылкам и верхний предел), зачем мне все еще нужны кривые для каждого? Почему я хотел бы, чтобы форма кривых (не средняя полоса пропускания, а их наклоны) была разной для трафика в реальном времени и совместного использования каналов?
Согласно небольшой доступной документации, значения кривых в реальном времени полностью игнорируются для внутренних классов (классы A и B), они применяются только к листовым классам (A1, A2, B1, B2). Если это так, почему пример конфигурации ALTQ HFSC (поиск 3.3 Пример конфигурации ) устанавливает кривые в реальном времени для внутренних классов и утверждает, что они устанавливают гарантированную скорость этих внутренних классов? Разве это не совершенно бессмысленно? (примечание: pshare задает кривую разделения ссылок в ALTQ и создает кривую в реальном времени; вы можете увидеть это в параграфе выше примера конфигурации).
В некоторых руководствах говорится, что сумма всех кривых в реальном времени не может превышать 80% скорости линии, в других говорится, что она не должна превышать 70% скорости линии. Кто из них прав или они оба могут быть не правы?
Один учебник сказал, что вы забудете всю теорию. Независимо от того, как все работает на самом деле (планировщики и распределение пропускной способности), представьте три кривые в соответствии со следующей «упрощенной моделью мышления»: в реальном времени - это гарантированная пропускная способность, которую всегда будет получать этот класс. link-share - это пропускная способность, которую этот класс хочет полностью удовлетворить, но удовлетворение не может быть гарантировано. В случае избыточной пропускной способности класс может даже предложить больше пропускной способности, чем необходимо для удовлетворения, но он никогда не может использовать больше, чем указано в верхнем пределе. Чтобы все это работало, сумма всех полос пропускания в реальном времени не должна превышать хх% от скорости линии (см. Вопрос выше, процент варьируется). Вопрос: Является ли это более или менее точным или полным неправильным пониманием HSFC?
И если приведенные выше предположения действительно точны, то где в этой модели расстановка приоритетов? Например, у каждого класса может быть полоса пропускания в реальном времени (гарантированная), полоса пропускания общего канала связи (не гарантируется) и, возможно, верхний предел, но все же некоторые классы имеют более высокий приоритет, чем другие классы. В этом случае я все равно должен расставить приоритеты, даже среди трафика этих классов в реальном времени. Буду ли я расставлять приоритеты по наклону кривых? И если да, то какая кривая? Кривая в реальном времени? Кривая обмена ссылками? Кривая верхнего предела? Все они? Могу ли я дать им все один и тот же наклон или каждый по-разному, и как найти правильный наклон?
Я до сих пор не потерял надежду, что в этом мире существует, по крайней мере, множество людей, которые действительно понимают HFSC и способны точно ответить на все эти вопросы. И делать это, не противореча друг другу в ответах, было бы очень приятно ;-)