HFSC에 대한 원본 SIGCOMM '97 PostScript 논문을 읽었 지만 기술적으로는 기본 개념을 이해합니다. 거의 모든 다른 스케줄링 알고리즘과 마찬가지로 선형 서비스 곡선을 제공하는 대신 볼록 또는 오목 서비스 곡선을 지정할 수 있으므로 대역폭과 지연을 분리 할 수 있습니다. 그러나이 백서에서는 사용중인 일정 알고리즘 (실시간 및 링크 공유)에 대해 언급하지만 일정 클래스 당 하나의 곡선 만 언급합니다 (디커플링은이 곡선을 지정하여 수행됩니다. 단 하나의 곡선 만 필요합니다. ).
이제 HFSC는 ALTQ 스케줄링 프레임 워크를 사용하여 BSD (OpenBSD, FreeBSD 등)에 대해 구현되었으며 TC 스케줄링 프레임 워크 (iproute2의 일부)를 사용하여 Linux를 구현했습니다 . 모두 구현했다 두 개의 추가 서비스 곡선을 추가 하지 원래 논문을! 실시간 서비스 곡선 및 상한 서비스 곡선. 다시 한 번, 원본 논문에는 두 가지 스케줄링 알고리즘 (실시간 및 링크 공유)이 언급되어 있지만,이 논문에서는 단일 서비스 곡선으로 작동합니다. 현재 BSD와 Linux에서 볼 수 있듯이 두 개의 독립적 인 서비스 곡선은 없었습니다.
더 나쁜 것은 일부 ALTQ 버전은 HSFC에 대기열 우선 순위를 추가하는 것 같습니다 (원본에도 우선 순위는 없습니다). 최신 ALTQ 릴리스의 man 페이지가 HSFC에 대한 그러한 매개 변수를 알지 못하더라도 공식적으로는 존재하지 않더라도이 우선 순위 설정에 대해 여러 BSD HowTo가 언급했습니다.
이 모든 것이 HFSC 스케줄링을 원본 논문에 설명 된 알고리즘보다 훨씬 더 복잡하게 만들며 인터넷상에서 서로 상반되는 수많은 튜토리얼이 있습니다. 하나는 서로 반대되는 주장입니다. 이것은 아마도 아무도 HFSC 스케줄링이 실제로 어떻게 작동하는지 이해하지 못하는 주된 이유 일 것입니다. 질문을하기 전에 어떤 종류의 샘플 설정이 필요합니다. 아래 이미지에서 볼 수 있듯이 매우 간단한 것을 사용하겠습니다.
대체 텍스트 http://f.imagehost.org/0177/hfsc-test-setup.png
튜토리얼이 서로 상충되기 때문에 대답 할 수없는 몇 가지 질문이 있습니다.
실시간 곡선이 필요합니까? A1, A2, B1, B2가 모두 128 kbit / s 링크 공유라고 가정하면 (둘 중 하나에 대한 실시간 곡선이 없음) 루트에 512 kbit / s가 분배되면 각각이 128 kbit / s를 얻습니다. A와 B는 모두 256 kbit / s입니다). A1과 B1에 128kbit / s의 실시간 곡선을 추가로 제공하는 이유는 무엇입니까? 이것이 무엇에 좋을까요? 이 두 가지에 우선 순위를 부여하려면? 원본 논문에 따르면 곡선 을 사용하여 더 높은 우선 순위를 부여 할 수 있습니다 .HFSC는 결국 모든 것입니다. 두 클래스에 [256kbit / s 20ms 128kbit / s]의 곡선을 제공하면 둘 다 자동으로 A2 및 B2보다 두 배의 우선 순위를 갖습니다 (여전히 평균 128kbit / s 만 얻음).
실시간 대역폭은 링크 공유 대역폭에 포함됩니까? 예를 들어 A1과 B1에 모두 64kbit / s 실시간 및 64kbit / s 링크 공유 대역폭 만있는 경우, 일단 실시간으로 64kbit / s를 제공하면 링크 공유 요구 사항도 충족됩니다. 초과 대역폭을 얻지 만 잠시 동안 무시하십시오. 또는 링크 공유를 통해 다른 64kbit / s를 얻는다는 의미입니까? 각 클래스에는 실시간 + 링크 공유의 대역폭 "요구 사항"이 있습니까? 또는 링크 공유 곡선이 실시간 곡선보다 높으면 클래스가 실시간 곡선보다 높은 요구 사항을 갖습니까 (현재 링크 공유 요구 사항은 지정된 링크 공유 요구 사항에서 이미 제공된 실시간 대역폭을 뺀 값과 동일 함) 수업)?
상한 곡선이 실시간, 링크 공유에만 적용됩니까, 아니면 둘 다에 적용됩니까? 일부 자습서는 한 가지 방법을 말하고 일부 자습서는 다른 방법을 말합니다. 실시간 대역폭 + 링크 공유 대역폭의 최대 값이 최대 값이라고 주장하는 사람들도 있습니까? 진실은 무엇입니까?
A2와 B2가 모두 128kbit / s라고 가정하고 A1과 B1이 128kbit / s 링크 공유 만이거나 64kbit / s 실시간 및 128kbit / s 링크 공유이면 차이가 있습니까? 무슨 차이가 있습니까?
수업의 우선 순위를 높이기 위해 별도의 실시간 곡선을 사용한다면 왜 "곡선"이 필요할까요? 실시간이 고정 가치와 링크 공유도 고정 가치가 아닌 이유는 무엇입니까? 왜 두 커브가 다릅니 까? 클래스 당 하나의 속성 만 있기 때문에 원본 논문에서 커브가 필요합니다. 그러나 이제 세 가지 속성 (실시간, 링크 공유 및 상한)이 있는데 각각에 대한 곡선이 여전히 필요합니까? 실시간 및 링크 공유 트래픽 에서 곡선 모양 (평균 대역폭이 아니라 기울기)이 다른 이유는 무엇 입니까?
이용 가능한 작은 문서에 따르면 실시간 곡선 값은 내부 클래스 (클래스 A 및 B)에 대해 완전히 무시되며 리프 클래스 (A1, A2, B1, B2)에만 적용됩니다. 이것이 사실이라면 왜 ALTQ HFSC 샘플 구성 ( 3.3 샘플 구성 검색 )이 내부 클래스에 실시간 곡선을 설정하고 내부 클래스의 보장 속도를 설정한다고 주장합니까? 완전히 무의미하지 않습니까? (참고 : pshare는 ALTQ에서 링크 공유 곡선을 설정하고 실시간 곡선을 생성합니다. 샘플 구성 위의 단락에서 확인할 수 있습니다).
일부 자습서에서는 모든 실시간 곡선의 합이 회선 속도의 80 %보다 높지 않을 수 있다고 말하고 다른 자습서에서는 회선 속도의 70 %보다 높지 않아야한다고 말합니다. 어느 것이 옳거나 둘 다 틀릴 수 있습니까?
한 튜토리얼은 모든 이론을 잊어 버릴 것이라고 말했다. 실제로 작동하는 방식 (스케줄러 및 대역폭 분포)에 관계없이 다음 "간단한 마인드 모델"에 따라 세 가지 곡선을 상상해보십시오. 실시간은이 클래스가 항상 얻을 수있는 보장 된 대역폭입니다. 링크 공유는이 클래스가 완전히 만족하기를 원하는 대역폭이지만 만족을 보장 할 수는 없습니다. 초과 대역폭이있는 경우 클래스는 만족하는 데 필요한 것보다 더 많은 대역폭을 제공받을 수 있지만 상한값 이상을 사용하지는 않을 것입니다. 이 모든 것이 작동하려면 모든 실시간 대역폭의 합이 회선 속도의 xx %를 초과 할 수 없습니다 (위의 질문 참조, 백분율이 다름). 질문 : 이것이 HSFC에 대해 다소 정확하거나 완전히 오해 되었습니까?
위의 가정이 실제로 정확한 경우 해당 모델의 우선 순위는 어디에 있습니까? 예를 들어 모든 클래스에는 실시간 대역폭 (보장), 링크 공유 대역폭 (보증되지 않음) 및 상한이있을 수 있지만 일부 클래스는 다른 클래스보다 우선 순위가 더 높습니다. 이 경우 클래스의 실시간 트래픽 중에서도 우선 순위를 정해야합니다. 커브의 기울기로 우선 순위를 정합니까? 그렇다면 어떤 곡선입니까? 실시간 곡선? 링크 공유 곡선? 상한 곡선? 그들 모두? 그들 모두에게 같은 경사를 주거나 다른 경사를 주겠습니까?
나는 아직도이 세상에 HFSC를 이해하고이 모든 질문에 정확하게 대답 할 수있는 사람들로 가득 찬 손이 있다는 희망을 잃지 않았습니다. 그리고 대답에서 서로 모순되지 않고 그렇게하는 것은 정말 좋을 것입니다 ;-)