要約 :cgroupを使用して、プロセッサとディスクごとにコンパイラの速度を制限します。
歌詞
与えられた:
1個のプログラマー、
5200 rpmラップトップディスクを搭載したラップトップ-1個
Haskellソースファイル300個
コーヒースクリプトファイル(将来のJS)-300個
コンパイル時間-40分。
目的:システム全体を「地獄と死」の状態にせずにバックグラウンドでコンパイルする。 アセンブリ時間を最大で50〜60分増やすこともできます。
解決策?
cgroups
ラップトップのディスクパフォーマンスは(目で見て)およそ80 IOPSのピーク時です。 コンパイルに40 IOPSと300%CPU(全プロセッサーの75%)を提供することにしました。
その後、すべてが簡単です:
sudo -s mkdir -p ~/cg/io mkdir -p ~/cg/cpu mount -t cgroup -oblkio none ~/cg/io mount -t cgroup -ocpu none ~/cg/cpu mkdir ~/cg/cpu/g1 ( ) stat /dev/sda
(デバイスタイプにのみ関心があるという結論が得られます:
8.0 、太字で強調表示されている-望ましいもの)
次に2番目のシェルを起動し、そこからコンパイルを行います。 PIDを確認します。
echo $$
(番号を取得)
最初のシェルで記述します:
echo (PID ) >~/cg/g1/cpu/tasks echo (PID ) >~/cg/io/tasks
(これは、どのpidとその子孫をカットするかということで、そこに複数のプロセスを書き込むことができますが、コンパイルのためには、シェル化するだけで十分です)
次に、制限を設定します。
IO :
echo "8:0 20" > ~/cg/io/blkio.throttle.read_iops_device echo "8:0 20" > ~/cg/io/blkio.throttle.write_iops_device
8:0デバイスの場合(それを見つける方法については上記を参照)、1秒あたり最大20のレコードと20の読み取り値を設定します。
CPU :
echo 300000 > ~/cg/cpu/g1/cpu.cfs_quota_us
300,000 µs(100,000 µsのティックごとに)、つまり300%CPUのクォータを設定します。
その後、シェルでコンパイルを安全に実行できます(PIDをタスクに書き留めました)-使用可能なすべてのリソースを消費しなくなり、スローダウンしてビープ音が鳴ります。
ところで、値は外出先でも変更できます。