タスクセットとcpusetの違い


8

Linuxネットワークアプリケーションのレイテンシを短縮しようとしています。プログラムを特定のCPUコアに「バインド」するには、タスクセットとcpusetの2つのツールがあることを学びました。

  1. どっちがいい?それらは下位レベルで同等ですか?
  2. (性質)アプリケーションには単一のスレッドがあり、遅延を最小限に抑えて高速LANネットワーク経由で単一のTCP接続(再接続なし)を処理することになっています。私は正しい道を進んでいますか?

それぞれのmanページを読みましたか?
マイケルハンプトン

詳細なプロファイリングを実行して、レイテンシの原因がアプリケーションではなくLinuxネットワーキングの部分であることを確認しましたか?
Tero Kilkanen 2014

どのOS /ディストリビューション/バージョン/カーネルを実行していますか?
ewwhite 2014

また、どのような種類のハードウェアが関係していますか?サーバーの
製造元

回答:


12

タスクセットは、プロセスを1つ以上のCPUにバインドするためのものです。基本的に、最初の実行時または実行中に実行できる場所を指定します。最新のサーバー機器でRHEL / CentOSを使用する場合numactlは、以上のことをお勧めしtasksetます。

Cpuset / csetはCPUシールド用で、Linux cgroupを中心に構築されたフレームワークです。プロセス管理に使用できる他のツールがあるため、特定のディストリビューション(RHELなど)ではCsetは人気がありませんでした。

以下の最初のコマンドは、オペレーティングシステムのタスクをCPUコア0および8に制限するシールドを作成します。2番目のコマンドは、現在のシェルセッションを指定されたCPUシールドに移動し、システムとユーザープロセスを分離します。

# cset shield --cpu 1-7,9-15 --kthread=on
# cset proc --move --pid=$$ --threads --toset=user

CPUへのバインディングプロセスのパスに進む前に、おそらくチェックして調整する必要のある他の事項があります。割り込み(irqbalance部分的な無効化)、省電力設定、システムスケジューラ、I / Oエレベータ、リアルタイムポリシー(chrt)。

参照:Ubuntuでの低遅延TCP設定

これは、コアを選択し、irqbalanceを停止し、開始して、選択したコアをブラックリストに登録し、選択したコアでSCHED_FIFOと優先度99を使用して./your_programを実行するアプリケーションラッパーの(複雑な)例です。

Core=5
CoreMask=`echo "16 o 2 $Core ^ p" | dc`
service irqbalance stop
  until [ "`service irqbalance status`" = "irqbalance is stopped" ] ; do sleep 1 ; done
IRQBALANCE_ONESHOT=1 IRQBALANCE_BANNED_CPUS=${CoreMask} irqbalance
sleep 1
  until [ "`service irqbalance status`" = "irqbalance is stopped" ] ; do sleep 1 ; done
numactl --physcpubind=${Core} --localalloc chrt -f 99 ./your_program

1
アプリケーションがの使用時にアフィニティをリセットする可能性があることに注意してくださいtaskset。cpusetを使用する場合、cpusetが付与するものからアフィニティを変更することはできません。
Matthew Ife

そしてnumactl??
ewwhite 2015年

1
同じように、両方のプログラムは同じ基本的なシステムコールを呼び出しますsched_setaffinity
Matthew Ife
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.