เรามีบั๊กที่แปลกมากที่ระบบปฏิบัติการ Yocto ที่ทำงานบน Raspberry Pi จะ 'ล็อค' เนื่องจากดิสก์ IO รอ
สถานการณ์:
- ระบบปฏิบัติการทำงานแบบอ่านอย่างเดียวและไม่มีการสลับ
- มีระบบไฟล์ tmpfs สำหรับสิ่งที่ OS จำเป็นต้องเขียนถึง (/var, /log ฯลฯ)
- tmpfs มีค่าเริ่มต้นเป็นครึ่งหนึ่งของ RAM 2GB ที่มีอยู่
- มีฮาร์ดไดรฟ์ USB เชื่อมต่อสำหรับจัดเก็บไฟล์ MP4 ขนาดใหญ่
หลังจากรันโปรแกรม Python โต้ตอบกับตัวเร่งความเร็ว USB ของ Google Coral ได้ระยะหนึ่ง ผลลัพธ์ของ สูงสุด
เป็น:
ดังนั้นโหลด CPU จึงมาก แต่การใช้งาน CPU ต่ำ เราเชื่อว่าเป็นเพราะกำลังรอ IO ไปยังฮาร์ดดิสก์ USB
ในบางครั้งเราจะเห็นการใช้แคชที่สูงขึ้นไปอีก:
Mem: ใช้แล้ว 1622744K, ฟรี 289184K, ทำลาย 93712K, บัฟ 32848K, แคช 1158916K
CPU: 0% usr 0% sys 0% nic 24% ว่าง 74% io 0% irq 0% sirq
โหลดเฉลี่ย: 5.00 4.98 4.27 1/251 2645
ระบบไฟล์ดูค่อนข้างปกติ:
root@ifu-14:~# df -h
ขนาดระบบไฟล์ที่ใช้ ใช้ได้ ใช้% ติดตั้ง
/dev/root 3.1G 528.1M 2.4G 18% /
devtmpfs 804.6M 4.0K 804.6M 0% /dev
tmpfs 933.6M 80.0K 933.5M 0% /dev/shm
tmpfs 933.6M 48.6M 884.9M 5% /เรียกใช้
tmpfs 933.6M 0 933.6M 0% /sys/fs/cgroup
tmpfs 933.6M 48.6M 884.9M 5% /etc/รหัสเครื่อง
tmpfs 933.6M 1.5M 932.0M 0% /tmp
tmpfs 933.6M 41.3M 892.3M 4% /var/ระเหย
tmpfs 933.6M 41.3M 892.3M 4% /var/spool
tmpfs 933.6M 41.3M 892.3M 4% /var/lib
tmpfs 933.6M 41.3M 892.3M 4% /var/แคช
/dev/mmcblk0p1 39.9M 28.0M 11.9M 70% /uboot
/dev/mmcblk0p4 968.3M 3.3M 899.0M 0% /ข้อมูล
/dev/mmcblk0p4 968.3M 3.3M 899.0M 0% /etc/ชื่อโฮสต์
/dev/mmcblk0p4 968.3M 3.3M 899.0M 0% /etc/NetworkManager
/dev/sda1 915.9G 30.9G 838.4G 4% /mnt/sda1
เมื่อทุกอย่าง 'ล็อค' เราสังเกตเห็นว่าฮาร์ดไดรฟ์ USB ไม่ตอบสนองอย่างสมบูรณ์ (ล
ไม่ทำอะไรเลยและค้าง)
ในบันทึก dmesg เราสังเกตเห็นบรรทัดต่อไปนี้ (วางเป็นภาพเพื่อรักษาสี):
นี่คือผลลัพธ์ทั้งหมดของ dmesg หลังจากที่เราเริ่มได้รับข้อผิดพลาดเหล่านี้:
https://pastebin.com/W7k4cp35
เราสันนิษฐานว่าเมื่อซอฟต์แวร์ที่ทำงานบนระบบพยายามทำบางสิ่งกับไฟล์ขนาดใหญ่ (50MB +) (ย้ายไปมาในฮาร์ดไดรฟ์ USB) ระบบมีหน่วยความจำไม่เพียงพอ
เราไม่แน่ใจจริง ๆ ว่าเราดำเนินต่อไปอย่างไรในโลกนี้ เราพบบล็อกนี้: https://www.blackmoreops.com/2014/09/22/linux-kernel-panic-issue-fix-hung_task_timeout_secs-blocked-120-seconds-problem/ แบบไหนที่ดูเหมือนปัญหาเดียวกันและแนะนำให้แก้ไข vm.dirty_ratio
และ vm.dirty_background_ratio
เพื่อล้างแคชลงดิสก์บ่อยขึ้น
นั่นเป็นแนวทางที่ถูกต้องหรือไม่?
การตั้งค่าปัจจุบันคือ vm.dirty_ratio = 20
และ vm.dirty_background_ratio = 10
ฮาร์ดไดรฟ์ USB ที่ค่อนข้างช้าจำเป็นต้องเปลี่ยนสิ่งนี้หรือไม่ ใครสามารถอธิบายสิ่งที่เกิดขึ้น?