Leí el artículo original PostScript SIGCOMM '97 sobre HFSC, es muy técnico, pero entiendo el concepto básico. En lugar de proporcionar una curva de servicio lineal (como ocurre con casi cualquier otro algoritmo de programación), puede especificar una curva de servicio convexa o cóncava y, por lo tanto, es posible desacoplar el ancho de banda y el retraso. Sin embargo, aunque este documento menciona el tipo de algoritmos de programación que se utilizan (en tiempo real y compartir enlaces), siempre menciona UNA curva por clase de programación (el desacoplamiento se realiza especificando esta curva, solo se necesita una curva para eso )
Ahora se ha implementado HFSC para BSD (OpenBSD, FreeBSD, etc.) usando el marco de programación ALTQ y se ha implementado Linux usando el marco de programación TC (parte de iproute2). Ambas implementaciones agregaron dos curvas de servicio adicionales, que NO estaban en el documento original. Una curva de servicio en tiempo real y una curva de servicio de límite superior. Nuevamente, tenga en cuenta que el documento original menciona dos algoritmos de programación (en tiempo real y compartir enlaces), pero en ese documento ambos trabajan con una sola curva de servicio. Nunca ha habido dos curvas de servicio independientes para ninguna de las dos, como se encuentra actualmente en BSD y Linux.
Peor aún, alguna versión de ALTQ parece agregar una prioridad de cola adicional a HSFC (tampoco hay prioridad en el documento original). Encontré varios BSD HowTo que mencionan esta configuración de prioridad (aunque la página de manual de la última versión de ALTQ no conoce dicho parámetro para HSFC, por lo que oficialmente ni siquiera existe).
Todo esto hace que la programación HFSC sea aún más compleja que el algoritmo descrito en el documento original y hay toneladas de tutoriales en Internet que a menudo se contradicen entre sí, uno afirmando lo contrario del otro. Esta es probablemente la razón principal por la que nadie parece entender realmente cómo funciona realmente la programación HFSC. Antes de poder hacer mis preguntas, necesitamos una configuración de muestra de algún tipo. Usaré uno muy simple como se ve en la imagen a continuación:
texto alternativo http://f.imagehost.org/0177/hfsc-test-setup.png
Aquí hay algunas preguntas que no puedo responder porque los tutoriales se contradicen entre sí:
¿Para qué necesito una curva en tiempo real? Suponiendo que A1, A2, B1, B2 son todos compartidos de enlace de 128 kbit / s (sin curva en tiempo real para ninguno de los dos), entonces cada uno de ellos obtendrá 128 kbit / s si la raíz tiene 512 kbit / s para distribuir (y A y B son ambos 256 kbit / s, por supuesto), ¿verdad? ¿Por qué adicionalmente le daría a A1 y B1 una curva en tiempo real con 128 kbit / s? ¿Para qué sería bueno esto? ¿Darles a esos dos una mayor prioridad? De acuerdo con el documento original, puedo darles una mayor prioridad al usar una curva , de eso se trata HFSC después de todo. Al dar a ambas clases una curva de [256kbit / s 20ms 128kbit / s], ambas tienen el doble de prioridad que A2 y B2 automáticamente (todavía solo obtienen 128 kbit / s en promedio)
¿El ancho de banda en tiempo real cuenta para el ancho de banda de enlace compartido? Por ejemplo, si A1 y B1 solo tienen 64 kbit / s en tiempo real y 64 kbit / s de ancho de banda de enlace compartido, eso significa que una vez que reciben 64 kbit / s en tiempo real, su requisito de enlace compartido también se cumple (podrían obtener un ancho de banda en exceso, pero ignoremos eso por un segundo) o eso significa que obtienen otros 64 kbit / s a través del enlace compartido? Entonces, ¿cada clase tiene un "requisito" de ancho de banda de tiempo compartido más enlace compartido? ¿O una clase solo tiene un requisito más alto que la curva en tiempo real si la curva de enlace compartido es más alta que la curva en tiempo real (el requisito actual de compartir enlace es igual al requisito de compartir enlace especificado menos el ancho de banda en tiempo real ya proporcionado para esto) clase)?
¿La curva de límite superior se aplica también en tiempo real, solo para compartir enlaces, o tal vez para ambos? Algunos tutoriales dicen de una manera, otros dicen la otra. Algunos incluso afirman que el límite superior es el máximo para ancho de banda en tiempo real + ancho de banda de enlace compartido. ¿Cuál es la verdad?
Suponiendo que A2 y B2 son 128 kbit / s, ¿hace alguna diferencia si A1 y B1 son solo 128 kbit / s de enlace compartido, o 64 kbit / s en tiempo real y 128 kbit / s de enlace compartido, y si es así? , ¿Qué diferencia?
Si uso la curva separada en tiempo real para aumentar las prioridades de las clases, ¿por qué necesitaría "curvas"? ¿Por qué no es en tiempo real un valor fijo y compartir enlaces también es un valor fijo? ¿Por qué son ambas curvas? La necesidad de curvas es clara en el documento original, porque solo hay un atributo de ese tipo por clase. Pero ahora, teniendo tres atributos (tiempo real, enlace compartido y límite superior), ¿para qué necesito curvas en cada uno? ¿Por qué querría que la forma de las curvas (no el ancho de banda promedio, sino sus pendientes) sean diferentes para el tráfico en tiempo real y de enlace compartido?
Según la poca documentación disponible, los valores de las curvas en tiempo real se ignoran por completo para las clases internas (clase A y B), solo se aplican a las clases hoja (A1, A2, B1, B2). Si eso es cierto, ¿por qué la configuración de muestra ALTQ HFSC (búsqueda de configuración de muestra 3.3 ) establece curvas en tiempo real en clases internas y afirma que esas establecen la tasa garantizada de esas clases internas? ¿No es eso completamente inútil? (nota: pshare establece la curva de enlace compartido en ALTQ y ralla la curva en tiempo real; puede ver esto en el párrafo sobre la configuración de muestra).
Algunos tutoriales dicen que la suma de todas las curvas en tiempo real no puede ser superior al 80% de la velocidad de la línea, otros dicen que no debe ser superior al 70% de la velocidad de la línea. ¿Cuál está bien o quizás ambos están equivocados?
Un tutorial decía que olvidarás toda la teoría. No importa cómo funcionan realmente las cosas (planificadores y distribución de ancho de banda), imagine las tres curvas de acuerdo con el siguiente "modelo mental simplificado": el ancho de banda garantizado que siempre obtendrá esta clase en tiempo real. link-share es el ancho de banda que esta clase quiere satisfacer por completo, pero la satisfacción no puede garantizarse. En caso de que haya un exceso de ancho de banda, la clase podría incluso recibir más ancho de banda del necesario para estar satisfecho, pero es posible que nunca use más de lo que dice el límite superior. Para que todo esto funcione, la suma de todos los anchos de banda en tiempo real puede no ser superior al xx% de la velocidad de la línea (consulte la pregunta anterior, el porcentaje varía). Pregunta: ¿Es esto más o menos exacto o un malentendido total de HSFC?
Y si la suposición anterior es realmente precisa, ¿dónde está la priorización en ese modelo? Por ejemplo, cada clase puede tener un ancho de banda en tiempo real (garantizado), un ancho de banda de enlace compartido (no garantizado) y quizás un límite superior, pero aún algunas clases tienen necesidades de mayor prioridad que otras clases. En ese caso, todavía debo priorizar de alguna manera, incluso entre el tráfico en tiempo real de esas clases. ¿Priorizaría por la pendiente de las curvas? Y si es así, ¿qué curva? La curva en tiempo real? La curva de enlace compartido? La curva de límite superior? ¿Todos ellos? ¿Les daría a todos la misma pendiente o una diferente y cómo encontrar la pendiente correcta?
Todavía no he perdido la esperanza de que exista al menos una mano llena de personas en este mundo que realmente entiendan HFSC y puedan responder a todas estas preguntas con precisión. Y hacerlo sin contradecirse en las respuestas sería realmente bueno ;-)