На моей встроенной системе я записываю интенсивный видеопоток на SD. Я не монтирую разделы, просто пишу на /dev/mmcblk0p1
. Через некоторое время мой процесс записи зависает. Я получаю
[16952.240000] INFO: task vrec:1297 blocked for more than 120 seconds.
[mmcqd]
съедает 90% и dmesg мне показывает
[64142.350000] mmc0: starting CMD13 arg e6240000 flags 00000015
[64142.350000] mmc0: req done (CMD13): 0: 00000c00 00000000 00000000 00000000
[64142.350000] mmc0: starting CMD13 arg e6240000 flags 00000015
[64142.350000] mmc0: req done (CMD13): 0: 00000c00 00000000 00000000 00000000
[64142.350000] mmc0: starting CMD13 arg e6240000 flags 00000015
[64142.350000] mmc0: req done (CMD13): 0: 00000c00 00000000 00000000 00000000
[64142.350000] mmc0: starting CMD13 arg e6240000 flags 00000015
[64142.350000] mmc0: req done (CMD13): 0: 00000c00 00000000 00000000 00000000
[64142.350000] mmc0: starting CMD13 arg e6240000 flags 00000015
[64142.350000] mmc0: req done (CMD13): 0: 00000c00 00000000 00000000 00000000
После извлечения/вставки карты все работает нормально. Помогите, пожалуйста, отладить.
Ядро Linux: 2.6.28.9
решение1
mmcqd
— это процесс ядра, отвечающий за очередь ввода-вывода. Если вы получаете высокое потребление ресурсов из-за этого, это означает, что ваша SD-карта слишком медленная для вашего видеопотока.
В таких случаях вам действительно нужна карта SD класса 10 или карта UHS, предназначенная для потокового видео. Причина, по которой система отвечает после извлечения/вставки, заключается в том, что очередь очищена.