느린 USB 3 쓰기 속도

느린 USB 3 쓰기 속도

Linux에서 USB 3 썸 드라이브(SanDisk Extreme SDCZ80-064G-FFP)에 쓰는 작업이 매우 느립니다. 1GB는 200초보다 오래 걸립니다. Windows(동일 컴퓨터에서 이중 부팅)를 사용하면 동일한 1GB 파일을 약 8초 안에 복사할 수 있습니다. 스틱은 FAT로 포맷되어 있고(미리 포맷되어 와서 변경하지 않았습니다) Windows에서도 사용하고 있기 때문에 이 방식으로 유지하고 싶습니다.

어떻게 해결할 수 있나요? 이 문제의 원인을 진단하려면 어떤 단계를 수행해야 합니까?

저는 커널 버전 4.5.4-1로 Manjaro/Arch를 실행하고 있습니다.

편집하다: 우선, 드라이브를 -o big_writes. 실수해서 미안해요!

의견에 언급된 명령의 출력을 추가하고 있습니다. 나는 이들 중 어느 것에도 문제가 없다고 생각합니다.

journalctl -f드라이브를 연결하고 마운트하고 일부 데이터를 쓸 때 의 출력 :

Mai 23 20:32:37 manjaro kernel: usb 2-6: USB disconnect, device number 7
Mai 23 20:32:39 manjaro dbus[608]: [system] Activating via systemd: service name='org.freedesktop.Avahi' unit='dbus-org.freedesktop.Avahi.service'
Mai 23 20:32:39 manjaro dbus[608]: [system] Activation via systemd failed for unit 'dbus-org.freedesktop.Avahi.service': Unit dbus-org.freedesktop.Avahi.service not found.
Mai 23 20:32:41 manjaro kernel: usb 2-6: new SuperSpeed USB device number 8 using xhci_hcd
Mai 23 20:32:41 manjaro kernel: usb-storage 2-6:1.0: USB Mass Storage device detected
Mai 23 20:32:41 manjaro kernel: scsi host12: usb-storage 2-6:1.0
Mai 23 20:32:41 manjaro mtp-probe[3627]: checking bus 2, device 8: "/sys/devices/pci0000:00/0000:00:14.0/usb2/2-6"
Mai 23 20:32:41 manjaro mtp-probe[3627]: bus: 2, device: 8 was not an MTP device
Mai 23 20:32:42 manjaro kernel: scsi 12:0:0:0: Direct-Access     SanDisk  Extreme          0001 PQ: 0 ANSI: 6
Mai 23 20:32:42 manjaro kernel: sd 12:0:0:0: [sdc] 122544516 512-byte logical blocks: (62.7 GB/58.4 GiB)
Mai 23 20:32:42 manjaro kernel: sd 12:0:0:0: [sdc] Write Protect is off
Mai 23 20:32:42 manjaro kernel: sd 12:0:0:0: [sdc] Mode Sense: 53 00 00 08
Mai 23 20:32:42 manjaro kernel: sd 12:0:0:0: [sdc] Write cache: disabled, read cache: enabled, doesn't support DPO or FUA
Mai 23 20:32:42 manjaro kernel:  sdc: sdc1
Mai 23 20:32:42 manjaro kernel: sd 12:0:0:0: [sdc] Attached SCSI removable disk
Mai 23 20:32:43 manjaro dbus[608]: [system] Activating via systemd: service name='org.freedesktop.Avahi' unit='dbus-org.freedesktop.Avahi.service'
Mai 23 20:32:43 manjaro dbus[608]: [system] Activation via systemd failed for unit 'dbus-org.freedesktop.Avahi.service': Unit dbus-org.freedesktop.Avahi.service not found.
Mai 23 20:32:52 manjaro sudo[3667]: user : TTY=pts/1 ; PWD=/home/user ; USER=root ; COMMAND=/usr/bin/mount /dev/sdc1 /mnt/
Mai 23 20:32:52 manjaro sudo[3667]: pam_unix(sudo:session): session opened for user root by (uid=0)
Mai 23 20:32:52 manjaro sudo[3667]: pam_unix(sudo:session): session closed for user root
Mai 23 20:33:11 manjaro sudo[3676]: user : TTY=pts/1 ; PWD=/home/user ; USER=root ; COMMAND=/usr/bin/dd bs=1M count=1024 if=/dev/zero of=/mnt/test conv=fdatasync status=progress
Mai 23 20:33:11 manjaro sudo[3676]: pam_unix(sudo:session): session opened for user root by (uid=0)
Mai 23 20:35:01 manjaro anacron[2235]: Job `cron.daily' started
Mai 23 20:35:03 manjaro anacron[2235]: Job `cron.daily' terminated
Mai 23 20:35:45 manjaro sudo[3676]: pam_unix(sudo:session): session closed for user root

