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:私は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/Linux
15 - 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
まだUbuntuではこれを実行していません。
答え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
これにより、500 MB のテストファイルが生成され、次にtest.img
キューの深さが 1 のランダムな 4 KB チャンクで読み書きが開始されます。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スケジューラーを構成したため、これは仕様シート(約2 GB / s)よりも低くなります(およびdeadline
入っているI / Oスケジューラー)。1 > ../queue/iosched/fifo_batch
50 > ../queue/iosched/read_expire
最悪の場合(約17MB / s)と最良の場合(約1470MB / s)の間の大きな違いに注意してください。
答え2
より良い答えがない場合、あなたの値は通常フラッシュドライブに非常に適しており、特定のフラッシュドライブに予想される範囲内にあることを指摘したかったです。
190 MB / sの書き込み速度などのマーケティング値は通常持続不可能であり(内部バッファがいっぱいになるまで最大数秒間有効であり、実際のフラッシュパフォーマンスを反映しません)、順次書き込み入力にのみ適用されます。ファイルシステムが関連している場合、速度は大幅に遅くなります。プレミアム高速USBドライブでも、ランダムアクセス書き込み速度は通常1 MB / s未満であるため、通常、ファイルシステムが必要とする少量のランダム書き込みが書き込みパフォーマンスを低下させる可能性があります。
ランダム書き込みを減らすのに効果的なf2fs(カーネル4.4以降を推奨)などのフラッシュフレンドリーなファイルシステムを試して、役に立つかどうかを確認できます。
答え3
ここで小さな希望を差し上げます。 UHS-II SDカードとUSBカードリーダーを見ている間、Ubuntu Diskアプレットのベンチマークタブで以下を観察しました。
- Ubuntu 14.04 - カーネル4.4 - 読み取り〜140 MB / s、書き込み〜50 MB / s
- Ubuntu 17.04 - カーネル4.10 - 読み取り〜270MB / s書き込み〜200MB / s
彼らは伝統的な「USB大容量記憶装置ドライバ」を使用しています。これら2つのポイントの間に、大容量記憶装置ドライバーを高速化するいくつかのカーネルの変更がありました。
再ベンチマークの一般的な説明が適用されますが、オンプレミスアプリケーションがベンチマーク時間を約10%上回るため、多くのユースケースがよく表示されます。
USB外付けハードドライブは、実際には通常の大容量ストレージドライバの代わりに代替ドライバを使用できるため、常に直接比較することはできません。
答え4
私はこれが少し昔ながらであることを知っていますが、
USB 3を介してubuntu Server 20.04を12T Seagate拡張ドライブにバックアップすると、非常に不満を感じました。転送速度は通常キロバイト単位で報告されます。約20秒ごとにすべてが10〜15秒間停止します。一種のキャッシュされた書き込みが疑われます。
解決策?近年、NTFS形式をext4に変更、キャッシュ設定の変更、ケーブルの変更など、ネットワークでさまざまな作業を試みました。あなたが影響を受けた場合、あなたもこのようなことが起こったと確信しています。何も役に立ちません。
昨日私はケースからハードドライブを取り出した。バラクダというラベルがつきました。ディスクをデスクトップコンピュータのUSB 3ドッキングステーションに挿入し、LAN経由でrsyncバックアップを開始しました。ビンゴ - 優れた連続転送速度
問題は、LinuxではなくSeagate拡張シャーシのコントローラにあるという結論に達しました。拡張ハードドライブは、Windows 10に接続したときにパフォーマンスが良く、これはそのシステムにも最適化されている可能性があります。
ドックをUbuntuサーバーのUSB 3ポートに移動し、現在のバックアップ速度は約50MB / sです。
私はこれで買うことができます。