| .TH READPROFILE "8" "October 2011" "util-linux" "System Administration" |
| .SH NAME |
| readprofile \- read kernel profiling information |
| .SH SYNOPSIS |
| .B readprofile |
| [options] |
| .SH VERSION |
| This manpage documents version 2.0 of the program. |
| .SH DESCRIPTION |
| .LP |
| The |
| .B readprofile |
| command uses the |
| .I /proc/profile |
| information to print ascii data on standard output. The output is |
| organized in three columns: the first is the number of clock ticks, |
| the second is the name of the C function in the kernel where those |
| many ticks occurred, and the third is the normalized `load' of the |
| procedure, calculated as a ratio between the number of ticks and the |
| length of the procedure. The output is filled with blanks to ease |
| readability. |
| .SH OPTIONS |
| .TP |
| \fB\-a\fR, \fB\-\-all\fR |
| Print all symbols in the mapfile. By default the procedures with |
| reported ticks are not printed. |
| .TP |
| \fB\-b\fR, \fB\-\-histbin\fR |
| Print individual histogram-bin counts. |
| .TP |
| \fB\-i\fR, \fB\-\-info\fR |
| Info. This makes |
| .B readprofile |
| only print the profiling step used by the kernel. The profiling step |
| is the resolution of the profiling buffer, and is chosen during |
| kernel configuration (through `make config'), or in the kernel's |
| command line. If the |
| .B \-t |
| (terse) switch is used together with |
| .B \-i |
| only the decimal number is printed. |
| .TP |
| \fB\-m\fR, \fB\-\-mapfile\fR \fImapfile\fR |
| Specify a mapfile, which by default is |
| .IR /usr/src/linux/System.map . |
| You should specify the map file on cmdline if your current kernel |
| isn't the last one you compiled, or if you keep System.map elsewhere. |
| If the name of the map file ends with `.gz' it is decompressed on the |
| fly. |
| .TP |
| \fB\-M\fR, \fB\-\-multiplier\fR \fImultiplier\fR |
| On some architectures it is possible to alter the frequency at which |
| the kernel delivers profiling interrupts to each CPU. This option |
| allows you to set the frequency, as a multiplier of the system clock |
| frequency, HZ. This is supported on i386-SMP (2.2 and 2.4 kernel) |
| and also on sparc-SMP and sparc64-SMP (2.4 kernel). This option also |
| resets the profiling buffer, and requires superuser privileges. |
| .TP |
| \fB\-p\fR, \fB\-\-profile\fR \fIpro-file\fR |
| Specify a different profiling buffer, which by default is |
| .IR /proc/profile . |
| Using a different pro-file is useful if you want to `freeze' the |
| kernel profiling at some time and read it later. The |
| .I /proc/profile |
| file can be copied using `cat' or `cp'. There is no more support for |
| compressed profile buffers, like in |
| .B readprofile-1.1, |
| because the program needs to know the size of the buffer in advance. |
| .TP |
| \fB\-r\fR, \fB\-\-reset\fR |
| Reset the profiling buffer. This can only be invoked by root, |
| because |
| .I /proc/profile |
| is readable by everybody but writable only by the superuser. |
| However, you can make |
| .B readprofile |
| set-user-ID 0, in order to reset the buffer without gaining privileges. |
| .TP |
| \fB\-s, \fB\-\-counters\fR |
| Print individual counters within functions. |
| .TP |
| \fB\-v\fR, \fB\-\-verbose\fR |
| Verbose. The output is organized in four columns and filled with |
| blanks. The first column is the RAM address of a kernel function, |
| the second is the name of the function, the third is the number of |
| clock ticks and the last is the normalized load. |
| .TP |
| \fB\-V\fR, \fB\-\-version\fR |
| Display version information and exit. |
| .TP |
| \fB\-h\fR, \fB\-\-help\fR |
| Display help text and exit. |
| .SH EXAMPLES |
| Browse the profiling buffer ordering by clock ticks: |
| .nf |
| readprofile | sort -nr | less |
| |
| .fi |
| Print the 20 most loaded procedures: |
| .nf |
| readprofile | sort -nr +2 | head -20 |
| |
| .fi |
| Print only filesystem profile: |
| .nf |
| readprofile | grep _ext2 |
| |
| .fi |
| Look at all the kernel information, with ram addresses: |
| .nf |
| readprofile -av | less |
| |
| .fi |
| Browse a `freezed' profile buffer for a non current kernel: |
| .nf |
| readprofile -p ~/profile.freeze -m /zImage.map.gz |
| |
| .fi |
| Request profiling at 2kHz per CPU, and reset the profiling buffer: |
| .nf |
| sudo readprofile -M 20 |
| .fi |
| .SH BUGS |
| .LP |
| .B readprofile |
| only works with an 1.3.x or newer kernel, because |
| .I /proc/profile |
| changed in the step from 1.2 to 1.3 |
| .LP |
| This program only works with ELF kernels. The change for a.out |
| kernels is trivial, and left as an exercise to the a.out user. |
| .LP |
| To enable profiling, the kernel must be rebooted, because no |
| profiling module is available, and it wouldn't be easy to build. To |
| enable profiling, you can specify "profile=2" (or another number) on |
| the kernel commandline. The number you specify is the two-exponent |
| used as profiling step. |
| .LP |
| Profiling is disabled when interrupts are inhibited. This means that |
| many profiling ticks happen when interrupts are re-enabled. Watch |
| out for misleading information. |
| .SH FILES |
| .nf |
| /proc/profile A binary snapshot of the profiling buffer. |
| /usr/src/linux/System.map The symbol table for the kernel. |
| /usr/src/linux/* The program being profiled :-) |
| .fi |
| .SH AVAILABILITY |
| The readprofile command is part of the util-linux package and is |
| available from |
| .UR https://\:www.kernel.org\:/pub\:/linux\:/utils\:/util-linux/ |
| Linux Kernel Archive |
| .UE . |