10Gbps ラインレートとは?

Posted by fmadio | 100G Ethernet

ネットワーキングテクノロジーサークルでは良く「10Gbpsラインレート」のような「ラインレート」という用語を耳にします。これは簡単に言うとネットワークトラフィックの最大容量で、この場合10Gbit/秒になります。簡単に聞こえますが実際のデータ転送レートについてはちょっと分かりづらいです。


  • what is 10G

まず始めに10Gbpsラインレートについて知るべきことは、正確に10,000,000,000 bits/秒ではなく若干高いということです。どのくらい高いでしょうか?こここにある前回の投稿で説明しているように正確には10.3125Gbitです。その投稿の要約は、実データで10.0000Gbpsに達成するにはデータ管理のために追加の312.5Mbpsに相当する帯域幅が必要ということです。その投稿はさらにデータが配線上で実際どのようにエンコードされるかというあなたが驚くかも知れない詳細に進みます。

キーポイントとしては、tcpdump「配線上」で見る64B ICMP Pingデータは実際に配線を通るデータの一部だけであるという点です。そのようなパケットがいかにXGMIIに変換されるかについては最初の10Gイーサネットレイヤーの抽象化の詳細についての以前の投稿All about XGMIIで説明しています。要約すると、それぞれのデータパケットは下図のようにイーサネットプリアンブル、フレームチェックシーケンス、イーサネットエピローグと最小インターフレームギャップで囲まれています。


  • 10g explained packet

  • この例の場合、それぞれのセクションは次になります:



    プリアンブル 8バイト
    ペイロード 変数
    フレームチェックシーケンス(FCS) 4バイト
    エピローグ 1バイト
    インターフレームギャップ IFG(+エピローグ12B) 11バイト

    ベンダー(弊社のような)が「ラインレート」パフォーマンスをブーストする場合、それはデバイスが上図プロトコルを使ってシリアル化された最大のデータペイロード量を処理できるという意味です。それではネットワークデバイスに関してゴールドスタンダードと言われる「10Gbpsラインレート 64Bパケット」が実際に何を意味をするかもっと具体化し計算してみましょう。

    10gbitラインレート 64バイト


    64Bパケット部分から説明すると、イーサネットプリアンブルとイーサネットエピローグ間が64バイトで、60Bのデータと4BのFCSを転送します。



    プレアンブル 8 バイト8 B
    ペイロード 60 バイト68 B
    フレームチェックシーケンス(FCS) 4 バイト72 B
    エピローグ 1 バイト73 B
    インターフレームギャップ IFG(+エピローグ 12B) 11 バイト84 B

    このように60バイトデータが配線上で合計84Bに増大します。次に厳密に10.00Gbpsでプッシュされるこれらのパケットの合計を計算します。 10.00e9 bits / (8 bits * 84 bytes) = 14.88e6 packets そして馴染みのある毎秒14.88Mパケットという皆さんが書くのが好きな数字になります。これは10Gbitリンクで60 バイトデータ(プラス4B FCS)のパケット最大値が14.88Mパケットであることを示します。しかし実際のデータ転送レートはいくつでしょうか? 14.88e6 packets * 60 bytes * 8 bits = 7.14Gbps つまり60 バイトのパケットデータをできるだけ速く送信し、10Gbpsの帯域幅を完全に使用しても、たった7.14Gbpsのデータだけを送信しています。

    10gbitラインレート1500バイト


    上述したように64Bパケットを使って最大帯域幅を実現するのはあまりいい考えではありません。それでは1500バイトパケットの数字を見てみましょう。


    プレアンブル 8 バイト8 B
    ペイロード 1500 バイト1508 B
    フレームチェックシーケンス (FCS) 4 バイト1512 B
    エピローグ 1 バイト1513 B
    インターフレームギャップ IFG (+エピローグ 12B) 11 バイト1524 B

    ..そして上のデータを利用して毎秒10.0Gbpsのパケットの数字を取得すると


    10.00e9 bits / (8bits * 1524 bytes) = 820,209 packets

    次のデータ帯域量の結果になります

    820,209 packets * 1500 bytes * 8 bits = 9.85 Gbps

    これは1500Bパケットを10Gbpsリンクラインレートで送信すると実際のペイロードデータの9.85Gbpsという結果になります。明らかに7 Gbpsよりは良いですが、1500Bパケットでも完全に10.0Gbpsに値するデータには到達できません。

    tcp 10gbitラインレート1500バイトパケット

    …しかし上述した9.85Gbpsの計算は生のイーサネットフレーム帯域だけであるために誤解を与える数字です。実際の世界においてパケットはFTP、SSH、HTTP、HTTPS等といったハイレベルプロトコルが使用され、そして99%はTCP接続が使用されます。そこで新しい疑問です: 1500バイトイーサネットフレームを使用した場合、TCPパケットの本当のペイロード帯域はいくつでしょうか?

    10g explained packet

    プレアンブル 8 バイト8 B
    イーサネットヘッダー 14 バイト22 B
    IPv4ヘッダー 20 バイト42 B
    TCPヘッダー 20 バイト82 B
    データペイロード 1426 バイト1508 B
    フレームチェックシーケンス(FCS) 4 バイト1512 B
    エピローグ 1 バイト1513B
    インターフレームギャップ IFG (+エピローグ 12B) 11 バイト1524 B

    上図のテーブルで確認できるように、1426Bのデータペイロードが10G帯域の1524Bで囲まれています。これを

    10.00e9 bits / (8bits * 1524 bytes) = 820,209 packets

    効率の良いTCPペイロード帯域で計算してみると

    820,209 packets * 1426 bytes * 8 bits = 9.36 Gbps

    悪くはありませんが、イーサネット + IP + TCPエンコーディングから帯域の1Gbps近くを実際に失っています。そのためもしあなたがTCP帯域テストで8.xx Gbpsという高い数値を獲得した場合は、かなり良くやっているという意味になります。

    要約

    あなたのかっこよくて新しい10Gbpsリンクが10Gbpsに相当する市場データ、猫の面白画像(その順序で)プッシュできたら最高ですが、それは決して実現できず決して起こりません。上述のように「12バイトの平均インターフレームギャップ」という技術的に過度に単純化した場合でもです。ほとんど全てのハードウェアはパケットがXGMIIサイクルで開始/停止できるアライメント制限があります。例えば弊社のFPGAベースのトラッフィックジェネレーターが8B IFG、16B IFG、8B IFC...などと出力した場合、IFG(8 + 16 + 8 + 16)/パケット数 = 平均12Bとなります。

    10Gbpsラインレートが何であるかという混乱、そして10G イーサネットは10Gbpsのデータではないという点を明確にできたなら幸いです。