HFSCに関するオリジナルのSIGCOMM '97 PostScript論文を読みましたが、これは非常に技術的なものですが、基本的な概念は理解しています。ほぼすべての他のスケジューリングアルゴリズムと同様に、線形のサービスカーブを与える代わりに、凸または凹のサービスカーブを指定することができます。したがって、帯域幅と遅延を分離することができます。ただし、このペーパーでは使用されているスケジューリングアルゴリズムの種類(リアルタイムおよびリンク共有)に言及していますが、スケジューリングクラスごとに1つの曲線のみに言及しています(この曲線を指定することで分離が行われ、そのために必要な曲線は1つだけです) )。
現在、HFSCはALTQスケジューリングフレームワークを使用してBSD(OpenBSD、FreeBSDなど)に実装され、TCスケジューリングフレームワーク(iproute2の一部)を使用してLinuxに実装されています。どちらの実装であった二つの追加サービスカーブ、コメントを追加しないで、元の論文では!リアルタイムのサービス曲線と上限のサービス曲線。繰り返しになりますが、元の論文では2つのスケジューリングアルゴリズム(リアルタイムとリンク共有)に言及していますが、その論文ではどちらも1つのサービスカーブで機能します。現在BSDとLinuxで見られるように、いずれか1つに対して2つの独立したサービス曲線はありませんでした。
さらに悪いことに、ALTQの一部のバージョンは、HSFCにキューの優先順位を追加するようです(元の論文にも優先順位などはありません)。いくつかのBSD HowToがこの優先度設定について言及しているのを見つけました(最新のALTQリリースのマニュアルページはHSFCのそのようなパラメーターを知らないので、公式には存在しません)。
これにより、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に128 kbit / sのリアルタイムカーブを追加するのはなぜですか?これは何に役立つでしょうか?これら2つに高い優先度を与えるには?元の論文によると、カーブを使用することで優先順位を高くすることができます。両方のクラスに[256kbit / s 20ms 128kbit / s]の曲線を与えると、両方とも自動的にA2とB2の2倍の優先度を持ちます(平均で128 kbit / sしか得られません)
リアルタイム帯域幅はリンク共有帯域幅にカウントされますか?たとえば、A1とB1の両方に64kbit / sのリアルタイムと64kbit / sのリンク共有帯域幅しかない場合、リアルタイムで64kbit / sが提供されると、リンク共有要件も満たされることを意味します(余分な帯域幅を取得しますが、それをしばらく無視します)、またはリンク共有を介して別の64 kbit / sを取得することを意味しますか?それで、各クラスには、リアルタイムとリンクシェアの帯域幅の「要件」がありますか?または、リンク共有曲線がリアルタイム曲線よりも高い場合、クラスの要件はリアルタイム曲線よりも高いだけですか(現在のリンク共有要件は、指定されたリンク共有要件からこれに既に提供されているリアルタイム帯域幅を引いたものに等しい)クラス)?
上限曲線はリアルタイムにも、リンク共有のみに適用されますか、それとも両方に適用されますか?一部のチュートリアルでは、一方の言い方があり、一部は、他の方法で言います。上限がリアルタイム帯域幅+リンク共有帯域幅の最大値であると主張する人もいますか?真実は何?
A2とB2が両方とも128 kbit / sであると仮定すると、A1とB1が128 kbit / sリンクシェアのみ、または64 kbit / sリアルタイムおよび128 kbit / sリンクシェアである場合に違いはありますか? 、何の違い?
別のリアルタイムカーブを使用してクラスの優先度を上げると、なぜ「カーブ」が必要なのですか?リアルタイムがフラットな値ではなく、リンクシェアもフラットな値ではないのはなぜですか?なぜ両方の曲線なのですか?元の論文では、クラスごとにその種類の属性が1つしかないため、曲線の必要性は明らかです。しかし、今、3つの属性(リアルタイム、リンク共有、および上限)を持っているので、それぞれの曲線がまだ必要ですか?リアルタイムトラフィックとリンク共有トラフィックで曲線の形状(平均帯域幅ではなく、傾き)を異なるようにしたいのはなぜですか?
利用可能な小さなドキュメントによると、リアルタイムカーブ値は内部クラス(クラスAおよびB)に対して完全に無視され、リーフクラス(A1、A2、B1、B2)にのみ適用されます。それが本当なら、なぜALTQ HFSCサンプル構成(3.3サンプル構成を検索)が内部クラスのリアルタイム曲線を設定し、それらが内部クラスの保証レートを設定すると主張するのですか?それは完全に無意味ではありませんか?(注:pshareは、ALTQでリンク共有曲線を設定し、リアルタイム曲線をグレーティングします。これは、サンプル構成の上の段落で確認できます)。
一部のチュートリアルでは、すべてのリアルタイムカーブの合計が回線速度の80%を超えてはならない、他のチュートリアルでは回線速度の70%を超えてはならないと述べています。どちらが正しいのか、それとも両方とも間違っているのか?
あるチュートリアルでは、あなたはすべての理論を忘れなければならないと言いました。物事が実際にどのように機能するか(スケジューラーと帯域幅の分布)に関係なく、次の「単純化されたマインドモデル」による3つの曲線を想像してください。リンクシェアは、このクラスが完全に満足することを望む帯域幅ですが、満足を保証することはできません。過剰な帯域幅がある場合、クラスには必要以上の帯域幅が提供される可能性がありますが、上限よりも多くの帯域幅を使用することはありません。これがすべて機能するためには、すべてのリアルタイム帯域幅の合計が回線速度のxx%を超えない場合があります(上記の質問を参照、割合は異なります)。質問:これは多かれ少なかれ正確ですか、それともHSFCの完全な誤解ですか?
また、上記の仮定が本当に正確であれば、そのモデルの優先順位付けはどこにありますか?たとえば、すべてのクラスには、リアルタイム帯域幅(保証)、リンク共有帯域幅(保証なし)、およびおそらく上限がありますが、それでも一部のクラスは他のクラスよりも高い優先度が必要です。その場合、それらのクラスのリアルタイムトラフィックの間でも、何らかの方法で優先順位を付けなければなりません。曲線の勾配で優先順位を付けますか?もしそうなら、どの曲線?リアルタイム曲線?リンクシェア曲線?上限曲線?それらのすべて?それらすべてに同じ勾配を与えるか、それぞれ異なる勾配を与え、正しい勾配を見つける方法を教えてください。
HFSCを本当に理解し、これらすべての質問に正確に答えることができる人がこの世界に少なくとも一杯いるという希望を、私はまだ失っていません。そして、答えで互いに矛盾することなくそうすることは本当に素晴らしいでしょう;-)