Velocidad de escritura USB 3 lenta

Velocidad de escritura USB 3 lenta

Escribir en mi memoria USB 3 (SanDisk Extreme SDCZ80-064G-FFP) es muy lento en Linux: 1 GB tarda más que 200 segundos. Usando Windows (arranque dual en la misma computadora), el mismo archivo de 1 GB se puede copiar en aproximadamente 8 segundos. El dispositivo está formateado en FAT (viene preformateado y no lo cambié) y me gustaría mantenerlo así ya que también lo uso en Windows.

¿Cómo puedo arreglarlo? ¿Qué pasos puedo realizar para diagnosticar la causa de esto?

Estoy ejecutando Manjaro/Arch con la versión del kernel 4.5.4-1.

Editar: En primer lugar: me di cuenta de que la unidad está formateada en FAT (no en NTFS, como dije originalmente en la pregunta) cuando intenté montarla con -o big_writes. ¡Lo siento por el error!

Estoy agregando las salidas de los comandos mencionados en los comentarios. No veo ningún problema con ninguno de estos.

Salida de journalctl -fcuando conecto el disco, lo monto y escribo algunos datos:

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

Salida de 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

Comandos utilizados para montar y escribir:

$ 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

Salida de 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

Edición 2:Probé otros dos núcleos: 4.4.11 y 4.6.0. La escritura sigue siendo lenta para ambos. Además, el problema parece estar relacionado con la unidad, ya que obtengo velocidades de transferencia más altas (90 MB/s) para un disco duro externo USB 3.

Edición 3:Hice algunas evaluaciones comparativas en un sistema Ubuntu 16.04 Live. Los resultados son mucho mejores (aunque todavía no muy buenos):

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

Edición 4:Lo intenté una vez más usando un kernel Arch/Manjaro reciente (4.11.1) y el resultado es un poco mejor: obtengo velocidades de transferencia de aproximadamente 10 MB/s (es decir, ~100 s por 1 GB). Sin embargo, sigue siendo mucho más lento que Windows.

Edición 5:Finalmente encontré el tiempo para volver a este tema. Al ejecutar el kernel Manjaro actual Linux janmanjaro 5.4.74-1-MANJARO #1 SMP PREEMPT Sun Nov 1 13:43:13 UTC 2020 x86_64 GNU/Linux, obtengo entre 15 y 30 MB/s (normalmente más cerca de 15 MB/s). Montaje con sudo mount -o async,flush /dev/sdc1 /mnt/(como se sugiere enVelocidad extremadamente lenta al escribir en una unidad USB FAT32 en Linux) mejora la velocidad en aproximadamente 5 MB/s. Esto es hasta ridículamente más lento que Windows y también mucho más lento que Ubuntu.

También corrí 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_reportinsegún lo sugerido por @Mikko Rantalainen. Los resultados son:

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

Todavía no he ejecutado esto en Ubuntu.

Respuesta1

¿Realmente necesitas FAT? En mi experiencia, la implementación del controlador FAT en Linux parece acceder al dispositivo con una secuencia que hace que algunos dispositivos tengan un rendimiento realmente pobre. He visto una mejora de rendimiento 10 veces mayor en algunos dispositivos flash cuando se formatean como ext4.

