ハードウェアルーターの性能が仕様(RAMおよびCPU)の高いLinuxルーターよりも優れているのはなぜですか?


44

4つのNIC(1 Gbps)を備えたゲートウェイとして機能する最小のCentOS 6.3、64ビットがあり、それぞれがパブリックトラフィック用とプライベートトラフィック用に結合され、NATを実行します。6 GBのRAMと4つの論理コアを備えています。過去2年間これを問題なく使用しています。

ハードウェアルーターの経験はありませんが、RAMとCPUが少なく、フラッシュディスクを使用していると聞きました。低いハードウェア構成のボックスは、より多くのRAMとCPUを搭載したマシンよりも優れたパフォーマンスを発揮します(たとえば、より多くの同時接続を処理できます)。

これを処理するために異なる方法を使用するIOS以外の制限要因は何ですか?


5
同じソリューションの場合、ハードウェアでの実装はソフトウェアよりもファームウェアよりも高速です。
mdpc

3
あなたが言及する「より良い仕様」は、当面の仕事とは無関係です。他にも重要なプロパティがあります。
ndim

わかりましたので...あなたが書いたものから、私はあなたのCentosが仮想マシンであると仮定するべきですか?ハイパーバイザーとゲスト側の両方での仮想マシンの特別なネットワーク最適化は別として、仮想マシンは一般的にこの種の役割には適さないことが知られています...ルーター/ファイアウォールとしての使用には、ベアメタルが常に推奨されます!
投石

構成で提案されているように、実際に1Gbpsのトラフィックをルーティングしていますか?ダンプトラックを使用して、砂でいっぱいのシャベルを動かすことができます。6GBのRAMと4つのコアは、基本的にルーターには一切使用されません。小さなIntel Atomマシンを使用してこの作業を行うことで、電力とラックスペースを節約できます。
バート14

回答:


64

ASICの

汎用CPUとタスク固有のソフトウェアを使用する代わりに、ソフトウェアをスキップして、シリコンにタスクを直接処理させることができます。

高性能ネットワークハードウェアは、ソフトウェアの代わりにASICを使用して、IPアドレスを巨大なインターネットルーティングテーブルと比較する、CAMテーブルをチェックしてスイッチングを決定する、ACLに対してパケットをチェックするなど、計算量の多い(ただし比較的論理的に単純な)タスクに使用します。これにより、これらの時間依存操作の速度に大きな違いが生じ、汎用CPUよりも大きな利点が得られます。


1
私はシェーンに同意しますが、いつでもアプライアンスよりも汎用サーバーで実行されるiptablesを選択します。私の会社では、fedoraで実行されているiptablesは、Cisco ASAよりも速く、柔軟で、構成が簡単で、CPUとメモリへの負担が少なく、起動が速く、はるかに安価です。
rvh

@rvh:ファイアウォールまたは単なるルーティング用?
mveroone 14

2
全体として、「速度」はここではかなり緩やかな用語です。確かに、PCがHWのように「高速」に操作を実行できる状況や、HWよりも一定の時間がかかる状況があることは確かです。しかし、それは本当に安定性と「支出に見合うもの」に帰着します-あなたはまだアプライアンスでより少ないRAM / CPUを購入していますが、それからより多くを得て、安定性を得るために必要なことだけを行います
コリン・ゴッドジー

この答えは省略によって間違っています。NATを実行するほとんどのルーターは、極端なパフォーマンスにならない限り、汎用CPUを使用するため、「ASIC」と叫ぶだけでも少し素朴です。また、実際には、ハードウェアNATルーターには、同時接続の数に強い制限があります。OPが経験するのは、設定の誤りと、タスクに適さないオペレーティングシステムの使用です。
dualed

@dualed most routers that do NAT use general purpose CPUsはい、それは本当の声明ですが、それらのデバイスの多くが特定の操作を専用チップにオフロードするという事実を無視しています(上記の私の完全な答えを読むと明らかになります)。NATと接続追跡(これは、最新のデバイスのASICでは発生しません)を考えないでください。ルーティングテーブルとスイッチングオフロードを考えてください。
シェーンマッデン

12

ハイエンドの専用ルーターは、ハードウェアでより多くのルーティングを実行できるため、より高速なCPUとより多くのRAMを搭載したPCよりもパフォーマンスが優れています。

これは、60ドルのギガビットイーサネットスイッチが、イーサネットスイッチとして機能する4つの2ポートGigEカードを備えた2,000ドルのPCよりも優れている理由と同じです。スイッチは、スイッチになるように地面から構築されています。


3
また、専用ルーターはフラッシュディスク上で実行されているため、不適当なときに故障する可動部品が少なくなります。
cpt_fink

3
あなたが正しいかどうかはよくわかりません。私はネットマップ(info.iet.unipi.it/~luigi/netmap)に基づいて働いていた会社のために非常に基本的なアンチDDOS保護を作成しましたが、通常のハードウェア(本当に完全な1Gb / sまたは11Mパケット/秒)。そのサイトには、「通常の」ハードウェアで毎秒3Mパケットを転送できるnetmap用のopenswitchのバージョンもあります。それを行える安価な(500 $)スイッチは知りませんが、間違っているかもしれません。
-XzKto

