プロセッサは10ギガビット/秒以上のデータレートをどのように処理できますか?


11

それが尋ねるのに適切な場所であるかどうか私は知りません。それは非常にばかげた質問かもしれません。一部のプロセッサは、スイッチング/ルーティングのためにデータフレームを処理する必要があると思います。最近のプロセッサの速度は数GHzです。彼らは彼らが操作するよりも速い速度で来ているデータをどのように処理しますか?

回答:


16

完全に正しいです。ビットあたりの命令サイクルを使用する必要がある場合、10Gbpsは達成できません。したがって、最初に注意する点は、CPU命令ごとに64ビットのワードを処理することです。

それでも、パフォーマンスのために私たちができる最悪のことは、CPUにパケットのすべてのワードにアクセスさせることです。したがって、パケットの「ゼロコピー」処理に焦点が当てられます。そのトリックの一部はインターフェイス自体にあります。それらにはDMA(「ダイレクトメモリアクセス」)があり、イーサネットコントローラチップがデータをRAMにコピーします。CPUがパケット内のすべてのワードにアクセスする必要がないように、チェックサムを計算します。その一部はデータ構造の設計にあります。ページテーブルエントリの所有権を変更して移動できるように、パケットバッファを揃えるように注意しています。その一部は、パケットデータへのアクセス回数を最小限に抑えるための注意深いプログラミングであり、受信側のアプリケーションプログラムまでアクセスしないことが望ましいです。

これをすべて実行したら、次の制限は、一度に1つずつパケットを処理するオーバーヘッドです。したがって、パケットのグループを処理できるように、イーサネットコントローラーとカーネルの両方に「セグメンテーションオフロード」機能のヒープがあります。これらのグループが大きくなるように、イーサネットコントローラーからのデータの取得を遅らせています。

最後に、最小限の作業でディスクからネットワークへの高速パスであるカーネルのsendfile()呼び出しなどの特別な場合のショートカットがあります。

ネットワークインターフェースカードのハードウェア機能を使用して、CPUを関与させるのではなく、カード間のバスとしてPCIバスを扱う特別なケースのルーティング(あるインターフェースから別のインターフェースへのパケットの転送)も可能です。これは、汎用オペレーティングシステムでは実行できませんが、Intelなどのベンダーは、イーサネットライブラリにそのような機能を実装するためのソフトウェアライブラリを提供しています。

CPUから完全に離れて、すべての転送タスクがハードウェアで行われる専用ルーターを構築することもできます。PCIバスは制限となるため、複数のパラレルバスを実行します。または、複数の並列バスから複数の並列クロスバースイッチアセンブリへ。市場の一端では、小さなTCAMベースのイーサネットスイッチが1つの例です。市場のもう一方の端では、ジュニパーM40は標準的なデザインになります。

一般的なスイッチは、パケットの受信を開始し、TCAMで宛先アドレスを検索し、パケットに出力ポートを付けたタグを添付してから、着信ポートのパケットを出力ポートのコントローラにDMA転送します。出力ポートが混雑している場合、この単純なスイッチで実行できることは、入力パケットを破棄することだけであることに注意してください。したがって、単純なスイッチでは、リンクの速度が変化し、ある程度のキューイングが必要な場合に適していません。もちろん、より高度なスイッチが存在しますが、そのためにはより多くの費用がかかります。

一般的なルーターはパケットを受信し、短いキューに保持します。宛先IPアドレスがスタティックRAMで検索され、パケットがセルに展開されてレイテンシが短縮され、各セルがクロスバースイッチに送信されて出力カードに送られます。そのカードはセルをパケットに再構成し、パケットを出力インターフェイスのキューに入れます。出力インターフェイスのキューイングは洗練されている場合があります。


すばらしい答えです。詳しく説明できますthe packet will then be exploded into cells to reduce latencyか?
エディ・

ルーター設計では、クロスバースイッチング(または他の種類のカード間バス)を介して、1つのラインカードから別のラインカードにパケットを送信するだけで済みます。ただし、その後、レイテンシはパケットの長さによって制限されます。パケットがクロスバースイッチングを介して送信されるため、別の完全なパケット送信遅延が発生します。クロスバースイッチングに複数のパラレルリンクを設定し、それらのリンク間でパケットを分割できるようにするためです。次に、大きなパケットの遅延が大幅に減少します。分割されたパケットの一部は「セル」と呼ばれます。
vk5tu 2016年

この答えは2年前のものですが、どうもありがとうございました。元のポスターと同じ質問があり、私の検索であなたの答えが見つかりました。それは非常によく書かれ、徹底しています。ありがとう!
ローンボート、

0

今日、ほとんどすべてのスイッチングとルーティングの多くはハードウェアで処理されるため、例外の場合はプロセッサ速度が影響します。サーバーなどの場合、プロセッサの速度が十分でない可能性があります。これは過去のケースです。1 Gbpsイーサネットが初めて登場したとき、PCとサーバーで使用されているバスは400 Mbpsしか処理できませんでした。

プロセッサの速度が十分でない場合に何が起こるかは、トラフィックがドロップされることです。とにかく大量のトラフィックがドロップされる可能性があります。これは、正しく行われていれば、それが輻輳の処理方法だからです。RED(ランダム早期検出)は、パケットがいっぱいになったりテールドロップしたりするのを防ぐために、キュー内のパケットをランダムにドロップするために使用される方法です。これは、TCP同期の防止に役立ちます。速度の複数のポートが同じ速度の別の単一ポートに送信する必要がある場合があるスイッチでは、多くのドロップが発生します。


1
これにより、入力破棄と出力ドロップが混同されます。破棄は通常、イーサネットインターフェイスのリングバッファがいっぱいになったときに発生します。CPUがデータの到着速度に対応できないときに発生します。そのリングバッファは、REDを実装するには小さすぎます。
vk5tu 2016年

@ vk5tu、あなたは、トラフィックが常にイングレスかイングレスかを問わずドロップされるという私のポイントを逃しました。システムの一部がトラフィック量を処理できない場合、一部はドロップされ、一部は故意にドロップされます。
Ron Maupin
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.