2016-11-19 6 views
0

専用CPUを割り当てることができません。ほぼ純粋な処理は私が行うシンプルなモノスレッドアプリケーションを持っている私のプロセス

  1. それが読み同じサイズ
  2. 2つのintバッファを使用して1バイ第一のバッファ
    • 各値の全ての値は、第2のバッファのランダムな指標である
  3. 、第2のバッファのインデックスの値を読み出し
  4. それは大きく、終わり
  5. 大きく、Iがの数を印刷
  6. それ行い、すべての前のステップのために第2のバッファから取られたすべての値を合計します理由:自発的および非自発的なCPUのコンテキストは、バッファのサイズが非常に大きくなる場合は、私のPCは遅くし始め

スイッチ?私はハイパースレッディングで4つのコアを持っているので、3つのコアがリメインされています。 1つだけが100%ビジーです。それは私のプロセスが「RAMバス」の100%近くを使用しているからですか?

はその後、私は私が私のプロセスに捧げたいCPUセット(私のCPU-セットが同じコアのCPU-スレッドの両方が含まれています)

$ cat /sys/devices/system/cpu/cpu3/topology/core_id 
3 
$ cat /sys/devices/system/cpu/cpu7/topology/core_id 
3 

$ cset set -c 3,7 -s my_cpuset 
$ cset set -l 
cset: 
     Name  CPUs-X MEMs-X Tasks Subs Path 
------------ ---------- - ------- - ----- ---- ---------- 
     root  0-7 y  0 y 934 1/
    my_cpuset  3,7 n  0 n  0 0 /my_cpuset 

を作成したことは絶対にありませんタスクのすべてのようです私のCPUセットで実行されています。私は自分のプロセスを再起動することができますし、それが実行されている間、私が起動します。

$ taskset -c 7 ./TestCpuset # Here, I launch my process 
... 
$ ps -mo pid,tid,fname,user,psr -p 25244 # 25244 being the PID of my process 
    PID TID COMMAND USER  PSR 
25244  - TestCpus phil  - 
    - 25244 -  phil  7 

PSR = 7:私のプロセスは十分予想されるCPUスレッドで実行されています。それは他のプロセスが私のコア上で実行されていることを意味し、私は非自発的なコンテキストスイッチを持っていた場合

Number of voluntary context switch: 2 
Number of involuntary context switch: 1231 

:私は私のプロセスを表示し、それが唯一のそれではなく、最後に実行されていることを願うどのようにそれは可能ですか?不随意的なコンテキストスイッチの数= 0を得るためにはどうすればよいですか?

最後の質問:私のプロセスが実行されている私はもう一度

$ cset set -l 
cset: 
     Name  CPUs-X MEMs-X Tasks Subs Path 
------------ ---------- - ------- - ----- ---- ---------- 
     root  0-7 y  0 y 1031 1/
    my_cpuset  3,7 n  0 n  0 0 /my_cpuset 

を起動した場合、私は私のCPUセットに0タスクを取得します。しかし、私はそれに実行されているプロセスがあることを知っている:それはタスクがプロセスではないようだ?

答えて

0

バッファーのサイズがかなり大きくなると、PCの速度が低下します。なぜですか?私はハイパースレッディングで4つのコアを持っているので、3つのコアがリメインされています。 1つだけが100%ビジーです。それは私のプロセスが「RAMバス」の100%近くを使用しているからですか?

シングルスレッドアプリケーションのハードウェアパフォーマンス制限、つまりプログラムが割り当てられている単一CPUのCPU時間が100%に達しました。アプリケーションスレッドは、一度に複数のCPUで実行されません(reference)

非自発的コンテキストスイッチの数= 0を取得するにはどうすればよいですか?

あなたはcset setコマンドで--cpu_exclusiveオプションは欠落していませんか?

ところで、実行時間を短縮したい場合は、マルチスレッドアプリケーションを作成してオペレーティングシステムにし、その下のハードウェアを代わりに並列化することをお勧めします。プロセスをCPUセットにロックし、コンテキストスイッチを行わないようにすると、オペレーティングシステムのパフォーマンスが低下する可能性があり、ポータブルな解決策ではありません。

関連する問題