출력 dmesg:

[ 2507.302345] usb 2-6: new SuperSpeed USB device number 8 using xhci_hcd
[ 2507.317395] usb-storage 2-6:1.0: USB Mass Storage device detected
[ 2507.317758] scsi host12: usb-storage 2-6:1.0
[ 2508.319922] scsi 12:0:0:0: Direct-Access     SanDisk  Extreme          0001 PQ: 0 ANSI: 6
[ 2508.333123] sd 12:0:0:0: [sdc] 122544516 512-byte logical blocks: (62.7 GB/58.4 GiB)
[ 2508.333353] sd 12:0:0:0: [sdc] Write Protect is off
[ 2508.333362] sd 12:0:0:0: [sdc] Mode Sense: 53 00 00 08
[ 2508.333634] sd 12:0:0:0: [sdc] Write cache: disabled, read cache: enabled, doesn't support DPO or FUA
[ 2508.346488]  sdc: sdc1
[ 2508.347918] sd 12:0:0:0: [sdc] Attached SCSI removable disk

마운트 및 쓰기에 사용되는 명령:

$ sudo mount /dev/sdc1 /mnt/
$ sudo dd bs=1M count=1024 if=/dev/zero of=/mnt/test conv=fdatasync status=progress
1024+0 records in
1024+0 records out
1073741824 bytes (1,1 GB, 1,0 GiB) copied, 154,158 s, 7,0 MB/s

출력 lsusb -t:

/:  Bus 04.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/2p, 5000M
/:  Bus 03.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/2p, 480M
/:  Bus 02.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/10p, 5000M
    |__ Port 6: Dev 8, If 0, Class=Mass Storage, Driver=usb-storage, 5000M
/:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/16p, 480M
    |__ Port 9: Dev 2, If 0, Class=Human Interface Device, Driver=usbhid, 1.5M
    |__ Port 10: Dev 3, If 0, Class=Human Interface Device, Driver=usbhid, 1.5M
    |__ Port 10: Dev 3, If 1, Class=Human Interface Device, Driver=usbhid, 1.5M

편집 2:나는 4.4.11과 4.6.0이라는 두 개의 다른 커널을 사용해 보았습니다. 두 가지 모두 쓰기 속도가 여전히 느립니다. 또한 외부 USB 3 하드 디스크의 전송 속도가 더 빠르기 때문에(90MB/s) 문제가 드라이브와 관련된 것 같습니다.

편집 3:Ubuntu 16.04 Live System에서 벤치마킹을 수행했습니다. 결과는 훨씬 더 좋습니다(아직 좋지는 않지만).

ubuntu@ubuntu:/media/ubuntu/274D-D62C$ dd bs=1M count=1024 if=/dev/zero of=./test conv=fdatasync status=progress
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 12.2623 s, 87.6 MB/s
ubuntu@ubuntu:/media/ubuntu/274D-D62C$ dd bs=1M count=1024 if=/dev/zero of=./test conv=fdatasync status=progress
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 64.5742 s, 16.6 MB/s
ubuntu@ubuntu:/media/ubuntu/274D-D62C$ dd bs=1M count=1024 if=/dev/zero of=./test conv=fdatasync status=progress
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 83.6521 s, 12.8 MB/s
ubuntu@ubuntu:/media/ubuntu/274D-D62C$ dd bs=1M count=1024 if=/dev/zero of=./test conv=fdatasync status=progress
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 21.842 s, 49.2 MB/s
ubuntu@ubuntu:/media/ubuntu/274D-D62C$ dd bs=1M count=1024 if=/dev/zero of=./test conv=fdatasync status=progress
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 16.3149 s, 65.8 MB/s

편집 4:최근 Arch/Manjaro 커널(4.11.1)을 사용하여 한 번 더 시도했는데 결과가 조금 더 좋아졌습니다. 전송 속도는 약 10MB/s(1GB의 경우 ~100초)입니다. 그러나 이는 여전히 Windows보다 훨씬 느립니다.

