SD 카드가 왜 느립니까?


23

SD 카드가 느리게 작동하는 것 같습니다. ADATA 16GB SDHC 클래스 10 카드가 있습니다. 비슷한 사양의 카드가 나열된 호환성 목록 을 확인했으며 "작동 중"이라고 나와 있습니다. 작은 디렉토리에 디렉토리 목록을 가져 오는 것과 같은 간단한 작업조차도 처음 요청할 때 몇 초가 걸릴 수 있습니다. SD 카드에서 어떤 종류의 성능을 얻었는지 확인할 수있는 도구가 있습니까? 또한 SD 카드의 응답 속도를 높이기 위해 구성을 변경할 수 있습니까?

Raspberry Pi를 헤드리스 BitTorrent 시드 박스로 사용하고 있으므로 내가 실행하는 모든 것은 명령 줄에서 실행됩니다. 사용 가능한 최대 메모리 양을 확보하기 위해 240/16 분할을 사용하고 있습니다.

업데이트

@Krzysztof Adamski가 "dd"로 권장하는 테스트를 실행 한 후 읽기 속도가 20MB / s이고 쓰기 속도가 약 10MB / s 인 좋은 결과를 얻었습니다. 그러나 여전히 일부 I / O 속도 문제가있는 것 같습니다. 테스트 할 때 백그라운드에서 "dd"명령을 실행하고 진행 상황을 확인하기 위해 실행했습니다. "mmcqd"프로세스가 5 %에서 10 % 사이의 상당히 많은 프로세서 사용량을 차지하고 있음을 알았습니다. 인터넷을 둘러보고 "mmcqd"가 꽤 많은 CPU를 사용한다고보고하는 사람들이 많이 발견되었습니다. 그런 다음 읽기와 쓰기를 동시에 테스트하기 위해 다음 명령을 실행했습니다.

sudo dd if=/dev/mmcblk0 of=test.dat bs=1M count=1024

이 명령을 실행할 때 처리량은 977 kB / s에 불과했으며 "mmcqd"는 5-10 초마다 10 %에서 25 % 사이의 프로세서 사용률을보고했지만 그 후에는 아무것도 반환하지 않습니다. 그래서 테스트를 더했습니다. 백그라운드에서 다음 두 가지 명령을 실행 한 다음 맨 위에있는 내용을 확인했습니다.

sudo dd if=/dev/mmcblk0 of=/dev/null bs=1M count=1024 &
sudo dd if=/dev/zero of=test.dat bs=1M count=1024 &

이 경우 "mmcqd"는 프로세서 사용률이 약 35 %에 이르지만 처리량은 약 7.5MB / s, 읽기는 약 5.3MB / s로 훨씬 우수했습니다.

많은 쓰기 작업으로 인해 "mmcqd"가 시스템을 잠그는 문제가있는 것 같습니다. 이로 인해 SD 카드를 기다리는 속도가 너무 빨라지면 전송 데몬이 거의 0으로 느려집니다. 전송 데몬을 실행할 때 "mmcqd"사용량이 상당히 높아지는 것을 볼 수 있습니다.


SD 카드에서이 문제가 발생 했습니까? 먼저 다른 카드를 사용하여 시스템의 다른 부분을 제외 할 수 있습니까?
Dawid Ferenczy Rogožan

mmc 장치와 관련된 메시지의 syslog 및 커널 로그를 확인 했습니까? 일부 카드는 라즈베리 파이에서 작동하지 않습니다. 일부는 안정적으로 작동하기 위해 약간의 조정이 필요합니다.
Joppe

SD 카드 링크 이동
ray023

1
@ Ray023 감사합니다. 링크를 업데이트했습니다. 나중에 질문을 편집 할 수 있습니다. 새롭기 때문에 수정 사항이 즉시 적용되지 않지만 원래 포스터 나 다른 고급 사용자가 승인 할 수 있도록 저장됩니다.
Kibbee

답변:


21

테스트 카드 읽기 속도 :

