Sistem: Ubuntu 14.04 Kernel 4.10.12
Jadi saya sedang dalam proses mencoba memahami cara kerja FTrace, tetapi sesuatu yang saya perhatikan sedikit mengganggu saya:
available_filter_functions dapat digunakan untuk memfilter apa yang dilacak ke fungsi tertentu. Tetapi fungsi yang saya coba lacak (dalam hal ini, fungsi pekerja utama KSM ksm_do_scan) tidak muncul dalam daftar.
Berikut adalah daftar fungsi yang tersedia (difilter berdasarkan fungsi ksm):
root@test:/sys/kernel/debug/tracing# cat available_filter_functions | grep
ksm
ksm_memory_callback
break_ksm
unmerge_ksm_pages
get_ksm_page
try_to_merge_with_ksm_page
ksm_scan_thread (calls ksm_do_scan)
__ksm_enter
ksm_madvise
__ksm_exit
ksm_might_need_to_copy
rmap_walk_ksm
ksm_migrate_page
Dan inilah yang tampak seperti ksm_do_scan:
static void ksm_do_scan(unsigned int scan_npages)
{
struct rmap_item *rmap_item;
struct page *uninitialized_var(page);
while (scan_npages-- && likely(!freezing(current))) {
cond_resched();
rmap_item = scan_get_next_rmap_item(&page);
if (!rmap_item)
return;
cmp_and_merge_page(page, rmap_item);
put_page(page);
}
}
Saya menguji ini pada sistem lain yang telah diatur dengan Kernel versi 4.4.0-31, dan ksm_do_scan () muncul di daftar fungsi available_filter_functions. Jadi saya pikir itu pasti ada hubungannya dengan bagaimana The 4.10.12 Kernel dikonfigurasi, tapi saya tidak yakin. Semua opsi .config yang direkomendasikan yang telah saya lihat sejauh ini diaktifkan:
CONFIG_FUNCTION_TRACER=y
CONFIG_FUNCTION_GRAPH_TRACER=y
CONFIG_STACK_TRACER=y
CONFIG_DYNAMIC_FTRACE=y
Akhirnya, saya tahu bahwa ftrace daftar hitam fungsi yang dijelaskan dengan __init dan __devinit karena fungsi kernel init dimuat selama inisialisasi dan dihapus ketika inisialisasi dilakukan, tetapi ksm_do_scan tidak mengandung salah satu dari anotasi tersebut.