편집 5:마침내 이 문제를 다시 다룰 시간을 찾았습니다. 현재 Manjaro 커널을 실행하면 Linux janmanjaro 5.4.74-1-MANJARO #1 SMP PREEMPT Sun Nov 1 13:43:13 UTC 2020 x86_64 GNU/Linux15 - 30MB/s(보통 15MB/s에 가까움)를 얻습니다. 다음을 사용하여 장착 sudo mount -o async,flush /dev/sdc1 /mnt/(제안된 대로)Linux에서 USB FAT32 드라이브에 쓸 때 속도가 매우 느림) 속도가 약 5MB/s 향상됩니다. 이것은 Windows보다 엄청나게 느리고 Ubuntu보다 훨씬 느립니다.

또한 sudo fio --name TEST --eta-newline=5s --filename=test.img --rw=randrw --size=500m --io_size=10g --blocksize=4k --ioengine=libaio --iodepth=1 --direct=1 --numjobs=1 --runtime=60 --group_reportin@Mikko Rantalainen의 제안에 따라 실행했습니다. 결과는 다음과 같습니다.

Run status group 0 (all jobs):
   READ: bw=3444KiB/s (3527kB/s), 3444KiB/s-3444KiB/s (3527kB/s-3527kB/s), io=202MiB (212MB), run=60001-60001msec
   WRITE: bw=3432KiB/s (3514kB/s), 3432KiB/s-3432KiB/s (3514kB/s-3514kB/s), io=201MiB (211MB), run=60001-60001msec

아직 우분투에서는 이것을 실행하지 않았습니다.

답변1

FAT가 정말 필요한가요? 내 경험에 따르면 FAT 드라이버의 Linux 구현은 일부 장치의 성능이 매우 저하되는 시퀀스로 장치에 액세스하는 것 같습니다. 대신 ext4로 포맷하면 일부 플래시 장치의 성능이 10배 향상되는 것을 확인했습니다.

