web-dev-qa-db-ja.com

タスクセットとcpusetの違い

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

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

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

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

以下の最初のコマンドは、オペレーティングシステムのタスクを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 )。

参照: 低レイテンシTCP Ubuntuの設定

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

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
12
ewwhite