내 임베디드 시스템에서는 밀도가 높은 비디오 스트림을 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
카드를 꺼내거나 삽입한 후에는 모든 것이 잘 작동합니다. 디버깅을 도와주세요.
리눅스 커널: 2.6.28.9
답변1
mmcqd
I/O 대기열을 담당하는 커널 프로세스입니다. 이로 인해 리소스 사용량이 높아지면 SD 카드가 비디오 스트리밍에 너무 느린 것입니다.
이 경우 비디오 스트리밍용으로 설계된 클래스 10 SD 카드나 UHS 카드가 꼭 필요합니다. 팝/삽입 후에 시스템이 응답하는 이유는 큐가 지워졌기 때문입니다.