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