現在、当社ではQorIQプラットフォームをネットワークアプリケーションで使用していますが、ピーク時にはトラフィック負荷がかなり高くなります。システム自体は安定しているが、スループットが増加すると、CPU使用率が予想以上に速く上昇し、パケットレイテンシがやや不安定になる。
システムをプロファイリングした結果、処理速度の低下の多くは、不要なメモリコピーとキュー処理のオーバーヘッドに起因していることが分かりました。それらの業務の一部を削減したことは、当初予想していた以上に効果があった。また、トラフィックの急増が継続的になると、キャッシュの動作が非常に重要になってくることにも気づきました。
パフォーマンス向上に貢献したもう一つの要因は、割り込みを単一のプロセッシングパスに集中させるのではなく、コア間でより慎重に分散させたことである。
プラットフォーム全体としては依然として良好なパフォーマンスを発揮していますが、特に低レイテンシまたは高スループットの環境において、QorIQまたはLayerscapeシステムでパケットプロセッシング効率を最適化する方法について、他の方々の取り組みをぜひお聞きしたいと思っています。
こんにちは、
はい、QorIQ/Layerscapeでは、パケット効率は通常、フローとコアの親和性を維持し、コア間でキューと割り込みのバランスを取り、スキャッターギャザー/ゼロコピーパスを使用してコピーを削減することによって最適化されます。これは、NXPがCPU負荷、キャッシュの局所性、およびレイテンシの一貫性を向上させる主要な手段として挙げているものだからです。
入手した資料から重要な注意点が1つあります。メカニズムに関する強力なガイダンスは見つかりましたが、すべてのQorIQ/Layerscapeシステムに適用できる普遍的な「最善」のレシピは見つかりませんでした。なぜなら、最適な組み合わせは、Linuxネットワークスタック、DPAAプライベートドライバ、またはDPDK/DPAA2ユーザースペースのいずれを実行しているか、またボトルネックがコピーオーバーヘッド、ハッシュスキュー、割り込み集中、またはキューの不均衡のいずれであるかによって異なるからです。ドキュメントでは一貫して、キュー/コアの対称性、アフィニティの維持、コピー数の削減が、最も価値の高い最初のステップであると指摘されています。
よろしくお願いします。