私は最小のCentOS 6.3を使用しており、64ビットが4 NIC(1 Gbps)のゲートウェイとして機能します。それぞれがパブリックトラフィック用とプライベートトラフィック用に結合され、NATを実行します。6GBがあります= RAMと4つの論理コア。これを過去2年間問題なく使用しています。
ハードウェアルーターの経験はありませんが、RAMおよびCPUが少なく、フラッシュディスクを使用していると聞きました。ハードウェア構成が低いボックスのパフォーマンスを向上させる方法(より多くのRAMおよびCPU?
IOSこれを処理するために別の方法を使用する以外に、制限要因は何ですか?
ASIC 。
汎用CPUとタスク固有のソフトウェアを使用する代わりに、ソフトウェアをスキップして、シリコンにタスクを直接処理させることができます。
高性能ネットワーキングハードウェアは、ソフトウェアではなくASICを使用して、IPアドレスを巨大なインターネットルーティングテーブルと比較したり、CAMテーブルをチェックしてスイッチングを決定したり、ACLに対してパケットをチェックしたりするなど、計算が重い(ただし比較的論理的には単純な)タスクを実行します。 。これにより、時間に敏感な操作の速度に大きな違いが生じ、汎用CPUよりもはるかに優れています。
ハイエンドの専用ルーターは、より高速なCPUとより多くのRAMを備えたPCを上回るパフォーマンスを発揮します。これは、ハードウェアでより多くのルーティングを実行できるためです。
これは、イーサネットスイッチとして機能する4つの2ポートGigEカードを備えた$ 60ギガビットイーサネットスイッチが$ 2,000 PCよりも優れている理由と同じです。スイッチは、スイッチとして機能するように最初から構築されています。
「IOS以外」?
IOSはほとんどすべての違いをもたらします。 CentOSは、汎用のオペレーティングシステムです。これは、さまざまなハードウェア構成の膨大な配列を使用して、非常に幅広いシナリオで十分に機能するように設計されています。 IOS一方で、Ciscoギアに見られる非常に特殊なタイプのハードウェアを使用して、ネットワーク機器の一部に期待される種類のワークロードのみを処理するように非常に微調整されています。
知っている正確にプログラミングしているハードウェアのどの部分を使用すると、パフォーマンスと互換性の点で非常に長い道のりがかかります。
ソフトウェアとハードウェアのどちらにも言いたいことがある。インテルと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カーネルの新しいnftablesのおかげで、ほぼ同じ速度になりました。)
ただし、専用ルーターには大きな欠点が1つあります。それは、トラフィックの切り替え以外の多くの機能を実行できず、仮想化できないことです。私の現在のEdgeルーターは、Ubuntu 14.04を実行しているESXiクラスター内の仮想マシンであり、侵入検知システムおよびロードバランサーとしても機能します。
AFAIK、それは汎用オペレーティングシステムのオーバーヘッドです。接続速度に関係なく、パケットはカーネルのコンテキスト内でパケットごとに処理されるため、システムのレイテンシと負荷が増大します。私はそれが他のアンサーですでに説明できたと思います。
そうは言っても、Linuxシステムに他の面でも同様に、Linuxシステムからさらに手ごわい競争相手を生み出す可能性がある人気と実現可能性が高まっている有望な新しい「アイッシュ」テクノロジーがあります。つまり、InfiniBand
StackOverflowに関する次のQ&Aをご覧ください。 How is TCP Kernel-bypass Implemented
参考文献:
これは通常、Linuxに標準のネットワークスタック/デバイス構成がないためです。ほぼ90%の場合、ネットワークトラフィックは他がアイドル状態のときにCPU0によって処理されます。この問題を解決する場合、ハードウェアルーターとの違いは、思ったほど劇的ではありません。少なくともRSSまたはRPS(CPU間のドライバー/スタックベースのパケット処理分散)をセットアップする必要があります。
Linuxルーターのパフォーマンスに本当に関心があり、十分な時間がある場合は、これを読むことをお勧めします packagecloudブログの記事 (パケットの送信に関する記事もあります)。
ディストリビューションを確認する必要があり、while sleep 1; do cat $some_file_in_procfs; done
、CPUマスク評価およびマニュアルsmp_affinity
書くのは退屈です、おそらくあなたは私のペットプロジェクト netutils-linux が非常に便利だと思います。