Saya memiliki kernel 2.6.35 PREEMPT yang berjalan pada prosesor ARMv7 kecepatan sedang. Kira-kira sekali setiap 100 - 125an, sesuatu menyebabkan kernel gagal memproses beberapa driver terkait audio dengan cukup cepat untuk menghindari underruns. Penahanan umumnya dalam kisaran 15-30 ms, tetapi bisa sangat lama. Tidak jelas apakah hold-up sepenuhnya in-kernel atau mungkin berhubungan dengan penjadwalan proses pengguna yang berjalan dengan prioritas waktu nyata (SCHED_RR, 2).
Dugaan saya adalah bahwa ada (setidaknya satu) pengemudi yang tidak bermain baik dengan mendahului.
Beberapa keluaran strace dari proses pengguna menggambarkan beberapa aspek perilaku normal dan abnormal, meskipun saya tidak yakin bagaimana menafsirkan berbagai laporan waktu?
Kasus normal:
0,000518 jajak pendapat ([{fd = 10, events = POLLIN | POLLERR | POLLNVAL, revents = POLLIN}], 1, 3415) = 1 Poling 0,010202 ([{fd = 10, events = POLLIN | POLLERR | POLLNVAL}, {fd = 6, events = POLLOUT | POLLERR | POLLNVAL, revents = POLLOUT}], 2, 3404) = 1 0,000585 jajak pendapat ([{fd = 10, events = POLLIN | POLLERR | POLLNVAL}, {fd = 6, events = POLLOUT | POLLERR | POLLNVAL, revents = POLLOUT}], 2, 3404) = 1 0,000302 poling ([{fd = 10, events = POLLIN | POLLERR | POLLNVAL, revents = POLLIN}], 1, 3404) = 1 Polling 0,010706 ([{fd = 10, events = POLLIN | POLLERR | POLLNVAL}, {fd = 6, events = POLLOUT | POLLERR | POLLNVAL, revents = POLLOUT}], 2, 3393) = 1 0,000480 jajak pendapat ([{fd = 10, events = POLLIN | POLLERR | POLLNVAL}, {fd = 6, events = POLLOUT | POLLERR | POLLNVAL, revents = POLLOUT}], 2, 3392) = 1
Tidak ada pemblokiran yang terjadi pada polling untuk output pada fd6 dan, ketika hanya fd10 yang disurvei untuk input, blok sekitar 10ms terjadi. Ini tercermin baik dalam laporan durasi panggilan sistem dan interval antara panggilan sistem (konsisten).
Kasus kegagalan (contoh ekstrem):
0,000305 polling ([{fd = 10, events = POLLIN | POLLERR | POLLNVAL, revents = POLLIN}], 1, 3543) = 1 0,010730 jajak pendapat ([{fd = 10, events = POLLIN | POLLERR | POLLNVAL}, {fd = 6, events = POLLOUT | POLLERR | POLLNVAL, revents = POLLOUT}], 2, 3533) = 1 0,000475 jajak pendapat ([{fd = 10, events = POLLIN | POLLERR | POLLNVAL}, {fd = 6, events = POLLOUT | POLLERR | POLLNVAL, revents = POLLOUT}], 2, 3532) = 1 0,000329 poling ([{fd = 10, events = POLLIN | POLLERR | POLLNVAL, revents = POLLIN}], 1, 3532) = 1 0.953349 poling ([{fd = 10, events = POLLIN | POLLERR | POLLNVAL}, {fd = 6, events = POLLOUT | POLLERR | POLLNVAL, revents = POLLOUT | POLLERR}], 2, 2578) = 1
Perhatikan dalam hal ini bahwa, meskipun panggilan kedua-terakhir dicatat sebagai mengambil 10 ms (normal), itu adalah 953 ms sebelum panggilan terakhir.
Alat apa yang bisa saya gunakan untuk melacak pelakunya?