Analyzing Kernel Modules Data in OProfile in Fedora Core 3/4 and RHEL4 William Cohen wcohen@redhat.com 6/20/2005 OProfile collects data on a system-wide basis for kernel- and user-space code running on the machine. However, once a module is loaded into the kernel, the information about the origin of the kernel module is lost. The module could have come from the initrd file on boot up, the directory with the various kernel modules, or a locally created kernel module. As a result when OProfile records sample for a module, it just lists the samples for the modules for an executable in the root directory, but this is unlikley to the place with the actual code for the module. You will need to take some steps to make sure that analysis tools get the executable. For example on a AMD64 machine the sampling is set up to record "Data cache accesses" and "Data cache misses" and you would like to see the data for the ext3 module: $ opreport /ext3 CPU: AMD64 processors, speed 797.948 MHz (estimated) Counted DATA_CACHE_ACCESSES events (Data cache accesses) with a unit mask of 0x00 (No unit mask) count 500000 Counted DATA_CACHE_MISSES events (Data cache misses) with a unit mask of 0x00 (No unit mask) count 500000 DATA_CACHE_ACC...|DATA_CACHE_MIS...| samples| %| samples| %| ------------------------------------ 148721 100.000 1493 100.000 ext3 To get a more detailed view of the actions of the module, you will need to ether have the module be unstripped (e.g. installed from a custom build) or have the debuginfo RPM installed for the kernel. Find out which kernel is running, "uname -a", get the appropriate debuginfo rpm, and install on the machine. Then make a symbolic link so oprofile finds the code for the module in the correct place: # ln -s /lib/modules/`uname -r`/kernel/fs/ext3/ext3.ko /ext3 Then the detailed information can be obtained with: # opreport image:/ext3 -l|more warning: could not check that the binary file /ext3 has not been modified since the profile was taken. Results may be inaccurate. CPU: AMD64 processors, speed 797.948 MHz (estimated) Counted DATA_CACHE_ACCESSES events (Data cache accesses) with a unit mask of 0x00 (No unit mask) count 500000 Counted DATA_CACHE_MISSES events (Data cache misses) with a unit mask of 0x00 (No unit mask) count 500000 samples % samples % symbol name 16728 11.2479 7 0.4689 ext3_group_sparse 16454 11.0637 4 0.2679 ext3_count_free_blocks 14583 9.8056 51 3.4159 ext3_fill_super 8281 5.5681 129 8.6403 ext3_ioctl 7810 5.2514 62 4.1527 ext3_write_info 7286 4.8991 67 4.4876 ext3_ordered_writepage 6509 4.3767 130 8.7073 ext3_new_inode 6378 4.2886 156 10.4488 ext3_new_block 5932 3.9887 87 5.8272 ext3_xattr_block_list ...