Systems Performance: Enterprise and Cloudを読んでいく。
前回の続き。
6章7節以降、6章最後まで。
6.7 Experimentation
この節ではCPUパフォーマンスをテストするツールを紹介する。 バックグラウンドとして6.5.11 Micro-Benchmarkingを見るように。
6.7.1 AdHoc
$ while :; do :; done &
これは瑣末なもので何も計測しないが、1スレッドでCPU-boundな負荷を作れるので、これを計測ツールがどのように示すかを見るには便利である。
6.7.2 SysBench
SysBenchは1CPUのベンチを取るのに適している。
例えば以下のようにする。
これは8スレッドで実行した例で、これらを実際のシステムと比較するのに有効である。 詳しくは12章 Benchmarking.
6.8 Tuning
CPUにとっては最大のパフォーマンスへの貢献は不要な負荷をなくすことである。 この方法論や手法については6.5, 6.6節で述べた
6.8.1 Compiler Option
コンパイラのオプションは、アプリケーションの特性に大きな影響を与えるので、適切に設定する。
6.8.2 Scheduling Priority and Class
nice(1)コマンドによって優先度を適切に設定する。こ値は小さいほど優先度が高くなる。
範囲は-20~+19である。
Linuxではchtr(1)コマンドでスケジューリング優先度を直接設定したり確認したり出来る。
カーネル3.2.6のFedora16のデフォルトの設定の一部を表6.9に示す。
6.8.4 Process Binding
CPUキャッシュを有効に使うためにプロセスをCPUにbindすることも出来る。 Linuxではtaskset(1)コマンドで行う。
ここではPID10790をCPU7~10にbindしている。
6.8.5 Exclusiv CPU Sets
Linuxの提供する"cpusets"ではCPUをグループ化し、プロセスをこれに割り当てることが出来る。
これはCPU bindingと似たようにパフォーマンスを改善する一方で、排他的な"cpusets"の方がより効果的なこともある。
以下は"exclusiveset"を作成する例である。
6.8.6 Resource Controls
最近のOSではCPUの利用により良いリソースコントロールの方法が提供されている。
Linuxではcontainer groups(cgroups)がある。これはプロセスやプロセス群に対するResourcesの使用量を制御する方法である。
例えばCFSスケジューラはインターバルにおけるCPUサイクルを調整するために一定の上限(CPU band width)を設けることが出来る。
6.8.7 Processor Options(BIOS Tuning)
プロセッサはプロセッサレベルと言う性質をBIOSから設定できるようにしている。 大抵は最大のパフォーマンスを出せるように設定されているか、CPUベンチマークが一定のクロックレートで実行されるようにIntel Turbo Boostを着るように設定することもある。