- Prev
- SystemTap Beginners Guide
- Next

## ⁠5.3. Profiling

The following sections showcase scripts that profile kernel activity by monitoring function calls.

### ⁠5.3.1. Counting Function Calls Made

This section describes how to identify how many times the system called a specific kernel function in a 30-second sample. Depending on the use of wildcards, you can also use this script to target multiple kernel functions.
functioncallcount.stp

    #! /usr/bin/env stap
    # The following line command will probe all the functions
    # in kernel's memory management code:
    #
    # stap  functioncallcount.stp "*@mm/*.c"

    probe kernel.function(@1).call {  # probe functions listed on commandline
      called[ppfunc()] <<< 1  # add a count efficiently
    }

    global called

    probe end {
      foreach (fn in called-)  # Sort by call count (in decreasing order)
      #       (fn+ in called)  # Sort by function name
        printf("%s %d\n", fn, @count(called[fn]))
      exit()
    }

functioncallcount.stp takes the targeted kernel function as an argument. The argument supports wildcards, which enables you to target multiple kernel functions up to a certain extent.
The output of functioncallcount.stp contains the name of the function called and how many times it was called during the sample time (in alphabetical order). Example 5.13, “functioncallcount.stp Sample Output” contains an excerpt from the output of `stap functioncallcount.stp "*@mm/*.c"`:
⁠

Example 5.13. functioncallcount.stp Sample Output

    [...]
    __vma_link 97
    __vma_link_file 66
    __vma_link_list 97
    __vma_link_rb 97
    __xchg 103
    add_page_to_active_list 102
    add_page_to_inactive_list 19
    add_to_page_cache 19
    add_to_page_cache_lru 7
    all_vm_events 6
    alloc_pages_node 4630
    alloc_slabmgmt 67
    anon_vma_alloc 62
    anon_vma_free 62
    anon_vma_lock 66
    anon_vma_prepare 98
    anon_vma_unlink 97
    anon_vma_unlock 66
    arch_get_unmapped_area_topdown 94
    arch_get_unmapped_exec_area 3
    arch_unmap_area_topdown 97
    atomic_add 2
    atomic_add_negative 97
    atomic_dec_and_test 5153
    atomic_inc 470
    atomic_inc_and_test 1
    [...]

- Prev5.2.7. Periodically Print I/O Block Time
- Up
- Home
- Next5.3.2. Call Graph Tracing