Рейтинг:0

Понимание отношений buff/cache и tmpfs в файловой системе только для чтения без свопа

флаг ru

У нас действительно странная ошибка, из-за которой операционная система Yocto, работающая на Raspberry Pi, «зависает» из-за ожидания дискового ввода-вывода.

Сценарий:

  • операционная система работает только для чтения и не имеет свопа
  • существует файловая система tmpfs для вещей, которые должна записывать ОС (/var, /log и т.д.)
  • tmpfs по умолчанию имеет половину доступных 2 ГБ ОЗУ.
  • подключен жесткий диск USB для хранения больших файлов MP4

Через некоторое время после запуска программы Python, взаимодействующей с USB-ускорителем Google Coral, вывод вершина является:

вывод верхней команды

Таким образом, нагрузка на ЦП огромна, но загрузка ЦП низкая. Мы считаем, что это связано с ожиданием ввода-вывода на жесткий диск USB.

В других случаях мы увидим еще более высокое использование кеша:

Мем: 1622744 КБ использовано, 289184 КБ свободно, 93712 КБ уничтожено, 32848 КБ усилено, 1158916 КБ кэшировано
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,6 млн 48,6 млн 884,9 млн 5% /запуск
tmpfs 933,6M 0 933,6M 0% /sys/fs/cgroup
tmpfs 933.6M 48.6M 884.9M 5% /etc/machine-id
tmpfs 933.6M 1.5M 932.0M 0% /tmp
tmpfs 933.6M 41.3M 892.3M 4% /var/volatile
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,9 млн 28,0 млн 11,9 млн 70% /uboot
/dev/mmcblk0p4 968,3 млн 3,3 млн 899,0 млн 0% /данные
/dev/mmcblk0p4 968,3 млн 3,3 млн 899,0 млн 0% /etc/имя хоста
/dev/mmcblk0p4 968,3 млн 3,3 млн 899,0 млн 0% /etc/NetworkManager
/dev/sda1 915.9G 30.9G 838.4G 4% /mnt/sda1

Когда все это «зависает», мы замечаем, что жесткий диск USB полностью не отвечает (лс ничего не делает и просто зависает).

В журналах dmesg мы заметили следующие строки (вставлены как изображение для сохранения цвета):

вывод dmesg

Вот полный вывод dmesg после того, как мы начали получать эти ошибки: https://pastebin.com/W7k4cp35

Мы предполагаем, что когда программное обеспечение, работающее в системе, пытается что-то сделать с большим файлом (более 50 МБ) (перемещая его на жестком диске 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 потребовать изменения этого? Может кто-нибудь объяснить, что происходит?

Рейтинг:3
флаг cn
[sda] tag#0 тайм-аут команды, ожидание 180 с
blkupdate_request: ошибка ввода/вывода, dev sda1
ИНФОРМАЦИЯ: задача jbd2/sda1 заблокирована более чем на 122 секунды.

Блочное устройство /dev/sda выходит из строя. Замените его и восстановите данные.

Предупреждения о блокировке задач в Linux — это когда задача не выполняется для пары минуты. А это вечность для компьютера, даже для системы хранения. Возникновение проблем с вводом-выводом, что не является нормальным. То ли хранилище выходит из строя, то ли нелепая конкуренция, то ли что-то сильно не хватает ресурсов. Поскольку другие сообщения содержат свидетельства ошибки ввода-вывода, первое кажется вероятным.

Если хранилище уже было заменено, возможно, эта модель медленная и не подходит для этого приложения. Попробуйте высокопроизводительный SSD, например, NVMe в адаптере USB 3 или аналогичный.

Также придумайте синтетические нагрузочные тесты, чтобы протестировать хранилище, как это делает приложение, и получить некоторые показатели производительности. Небольшие случайные записи, длинные последовательные записи, возможно, смешанные. В Linux, фио очень гибкий тестер ввода-вывода.

Наконец, возможно, что другие аппаратные компоненты выходят из строя. Будучи Raspberry Pi, попробуйте заменить все это.

Massimo avatar
флаг ng
В зависимости от размера `/dev/sda1` должен быть USB-диском (который в вопросе уже описывает зависание); либо сам диск выходит из строя, либо что-то не так с его корпусом.
флаг ru
Сегодня я попробовал три совершенно новых одинаковых диска, но завтра попробую другую марку. Странно то, что проблема появляется только тогда, когда мы запускаем программу, которая использует ускоритель Google Coral AI и немного больше памяти. Может раздор по шине USB? Без работы Google Coral проблем нет.
John Mahowald avatar
флаг cn
Некоторые неисправности проявляются только под нагрузкой. Продолжайте заменять вещи и пробовать разные модели хранения.
Рейтинг:1
флаг ru

В качестве обновления этого вопроса предыдущие ответы здесь были в значительной степени связаны с деньгами.

Проблема заключалась в том, что Raspberry Pi 4 не мог обеспечить достаточную мощность от своих портов USB для одновременного управления жестким диском USB и Google Coral в течение длительного периода времени. Через некоторое время жесткий диск USB начал вести себя очень странно, согласно приведенным выше журналам, из-за чего он выглядел так, как будто он выходит из строя.

После перехода на SSD проблема исчезла.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.