タグ

ブックマーク / yohei-a.hatenablog.jp (5)

  • funcgraph で Linux カーネル内のボトルネックをミクロに追跡する - ablog

    perf + Flame Graphs で Linux カーネル内のボトルネックを特定する - ablog で Linux カーネル内のボトルネックをマクロに分析する方法を紹介しましたが*1、 strace でI/Oシステムコールのレスポンスを調べると遅く*2、 iostat の await でカーネルのブロックレイヤーのI/Oレスポンスを調べると速い場合、 システムコールインターフェースとカーネルのブロックレイヤーの中間(ファイルシステムレイヤーなど)で詰まっていると考えられます*3。 このようなケースで、1回のシステムコール発行の所要時間の内訳*4をミクロに追跡するには Brendan Gregg の funcgraph が便利です*5。 実行結果 # ./funcgraph -Htp 4511 vfs_write Tracing "vfs_write" for PID 4511...

    funcgraph で Linux カーネル内のボトルネックをミクロに追跡する - ablog
  • LinuxでCPU使用率を上げるコマンド - ablog

    いいものを見つけたのでコピペ。 yes >> /dev/null & 最後に & お勧め w(二つターミナルが必要でなくなる。) ちなみに メモリ負荷をあげる魔法のコマンド /dev/null < $(yes) & LinuxCPU負荷を上げる魔法のコマンド - Qiita ">>" は ">" でも良いと思うが、何か特別な理由があって">>"にしているのだろうか。 追記(2014/10/08): ただのメモにはてブがたくさん(当社比)ついてビックリ(^-^; コア数に対する考慮が足りない。 コア数に対する考慮が足りない。 - gomakyuのコメント / はてなブックマーク とコメントを頂いた通り、上記のコマンドを実行しても1つの論理CPUを使い切るだけです。 例えば上の図の通り、1ソケット * 4コア * 2スレッド で論理CPU数が8の場合は、ざっくり、1多重で実行すると12.5%

    LinuxでCPU使用率を上げるコマンド - ablog
  • gettimeofday(2) は VDSO によりユーザー空間で実行される - ablog

    gettimeofday(2) はシステムコールなので、大量に発行すると%sysが上がると思っていたが、VDSOという仕組みでユーザー空間で実行されるので%userが上がるらしい。時刻取得みたいなちょっとした処理でシステムコールを発行してコンテキストスイッチするのって無駄が多いなって思ってたけど、そこはちゃんと考えられているんですね。 多くのアプリケーション負荷 (特にデータベースおよび財務サービスアプリケーション) は gettimeofday または類似の時間機能コールを非常に頻繁に実行します。 このコールの効率性を最適化すると、 大きな利点があります。 VDSO (Virtual Dynamic Shared Object) は、 ユーザースペースのアプリケーションがシステムコールよりも少ないオーバーヘッドで一部のカーネルアクションを実行できるようにする共有ライブラリです。 多くの場

    gettimeofday(2) は VDSO によりユーザー空間で実行される - ablog
    ytkibk
    ytkibk 2014/09/14
    1番気になったソース部分が吟味されていない。
  • sysのCPU使用率が高い場合にその内訳を調べる方法 - ablog

    OSレベルで sys のCPU使用率が高い場合に perf*1 を使って、何の処理の割合が高いか調べる方法です。 perf は 特定のプロセスだけでなくOS全体の統計を見れる カーネル(sys)とユーザー(user)の両方を見れる ところが非常に便利だと思う*2。 準備 ひたすら write システムコールを発行し続けるプログラムを作成する $ cat write_loop.c #include <unistd.h> int main(void) { while(1) { write(1, "foo\n", 4); } } コンパイルする $ gcc write_loop.c -o write_loop 実行権限を付与する $ chmod u+x write_loop 検証 ひたすらwriteシステムコールを発行するプログラムを実行する $ ./write_loop > /dev/null

    sysのCPU使用率が高い場合にその内訳を調べる方法 - ablog
    ytkibk
    ytkibk 2013/12/09
  • Linux の I/O スケジューラ - ablog

    DBマガジン5月号の「Linux-DBサーバー構築入門/松信嘉範」で取り上げられていた I/O スケジューラについてメモ。 I/O スケジューラはディスク I/O を効率化するための機能。 I/O 要求の順番の通りに I/O していると効率が悪いので、シーク待ちや回転待ちが最小化するよう並べ替える。 Kernel 2.6.10 からは deadline、moop、cfq、anticipatory の4種類があり、デフォルトは cfq。 deadline: 読み込み・書き込みの両方をバランス良く処理する。deadline 以外は読み込み・書き込みの区別をしない。 noop: 「キューにたまったI/O要求を物理的な配置上に並び替える」以外に特別なスケジューリングをしない。 cfq(Completely Fair Queuing): 特定のプロセス/スレッドだけにI/O要求が偏るのを防ぎ、まんべ

    Linux の I/O スケジューラ - ablog
    ytkibk
    ytkibk 2013/02/18
  • 1