ablog

不器用で落着きのない技術者のメモ

LinuxでCPU使用率を上げるコマンド

いいものを見つけたのでコピペ。

yes >> /dev/null &

最後に & お勧め w(二つターミナルが必要でなくなる。)

ちなみに メモリ負荷をあげる魔法のコマンド

/dev/null < $(yes) & 
LinuxでCPU負荷を上げる魔法のコマンド - Qiita

">>" は ">" でも良いと思うが、何か特別な理由があって">>"にしているのだろうか。


追記(2014/10/08):
ただのメモにはてブがたくさん(当社比)ついてビックリ(^-^;

コア数に対する考慮が足りない。

コア数に対する考慮が足りない。 - gomakyuのコメント / はてなブックマーク

とコメントを頂いた通り、上記のコマンドを実行しても1つの論理CPUを使い切るだけです。

例えば上の図の通り、1ソケット * 4コア * 2スレッド で論理CPU数が8の場合は、ざっくり、1多重で実行すると12.5%、4多重で実行すると50%、8多重で実行すると100%になります。

JPOUGのイベントで「私がPerlを使う理由」というお題でLTしました - ablog で4つ論理CPUの場合に Perl ワンライナーでCPU使用率を100%にする例を書いていますが、上記コマンドだと、4つの論理CPUの場合、

$ yes >> /dev/null &
$ yes >> /dev/null &
$ yes >> /dev/null &
$ yes >> /dev/null &

と4多重で実行すると100%になります。

$ yes | xargs -L 1 -P 8 >> /dev/null # マルチコアの CPU LOAD は高くなった (死ねそうなのでバックグラウンドジョブにはしていない)

$ yes | xargs -L 1 -P 8 >> /dev/null # マルチコアの CPU LOAD は高くなった (死ねそうなのでバックグラウンドジョブにはしていない) - ymkjpのコメント / はてなブックマーク

とコメント頂きました。xargs の -P オプションで並列実行するとお洒落ですね*1。コメントの例は -P 8 なので8多重で実行することになります。


逆に性能分析の際は、システム全体ではCPU使用率は低くても、mpstat*2 などでCPU別に見ると1CPUは100%で張り付いていることがあります。

それだとマルチコア使わんのじゃない? OpenSSL が楽という覚えが…ああこれこれ http://d.hatena.ne.jp/tmatsuu/20140101/1388586426

それだとマルチコア使わんのじゃない? OpenSSL が楽という覚えが…ああこれこれ http://d.hatena.ne.jp/tmatsuu/20140101/1388586426 - Nyohoのコメント / はてなブックマーク

こちらのコメントで紹介されている id:tmatsuu さんのMac Pro(Late 2013)を火鉢に見立てて暖を取る方法 - Dマイナー志向で紹介されている "openssl speed -multi X" 便利ですね。

$ openssl speed -multi 4

と実行してみると、

こんな感じ。

CPU数に合わせて、100%使い切るには

openssl speed -multi `grep processor /proc/cpuinfo|wc -l`

としてやれば良いです。


最後に書籍紹介。

絵で見てわかるシステムパフォーマンスの仕組み

絵で見てわかるシステムパフォーマンスの仕組み

Systems Performance: Enterprise and the Cloud (English Edition)

Systems Performance: Enterprise and the Cloud (English Edition)

性能分析に興味のある方は小田さんたちの「絵で見てわかるシステムパフォーマンスの仕組み」や Brendan GreggSystems Performance: Enterprise and the Cloud がオススメです。
「絵で見てわかるシステムパフォーマンスの仕組み」はオラクル小田さんの根本原理の説明から始まり、現場で性能試験をどうすればよいか?(オラクル榑松さん)、仮想化の場合は?(VMware岡田さん)、クラウドでは?(AWS平山さん)という秀逸な構成になっていて、根本原理を理解でき、さらに現場で直面する問題(性能試験どうすれば良い?仮想化、クラウドでは?)についても書かれていて、現場に置いておきたい1冊だと思います。
"Systems Performance: Enterprise and the Cloud"は元同僚で絵で見てわかるITインフラの仕組みを共著した[twitter:@takabow]に教えてもらった神本です。著者のwikipedia:Brendan GreggSun Microsystems の performance lead and kernel engineer で ZFS L2ARC の開発者でもあり、その後、 Oracle Corporation、Joyent を経て今は Netflix の Senior Performance Architect です。ハードウェアから UNIXSolarisLinuxカーネル、パフォーマンスまで深く幅広い知識を持ち、USE Method などシンプルでわかりやすいパフォーマンス分析手法を提唱しています。

おまけ

「メモリ負荷をあげる魔法のコマンド」についても試してみたところ、メモリ使用量が増えました。変数 $(yes) がもりもり成長して、/dev/null にリダイレクトされないんでしょうね。


strace してみると、

$ strace /dev/null < $(pwd)
execve("/dev/null", ["/dev/null"], [/* 53 vars */]) = -1 EACCES (Permission denied)
dup(2)                                  = 3
fcntl(3, F_GETFL)                       = 0x8002 (flags O_RDWR|O_LARGEFILE)
fstat(3, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 4), ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fe2339e1000
lseek(3, 0, SEEK_CUR)                   = -1 ESPIPE (Illegal seek)
write(3, "strace: exec: Permission denied\n", 32strace: exec: Permission denied
) = 32
close(3)                                = 0
munmap(0x7fe2339e1000, 4096)            = 0
exit_group(1)                           = ?
$ strace /dev/null < $(yes)
zsh: fatal error: out of heap memory

そのようですね。

*1:Perl ワンライナーで遊んだメモ - ablog以来使っていなかった。

*2:top見ればすぐわかりますが