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/초)가 빨라지므로 문제는 드라이브와 관련된 것 같습니다.

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

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(약 100초에 1GB)의 전송 속도를 얻었습니다. 그러나 이것은 여전히 ​​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-lated/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 스케줄러를 구성했기 때문에 이는 사양 시트(약 2GB/s)보다 낮습니다( deadline및 가 있는 I/O 스케줄러).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 Disk 애플릿 벤치마크 탭에서 다음을 관찰했습니다.

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

그들은 전통적인 "USB 대용량 저장 장치 드라이버"를 사용합니다. 이 두 지점 사이에 대용량 저장 장치 드라이버의 속도를 높이는 몇 가지 커널 변경 사항이 있었습니다.

재벤치마킹에 대한 일반적인 설명이 적용되지만 사내 애플리케이션이 벤치마크 시간을 약 10% 앞섰기 때문에 많은 사용 사례를 잘 나타냅니다.

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

답변4

나는 이것이 약간 구식이라는 것을 알고 있지만

USB 3을 통해 ubuntu 서버 20.04를 12T Seagate 확장 드라이브에 백업할 때 매우 좌절감을 느꼈습니다. 전송 속도는 일반적으로 킬로바이트 단위로 보고됩니다. 대략 20초마다 모든 것이 10~15초 동안 정지됩니다. 일종의 캐시된 쓰기가 의심됩니다.

해결책? 최근 몇 달 동안 NTFS 형식을 ext4로 변경, 캐시 설정 수정, 케이블 변경 등을 포함하여 네트워크에서 다양한 작업을 시도했습니다. 당신이 영향을 받았다면, 당신에게도 이런 일이 일어났을 것이라고 확신합니다. 아무것도 도움이 되지 않습니다.

어제 나는 케이스에서 하드 드라이브를 꺼냈다. 바라쿠다라는 라벨이 붙었습니다. 디스크를 데스크탑 컴퓨터의 USB 3 도킹 스테이션에 넣고 LAN을 통해 rsync 백업을 시작했습니다. 빙고 - 뛰어난 연속 전송 속도

문제는 Linux가 아닌 Seagate 확장 섀시의 컨트롤러에 있다는 결론에 도달했습니다. 확장 하드 드라이브는 Windows 10에 연결했을 때 성능이 좋았으며 이는 해당 시스템에도 최적화되었을 수 있음을 의미합니다.

이제 도크를 Ubuntu 서버의 USB 3 포트로 옮겼으며 현재 백업 속도는 약 50MB/s입니다.

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

관련 정보