No meu sistema embarcado estou gravando um fluxo de vídeo intensivo em SD. Eu não monto partições, apenas escrevo em arquivos /dev/mmcblk0p1
. Depois de um tempo, meu processo de escrita trava. eu recebo
[16952.240000] INFO: task vrec:1297 blocked for more than 120 seconds.
[mmcqd]
come 90% e o dmesg me mostra
[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
Depois de ejetar/injetar um cartão, tudo funciona bem. Por favor, ajude-me a depurá-lo.
Kernel Linux: 2.6.28.9
Responder1
mmcqd
é um processo do kernel responsável pela fila de E/S. Se você estiver obtendo um alto uso de recursos com isso, isso significa que seu cartão SD está muito lento para o stream de vídeo.
Em casos como esse, você realmente precisa de um cartão SD classe 10 ou de um cartão UHS projetado para streaming de vídeo. A razão pela qual o sistema responde após uma ejeção/inserção é porque a fila foi limpa.