新しいLinux el6.x86_64サーバーがあり、すべてのタスク(主にjava / C ++ / python / shell)プロセスをこの新しいサーバーに移動した後、プロセスが遅く実行されることを観察しました。たとえば、古いサーバーで実行されたPythonスクリプトは30分で完了し、新しいサーバーで処理するのに4時間かかります。
以下は新しいサーバーのCPU使用率統計(トップを使用してキャプチャ)で、一度に1つのアクティブなジョブのみを表示します。次のことを理解するのに助けが必要です。
- CPUが32個の場合、32個のジョブを並列に実行する必要はありませんか?
- これらのCPUはすべてオンラインであり、/sys/devices/system/cpuで確認されます。 CPUの可用性が非常に低く設定されている他のシステムはありますか?
top - 02:04:04 up 5 days, 6:56, 32 users, load average: 3.63, 3.91, 3.47
Tasks: 1208 total, 1 running, 1207 sleeping, 0 stopped, 0 zombie
Cpu0 : 23.4%us, 3.0%sy, 0.0%ni, 73.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu1 : 15.4%us, 5.6%sy, 0.0%ni, 79.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu2 : 12.2%us, 1.0%sy, 0.0%ni, 86.8%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu3 : 3.9%us, 0.3%sy, 0.0%ni, 95.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu4 : 19.3%us, 2.0%sy, 0.0%ni, 78.4%id, 0.0%wa, 0.0%hi, 0.3%si, 0.0%st
Cpu5 : 6.9%us, 0.3%sy, 0.0%ni, 92.8%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu6 : 1.3%us, 0.0%sy, 0.0%ni, 98.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu7 : 0.3%us, 0.0%sy, 0.0%ni, 99.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu8 : 0.3%us, 0.3%sy, 0.0%ni, 99.0%id, 0.3%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu9 : 0.7%us, 0.0%sy, 0.0%ni, 99.3%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu10 : 0.7%us, 0.0%sy, 0.0%ni, 99.3%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu11 : 0.7%us, 0.0%sy, 0.0%ni, 99.3%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu12 : 0.7%us, 0.0%sy, 0.0%ni, 99.3%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu13 : 1.0%us, 0.3%sy, 0.0%ni, 98.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu14 : 1.0%us, 0.0%sy, 0.0%ni, 99.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu15 : 0.7%us, 0.0%sy, 0.0%ni, 99.3%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu16 : 42.2%us, 4.0%sy, 0.0%ni, 53.5%id, 0.0%wa, 0.0%hi, 0.3%si, 0.0%st
Cpu17 : 0.7%us, 0.7%sy, 0.0%ni, 98.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu18 : 26.0%us, 2.0%sy, 0.0%ni, 71.7%id, 0.0%wa, 0.0%hi, 0.3%si, 0.0%st
Cpu19 : 0.7%us, 0.3%sy, 0.0%ni, 99.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu20 : 53.8%us, 4.0%sy, 0.0%ni, 41.2%id, 0.0%wa, 0.0%hi, 1.0%si, 0.0%st
Cpu21 : 29.3%us, 1.3%sy, 0.0%ni, 69.4%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu22 : 2.0%us, 0.7%sy, 0.0%ni, 97.4%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu23 : 0.7%us, 0.0%sy, 0.0%ni, 99.3%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu24 :100.0%us, 0.0%sy, 0.0%ni, 0.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu25 : 0.7%us, 1.0%sy, 0.0%ni, 98.4%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu26 : 0.7%us, 1.3%sy, 0.0%ni, 98.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu27 : 0.3%us, 0.0%sy, 0.0%ni, 99.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu28 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu29 : 0.3%us, 0.0%sy, 0.0%ni, 99.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu30 : 2.6%us, 0.0%sy, 0.0%ni, 97.4%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu31 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 396867664k total, 391584344k used, 5283320k free, 414764k buffers
答え1
これらのプロセスは、スレッドまたは他の並列メカニズムを使用して設計されていない限り、追加のコアを活用してより速く実行されません。
Pythonは通常、次のような理由でマルチコアを活用するのにうまくいきません。処女(グローバルインタプリタロック)。より多くのソフトウェア最適化を達成するために、「マルチプロセッシング」Pythonモジュールを試すことができます。
より高いクロック速度のCPUを購入する以外に、シングルコア(I / Oバインディングではなくプロセス)のパフォーマンスを向上させるためにできることはあまりありません。しかし、時にはメモリアクセスやメモリキャッシュのボトルネックが発生することがあります。たとえば、コンピュータに複数のCPUが次のように接続されている場合沼接続とプロセスがこれらのCPU間で頻繁に移動するため、CPUがメモリに頻繁にアクセスする必要がある場合があります。沼他のCPUを介した接続(他のCPUに接続されているメモリには、直接接続よりも高速にアクセスできます。これ'CPU).
cpuset(1) コマンドを使用してプロセスを特定の CPU に固定することをお勧めします。これが機能する場合は、さまざまなKenel NUMAアクション調整パラメータも調べる必要があります。
以下を追加するように編集されました。もう一つの懸念は電源管理です。おそらく、省電力プロセスによってCPU周波数が低下しているようです。 cpupower(1) コマンドを使用して、VPU 電源管理設定を確認および設定できます。