읽기 속도를 테스트하는 두 가지 쉬운 방법이 있습니다 (목록 디렉토리는 읽기 작업 일뿐입니다).

  • dd 명령 사용 :

    sudo dd if=/dev/mmcblk0 of=/dev/null bs=8M count=100

    SD 카드에서 800MB의 데이터를 읽고 / dev / null에 버립니다. 시간이 오래 걸리면 count = 100을 count = 10으로 변경하여 80MB 만 읽을 수 있습니다. 명령이 완료되면 읽기 속도로 메시지를 인쇄해야합니다. 최소한 몇 MB / s가 필요합니다.

  • hdparm 명령 사용 :

    sudo hdparm -t /dev/mmcblk0

    이것은 첫 번째 명령과 비슷한 속도 결과를 제공해야하며 적어도 몇 MB / s 여야합니다.

테스트 카드 쓰기 속도 :

이를 위해 쓰기 속도를 테스트하는 쉬운 방법은 없습니다. 실제로 카드에 일부 데이터를 써야합니다. 낮은 수준 (파일 시스템 생략)에서이 작업을 수행하려면 카드의 일부 데이터를 재정의해야하며이 작업을 원하지 않을 수 있습니다. 스왑 파티션이 있으면 쉽게 비활성화 ( swapoff -a)하고 dd (포함)로 테스트 dd if=/dev/zero of=/dev/{yourswappartitionnanehare} bs=8M count=25한 다음을 (를 ) 사용하여 다시 만들 수 mkswap /dev/{yourswappartitionnanehare}있습니다.

스왑 파티션이 없으면 dd 명령을 사용하여 파일 시스템 쓰기 속도를 테스트 할 수 있습니다.

dd if = / dev / zero of = / home / pi / testfile bs = 8M count = 25

에 200MB 파일이 생성됩니다 /home/pi/testfile. 원하는 다른 파일 이름을 사용할 수 있습니다.

노트:

  • 속도를 테스트하는 동안 시스템에서 다른 프로그램 (토렌트 응용 프로그램 등)이 실행되고 있지 않은지 확인하십시오.
  • 테스트 후 dmesgmmc 하위 시스템에 대한 메시지가 있는지 확인하기 위해 명령 의 출력을 확인할 수 있습니다 .
  • 최신 펌웨어가 설치되어 있는지 확인하십시오. SD 카드 속도에 관계없이 때때로 패치가 있습니다.
  • 회귀가있을 수 있으므로 이전 펌웨어를 확인하는 것이 좋습니다. 이 작업을 수행하는 가장 쉬운 방법은 다른 날짜에 빌드되는 다른 시스템 이미지를 테스트하는 것입니다 (최상은 아님). 더 어려운 방법은 github을 사용하고 펌웨어 파일의 히스토리 버전을 체크 아웃하는 것입니다.

내 칭찬. MacBook Air에서 img 파일을 클래스 6 4GB SD 카드에 쓸 때 1.4MB / sec가 발생했습니다. PI의 읽기 테스트에서 20MB / 초가보고되었습니다!?
ScrollerBlaster

나도 똑같아 내 읽기 속도는 500MB / 초와 같습니다. 뭔가 잘못 됐나요?
Darkest N2O

12

SD 카드 성능의 경우 액세스가 순차적 (dd와 같이)인지 아니면 작은 블록의 임의 액세스인지는 중요합니다. SD 카드, 특히 고급 클래스의 SD 카드는 사진이나 비디오를 저장하는 데 적합한 순차적 액세스에 최적화 된 것 같습니다. 그러나 SD 카드의 OS를 실행하려면 많은 작은 파일을 읽고 쓰기 때문에 임의 액세스가 더 중요합니다. 나는 비트 토런트가 다소 임의의 액세스를 생성한다고 생각합니다.

두 가지 토론 스레드에는 많은 SD 카드 벤치 마크 및 토론이 포함되어 있습니다. 일반적으로 랜덤 쓰기 속도는 카드의 OS를 실행하는 응답성에 결정적인 것으로 나타났습니다. 이 속도는 종종 순차 쓰기 속도보다 훨씬 낮으며, 이는 제조업체가보고하는 속도입니다. SD 카드 클래스는 순차적 인 속도를 기반으로하며 실제로 더 낮은 클래스 (4 또는 6)는 라즈베리 사용에 더 적합 할 수 있습니다.

IOzone에의 도구는 다양한 액세스 패턴의 속도를 측정합니다. 나는 라즈베리에 iozone을 컴파일하는 간단한 지침을 여기 에 게시했습니다 .


2
흥미로운 답변. 좋은데
Jivings

