遅延のないローカルコンパイル

要約 :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をタスクに書き留めました)-使用可能なすべてのリソースを消費しなくなり、スローダウンしてビープ音が鳴ります。

ところで、値は外出先でも変更できます。

Source: https://habr.com/ru/post/J189530/


All Articles