This is the mail archive of the systemtap@sources.redhat.com mailing list for the systemtap project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Review of LKST probe points


I reviewed where LKST puts the various instrumentation points it
provides.  Here is an attempt to map out the instrumentation points
listed by LKST (http://lkst.sourceforge.net/) as SystemTap entries. I
also noted which probes make use of the return information or current
program counter in the data logging. The LTT events are in similar places.

The "*" and "**" means there are some issues that need to be addressed to get probe point, e.g. instrumentation is in inlined function or in the middle of a function.

-Will


LKST Event


PROCESS_CONTEXTSWITCH **inline function context_switch, if it wasn't
** probe kernel.function("context_switch")
PROCESS_WAKEUP probe kernel.function("try_to_wake_up")
PROCESS_SIGSEND probe kernel.function("specific_send_sig_info")
PROCESS_LTHREADGEN probe kernel.function("kernel_thread")
PROCESS_INIT_WQH ** inline function init_waitqueue_head
PROCESS_ADD_WQ ** inline function __add_wait_queue
PROCESS_REM_WQ ** inline function __remove_wait_queue
INT_HARDWARE_ENTRY * in middle of do_IRQ() need marker
INT_TASKLETHI_ENTRY * in middle of tasklet_hi_action() need marker
INT_TASKLET_ENTRY * in middle of tasklet_action() need marker
INT_BH_ENTRY ---- not used in 2.6 kernel -----------
EXCEPTION_ENTRY ---- not used in 2.6 kernel -----------
EXCEPTION_EXIT ---- not used in 2.6 kernel -----------
SYSCALL_ENTRY probe syscall.operation("*").entry
SYSCALL_EXIT probe syscall.operation("*").exit
SYSCALL_SYSENTER probe syscall.operation("*").entry
SYSCALL_SYSEXIT probe syscall.operation("*").exit
MEM_SWAPOUT * in middle of shrink_list() need marker
MEM_SWAPIN * in middle of do_swap_page() need marker
MEM_DO_NOPAGE * in middle of do_no_page() need marker
MEM_DO_WPPAGE * in middle of do_wp_page() need marker
MEM_WAIT_PAGE probe kernel.function("wait_on_page")
MEM_GET_FREEPAGE probe kernel.function("__get_free_pages").entry to store args
probe kernel.function("__get_free_pages").exit to get ret val
* need thread local storage to transfer data
MEM_GET_ZEROPAGE probe kernel.function("get_zeroed_page").entry to store args
probe kernel.function("get_zeroed_page").exit to get ret val
* need thread local storage to transfer data


MEM_FREEPAGE probe kernel.function("free_pages")
-- need to check addr != 0
MEM_VMALLOC probe kernel.function("vmalloc").entry to store args
probe kernel.function("vmalloc").exit to get ret val
* need thread local storage to transfer data
MEM_VFREE probe kernel.function("__vunmap")
-- need to check add != 0
MEM_CACHE_CREATE * in middle of kmem_cache_create() need marker
MEM_CACHE_ALLOC probe kernel.function("kmem_cache_create").entry to store args
probe kernel.function("kmem_cache_create").exit to get ret val
* need thread local storage to transfer data
MEM_MALLOC probe kernel.function("__kmalloc").entry to store args
probe kernel.function("__kmalloc").exit to get ret val
* need thread local storage to transfer data
MEM_CACHE_FREE probe kernel.function("kmem_cache_free")
MEM_FREE probe kernel.function("kfree")
NET_PKTSEND probe kernel.function("dev_queue_xit")
NET_PKTSENDI probe kernel.function("net_tx_action")
NET_PKTRECV probe kernel.function("netif_rx")
NET_PKTRECVI probe kernel.function("net_rx_action")
NET_SOCKETIF probe kernel.function("sys_socketcall")
SYSV_IPC_SEMOP probe kernel.function("sys_semtimedop")
SYSV_IPC_SEMGET probe kernel.function("sys_semget")
SYSV_IPC_SEMCTL probe kernel.function("sys_semctl")
SYSV_IPC_MSGSEND probe kernel.function("sys_msgsnd")
SYSV_IPC_MSGRCV probe kernel.function("sys_msgrcv")
SYSV_IPC_MSGGET probe kernel.function("sys_msgget")
SYSV_IPC_MSGCTL probe kernel.function("sys_msgctl")
SYSV_IPC_SHMAT probe kernel.function("do_shmat")
SYSV_IPC_SHMDT probe kernel.function("sys_shmdt")
SYSV_IPC_SHMGET probe kernel.function("sys_shmget")
SYSV_IPC_SHMCTL probe kernel.function("sys_shmctl")
LK_SPINLOCK ** inline function _raw_spin_lock()
LK_SPINTRYLOCK ** inline function _raw_spin_trylock()
LK_SPINUNLOCK ** inline function _raw_spin_unlock()
LK_WRLOCK ** inline function _raw_write_lock()
LK_WRTRYLOCK ** inline function _raw_write_trylock()
LK_WRUNLOCK ** inline function _raw_write_unlock()
LK_RDLOCK ** inline function _raw_read_lock()
LK_RDUNLOCK ** inline function _raw_read_unlock()
TIMER_RUN ** inline function __run_timers(), in middle
TIMER_ADD ** in middle timer_on(), between spinlock/unlock
TIMER_MOD ** in middle of __mod_timer()
TIMER_DEL ** in middle of del_timer() between spinlock/unlock
TIMER_DEL_SYNC ** in middle of del_timer_sync()
OOPS_PGFAULT ** in middle of do_page_fault()
OOPS_NMIWDOG ** in middle of nmi_watchdog_tick()
may be able to get same functionality by
die_nmi() and looking at caller
O_PORTIN ** inline function BUILDIO()
O_PORTOUT ** inline function BUILDIO()
O_PANIC probe kernel.function("panic")
O_PRINTK probe kernel.function("printk")
/* LKST management events */
LKST_INIT
LKST_KERNEL_DUMP
LKST_MSET_XCHG
LKST_BUFF_SHIFT
LKST_BUFF_OVFLOW
LKST_SYNC_UID
LKST_SYNC_GID
LKST_SYNC_PGID
LKST_SYNC_TID
LKST_EXTEND
LKST_EXTENDE
LKST_BUFF_OVWRTN
LKST_ETYPE_MAX



Implemented in LKST in inline functions:


LK_SPINLOCK
LK_SPINTRYLOCK
LK_SPINUNLOCK
LK_WRLOCK
LK_WRTRYLOCK
LK_WRUNLOCK
LK_RDLOCK
LK_RDUNLOCK
O_PORTIN
O_PORTOUT


LKST the location of logger (lkst_current_pc():


LK_SPINLOCK
LK_SPINTRYLOCK
LK_SPINUNLOCK
LK_WRLOCK
LK_WRTRYLOCK
LK_WRUNLOCK
LK_RDLOCK
LK_RDUNLOCK


LKST the logs the caller (__builtin_return_address()):


MEM_GET_FREEPAGE
MEM_FREEPAGE
MEM_GET_ZEROPAGE
MEM_CACHE_ALLOC
MEM_MALLOC
MEM_CACHE_FREE
MEM_FREE
O_PORTIN
O_PORTOUT
O_PANIC
O_PRINTK


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]