SD 카드 쓰기 속도 향상

SD 카드 쓰기 속도 향상

저는 Linux 2.6을 실행하는 ARM 머신을 사용하고 있습니다(불행히도 저는 이 커널 버전을 사용해 왔습니다). 이 상자는 SD 카드에서 부팅되며 저장을 위해 보조 SD 카드를 사용합니다. 상자에는 약 256MB의 메모리가 있습니다.

두 SD 카드 모두 dm-crypt로 암호화되어 있는데, 디스크 암호화를 구현하기 전까지는 성능이 매우 나빴기 때문에 이것이 읽기/쓰기 성능에 큰 영향을 미치지는 않을 것 같습니다. 이를 백업할 정확한 숫자는 없지만, 예를 들어 dm-crypt를 사용하지 않고 SD 카드에 1GB를 쓰는 데 1시간 이상이 걸립니다.

일반적인 사용에서는 읽기 및 쓰기 속도가 충분합니다. 그러나 소스 코드에서 소프트웨어를 구축하는 것과 같은 특정 작업은 한 번에 몇 분 동안 I/O 작업을 잠그는 경향이 있습니다. 특히 쓰기 작업은 장기 차단 작업이라고 생각합니다. 나는 마침내 유용한 정보를 제공하는 도구 iostat를 발견했습니다.

프로그램(예: 구성 스크립트)이 차단되었을 때 실행할 수 있습니다 watch iostat. Blk_wrtn 필드를 관찰하면 잠금을 유발하는 병목 현상이 쓰기 작업인 것으로 확인됩니다. 구체적으로, 차단 쓰기 작업 중에 dm-1 장치(두 번째 SD 카드의 잠금 해제된 파티션)는 N 블록을 쓰고 mmcblk1(두 번째 SD 카드)은 M 블록을 씁니다. 여기서 M < N입니다. M은 다음과 같이 증가합니다. 최종적으로 N과 같아질 때까지 시간이 흐르고, 이 시점에서 쓰기 작업이 완료되고 프로그램이 계속됩니다. 이 글을 쓰는 시점에서 mmcblk1 및 dm-1의 Blks_wrtn/s는 약 10입니다.

나는 이 관찰을 통해 블록이 dm-1 의사 장치에 즉시 기록된 다음 물리적 디스크에 플러시된다는 결론을 내렸습니다. 이 플러시 작업은 예상보다 오래 걸립니다.

다음은 SD 카드 쓰기 성능을 향상시키기 위해 시도/고려한 옵션입니다.

  1. 더 나은 드라이버/성능을 갖춘 최신 커널로 업그레이드: 최신 커널을 갖고 싶지만 우리는 제조업체가 제공하는 것을 고수하고 있습니다. 나는 아직도 최신 커널을 사용할 수 있는지 알아내려고 노력 중입니다.
  2. SD 카드에 대해 다른 IO 스케줄러 사용: 눈에 띄는 성능 차이 없이 데드라인, CFQ 및 noop 간 전환을 시도했습니다.
  3. 더 높은 등급의 SD 카드를 사용하세요. 실제로 제조사에서 제공하는 SD 카드의 등급이 무엇인지는 잘 모르겠지만, 동일한 성능을 지닌 4등급 SD 카드를 대신 사용해 보았습니다. SD 카드 자체가 병목 현상이라고 생각하지 않습니다. 리더 자체가 병목 현상일 수도 있지만 이를 확인하는 방법을 모르겠습니다.
  4. SD 카드에서 다른 파일 시스템 사용: 현재 Ext4를 사용하고 있습니다. 파일 시스템이 다르면 큰 차이가 있습니까?

SD 카드 쓰기 속도를 높이는 방법이 있나요?

답변1

사용 가능한 RAM이 충분하면 RAM에서 /tmp를 실행할 수 있습니다.

컴파일 타임이나 /tmp에서 임시 소켓을 사용하는 데몬을 사용할 때 성능이 향상됩니다.

또 다른 전략은 syslog에 전혀 로그를 기록하지 않도록 지시하거나(가장 좋은 아이디어는 아님) 로그를 원격 서버로 보내도록 지시하는 것입니다. 가능한 디스크 기반 데이터베이스의 경우에도 마찬가지입니다.

또한 syslog 데몬 및 구성에 따라 로그 파일에 주의하세요. 여러 syslog 파일에 한 줄을 쓰면 해당 파일의 fsync가 트리거/강제될 수 있습니다.

불필요한 데몬이 있는지, RAM이 부족한지 확인하세요. 예를 들어 필요하지 않을 때 웹 서버를 중지하면 도움이 될 수 있습니다.

카드의 경우 클래스 10 카드를 사용할 수 있을 정도로 가격이 떨어졌습니다.

관련 정보