ドイツの大学の研究者グループ
Rust バージョンのドライバーのパフォーマンスは、C 言語のリファレンス ドライバーに非常に近いことが判明しました。 32パケットのブロックを同時送信する負荷ではRustドライバーに若干劣りましたが、32ブロックあたり28パケット以上のテストではCドライバーとほとんど変わらない速度で、3万処理レベルの性能を発揮しました。 Xeon CPU E1230-2 v3.3 XNUMX GHz を搭載したサーバー上の XNUMX 秒あたりのパケット数。
パフォーマンスの点で次のニッチは、Go 言語と C# 言語のドライバーで占められており、かなり近い結果が得られました (Go ドライバーは、最大 16 パケットのブロックを含むテストでは勝ちましたが、16 パケットを超えるテストではわずかに負け始めました)ブロック内)。 ブロックあたり 256 パケットの場合、C# ドライバーのピーク パフォーマンスは 28 秒あたり約 25 万パケット、Go ドライバーは XNUMX 秒あたり約 XNUMX 万パケットでした。
次に、ほぼ近い結果であったのが、
Java、OCaml、および Haskell は、以前に検討されていたオプションよりも明らかに遅れをとっており、12 秒あたり 5 万パケットというバーを克服できませんでした。 Swift および JavaScript ドライバーはさらに大きな遅延を示し、XNUMX 秒あたり XNUMX 万パケットのレベルでストリームを処理できました。
ランキングのトップは、0.14 秒あたり 3.7 万パケットしか処理できなかった Python ドライバーによって決まりました。 Python 実装は、JIT や特定の最適化を行わずにインタープリターの速度を評価するために使用されました (コードは CPython 10 を使用して実行され、PyPy と互換性がありませんでしたが、データ ストレージ構造の最適化によりパフォーマンスが約 XNUMX 倍向上する可能性があることに注意してください) )。
さらに、バッファリングの有効性とガベージ コレクターの影響を示すために、レイテンシ テストが実行されました。 テストでは、各パケットがドライバーによって転送された後の遅延を、送信された正確な時間と比較して測定しました。 依然として C ドライバーと Rust ドライバーがリーダーであり、その結果は 1 秒あたり 20 万パケット (約 20 μs) のフローではほとんど区別がつきませんでした。 Go ドライバーは優れたパフォーマンスを発揮し、リーダーにわずかに遅れをとり、50 μs のレベルに留まりました。 C# ドライバーでは約 XNUMX μs の遅延が発生しました。
最も長い遅延は、JavaScript および Java ドライバーで示されました (遅延は 300 μs を超えました)。
この研究は、C よりも高水準の言語でドライバーとオペレーティング システム コンポーネントを開発する可能性を評価するために実施されました。 現在、Linux のメモリ問題の 39 件のうち 40 件はドライバーに関連しているため、より安全な言語を使用し、ドライバーをカーネルからユーザー空間に移動するという問題が発生します。
作業の過程で、Rust 言語がドライバー開発の最適な候補であるという結論に達しました。 Rust の機能は、C ドライバーと比較して約 2% ~ 10% のパフォーマンス損失を犠牲にして、低レベルのメモリ管理に関連する問題を排除します。 Go と C# は、ガベージ コレクションによるミリ秒未満の遅延が許容される状況でシステム コンポーネントを作成するのにも適していると考えられています。
出所: オープンネット.ru