댓글에 제공한 링크를 고려하면(http://www.beginninglinux.com/home/machine-관련/sandisk-extreme-64-usb-3-speed-test-benchmark-review)가 파티션 없이 읽기 및 쓰기 속도를 테스트했는데, Linux FAT 드라이버로 액세스할 때 플래시 장치의 성능이 저하될 수 있습니다. 그것이 사실이라면 일반적으로 무작위 IO 성능도 좋지 않을 것입니다.


를 사용하여 장치 성능을 테스트할 수 있습니다 fio. 테스트하려는 장치 내부의 일부 디렉터리로 변경하고 다음 명령을 실행하여 혼합된 무작위 4k 읽기/쓰기 성능으로 성능을 테스트합니다.

fio --name TEST --eta-newline=5s --filename=test.img --rw=randrw --size=500m --io_size=10g --blocksize=4k --ioengine=libaio --iodepth=1 --direct=1 --numjobs=1 --runtime=60 --group_reporting

그러면 호출된 500MB 테스트 파일이 생성된 test.img다음 대기열 깊이가 1인 임의의 4KB 블록에서 읽고 쓰기 시작합니다. size장치에 대용량 내부 캐시가 있는 경우 이 파일을 늘리십시오. 이 테스트의 최대 실행 시간은 60초입니다. 이것이 장치의 최악의 시나리오라고 생각하십시오. 매우 빠른 플래시 장치(Intel SSD 910)는 다음과 같은 결과를 얻습니다.

...
read : io=1041.4MB, bw=17773KB/s, iops=4443, runt= 60001msec
...
write: io=1038.5MB, bw=17723KB/s, iops=4430, runt= 60001msec
...

최상의 사례를 테스트하려면 블록 크기를 늘리고 iolength=32를 사용하여 2개의 병렬 프로세스를 수행할 수 있습니다.

fio --name TEST --eta-newline=5s --filename=test.img --rw=randrw --size=500m --io_size=10g --blocksize=512k --ioengine=libaio --iodepth=32 --direct=1 --numjobs=2 --runtime=60 --group_reporting

매우 빠른 플래시 장치(Intel SSD 910)는 다음과 같은 결과를 얻습니다.

...
read : io=10892MB, bw=457088KB/s, iops=892, runt= 24401msec
...
write: io=9588.0MB, bw=402365KB/s, iops=785, runt= 24401msec
...

물론, 정말로 높은 점수를 원한다면 높은 io뎁스로 순차 읽기를 해야 합니다. 이는 장치 사양 시트에 표시되는 숫자와 비슷해야 합니다(즉, 실제 생활에서는 볼 수 없음).

fio --name TEST --eta-newline=5s --filename=test.img --rw=read --size=500m --io_size=10g --blocksize=512k --ioengine=libaio --iodepth=32 --direct=1 --numjobs=1 --runtime=60 --group_reporting

매우 빠른 플래시 장치(Intel SSD 910)는 다음과 같은 결과를 얻습니다.

...
read : io=10240MB, bw=1468.8MB/s, iops=2937, runt=  6972msec
...

I/O 스케줄러를 가능한 가장 낮은 대기 시간( 및 deadlineI/O 스케줄러로 ) 구성했기 때문에 이는 사양 시트(약 2GB/s)에 비해 부족합니다 .1 > ../queue/iosched/fifo_batch50 > ../queue/iosched/read_expire

최악의 시나리오(약 17MB/s)와 최상의 시나리오(약 1470MB/s) 사이에는 큰 차이가 있습니다.

답변2

더 나은 답변이 없기 때문에 귀하의 값이 일반적으로 플래시 드라이브에 대해 매우 좋으며 특정 플래시 드라이브에 대해 예상되는 범위 내에 있다는 점을 말씀드리고 싶었습니다.

190MB/s 쓰기 속도와 같은 마케팅 값은 일반적으로 지속 가능하지 않으며(내부 버퍼가 채워질 때까지 최대 몇 초 동안 유효하며 실제 플래시 성능을 반영하지 않음) 순차 쓰기에만 적용됩니다. 파일 시스템이 포함되면 속도가 상당히 저하됩니다. 무작위 액세스 쓰기 속도는 고급 고속 USB 드라이브에서도 1MB/s 미만인 경우가 많으므로 파일 시스템에서 일반적으로 요구하는 몇 번의 무작위 쓰기만으로도 쓰기 성능이 저하될 수 있습니다.

무작위 쓰기를 줄이는 데 효과적인 f2fs(4.4 이상의 커널 권장)와 같은 플래시 친화적인 파일 시스템을 사용하여 도움이 되는지 확인할 수 있습니다.

답변3

나는 여기서 당신에게 희망의 작은 조각을 제공할 것입니다. 저는 UHS-II SD 카드와 USB 리더를 보고 있으며 Ubuntu "디스크" 애플릿 벤치마킹 탭에서 다음을 관찰합니다.

  • 우분투 14.04 - 커널 4.4 - 읽기 ~140MB/s, 쓰기 ~50MB/s
  • Ubuntu 17.04 - 커널 4.10 - 읽기 ~270MB/s 쓰기 ~200MB/s

이들은 전통적인 "USB 대용량 저장 장치 드라이버"를 사용합니다. 대용량 저장 장치 드라이버를 가속화하는 이 두 지점 사이의 커널에서 뭔가가 변경되었습니다.

일반적인 의견 재벤치마킹이 적용되지만 우리 내부 애플리케이션은 벤치마킹된 시간보다 약 10% 더 빠르므로 많은 사용 사례를 꽤 잘 나타냅니다.

USB 외장 하드 디스크는 실제로 일반 대용량 저장 장치 드라이버에 대한 대체 드라이버를 사용할 수 있으므로 항상 직접 비교할 수는 없습니다.

답변4

나는 이것이 약간 오래된 것이라는 것을 알고 있지만

저는 USB 3을 통해 우분투 서버 20.04를 12T Seagate 확장 드라이브에 극단적으로 백업하는 것에 좌절했습니다. 전송 속도는 킬로바이트 단위로 보고되는 경우가 많았습니다. 매 20초마다 모든 것이 10~15초 동안 정지됩니다. 일종의 캐시 쓰기인 것 같습니다.

솔루션? 나는 최근 몇 달 동안 NTFS 형식을 ext4로 변경, 캐시 설정 변경, 케이블 변경 등을 포함하여 웹에서 몇 가지 이상을 시도했습니다. 영향을 받았다면 분명히 거기에 가본 적이 있을 것입니다. 아무것도 도움이 되지 않았습니다.

어제 나는 케이스에서 HDD를 찢었습니다. 바라쿠다(Barracuda)라는 라벨이 붙었습니다. 디스크를 데스크탑 PC에 표시된 USB 3 도킹에 넣고 LAN을 통해 rsync 백업을 시작했습니다. Bingo - 뛰어난 연속 Xfer 속도

나는 문제가 Linux가 아니라 Seagate 확장 케이스의 컨트롤러에 있다는 결론을 내리게 되었습니다. 확장 HDD가 Windows 10에 연결되었을 때 성능이 좋다는 것은 Windows 10에 최적화되어 있을 수도 있음을 시사합니다.

이제 도킹 스테이션을 Ubuntu 서버의 USB 3 포트로 옮겼으며 현재 ~50MB/s의 속도로 백업되고 있습니다.

나는 그것으로 살 수 있습니다.

관련 정보