それが尋ねるのに適切な場所であるかどうか私は知りません。それは非常にばかげた質問かもしれません。一部のプロセッサは、スイッチング/ルーティングのためにデータフレームを処理する必要があると思います。最近のプロセッサの速度は数GHzです。彼らは彼らが操作するよりも速い速度で来ているデータをどのように処理しますか?
それが尋ねるのに適切な場所であるかどうか私は知りません。それは非常にばかげた質問かもしれません。一部のプロセッサは、スイッチング/ルーティングのためにデータフレームを処理する必要があると思います。最近のプロセッサの速度は数GHzです。彼らは彼らが操作するよりも速い速度で来ているデータをどのように処理しますか?
回答:
完全に正しいです。ビットあたりの命令サイクルを使用する必要がある場合、10Gbpsは達成できません。したがって、最初に注意する点は、CPU命令ごとに64ビットのワードを処理することです。
それでも、パフォーマンスのために私たちができる最悪のことは、CPUにパケットのすべてのワードにアクセスさせることです。したがって、パケットの「ゼロコピー」処理に焦点が当てられます。そのトリックの一部はインターフェイス自体にあります。それらにはDMA(「ダイレクトメモリアクセス」)があり、イーサネットコントローラチップがデータをRAMにコピーします。CPUがパケット内のすべてのワードにアクセスする必要がないように、チェックサムを計算します。その一部はデータ構造の設計にあります。ページテーブルエントリの所有権を変更して移動できるように、パケットバッファを揃えるように注意しています。その一部は、パケットデータへのアクセス回数を最小限に抑えるための注意深いプログラミングであり、受信側のアプリケーションプログラムまでアクセスしないことが望ましいです。
これをすべて実行したら、次の制限は、一度に1つずつパケットを処理するオーバーヘッドです。したがって、パケットのグループを処理できるように、イーサネットコントローラーとカーネルの両方に「セグメンテーションオフロード」機能のヒープがあります。これらのグループが大きくなるように、イーサネットコントローラーからのデータの取得を遅らせています。
最後に、最小限の作業でディスクからネットワークへの高速パスであるカーネルのsendfile()呼び出しなどの特別な場合のショートカットがあります。
ネットワークインターフェースカードのハードウェア機能を使用して、CPUを関与させるのではなく、カード間のバスとしてPCIバスを扱う特別なケースのルーティング(あるインターフェースから別のインターフェースへのパケットの転送)も可能です。これは、汎用オペレーティングシステムでは実行できませんが、Intelなどのベンダーは、イーサネットライブラリにそのような機能を実装するためのソフトウェアライブラリを提供しています。
CPUから完全に離れて、すべての転送タスクがハードウェアで行われる専用ルーターを構築することもできます。PCIバスは制限となるため、複数のパラレルバスを実行します。または、複数の並列バスから複数の並列クロスバースイッチアセンブリへ。市場の一端では、小さなTCAMベースのイーサネットスイッチが1つの例です。市場のもう一方の端では、ジュニパーM40は標準的なデザインになります。
一般的なスイッチは、パケットの受信を開始し、TCAMで宛先アドレスを検索し、パケットに出力ポートを付けたタグを添付してから、着信ポートのパケットを出力ポートのコントローラにDMA転送します。出力ポートが混雑している場合、この単純なスイッチで実行できることは、入力パケットを破棄することだけであることに注意してください。したがって、単純なスイッチでは、リンクの速度が変化し、ある程度のキューイングが必要な場合に適していません。もちろん、より高度なスイッチが存在しますが、そのためにはより多くの費用がかかります。
一般的なルーターはパケットを受信し、短いキューに保持します。宛先IPアドレスがスタティックRAMで検索され、パケットがセルに展開されてレイテンシが短縮され、各セルがクロスバースイッチに送信されて出力カードに送られます。そのカードはセルをパケットに再構成し、パケットを出力インターフェイスのキューに入れます。出力インターフェイスのキューイングは洗練されている場合があります。
今日、ほとんどすべてのスイッチングとルーティングの多くはハードウェアで処理されるため、例外の場合はプロセッサ速度が影響します。サーバーなどの場合、プロセッサの速度が十分でない可能性があります。これは過去のケースです。1 Gbpsイーサネットが初めて登場したとき、PCとサーバーで使用されているバスは400 Mbpsしか処理できませんでした。
プロセッサの速度が十分でない場合に何が起こるかは、トラフィックがドロップされることです。とにかく大量のトラフィックがドロップされる可能性があります。これは、正しく行われていれば、それが輻輳の処理方法だからです。RED(ランダム早期検出)は、パケットがいっぱいになったりテールドロップしたりするのを防ぐために、キュー内のパケットをランダムにドロップするために使用される方法です。これは、TCP同期の防止に役立ちます。速度の複数のポートが同じ速度の別の単一ポートに送信する必要がある場合があるスイッチでは、多くのドロップが発生します。
the packet will then be exploded into cells to reduce latency
か?