2
@XzKto典型的な安価な(60ドル)5ポートGigEスイッチは、フルワイヤスピードでポートのすべての組み合わせ間でパケットを転送できます。通常、完全な非ブロッキングクロスバーを使用します。
デビッドシュワルツ

@XzKto Davidが意味したのは、「独自のインターフェイススループットまで」速度を処理するPCとは異なり、スイッチはポート間を組み合わせた場合に実行します。host1がhost2と、3〜4と通信し、各接続を全二重と最大スループットで接続できます。あなたはそれを打ち負かすことはできません。(そして、より多くのお金、より多くのポート、さらに速い理由を簡単に確認できます)。ルーターの場合も同様です:十分な情報があればすぐに再ルーティングできるため、ハードウェアはソフトウェアよりも高速に再ルーティングできます(Linuxルーターは各レイヤーでそれを行いますが、すでにそこに到達するのは遅くなります)
オリビエデュラック

11

「IOS以外」

IOSはほとんどすべての違いをもたらします。CentOSは汎用オペレーティングシステムです。さまざまなハードウェア構成を使用して、非常に広範囲のシナリオで十分なパフォーマンスを発揮するように設計されています。一方、IOSは、Cisco機器にある非常に特殊なタイプのハードウェアを使用して、ネットワーク機器に予想される種類のワークロードのみを処理するように非常に微調整されています。

プログラミング対象のハードウェアを正確に知ることは、パフォーマンスと互換性の点で非常に長い道のりを歩みます。


3
+1。さらに、シスコにはエンジニアリングリソースと、必要に応じてソフトウェアをハードウェア置き換えるためのノウハウがあります。つまり、特定の操作がソフトウェアよりも遅い場合、ASICのエンジニアリング、既存の処理ユニットへの命令の追加、または高速化に役立つハードウェアモジュールの構築に力を注ぐことができます。ソフトウェアハードウェアの両方を制御する贅沢がある場合、テーブルは圧倒的にパフォーマンスを優先します。
ジャスティン

両方の方法でも機能します。ハードウェアは、まれで複雑なケースにも対処する必要はありません。それらをソフトウェアに投げるだけです。ルーティングループ?ハードウェアでそれらに対処する方法を理解しようとしないでください。
–MSalters

4

ソフトウェアとハ​​ードウェアの両方に何か言いたいことがあります。汎用サーバーハードウェア上のIntelとTP-Link NIC(Realtekチップを中心に使用)の比較と、ルーティングの専用および汎用ソフトウェアを比較しています。

ハードウェア側では、ボード上のASICがIPトラフィックの処理を実行できる場合、プロセッサの負荷が低くなるため、高速になります。2つのオンボードINtel NICチップがDMAによって直接通信し、パケット転送の処理でメインCPUをバイパスしていることに気付きました。一方、Realtekチップは、パケットが到着するたびに割り込みます。

ソフトウェア側では、ソフトウェアがルーティングで使用されるように設計されている場合、より効率的にすることができます。pfSense + PF(ルーターとして使用することを目的とした修正FreeBSD)と汎用ソフトウェアUbuntu 12.04 + iptablesの両方をルーティングソフトウェアとして使用し、最初のトラフィックを明らかに高速に切り替えました。(Ubuntu 14.04は、Linux 3.13カーネルの新しいnftableのおかげで、ほぼ同じ速度になりました。)

ただし、専用ルーターには1つの大きな欠点があります。トラフィックを切り替える以外に実行できないこと、および仮想化できないことです。現在のエッジルーターは、Ubuntu 14.04を実行するESXiクラスター内の仮想マシンであり、侵入検知システムおよびロードバランサーとしても機能します。


3

私の知る限り、それは汎用オペレーティングシステムのオーバーヘッドです。接続の速度に関係なく、パケットはカーネルのコンテキスト内でパケットごとに処理されるため、システムの遅延と負荷が増大します。私は他の回答ですでに説明されているよりも良いと思っています。

そうは言っても、この点やその他の点で、Linuxシステムからより手ごわい競合他社を作成する可能性のある有望な新しい「っぽい」技術が人気と実現可能性を増しています。すなわち、InfiniBand

StackOverflowに関する次のQ&Aをご覧ください 。TCPカーネルバイパスの実装方法

参考文献:


2

これは通常、Linuxにすぐに使用できるネットワークスタック/デバイスの構成がないためです。ほぼ90%の場合、ネットワークトラフィックはCPU0によって処理され、他のトラフィックはアイドル状態になります。この問題を解決する場合、ハードウェアルーターとの違いは思いがけないほど劇的ではありません。少なくともRSSまたはRPS(CPU間のドライバー/スタックベースのパケット処理分散)をセットアップする必要があります。

Linuxルーターのパフォーマンスを本当に気にかけ、十分な時間があれば、packagecloudブログでこの記事を読むことをお勧めします(パケットの送信に関する記事もあります)。

ディストリビューションを見る必要がありwhile sleep 1; do cat $some_file_in_procfs; done、CPUマスクの評価と手動でのsmp_affinity記述が退屈だと思うなら、おそらく私のpet-project netutils-linuxが非常に有用であることがわかるでしょう。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.