Restartable Sequences の”RSEQ”システム コールは、数年前に Linux カーネルに統合され、現在では GNU C ライブラリやその仲間によって、CPU ごとのデータに対するユーザー空間操作を高速化するために使用されています。来年リリースされる Linux 6.3 では、RSEQ サポートに注目すべき追加機能がいくつか追加される予定です。
CPU ごとのカウンターのインクリメント、CPU ごとのスピンロックの変更、CPU ごとのリング バッファーへの読み取り/書き込みなどの場合にアトミック操作を回避することで、リスタート可能なシーケンスは優れたベンチマーク結果でパフォーマンス上の利点を提供できます。
RSEQ の取り組みの多くを率いてきたマシュー・デスノイヤーズは、最近、再起動可能なシーケンス ABI を拡張して、NUMA ノード ID、mm_cid、および mm_numa_cid フィールドを公開する作業を行っています。 Desnoyers が一連のパッチで説明しました:
NUMA ノード ID フィールドにより、libc でより高速な getcpu(2) を実装できます。
メモリ マップごとの同時実行 ID (mm_cid) により、CPU データ構造ごとのユーザー空間の理想的なスケーリング (ダウンまたはアップ) が可能になります。メモリ マップ内に割り当てられた同時実行 ID は、スケジューラによって追跡されます。スケジューラは、同時に実行されているスレッドの数を考慮に入れるため、スレッドの数、CPU アフィニティ、それらのスレッドに適用される CPU セット、および論理コアの数を暗黙的に考慮します。システム上。
NUMA 対応の同時実行 ID (mm_numa_cid) mm_cid に似ていますが、各 cid が関連付けられている NUMA ノード ID を追跡する点が異なります。 NUMA システムでは、ユーザー空間によって NUMA 対応の同時実行 ID が NUMA ノードに関連付けられていることが確認されると、カーネル レベルの NUMA 構成の変更が発生しない限り、NUMA ノードが変更されないことが保証されます。これは、cpuset に属するプロセスまたは一連のプロセスが、システムの NUMA ノードのサブセットに属する一連のコアに固定されている環境で実行されている NUMA 対応の CPU ごとのデータ構造に役立ちます。
特に、より高速な getcpu() の可能性は、glibc ユーザーにとって特に便利です。
今朝の時点で、拡張可能な RSEQ ABI を導入するコード、これらの新しいフィールドの追加、およびその他の RSEQ の改善は、TIP の sched/core ブランチにキューイングされています。 Linux 6.2 のマージ ウィンドウが終わった今、TIP Git リポジトリはさまざまな機能の変更をキューに入れ始めており、2 か月後に Linux 6.3 のマージ ウィンドウが開きます。
これらの RSEQ の追加は、sched/core ブランチ。