Jenis switch strace yang cenderung saya gunakan adalah ini.
strace -ffttT -p pid -o /tmp/strace.out
Contoh dari ini akan terlihat seperti,
19:35:57.485493 mprotect(0x7f35e7472000, 16384, PROT_READ) = 0 <0.000037>
19:35:57.485599 mprotect(0x7f35e7692000, 4096, PROT_READ) = 0 <0.000030>
19:35:57.485697 mprotect(0x7f35e78b7000, 4096, PROT_READ) = 0 <0.000030>
19:35:57.485782 munmap(0x7f35e7896000, 129588) = 0 <0.000037>
19:35:57.485875 set_tid_address(0x7f35e78949d0) = 10730 <0.000029>
19:35:57.485960 set_robust_list(0x7f35e78949e0, 0x18) = 0 <0.000024>
19:35:57.486048 futex(0x7fff8f58628c, FUTEX_WAKE_PRIVATE, 1) = 0 <0.000025>
19:35:57.486131 futex(0x7fff8f58628c, FUTEX_WAIT_BITSET_PRIVATE|FUTEX_CLOCK_REALTIME, 1, NULL, 7f35e7894700) = -1 EAGAIN (Resource temporarily unavailable) <0.000024>
Anda melihat perbedaan waktu di sisi kanan panggilan sistem yang menunjukkan berapa banyak waktu yang diperlukan untuk beralih dari satu panggilan sistem ke yang lain.
Ini akan menangkap Anda perbedaan waktu antara panggilan sistem. Jadi, ketika Anda melihat bahwa panggilan sistem memiliki beberapa detik kesenjangan dengan panggilan sistem berikutnya, maka ada beberapa kebisingan.
Metode lain adalah dengan memasukkannya dengan gcore. Namun, itu membutuhkan sedikit pengalaman menavigasi melalui gdb.
Tetapi, jika utas itu adalah utas kernel, maka Anda tidak dapat mengencangkan atau mengeluarkannya. Dalam hal ini, kita harus menggunakan sesuatu yang lebih kompleks. Dalam kernel RHEL5, kami menggunakan oprofile. Di RHEL6, kami menggunakan perf. Saya lebih suka perf daripada oprofile. Data perf dapat dikumpulkan dengan format seperti grafik yang menunjukkan panggilan sistem di mana persentase CPU maksimum digunakan.
Dengan tes perf, saya melihat ini.
38.06% swapper [kernel.kallsyms] [k] mwait_idle_with_hints ↑
29.45% swapper [kernel.kallsyms] [k] read_hpet
4.90% swapper [kernel.kallsyms] [k] acpi_os_read_port ▒
4.74% swapper [kernel.kallsyms] [k] hpet_next_event
Ini menunjukkan fungsi kernel di mana 38% waktu CPU dihabiskan. Sekarang, kita dapat memeriksa fungsi dan melihat apa yang dilakukannya dan apa yang seharusnya dilakukan.
Dengan beberapa contoh, tidak terlalu sulit.