Ubuntuシステム(14.04 LTS)でサーバーモードでiperfを実行しています。ハードウェアはハイパースレッディング機能を備えたクアッドコアなので、使用可能なコアは0~7個です(0は4とペア、1は5とペアなど)。
実行中のiperfプロセスのプロセッサアフィニティをプロセッサ0,1のみを有効にしました。ワークセットを使用してこれを確認できます。
$ taskset -pc 27745
pid 27745's current affinity list: 0,1
top または htop でプロセスを表示すると、プロセスはこれらのコアの 1 つでのみ実行されていると正しく表示されます。ただし、スレッドビューに切り替えると、任意のコアで実行されているサブスレッドが表示されます。
top/htopはどのようにして私を誤解させますか?本当にこのようなことが起こりますか?それでは、その理由と予防方法は何ですか?
編集する
iperfでこれを見たことがありますが、必ずしもiperfに限定されているわけではないことをお伝えしたいと思います。これが私の設定です。これがわからない場合は、別の実行可能ファイルを試して、動作が再現可能であることを確認できます。
ベストアンサー1
私はこれについての真実を学びました。これは私がansibleでiperfを始めた珍しい方法のおかげです。最初はiperfにデーモンモード()があることが見つからなかった-D
ので、iperfを手動で起動しましたdaemon
。私はこれを忘れて、それを変える時間がありませんでした。
奇妙なことは、この方法を使用してiperfを起動すると、追加のスレッドがすぐに作成されるようです。子プロセスを適切に分離するために子プロセスを開始する必要はありませんdaemon
(つまり、プロセスグループリーダーではなくプロセスグループの子であることを確認するinit
など)。 iperfプロセス自体は、起動するといくつかの追加のスレッドを起動します(これが実際には作業の側面ではない限りdaemon
- しかし、それに基づいてスレッドとして表示されますhtop
)。
taskset
デーモンとiperfプロセスの良い測定値が得られましたが、これはサブスレッドを見逃しているようです(この問題の議論についてはここを参照してください。実行中のプロセスのプリファレンスをワークセットに設定できませんでした。)。正しいプロセッサで実行されている主要なiperfプロセスを見ることができないので、これは完全な話だとは思わない。だから怪しいことが起きています。私はこれがより良い調査行動として説明できると信じていますが、daemon
今は調査する時間がないので、そのままにします。