ฉันมีเคอร์เนล 2.6.35 PREEMPT ที่ทำงานบนโปรเซสเซอร์ ARMv7 ความเร็วปานกลาง เกี่ยวกับทุกๆ 100 - 125s สิ่งที่ทำให้เคอร์เนลล้มเหลวในการประมวลผลไดรเวอร์ที่เกี่ยวข้องกับเสียงอย่างรวดเร็วพอที่จะหลีกเลี่ยงการ underrun การค้างไว้โดยทั่วไปจะอยู่ในช่วง 15-30ms แต่อาจนานกว่านั้นมาก ไม่ชัดเจนว่าการถือครองอยู่ในเคอร์เนลทั้งหมดหรืออาจเกี่ยวข้องกับการกำหนดตารางเวลาของกระบวนการผู้ใช้ที่รันด้วยลำดับความสำคัญตามเวลาจริง (SCHED_RR, 2)
ฉันเดาว่ามีไดรเวอร์ (อย่างน้อยหนึ่ง) ที่ไม่เล่นได้ดีกับการจอง
เอาต์พุต strace บางตัวจากกระบวนการผู้ใช้แสดงให้เห็นถึงลักษณะบางอย่างของพฤติกรรมปกติและผิดปกติบางอย่างแม้ว่าฉันจะไม่แน่ใจว่าจะตีความรายงานเวลาต่าง ๆ ได้อย่างไร
กรณีปกติ:
0.000518 แบบสำรวจ ([{fd = 10, เหตุการณ์ = POLLIN | POLLERR | POLLNVAL, revents = POLLIN}], 1, 3415) = 1 0.010202 แบบสำรวจ ([{fd = 10, เหตุการณ์ = POLLIN | POLLERR | POLLNVAL}, {fd = 6, เหตุการณ์ = POLLOUT | POLLERR | POLLNVAL, revents = POLLOUT}], 2, 3404) = 1 0.000585 แบบสำรวจ ([{fd = 10, เหตุการณ์ = POLLIN | POLLERR | POLLNVAL}, {fd = 6, เหตุการณ์ = POLLOUT | POLLERR | POLLNVAL, revents = POLLOUT}], 2, 3404) = 1 0.000302 แบบสำรวจ ([{fd = 10, เหตุการณ์ = POLLIN | POLLERR | POLLNVAL, revents = POLLIN}], 1, 3404) = 1 0.010706 แบบสำรวจ ([{fd = 10, เหตุการณ์ = POLLIN | POLLERR | POLLNVAL}, {fd = 6, เหตุการณ์ = POLLOUT | POLLERR | POLLNVAL, revents = POLLOUT}], 2, 3393) = 1 0.000480 แบบสำรวจ ([{fd = 10, เหตุการณ์ = POLLIN | POLLERR | POLLNVAL}, {fd = 6, เหตุการณ์ = POLLOUT | POLLERR | POLLNVAL, revents = POLLOUT}], 2, 3392) = 1
ไม่มีการบล็อกเกิดขึ้นในการสำรวจความคิดเห็นสำหรับเอาต์พุตใน fd6 และเมื่อมีการโพลล์เฉพาะ fd10 สำหรับการป้อนข้อมูลจะมีการบล็อกประมาณ 10ms สิ่งนี้สะท้อนให้เห็นทั้งในรายงานระยะเวลาของการเรียกใช้ระบบและช่วงเวลาระหว่างการเรียกใช้ระบบ (สอดคล้องกัน)
กรณีที่ล้มเหลว (ตัวอย่างสุดขีด):
0.000305 แบบสำรวจ ([{fd = 10, เหตุการณ์ = POLLIN | POLLERR | POLLNVAL, revents = POLLIN}], 1, 3543) = 1 การสำรวจความคิดเห็น 0.010730 ([{fd = 10, เหตุการณ์ = POLLIN | POLLERR | POLLNVAL}, {fd = 6, เหตุการณ์ = POLLOUT | POLLERR | POLLNVAL, revents = POLLOUT}], 2, 3533) = 1 0.000475 แบบสำรวจ ([{fd = 10, เหตุการณ์ = POLLIN | POLLERR | POLLNVAL}, {fd = 6, เหตุการณ์ = POLLOUT | POLLERR | POLLNVAL, revents = POLLOUT}], 2, 3532) = 1 0.000329 แบบสำรวจ ([{fd = 10, เหตุการณ์ = POLLIN | POLLERR | POLLNVAL, revents = POLLIN}], 1, 3532) = 1 0.953349 แบบสำรวจ ([{fd = 10, เหตุการณ์ = POLLIN | POLLERR | POLLNVAL}, {fd = 6, เหตุการณ์ = POLLOUT | POLLERR | POLLNVAL, revents = POLLOUT | POLLERR}], 2, 2578) = 1
โปรดสังเกตในกรณีนี้ว่าแม้ว่าการโทรครั้งที่สองจะถูกบันทึกว่าใช้เวลา 10ms (ปกติ) แต่ก็เป็น 953ms ก่อนการโทรครั้งสุดท้าย
ฉันสามารถใช้เครื่องมือใดในการติดตามผู้กระทำผิด