Tl; dr : no podemos encontrar el motivo de la velocidad de escritura limitada de 60 MB / seg en nuestro NAS a través de SMB y AFP desde dos clientes Mac diferentes. En comparación: una vieja computadora portátil con Windows 7 en la misma red escribe 100 MB / seg.
Si lee esta pregunta por primera vez, pase a la sección Actualización 4 . rsync
es la razón principal de la baja velocidad, a pesar de que no entendemos por qué (¡para un solo archivo!).
Pregunta original: Encuentre el cuello de botella de velocidad SMB3 / NAS con Mac OS 10.11.5 y superior
Probamos a través rsync --progress -a /localpath/test.file /nas/test.file
de macOS y la información de copia de Windows.
El NAS es un DS713 + que ejecuta su DSM 6.0.2 actual (también probado con 5.x), con dos HGST Deskstar NAS SATA 4TB (HDN724040ALE640) en RAID1 con solo componentes de gigabit ethernet y nuevos cables de ethernet (al menos Cat5e).
Los clientes de Mac primero solo producían 20 MB / seg. Pero la aplicación de la signing_required=no
corrección (descrita aquí ) empujó la velocidad de escritura a 60 MB / seg a través de SMB2 y SMB3. AFP también entrega alrededor de 60 MB / seg. El resultado varía alrededor de 5 MB / seg dependiendo del protocolo y el cliente (Mac).
Lo que ya hemos probado:
Red
- Rendimiento de red probado a través de iperf3. Resultado: 926 Mbit / s. Se ve bien.
- Intento de agregación de doble enlace / interfaces de red enlazadas. Ningún cambio.
- Aumento de MTU a 6000 y 9000. Sin cambios.
- Comprobado todos los cables. Todo bien al menos Cat5e, en buen estado.
Discos
- Marcado SMART Luce saludable.
- Probado velocidad de escritura directamente en el disco con
dd if=/dev/zero of=write.test bs=256M count=4
con variosbs
ycount
ajustes (128/8, 512 M / 2, 1024/1). Resultado: alrededor de 120 MB / s (dependiendo del tamaño del bloque / recuento)
SMB / AFP
Benchmarked SMB2, SMB3 y AFP uno contra el otro. Sobre igual.
Consulte la actualización a continuación: Se utilizó un método incorrecto para descartar la implementación SMB de macOS. SMB en Windows es más rápido, la nueva configuración SMB que viene con macOS 10.11 y 10.12 puede ser la razón.- Intenté ajustar la configuración de SMB, incluidas las opciones de socket (siguiendo estas instrucciones )
- Intenté una versión diferente de la configuración de ack retrasado y
rsync --sockopts=TCP_NODELAY
(comentarios)
No hay cambio significativo de la velocidad de escritura. Verificamos dos veces que la configuración estaba realmente cargada y estábamos editando el smb.conf correcto .
Sistema
- CPU vigilada y carga de RAM. Nada se agota. CPU alrededor del 20%, RAM alrededor del 25% durante la transferencia.
- Probé el mismo NAS con DSM 5.xx en una configuración casi lista para usar. No hay software adicional instalado. Nota: Tenemos dos de estos en diferentes ubicaciones. Están sincronizados a través de CloudSync de Synology. Mismo resultado.
- Desactivó todo lo innecesario que pudiera atraer recursos del sistema.
Creemos que esta es una configuración bastante predeterminada, sin adaptaciones sofisticadas, clientes o componentes de red. Según las métricas que Synology publica, el NAS debería realizar entre 40 MB / sa 75 MB / s más rápido. Pero simplemente no podemos encontrar el cuello de botella.
Clientes / NAS
Los clientes de Mac son un MacPro 5,1 (NIC con cable estándar, con 10.12.3 (16D32)) y un MacBookPro10,1 (adaptador de red Thunderbolt, con 10.11.6) a solo 2 m de cable del NAS, que se ejecuta sobre el mismo conmutador gigabit como el portátil con Windows en la prueba.
Tenemos dos de estos NAS en diferentes ubicaciones y los resultados son idénticos. Los segundos NAS son más o menos los valores predeterminados de fábrica (ni siquiera el software de terceros instalado). Solo dos discos formateados EXT4 RAID1 que se sincronizan con el otro NAS a través de Synology CloudSync. Hemos ido tan lejos como conectarnos directamente al NAS sin el conmutador, el mismo resultado.
Actualización importante
El método utilizado para descartar la implementación SMB de macOS / OS X era incorrecto. Lo probé a través de una máquina virtual, suponiendo que usaría su propia versión de SMB, pero obviamente el tráfico se transfiere a macOS, que se ejecuta a través de su versión de SMB.
Utilizando una computadora portátil con Windows, ahora he podido alcanzar un promedio de 100 MB / s. Indicando la implementación / actualizaciones de SMB que vienen con 10.11 y 10.12 puede causar un bajo rendimiento. Incluso si signing_required
se establece en no
.
Sería genial si alguien pudiera señalar algunas configuraciones adicionales que pueden haber cambiado con las actualizaciones y podrían afectar el rendimiento.
Actualización 2 - nuevas ideas
AndrewHenle señaló en los comentarios que debería investigar el tráfico en detalle utilizando Wireshark para obtener más información.
Por lo tanto, ejecuté sudo tcpdump -i eth0 -s 65535 -w tcpdump.dump
el NAS, mientras transfería dos archivos de prueba, uno con 512 MB y otro con 1 GB. E inspeccionó el vertedero con Wireshark.
Lo que encontré:
- Parece que tanto OS X como Windows usan SMB2 aunque SMB3 está habilitado en el NAS (al menos según Wireshark).
- OS X parece quedarse con la MTU . Los paquetes tienen 1514 bytes, lo que lleva a una mayor sobrecarga de red y paquetes enviados (visibles en los volcados).
- Windows parece enviar paquetes de hasta 26334 bytes (¡si leo los datos correctamente! Por favor verifique), incluso si la MTU no debería permitir eso, ya que está configurado en 1500 en el NAS, la configuración máxima sería 9000 allí (Synology también usa la configuración 1500 en sus pruebas).
- Intentar forzar a macOS a usar SMB3 agregando
smb_neg=smb3_only
a /etc/nsmb.conf no funcionó o al menos no condujo a transferencias más rápidas. - Ejecutar
rsync --sockopts=TCP_NODELAY
con varias combinaciones de configuraciones de confirmación retrasada de TCP (0 a 3) no tuvo ningún efecto (Nota: ejecuté tcpdump con la configuración predeterminada de confirmación de 3).
He creado 4 volcados como archivos .csv, 2 al copiar 512 MB (archivo de prueba 2.) y 2 al copiar 1024 MB (archivo de prueba). Puede descargar las exportaciones de Wireshark aquí (25.2 MB). Se comprimen para ahorrar espacio y se nombran de forma autoexplicativa.
Actualización 3 - salida smbutil
Salida de smbutil statshares -a
lo solicitado por harrymc en los comentarios.
==================================================================================================
SHARE ATTRIBUTE TYPE VALUE
==================================================================================================
home
SERVER_NAME server-name._smb._tcp.local
USER_ID 502
SMB_NEGOTIATE SMBV_NEG_SMB1_ENABLED
SMB_NEGOTIATE SMBV_NEG_SMB2_ENABLED
SMB_NEGOTIATE SMBV_NEG_SMB3_ENABLED
SMB_VERSION SMB_3.0
SMB_SHARE_TYPE DISK
SIGNING_SUPPORTED TRUE
EXTENDED_SECURITY_SUPPORTED TRUE
LARGE_FILE_SUPPORTED TRUE
OS_X_SERVER TRUE
QUERYINFO_NOT_SUPPORTED TRUE
DFS_SUPPORTED TRUE
MULTI_CREDIT_SUPPORTED TRUE
--------------------------------------------------------------------------------------------------
Nota sobre esto: estoy seguro de que SIGNING_SUPPORTED
estar true
aquí no significa que la configuración en la configuración no funcione. Pero solo eso es compatible con el NAS. Verifiqué tres veces que cambiar la signing_required
configuración en mi configuración tiene un efecto en la velocidad de escritura (~ 20 MB / s cuando está activado, ~ 60 MB / s cuando está desactivado).
Actualización 4 - Samba Wars: una nueva esperanza
Se siente algo vergonzoso, pero el problema principal aquí, nuevamente, parece ser la medición.
Resulta que rsync --progress -a
cuesta unos 30 MB / s de velocidad de escritura. Escribir con dd
SMB directamente y compartir time cp /local/test.file /NAS/test.file
es más rápido a aproximadamente 85-90 MB / sy aparentemente la forma más rápida de copiar es el buscador de macOS a aproximadamente 100 MB / s (que también es el método más difícil de medir, ya que no hay Indicador de tiempo o velocidad: ¿quién lo necesita, verdad? Lo medimos copiando primero un archivo de 1 GB y luego un archivo de 10 GB, usando un cronómetro.
Lo que hemos intentado desde la última actualización de esta pregunta.
- Copie del cliente Mac al cliente Mac. Ambos tienen SSD (MacPro escribe con 250 MB / s en el propio disco, MacBook Pro con 300 MB / s). Resultado: unos escasos 65 MB / s al
dd
escribir desde MacBook Pro a MacPro (rsync
25 MB / s). Ver los 25 MB / s fue el momento en que comenzamos a cuestionar rsync. Todavía 65 MB / s son extremadamente lentos. Entonces, la implementación de SMB en macOS parece ... bueno, cuestionable. - Probé diferentes configuraciones de ack con dd y cp, sin suerte.
- Finalmente, encontramos una manera de enumerar todas las opciones nsmb.conf disponibles. Es un simple
man nsmb.conf
. ¡Atención, la versión en línea está desactualizada!
Así que probamos algunas configuraciones más, entre ellas:
notify_off=yes
validate_neg_off=yes
read_async_cnt=16
write_async_cnt=16
dir_cache_async_cnt=40
protocol_vers_map=4
streams=no
soft=yes
Nota: smb_neg=smb3_only
como ya esperaba, no es una configuración válida. protocol_vers_map=4
debe ser el equivalente válido
De todos modos, ninguno de estos ajustes hizo una diferencia para nosotros.
Nuevas preguntas de un vistazo
¿Por qué rsync es una forma tan costosa de copiar un (1) archivo? No hay mucho para sincronizar / comparar aquí, ¿verdad? El tcpdump tampoco indica una posible sobrecarga.
¿Por qué son
dd
ycp
más lento que los macOS buscador cuando se transfiere a un recurso compartido SMB? Parece que al copiar con Finder hay significativamente menos confirmaciones en la comunicación TCP. (Nuevamente: la configuración de reconocimiento, por ejemplo,delayed_ack=1
no hizo ninguna diferencia para nosotros).¿Por qué Windows parece ignorar la MTU, enviando paquetes TCP significativamente más grandes y, por lo tanto, menos, lo que resulta en el mejor rendimiento, en comparación con todo lo posible a través de macOS?
Así es como se ven los paquetes desde macOS (constantemente 1514)
"TCP","1514","[TCP segment of a reassembled PDU]"
"TCP","66","445 > 56932 [ACK] Seq=6603 Ack=35239 Win=4505 Len=0 TSval=520980697 TSecr=650208630"
Y esto viene de Windows (hasta 26334, que varía en tamaño)
"SMB2","1466","Write Request Len:65536 Off:196608 File: test.file"
"TCP","26334","[TCP segment of a reassembled PDU]"
"TCP","7354","[TCP segment of a reassembled PDU]"
"TCP","54","445 > 49220 [ACK] Seq=6831 Ack=267030 Win=4074 Len=0"
Puede descargar .csv completo aquí (25.2 MB), los nombres de los archivos explican lo que se ha copiado (SO, método de transferencia y tamaño del archivo).