ログ日記

作業ログと日記とメモ

Oprofileでカーネルプロファイリング

etchのメモ。
http://lists.debian.or.jp/debian-users/200805/msg00042.html
Debianではvmlinuxを自作する必要がある?

make-kpkg build
apt-get install oprofile
modprobe oprofile
opcontrol --vmlinux=/usr/src/linux-source-2.6.18/vmlinux
opcontrol --start
# hogehoge
opcontrol --stop
opcontrol --dump


今ある環境で試した。
作業ログ。

insmod myfs.ko
opcontrol --start
~/mount -t myfs -o dir=/srv/nfs/data 192.168.11.152:/srv/nfs/data /srv/nfs/data
dd if=/dev/zero of=/srv/nfs/data/file bs=1024 count=800000
opcontrol --stop
opcontrol --dump

cd /usr/src/linux-source-2.6.18
opreport -p fs/jbd,fs/ext3,fs/nfs,drivers/net/e1000,net/sunrpc,/root/myfs |lv

  samples|      %|
------------------
   407389 62.9934 dd
        GLOBAL_POWER_E...|
          samples|      %|
        ------------------
           233434 57.3000 vmlinux
            90444 22.2009 jbd
            36661  8.9990 ext3
            30630  7.5186 nfs
             5780  1.4188 dd
             3041  0.7465 myfs
             2755  0.6763 anon (tgid:2548 range:0xb7f0c000-0xb7f0d000)
             2024  0.4968 anon (tgid:2544 range:0xb7f7e000-0xb7f7f000)
             1712  0.4202 libc-2.3.6.so
              461  0.1132 e1000
              266  0.0653 ide_core
               88  0.0216 sunrpc
               43  0.0106 ip_vs
...

opreport -l -p fs/jbd,fs/ext3,fs/nfs,drivers/net/e1000,net/sunrpc,/root/myfs |lv

samples  %        image name               app name                 symbol name
25444     3.9343  vmlinux                  dd                       _spin_lock
19286     2.9821  vmlinux                  dd                       __block_prepare_write
17491     2.7046  jbd.ko                   dd                       journal_add_journal_head
15503     2.3972  jbd.ko                   dd                       do_get_write_access
14006     2.1657  jbd.ko                   dd                       journal_put_journal_head
13370     2.0674  vmlinux                  dd                       __copy_from_user_ll_nocache_nozero
11373     1.7586  jbd.ko                   dd                       journal_dirty_metadata
11098     1.7161  nfs.ko                   dd                       nfs_mark_uptodate
...
2987      0.4619  vmlinux                  dd                       __generic_file_aio_write_nolock
2931      0.4532  vmlinux                  dd                       add_to_page_cache
2918      0.4512  myfs.ko               dd                       myfs_write
2755      0.4260  anon (tgid:2548 range:0xb7f0c000-0xb7f0d000) dd                       (no symbols)
2638      0.4079  ide_core                 ide_core                 (no symbols)
...

jbdって見たことなかった。
ファイルシステムの性能を見るつもりだったけど、これは如何に汎用機構を使わずに独自の仕組みを作るか、という方向になるのか。

callgraph

http://oprofile.sourceforge.net/doc/interpreting-callgraph.html
Kernel debuggingをオン、Compile the kernel with frame pointersをオンにしてコンパイルしたカーネルで起動。

make EXTRA_CFLAGS=-fomit-frame-pointer
insmod myfs.ko
cd /usr/src/linux-source-2.6.18
opreport -c -p fs/jbd,fs/ext3,fs/nfs,/root/myfs,drivers/net/e1000,net/sunrpc/ |lv

...
  304      100.000  vmlinux                  dd                       sys_write
2140      0.5670  myfs.ko                  dd                       myfs_write
  163894   98.4189  vmlinux                  dd                       do_sync_write
  2140      1.2851  myfs.ko                  dd                       myfs_write [self]
  248       0.1489  ext3.ko                  dd                       ext3_file_write
  243       0.1459  nfs.ko                   dd                       nfs_file_write
  1        6.0e-04  vmlinux                  dd                       restore_nocheck
  1        6.0e-04  vmlinux                  dd                       apic_timer_interrupt
...


セッションの保存

opcontrol --save=session_name
opreport session:session_name