タグ

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

  • 真のCPU使用率 by Brendan Gregg@Netflix - ablog

    自分の「シンプルでシステマチックな〇〇性能分析」のルーツな面々のうちの2人*1 Brendan Gregg@Netflix と Tanel Poder@Gluent が素敵な絡みをしていたのでメモ。 @brendangregg Could be useful: I once documented my understanding of the typical CPU counters that perf exposes all in one place: https://t.co/pqaDdbDyi1— Tanel Poder (@TanelPoder) 2017年5月10日 Brendan Gregg はざっくり、以下のようなことを言っている。 CPUの1サイクルと比較してメモリアクセスは遅い*2ので、ON CPU でもメモリI/O*3待ちでストールしてることが多い。 IPC(Instr

    真のCPU使用率 by Brendan Gregg@Netflix - ablog
    yass
    yass 2017/05/13
  • perf + Flame Graphs で Linux カーネル内のボトルネックを特定する - ablog

    Linuxでddで1GBのファイルを作成し perf でプロファイリングし、Flame Graph (炎のグラフ?)にして可視化したものです。 Flame Graphs は perf(Linux)、SystemTap(Linux)、DTrace(Solaris、Oracle Linux(UEK)、Mac OS X、FreeBSD)、XPerf.exe(Windows) などでのプロファイリング結果を可視化して最も使われているコードパスを早く正確に特定することができます。実体はプロファイリング結果をグラフ(SVG)に変換する Perl スクリプトです。 下から上に行くほどコールスタックが深く、左から関数名のアルファベット順でソートされています。一番上で横幅が広い関数がCPUを長く使っています。今回は "_aesni_enc1" つまり暗号化がボトルネックになっていることがわかります。 システ

    perf + Flame Graphs で Linux カーネル内のボトルネックを特定する - ablog
  • prociostat.pl と visualize_prociostat.R で Linux のプロセスのボトルネックを分析する - ablog

    今日もモツ鍋を堪能されていた模様の [twitter:@hasegaw] さんが Linux のプロセスのアクティビティを追跡してグラフ化するツールを Perl + R で作られたということで早速使ってみました。 プロセスがユーザーモードでCPUを使えているのか、I/O待ちになっているのかといった傾向を分析することができます。Oracle DatabaseCPUを使えているのか、どんな理由で待機している(CPUを使えていない)か見ることができるよう実装されていますが、そんなものはないプログラムでも /proc ファイルシステムを参照してプログラムの外側からボトルネック分析が可能になります。素晴らしい! こんな感じのグラフができます。 ツール prociostat.pl プロセスのCPU使用率、I/Oバイト数、I/O待機時間*1を秒間隔でCSVに記録する Perl スクリプト*2 情報ソ

    prociostat.pl と visualize_prociostat.R で Linux のプロセスのボトルネックを分析する - ablog
    yass
    yass 2015/01/04
    " I/O待機時間 / delta_delayacct_blkio_ticks "
  • OSのメモリ管理と仮想記憶の歴史 - ablog

    今や空気のような存在で普段意識することはないが、メモリ管理や仮想記憶はOSの主要機能だ。wikipedia:MVS や wikipedia:VMS のような名前の OS があるのもうなづける。OS、プロセッサ、メモリの歴史と深い関係がプロセッサを支える技術  ??果てしなくスピードを追求する世界 (WEB+DB PRESS plus)にわかりやすく書かれていたのでまとめてみた。 wikipedia:プログラム内蔵方式コンピュータ(1940年代) wikipedia:ENIAC(1946年)のような初期のコンピュータではプログラムはメモリに格納されておらず、スイッチや配線ボードの差し替えでプロクラミングが行われていた。別のプログラムに切り替えて実行するのに手間がかかるので、データと同様にメモリにプログラムを書き込んでおき、命令もメモリから読み出せるようにするプログラム内蔵方式コンピュータが考

    OSのメモリ管理と仮想記憶の歴史 - ablog
  • 「性能測定道」 by 東大喜連川研究室の早水さん が素晴らしすぎる - ablog

    東大喜連川研究室の早水さんが日PostgreSQLユーザ会で話された「性能測定道」がとても勉強になった。 スライドとYouTube動画が公開されています。YouTube にはスライドには書かれていない話しも出てきて、説明も非常にわかりやすいです。こういうアカデミックで最先端の研究をされている方が情報発信されるのはとてもうれしい。 id:hayamiz さんのことは何年も前から認識していたが、喜連川研究室でデータベースの研究をされているというのは初めて知りました。 TOP | Yuto Hayamizu's web site も要チェックです。 性能測定道 事始め編 性能測定道 事始め編 from Yuto Hayamizu 性能測定道 実践編 性能測定道 実践編 from Yuto Hayamizu 「性能測定道 事始め編」で紹介されていたを買ってみましたが、なかなか歯ごたえのありそう

    「性能測定道」 by 東大喜連川研究室の早水さん が素晴らしすぎる - ablog
  • iostat の見方 - ablog

    出力例 $ iostat -x 30 avg-cpu: %user %nice %system %iowait %steal %idle 0.87 0.01 2.53 0.49 0.00 96.11 Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await svctm %util sda 0.05 16.03 0.36 13.74 5.77 238.22 17.31 0.15 10.39 0.98 1.38 sda1 0.00 0.00 0.00 0.00 0.00 0.00 15.53 0.00 12.81 11.47 0.00 sda2 0.05 16.03 0.36 13.74 5.77 238.22 17.31 0.15 10.39 0.98 1.38 avg-cpu: %user %nice %syst

    iostat の見方 - ablog
    yass
    yass 2014/08/24
    " avgrq-sz: 平均 I/O サイズ / avgqu-sz: 平均待ち行列長 "
  • Linux で huge page を使っているプロセスを調べる方法 - ablog

    調べ方 /proc/[pid]/smaps で KernelPageSize がデフォルトの 4kB 以外のプロセスを探す。 調べ方の例 /proc/[pid]/smaps で KernelPageSize が 4 kB 以外のプロセスを探す。 [root@yazekats-linux ~]# perl -lane '/KernelPageSize/ and $F[1]!=4 and print qq/$ARGV\t$_/' /proc/*/smaps /proc/3834/smaps KernelPageSize: 2048 kB PID:3834 のプロセス名を調べる。 [root@yazekats-linux ~]# ps -fp 3834 UID PID PPID C STIME TTY TIME CMD root 3834 3832 0 13:44 pts/0 00:00:01

    Linux で huge page を使っているプロセスを調べる方法 - ablog
    yass
    yass 2014/08/16
    " /proc/[pid]/smaps で KernelPageSize がデフォルトの 4kB 以外のプロセスを探す "
  • SSDにしたのでI/Oスケジューラを noop に変更してみた - ablog

    PC の HDD を SSD に変更したので、I/Oスケジューラを noop に変更してみた。 SSD は HDD のようにシーク(目的のレコードが記憶されたシリンダにヘッドを移動)したり、サーチ(目的のセクタの先頭がヘッドの位置に来るのを待つ)したり、物理的な動きはない。なので、OSのI/OスケジューラでソートなんかせずにI/Oリクエストを渡してくれたほうが速いとという話だと思う。 簡単に noop が速いことを検証した上で、noop に変更した。 cfq I/Oスケジューラを cfq に設定する [root@yazekats-linux queue]# echo cfq > /sys/block/sda/queue/scheduler [root@yazekats-linux queue]# cat /sys/block/sda/queue/scheduler noop deadlin

    SSDにしたのでI/Oスケジューラを noop に変更してみた - ablog
  • 直列と並列について考えてみた - ablog

    概念 仕事の仕方には直列と並列があります。人間で例えると、一人で仕事をするのが直列処理、複数人で分担して仕事をするのが並列処理です。一人で仕事をするのは単純ですが、複数人で仕事をするには分担を決めて、各々が担当分の仕事をして、その結果をまとめるといったように直列に比べて複雑になります。 仕事をするスピードには個人差がありますが、いくら仕事が速い人でも一人でできる仕事量には限界があります。また、仕事には分担が簡単なものと難しいものがあり、複数人で分担しやすいポイントを見つけて分担します。例えば、スーパーのレジは複数台あることが多いと思います。レジは多ければそれだけ速く清算できます。一方、同じ商品の仕入れ担当が複数人いるということは少ないのではないかと思います。同じ商品の仕入れ担当が3人いたとすると、2重仕入れしないように声をかけあう必要があるなど、分担が難しいです。人を増やすのであれば、レジ

    直列と並列について考えてみた - ablog
    yass
    yass 2014/04/28
    " 一方、同じデータの更新を並列化するのは難しく、無理に並列化すると、直列処理より遅くなったりします。そのような場合は、直列処理のスピードをあげる方法を考えるほうが有効です。"
  • iowait について - ablog

    iowait の時間って、I/O要求を出しているプロセスは Disk Sleep しているという理解でいいんだろうか。 ちょっとわからなくなってきた。 linux-2.6/kernel/sched.c /* * Account for idle time. * @cputime: the cpu time spent in idle wait */ void account_idle_time(cputime_t cputime) { struct cpu_usage_stat *cpustat = &kstat_this_cpu.cpustat; cputime64_t cputime64 = cputime_to_cputime64(cputime); struct rq *rq = this_rq(); if (atomic_read(&rq->nr_iowait) > 0) cpu

    iowait について - ablog
    yass
    yass 2013/12/06
    " システムコール発行したらコンテキストスイッチが発生してスリープし、TASK_UNINTERRUPTIBLE で Disk Sleep する。CPU が空いてるのに、I/O要求が残っている場合に iowait としてカウントされるということだと思う。"
  • 割り込みについて調べてみました - ablog

    割り込みについて調べてみたのでメモしておきます。 ほとんどは 詳解 Linuxカーネル 第3版 で調べた内容なので、x86 と Linux よりの内容になっていると思います。 「割り込み」ってなんだろ?(2012/03/04追記) 「割り込み」は何らかの要因によって今やっている仕事をやめ、急遽別の仕事をすること。 仕事中に電話がかかってきて、仕事を中断して電話に出るのは割り込みの概念と同じ。 コンピュータにおいても人間がキーボードをいつ押すかコンピュータにはわからないが、コンピュータがずっとキーボードを監視していたのではほかの処理ができない。何か処理を実行中でもキーボードが押されると割り込んで、キーボードから入力されたデータを受け取って必要な処理を行ってから元の処理を再開する。 このように何かイベントが起こったときにCPUにそのことを知らせ、そのイベントにあった処理をして、その処理が終わる

    割り込みについて調べてみました - ablog
  • 割込みは %sys にはカウントされない - ablog

    Linux ではカーネルモードでCPUが使われるのは、システムコール、割込み、カーネルスレッドの3つだと思うが、割込みは %sys にカウントされない。ハードウェア割込みは %irq、ソフトウェア割込みは %soft にカウントされる。 %irq Show the percentage of time spent by the CPU or CPUs to service hardware interrupts. %soft Show the percentage of time spent by the CPU or CPUs to service software interrupts. mpstat(1): Report processors related statistics - Linux man page

    割込みは %sys にはカウントされない - ablog
  • 性能問題の切り分け方法について考えてみる - ablog

    つれづれなるままに、日ぐらしパソコンに向かひて、心にうつりゆくデータベースの性能問題の切り分け方法をそこはかとなく書き付くれば、あやしうこそ物狂ほしけれ。なエントリ(書きかけ)。一度、脳内をフラッシュしてからまとめるべし。 性能問題による影響 性能問題による影響を以下の2つに分類する。 システム全体が遅い 一部の処理が遅い 性能問題の原因 性能問題の原因を以下の2つに分類する。 交通量が多い 単純に交通量が多くて渋滞している 例)年末年始やお盆の帰省ラッシュやUターンラッシュ 経路の途中で詰まっている 車線減少や通行止めなどで渋滞している 例)年度末の工事による車線減少、飲酒の検問、交通事故による通行止めなどで経路のどこかで詰まっている 切り分け手順の分類 システム全体が遅いケースと一部の処理が遅いケースで切り分け手順は変わる。 切り分けはOSレイヤーとデータベースレイヤーの2つの観点から

    性能問題の切り分け方法について考えてみる - ablog
  • vmstat の"r"列とマクドナルドのレジカウンター - ablog

    最近、マクドナルドのレジカウンターの店員がサーバー・プロセス、その後ろでハンバーガーやポテト、ドリンクなどを作っている店員がバックグラウンド・プロセス、並んでいる客がクライアント・プロセスに見える今日この頃です。 vmstat でCPU負荷を見るときになぜ使用率だけじゃなくて"r"列を見る必要があるかについて、マクドナルドの店頭で例えてみるとわかりやすいのではないかと思って絵を描いてみました。以下はいずれも店員のガンバリ具合(CPU使用率)は 100% で、行列("r"列)の数だけ異なる絵です。店員は客の数に関わらず 100% でオーダーを処理します。これは客が1人でも、10人の行列ができていても同じです。 1. CPU使用率100%でvmstatの"r"列が「4」の場合 2. CPU使用率100%でvmstatの"r"列が「8」の場合 3. CPU使用率100%でvmstatの"r"列が

    vmstat の"r"列とマクドナルドのレジカウンター - ablog
  • Linux の iostat の出力結果を銀行のATMに例えて説明してみる - ablog

    vmstat の"r"列とマクドナルドのレジカウンター - ablog の iostat 版です。 以前、iostat の見方 - ablog というエントリを書きましたが、 絵で見てわかるOS/ストレージ/ネットワーク~データベースはこう使っている (DB Magazine Selection) 作者: 小田圭二出版社/メーカー: 翔泳社発売日: 2008/04/22メディア: 単行(ソフトカバー)購入: 22人 クリック: 303回この商品を含むブログ (36件) を見るP.176 LIST 1 Linuxのiostat -x 30の出力結果を分析 を元に説明してみます。 $ iostat -x 30 avg-cpu: %user %nice %sys %iowait %idle 15.46 0.23 3.70 45.05 35.55 Device: rrqm/s wrqm/s r/

    Linux の iostat の出力結果を銀行のATMに例えて説明してみる - ablog
  • カーネルパラメータ net.core.[rw]mem_{default,max} の意味を考えてみた - ablog

    インストールの前提条件の作業を手動で行う方法 を見ると、カーネルパラメータ net.core.[rw]mem_{default,max} の推奨値が以下の通り記載されている。 カーネルパラメータ Byte 人に優しく net.core.rmem_default 262144 256KB net.core.rmem_max 4194304 4MB net.core.wmem_default 262144 256KB net.core.wmem_max 1048576 1MB 上記のカーネルパラメータがソケットを使用するアプリケーションにどのような影響を及ぼすか仮説を書いてみる。 仮説 net.core.[rw]mem_{default,max} は TCP と UDP の送受信バッファのデフォルトサイズと最大サイズを決める。 net.ipv4.tcp_[rw]mem が設定されている場合、T

    カーネルパラメータ net.core.[rw]mem_{default,max} の意味を考えてみた - ablog
  • シェルスクリプトのエラー処理を見やすく書く - ablog

    bash でシェルスクリプトを書いていて、エラー処理をif文を使って command ... if [ $? -ne 0 ] then echo ... exit 1 fi みたいに書くと、コードが見づらいのでなんとかならないかと思っていたら、 command ... || { echo ... ; exit 1 ; } こういう風に書けるのか。 Perl の「or die」みたい。ってか Perl のほうが新しいと思うけど。 command ... || echo ... ; exit 1 のように書くと exit が実行されないので要注意。って bashクックブック に書かれてました。 例 hoge1.sh #!/bin/bash mkdir log if [ $? -ne 0 ] then echo oops! exit 1 fi echo created directory. ho

    シェルスクリプトのエラー処理を見やすく書く - ablog
  • 1