Teniendo en cuenta que el enlace que proporcionaste en los comentarios (http://www.beginninglinux.com/home/machine- related/sandisk-extreme-64-usb-3-speed-test-benchmark-review) estaba probando velocidades de lectura y escritura sin particiones, es posible que su dispositivo flash tenga un rendimiento deficiente cuando se accede mediante el controlador FAT de Linux. Si eso es cierto, también debería tener un mal rendimiento de IO aleatorio en general.


Puede probar el rendimiento del dispositivo con fio. Cambie a algún directorio dentro del dispositivo que desea probar y ejecute el siguiente comando para probar el rendimiento con un rendimiento mixto aleatorio de lectura/escritura de 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

Eso crea un archivo de prueba de 500 MB llamado test.imgy luego comienza a leer y escribir en bloques aleatorios de 4 KB con una profundidad de cola de 1. Aumente el valor sizeen caso de que su dispositivo tenga un caché interno enorme. Esta prueba tiene una duración máxima de 60 segundos. Considere este el peor de los casos con su dispositivo. Un dispositivo flash bastante rápido (Intel SSD 910) obtiene los siguientes resultados aquí:

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

Para probar el mejor de los casos, puede aumentar el tamaño del bloque y realizar 2 procesos paralelos con io Depth=32:

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

Un dispositivo flash bastante rápido (Intel SSD 910) obtiene los siguientes resultados aquí:

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

Por supuesto, si realmente desea obtener puntuaciones altas, debe realizar una lectura secuencial con una profundidad de io alta. Esto debería estar cerca de los números que ves en las hojas de especificaciones del dispositivo (es decir, nunca en la vida real):

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

Un dispositivo flash bastante rápido (Intel SSD 910) obtiene los siguientes resultados aquí:

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

Tenga en cuenta que esto no alcanza la hoja de especificaciones (alrededor de 2 GB/s) porque he configurado la latencia más baja posible del programador de E/S ( deadlineprogramador de E/S con 1 > ../queue/iosched/fifo_batchy 50 > ../queue/iosched/read_expire).

Tenga en cuenta la enorme diferencia entre el peor de los casos (alrededor de 17 MB/s) y el mejor de los casos (alrededor de 1470 MB/s).

Respuesta2

Como no hay mejor respuesta, sólo quería comentar que sus valores son muy buenos para una unidad flash en general y bastante dentro del rango esperado para su unidad flash específica.

Los valores de marketing como la velocidad de escritura de 190 MB/s no son en general sostenibles (son válidos durante unos segundos como máximo, hasta que se llena el búfer interno, y no reflejan el rendimiento flash real) y solo son válidos para escrituras secuenciales. Tan pronto como interviene un sistema de archivos, la velocidad se degrada considerablemente. Las velocidades de escritura de acceso aleatorio suelen ser <1 MB/s incluso en unidades USB rápidas de alta calidad, por lo que unas pocas escrituras aleatorias (como suelen requerir los sistemas de archivos) pueden destruir el rendimiento de escritura.

Puede intentar utilizar un sistema de archivos más compatible con flash, como f2fs (se recomienda un kernel 4.4 o más reciente), que hace un buen trabajo reduciendo los ritos de escritura aleatoria, para ver si eso ayuda.

Respuesta3

Aquí les ofreceré una migaja de esperanza. Estoy mirando tarjetas SD UHS-II y lectores USB y observo lo siguiente en la pestaña de evaluación comparativa del subprograma "Discos" de Ubuntu:

  • Ubuntu 14.04 - kernel 4.4 - lectura ~140MB/s, escritura ~50MB/s
  • Ubuntu 17.04 - kernel 4.10 - lectura ~270MB/s escritura ~200MB/s

Estos utilizan el tradicional "controlador de almacenamiento masivo USB". Algo ha cambiado en el núcleo entre estos dos puntos que acelera el controlador de almacenamiento masivo.

Se aplican los comentarios habituales, pero nuestra aplicación interna logra aproximadamente un 10 % más rápido que los tiempos de referencia, por lo que son una representación bastante buena de muchos casos de uso.

Los discos duros externos USB pueden utilizar un controlador alternativo al controlador de almacenamiento masivo genérico, por lo que no siempre es posible compararlos directamente.

Respuesta4

Sé que esto está un poco anticuado, pero

Me sentí extremadamente frustrado al hacer una copia de seguridad de un servidor Ubuntu 20.04 en una unidad de expansión Seagate de 12T a través de USB 3. Las velocidades de transferencia se informaron en kilobytes la mayoría de las veces. y cada 20 segundos aproximadamente todo se detenía durante 10 a 15 segundos. Algún tipo de escritura en caché, sospecho.

¿Soluciones? Probé más de unos pocos en la web durante los últimos meses, incluido cambiar el formato NTFS a ext4, modificar la configuración de caché, cambiar cables, etc., etc. Si te afecta, estoy seguro de que has estado allí. Nada ayudó.

Ayer saqué el disco duro de la carcasa. Estaba etiquetado como Barracuda. Coloqué el disco en una base USB 3 en mi PC de escritorio e inicié una copia de seguridad rsync a través de la LAN. Bingo: excelentes velocidades de transferencia continua

Llegué a la conclusión de que el problema es el controlador en el caso de expansión de Seagate, no Linux. El hecho de que el HDD de expansión funcionara bien cuando se conectó a Windows 10 sugiere que también puede estar optimizado para ese sistema.

Ahora moví la estación de acoplamiento a un puerto USB 3 en el servidor Ubuntu, donde actualmente se realiza la copia de seguridad a ~50 MB/s.

Puedo vivir con ello.

información relacionada