Chúng tôi có một lỗi thực sự kỳ lạ khi hệ điều hành Yocto chạy trên Raspberry Pi sẽ bị 'khóa' do chờ đĩa IO.
Kịch bản:
- hệ điều hành chạy chỉ đọc và không có trao đổi
- có một hệ thống tệp tmpfs cho những thứ mà hệ điều hành cần ghi vào (/ var, / log, v.v.)
- tmpfs có mặc định là một nửa trong số 2GB RAM khả dụng
- có một ổ cứng USB được kết nối để lưu trữ các tệp MP4 lớn
Sau một thời gian chạy chương trình Python tương tác với bộ tăng tốc Google Coral USB, đầu ra của hàng đầu
Là:
Vì vậy, tải CPU lớn nhưng mức sử dụng CPU thấp. Chúng tôi tin rằng điều này là do nó đang đợi IO vào đĩa cứng USB.
Những lần khác, chúng ta sẽ thấy mức sử dụng bộ đệm cao hơn nữa:
Mem: 1622744K đã sử dụng, 289184K miễn phí, 93712K shrd, 32848K buff, 1158916K cache
CPU: 0% usr 0% sys 0% nic 24% nhàn rỗi 74% io 0% irq 0% sirq
Tải trung bình: 5,00 4,98 4,27 1/251 2645
Hệ thống tập tin trông khá bình thường:
root@ifu-14:~# df -h
Kích thước hệ thống tệp được sử dụng Có sẵn Sử dụng % Được gắn trên
/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%/lần chạy
tmpfs 933,6 triệu 0 933,6 triệu 0% /sys/fs/cgroup
tmpfs 933,6 triệu 48,6 triệu 884,9 triệu 5% /etc/machine-id
tmpfs 933,6M 1,5M 932,0M 0%/tmp
tmpfs 933,6M 41,3M 892,3M 4%/var/dễ bay hơi
tmpfs 933,6M 41,3M 892,3M 4%/var/ống chỉ
tmpfs 933,6M 41,3M 892,3M 4%/var/lib
tmpfs 933,6M 41,3M 892,3M 4%/var/bộ đệm
/dev/mmcblk0p1 39,9 triệu 28,0 triệu 11,9 triệu 70% /uboot
/dev/mmcblk0p4 968,3M 3,3M 899,0M 0%/dữ liệu
/dev/mmcblk0p4 968,3M 3,3M 899,0M 0% /etc/hostname
/dev/mmcblk0p4 968,3M 3,3M 899,0M 0% /etc/NetworkManager
/dev/sda1 915,9G 30,9G 838,4G 4%/mnt/sda1
Khi tất cả 'khóa', chúng tôi nhận thấy rằng ổ cứng USB vì hoàn toàn không phản hồi (ls
không làm gì cả và chỉ đóng băng).
Trong nhật ký dmesg, chúng tôi đã nhận thấy các dòng sau (được dán dưới dạng hình ảnh để giữ màu):
Đây là đầu ra đầy đủ của dmesg sau khi chúng tôi bắt đầu gặp các lỗi sau:
https://Pastebin.com/W7k4cp35
Chúng tôi phỏng đoán rằng khi phần mềm chạy trên hệ thống cố gắng thực hiện điều gì đó với một tệp lớn (50MB +) (di chuyển tệp đó trên ổ cứng USB), bằng cách nào đó hệ thống sắp hết bộ nhớ.
Chúng tôi thực sự không chắc làm thế quái nào mà chúng tôi tiến hành được. Chúng tôi tìm thấy blog này: https://www.blackmoreops.com/2014/09/22/linux-kernel-panic-issue-fix-hung_task_timeout_secs-blocked-120-seconds-problem/ loại nào có vẻ giống như cùng một vấn đề và đề xuất sửa đổi vm.dirty_ratio
và vm.dirty_background_ratio
để xóa bộ đệm vào đĩa thường xuyên hơn.
Đó có phải là cách tiếp cận đúng không?
Các cài đặt hiện tại là vm.dirty_ratio = 20
và vm.dirty_background_ratio = 10
Ổ cứng USB tương đối chậm có thể yêu cầu thay đổi điều này không? Ai đó có thể giải thích những gì đang xảy ra?