방금 4 배의 클래스 10을 샀는데 매우 흥미 롭습니다. :-(
BerggreenDK

@ BerggreenDK : 아마도 미래에는 다른 목적으로 카드를 사용하고 10 급 카드를 구입하게되어 기쁠 것입니다.
Neverland

1
무작위 쓰기 속도는 부팅 순서 나 디렉토리 목록과 같은 일반적인 작업에는 거의 영향을 미치지 않습니다. 토렌트의 경우에도 4KB 쓰기 테스트 결과는 관련이 없습니다. 일반적인 청크 크기는 약 1MB이며, 여유 RAM이 없으면 디스크 캐시는이를 훨씬 더 큰 순차적 쓰기로 그룹화합니다.
Dmitry Grigoryev의


0

당신은 "bittorrent"라고 쓰고 그것은 내 추측 / 응답을 유발합니다.

토렌트 프로토콜은 랜덤 시더로부터 랜덤 순서로 패키지를받습니다.

파일 시스템에서 토렌트를 사용하기 시작하면 오히려 조각화됩니다. 성능이 크게 저하 될 수 있습니다.

내가 SDCARD에 대해 알고있는 것에서 FAT / FAT32를 실행 중이며 조각화를 처리하는 데 훨씬 더 나쁩니다.

따라서 SDCARD 조각 모음을 수행하거나 모든 파일을 복사 한 다음 OS를 다시 설치하는 방법을 찾으십시오.

마지막으로, 비트 토렌트 엔진처럼 LOT를 작성하면 SDCARD가 일반적인 사용보다 더 빨리 찢어집니다. 나는 그것을하는 것이 잘못이라고 말하지 않습니다. 사실 나는 비슷한 것을 고려했습니다. 그러나-이것이 문제의 원인 일 수 있습니다.

다운로드 + "예약 된 업로드 시간"이 완료되면 다운로드 된 파일을 다른 전체 위치로 자동 전송 / 이동하는 토렌트 클라이언트가 있었으면합니다.

그러면 조각 모음이 훨씬 빨리 진행됩니다.


SD 카드에는 조각화가 어떻게 적용됩니까? 파일이 비 순차 섹터에 위치하여 파일에 액세스하기 위해 읽기 / 쓰기 헤드가 모든 위치로 이동해야하기 때문에 조각화는 디스크 회전에만 문제가 있다고 생각했습니다. SD 카드와 같은 솔리드 스테이트 스토리지에서 이는 문제가 아닙니다. 그러나 비트 토렌트에 의한 쓰기 작업 수에 대해서는 동의합니다. 나는 그것이 문제와 관련이 있다고 생각합니다. 이를 RPi의 소량의 메모리와 결합하면 (256MB의 디스크) 느린 디스크 액세스를위한 레시피 인 것 같습니다. 또한 SD 카드는 일반적으로 느립니다.
Kibbee 2013

FAT / FAT32 구조는 파일 조각이 많으면 나쁘고 느립니다. 그리고 작은 라즈베리는 움직일 힘이 너무 없습니다. 따라서 방해가되는 것은 속도를 늦 춥니 다. 그러나 다시, 그것은 단지 내 추측입니다. 나는 이것에 대한 사실이 없다.
BerggreenDK

1
RPi는 FAT / FAT32조차 사용하지 않습니다. 파일 시스템은 EXT4입니다.
Kibbee

3
비트 토 런트는 아마도 무작위 순서로 작은 조각으로 파일에 데이터를 기록한다는 점에서 좋은 지적이 있습니다. 이 유형의 랜덤 쓰기는 SD 카드에서 매우 비효율적입니다. 그러나 조각 모음이 도움이 될 것이라고 생각하지 않습니다. 실제로 FAT는 Pi에서 사용되지만 부팅 파티션에만 사용됩니다.
Frepa

1
@Kibbee : SD 카드에 왜 자체 조각화 문제가 있는지 이해하려면 raspberrypi.stackexchange.com/questions/8850/… 에서 내 답변을 참조하십시오 . 물리적 디스크 조각화 (예 : 사전 할당 파일과 같은)를 피하는 많은 소프트웨어 기술은 데이터를 할당 할 때가 아니라 데이터를 쓸 때 섹터가 배치 (또는 이동)되기 때문에 SD 카드에서는 쓸모가 없습니다.
supercat
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.