Orta hızlı ARMv7 işlemcide çalışan bir 2.6.35 PREEMPT çekirdeğim var. Her 100 - 125 saniyede bir, çekirdeğin yetersiz seslerden kaçınmak için sesle ilgili bazı sürücüleri yeterince hızlı bir şekilde işlememesine neden olur. Destek genellikle 15-30 ms arasındadır, ancak çok daha uzun olabilir. Muhafaza işleminin tamamen çekirdek içinde olup olmadığı veya gerçek zamanlı öncelikli (SCHED_RR, 2) çalışan bir kullanıcı işleminin zamanlamasıyla ilgili olup olmadığı açık değildir.
Benim tahminim, preempt ile hoş olmayan bir (en az bir) sürücü var.
Çeşitli zaman raporlarının nasıl yorumlanacağından emin olmasam da, kullanıcı sürecinden bazı strace çıktı hem normal hem de anormal davranışların bazı yönlerini göstermektedir?
Normal durum:
0.000518 anket ([{fd = 10, olaylar = POLLIN | POLLERR | POLLNVAL, revents = POLLIN}], 1, 3415) = 1 0.010202 anket ([{fd = 10, olaylar = POLLIN | POLLERR | POLLNVAL}, {fd = 6, olaylar = POLLOUT | POLLERR | POLLNVAL, revents = POLLOUT}], 2, 3404) = 1 0.000585 anket ([{fd = 10, olaylar = POLLIN | POLLERR | POLLNVAL}, {fd = 6, olaylar = POLLOUT | POLLERR | POLLNVAL, revents = POLLOUT}], 2, 3404) = 1 0.000302 anket ([{fd = 10, olaylar = POLLIN | POLLERR | POLLNVAL, revents = POLLIN}], 1, 3404) = 1 0.010706 anket ([{fd = 10, olaylar = POLLIN | POLLERR | POLLNVAL}, {fd = 6, olaylar = POLLOUT | POLLERR | POLLNVAL, revents = POLLOUT}], 2, 3393) = 1 0.000480 anket ([{fd = 10, olaylar = POLLIN | POLLERR | POLLNVAL}, {fd = 6, olaylar = POLLOUT | POLLERR | POLLNVAL, revents = POLLOUT}], 2, 3392) = 1
Fd6'daki çıktı için yoklamada hiçbir engelleme olmaz ve yalnızca fd10 girdi için sorgulandığında, yaklaşık 10 ms'lik bir blok oluşur. Bu, hem sistem çağrısının süresinin raporunda hem de sistem çağrıları arasındaki aralıkta (bunlar tutarlıdır) yansıtılır.
Arıza durumu (uç örnek):
0.000305 anket ([{fd = 10, olaylar = POLLIN | POLLERR | POLLNVAL, revents = POLLIN}], 1, 3543) = 1 0.010730 anket ([{fd = 10, etkinlikler = POLLIN | POLLERR | POLLNVAL}, {fd = 6, etkinlikler = POLLOUT | POLLERR | POLLNVAL, revents = POLLOUT}], 2, 3533) = 1 0.000475 anket ([{fd = 10, olaylar = POLLIN | POLLERR | POLLNVAL}, {fd = 6, olaylar = POLLOUT | POLLERR | POLLNVAL, revents = POLLOUT}], 2, 3532) = 1 0.000329 anket ([{fd = 10, olaylar = POLLIN | POLLERR | POLLNVAL, revents = POLLIN}], 1, 3532) = 1 0.953349 anket ([{fd = 10, olaylar = POLLIN | POLLERR | POLLNVAL}, {fd = 6, olaylar = POLLOUT | POLLERR | POLLNVAL, revents = POLLOUT | POLLERR}], 2, 2578) = 1
Bu durumda, ikinci son çağrı 10ms (normal) olarak kaydedilmiş olsa da, son çağrıdan 953ms önce olduğuna dikkat edin.
Suçluyu izlemek için hangi araçları kullanabilirim?