一般的に、Linux の「ping」は Windows の「hrping」よりも高速でしょうか?

一般的に、Linux の「ping」は Windows の「hrping」よりも高速でしょうか?

私は HP DL360p Gen8 を使用しています。デュアル ブートの Windows Server 2008 R2 と RHEL7 をインストールしました。両方のシステムで LACP と VLAN を構成しました。つまり、これは同じサーバー、同じハードウェア、同じネットワーク、同じルート テーブルなどです。

このサーバーは HFT 取引に使用しているため、ネットワーク遅延などの遅延が心配です。

さて、Windows と Linux から同じホストに ping すると、Linux の方がわずかに優れているはずだと予想していました。驚いたことに、まったく優れていませんでした。実際には、同じホストに ping すると、Windows よりも 5 ~ 10 マイクロ秒ほど劣っていました。

  • hrpingWindowsとpingLinuxで使用しています
  • WindowsではチーミングにHPユーティリティを使用しましたが、RHEL 7では組み込みの「チーミング」(ボンディングではない)を使用しました。

私は Linux の方が優れていると期待していました。その理由は次のとおりです。

  • RHEL 7のネットワーク実装はWindows Server 2008 R2よりも高速だと思います
  • RHEL 7 のチーミング/LACP/VLAN 実装は Windows Server 2008 R2/HP のものより高速だと思います

私の質問:

  1. そのような数値が存在する場合、RHEL 7 からの ping は Windows Server 2008 R2 よりも何マイクロ秒高速になりますか?
  2. Linux が 5 ~ 10 マイクロ秒遅くなることが潜在的な問題を示しているのかping、それともこの事実を無視するべきなのか?
  3. Linux の ping を Windows より速くするには、何をすればよいですか?/診断/トラブルシューティングを行えばよいですか?

もちろん、現実には TCP/UDP などの実際のトラフィックのレイテンシの方が気になりますが、私はこれをping最初のステップとして使用しています。おそらくping「シンプル」なので同じ数値が表示されますが、実際の TCP/UDP トラフィックでは Linux の方がはるかに高速でしょうか?

答え1

要因はいくつかあります。まず、実行しているマシンです。Windows と Linux が異なるハードウェア上にある場合、測定は無意味になります。

もちろん、何回も試行した後に平均 ping を測定する必要がありますが、最初の数回の ping には他の遅延が含まれる可能性があります。

パケットはカーネル (IP スタックとネットワーク デバイス ドライバー) を通過し、応答を受信すると再びカーネル内に入ります。この段階では、違いに影響を与える要因が多数考えられます。

  1. 実際に計時されるもの: 2 つの異なる ping 実装は、タイマーの開始から実際の送信までの間 (受信パスでも同様) に、多かれ少なかれ定型的な作業を実行できます。
  2. フィルタの存在:ファイアウォールなどにより、余分な手順が必要になる場合があります
  3. クロックの粒度: カーネルによってプロセスはどの程度細かく多重化されますか? 異なる Linux レベル間でも、ティックの長さは大きく異なる可能性があります。また、カーネルは多かれ少なかれティックレス (実行中のプロセスが 1 つだけの場合は中断なく実行される) になる可能性があります。
  4. プロセス管理: パケットが戻ってきたときに、プロセスはどのくらい速く、どのような方法で起動されますか? Windows と Linux では、この方法がまったく異なります。
  5. システムの残りの部分では何が行われているでしょうか? カーネルをビジーにするような大量の IO が同時に発生していますか?niceより高い優先度に ping すると変化がありますか?
  6. 周波数スケーリング: CPU 周波数の管理は大きく変わる可能性があります。Linux には、さまざまな処理を実行する「ガバナー」が多数あります。そのため、アイドル状態のときに Linux が低いクロック速度で動作している可能性があります。また、周波数切り替えの瞬間には余分な遅延が発生します。
  7. ユーティリティの実装とコンパイルもping、若干の影響を与える可能性があります (ただし、カーネル内のレイテンシが主な影響であると考えられます)。

Linuxカーネルは、ネットワークスループットの限界に達することが知られています。10ギガビットレベル. つまり、マイクロ秒単位の速度では大きな違いは生じないはずです。これは、スケジュールや OS のレイテンシなどの問題である可能性が高いです。また、ping のレイテンシは、負荷がかかったときの実際のパフォーマンスを表すものではありません。何かを決定するときに、この測定値を要素として考慮しないでください。特に現実的な負荷では、他の多くのベンチマークが必要です。

そして最後に、Linux カーネルの設定はパフォーマンスに大きく影響します。リアルタイム プロジェクトでは、最適なレベルで実行するために専用のカーネルが必要です。この 2 つの試行で見つかったものよりも、さまざまな構成 (両方のプラットフォーム) 間でさらに多くのバリエーションが見つかります。

関連情報