Tl; dr - Nous ne pouvons pas trouver la raison de la vitesse d'écriture limitée de 60 Mo / s sur notre NAS via SMB et AFP à partir de deux clients Mac différents. En comparaison: un vieil ordinateur portable Windows 7 sur le même réseau écrit 100 Mo / sec.
Si vous lisez cette question pour la première fois, veuillez passer à la section Mise à jour 4 . rsync
est la principale raison de la faible vitesse, même si nous ne comprenons pas pourquoi (pour un seul fichier!).
Question d'origine: trouver un goulot d'étranglement SMB3 / NAS avec Mac OS 10.11.5 et supérieur
Nous avons testé via rsync --progress -a /localpath/test.file /nas/test.file
sur macOS et les informations de copie de Windows.
Le NAS est un DS713 + exécutant leur DSM 6.0.2 actuel (testé avec 5.x également), avec deux NAS HGST Deskstar SATA 4TB (HDN724040ALE640) en RAID1 avec uniquement des composants Ethernet gigabit et de nouveaux câbles Ethernet (au moins Cat5e).
Les clients Mac n'ont d'abord fait que 20 Mo / sec. Mais en appliquant le signing_required=no
correctif (décrit ici ) a poussé la vitesse d'écriture à 60 Mo / s via SMB2 et SMB3. L'AFP délivre également environ 60 Mo / sec. Le résultat varie autour de 5 Mo / sec selon le protocole et le client (Mac).
Ce que nous avons déjà essayé:
Réseau
- Test des performances du réseau via iperf3. Résultat: 926 Mbit / s. Cela semble bon.
- Interfaces réseau d'agrégation / de liaison double éprouvées. Pas de changement.
- MTU augmenté à 6000 et 9000. Aucun changement.
- Vérifié tous les câbles. Très bien au moins Cat5e, en bon état.
Disques
- Vérifié SMART Semble sain.
- Testé vitesse d'écriture directement sur le disque avec
dd if=/dev/zero of=write.test bs=256M count=4
avec diversbs
etcount
paramètres (128/8, 512M / 2, 1024/1). Résultat: environ 120 Mo / s (selon la taille / le nombre de blocs)
SMB / AFP
Comparés SMB2, SMB3 et AFP les uns contre les autres. À peu près égal.
Voir la mise à jour ci-dessous: Mauvaise méthode utilisée pour exclure l'implémentation SMB de macOS. SMB sur Windows est plus rapide, les nouveaux paramètres SMB fournis avec macOS 10.11 et 10.12 peuvent en être la raison.- J'ai essayé de modifier les paramètres SMB, y compris les options de socket (en suivant cette instruction )
- J'ai essayé une version différente des paramètres d'acquit différé et
rsync --sockopts=TCP_NODELAY
(commentaires)
Aucun changement significatif de la vitesse d'écriture. Nous avons revérifié que la configuration était vraiment chargée et nous éditions le bon smb.conf .
Système
- Charge CPU et RAM observée. Rien ne dépasse. CPU environ 20%, RAM environ 25% pendant le transfert.
- Testé le même NAS avec DSM 5.xx dans une configuration presque prête à l'emploi. Aucun logiciel supplémentaire installé. Remarque: nous en avons deux à différents endroits. Ils sont synchronisés via CloudSync de Synology. Même résultat.
- Désactivez tout ce qui n'est pas nécessaire et qui pourrait puiser des ressources système.
Nous pensons que c'est une configuration plutôt par défaut, pas d'adaptations sophistiquées, de clients ou de composants réseau. Selon les statistiques publiées par Synology, le NAS devrait accélérer de 40 Mo / s à 75 Mo / s. Mais nous ne pouvons tout simplement pas trouver le goulot d'étranglement.
Clients / NAS
Les clients Mac sont un MacPro 5,1 (carte réseau câblée standard, exécutant 10.12.3 (16D32)) et un MacBookPro10,1 (adaptateur réseau Thunderbolt, exécutant 10.11.6) à seulement 2 m de câble du NAS, fonctionnant sur le même commutateur gigabit comme ordinateur portable Windows dans le test.
Nous avons deux de ces NAS à différents endroits et les résultats sont identiques. Les secondes NAS sont plus ou moins par défaut (même pas de logiciel tiers installé). Juste deux disques au format RAID1, EXT4 se synchronisant avec l'autre NAS via Synology CloudSync. Nous sommes allés jusqu'à nous connecter directement au NAS sans le commutateur, même résultat.
Mise à jour importante
La méthode utilisée pour exclure l'implémentation SMB de macOS / OS X était incorrecte. Je l'ai testé via une machine virtuelle, en supposant qu'il utiliserait sa propre version de SMB, mais évidemment le trafic est transféré à macOS, passant par sa version de SMB.
En utilisant un ordinateur portable Windows, j'ai maintenant pu atteindre une moyenne de 100 Mo / s. L'indication de l'implémentation / mise à jour SMB fournie avec 10.11 et 10.12 peut entraîner des performances médiocres. Même si signing_required
est réglé sur no
.
Ce serait formidable si quelqu'un pouvait signaler d'autres paramètres qui pourraient avoir changé avec les mises à jour et affecter les performances.
Mise à jour 2 - nouvelles perspectives
AndrewHenle a souligné dans les commentaires que je devais étudier le trafic en détail en utilisant Wireshark pour plus d'informations.
J'ai donc couru sudo tcpdump -i eth0 -s 65535 -w tcpdump.dump
sur le NAS, tout en transférant deux fichiers de test l'un avec 512 Mo et l'autre avec 1 Go. Et inspecté le dépotoir avec Wireshark.
Ce que j'ai trouvé:
- OS X et Windows semblent utiliser SMB2 bien que SMB3 soit activé sur le NAS (au moins selon Wireshark).
- OS X semble s'en tenir au MTU . Les paquets ont 1514 octets, ce qui augmente considérablement la surcharge du réseau et les paquets envoyés (visibles dans les vidages).
- Windows semble envoyer des paquets jusqu'à 26334 octets (si je lis correctement les données! Veuillez vérifier.) Même si le MTU ne devrait pas permettre cela, car il est réglé sur 1500 sur le NAS, le paramètre maximum serait de 9000 (Synology aussi utilise le paramètre 1500 dans leurs tests).
- Essayer de forcer macOS à utiliser SMB3 en ajoutant
smb_neg=smb3_only
au /etc/nsmb.conf n'a pas fonctionné ou au moins n'a pas conduit à des transferts plus rapides. - L'exécution
rsync --sockopts=TCP_NODELAY
avec diverses combinaisons de paramètres d'acquittement différé TCP (0 à 3) n'a eu aucun effet (Remarque: j'ai exécuté le tcpdump avec le paramètre d'acquittement par défaut de 3).
J'ai créé 4 vidages sous forme de fichiers .csv, 2 lors de la copie de 512 Mo (test-2.file) et 2 lors de la copie de 1024 Mo (test.file). Vous pouvez télécharger les exportations Wireshark ici (25,2 Mo). Ils sont zippés pour économiser de l'espace et nommés de manière explicite.
Mise à jour 3 - sortie smbutil
Sortie de smbutil statshares -a
comme demandé par harrymc dans les commentaires.
==================================================================================================
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
--------------------------------------------------------------------------------------------------
Remarque à ce sujet: je suis sûr SIGNING_SUPPORTED
qu'être true
ici ne signifie pas que le paramètre dans la configuration ne fonctionne pas. Mais seulement qu'il est pris en charge par le NAS. J'ai vérifié que changer lasigning_required
paramètre dans ma configuration a un effet sur la vitesse d'écriture (~ 20 Mo / s lorsqu'il est allumé, ~ 60 Mo / s lorsqu'il est éteint).
Mise à jour 4 - Samba Wars: un nouvel espoir
Cela semble quelque peu gênant, mais le problème principal ici - encore une fois - semble être la mesure.
S'avère rsync --progress -a
coûte environ 30 Mo / s de vitesse d'écriture. Écrire avec dd
directement sur le partage SMB et utilisertime cp /local/test.file /NAS/test.file
sont plus rapides à environ 85-90 Mo / s et apparemment le moyen le plus rapide pour copier est le Finder macOS à environ 100 Mo / s (qui est également la méthode la plus difficile à mesurer, car il n'y a pas indicateur de synchronisation ou de vitesse - qui en a besoin, non? o_O). Nous l'avons mesuré en copiant d'abord un fichier de 1 Go puis un fichier de 10 Go, à l'aide d'un chronomètre.
Ce que nous avons essayé depuis la dernière mise à jour de cette question.
- Copiez du client Mac vers le client Mac. Les deux ont des SSD (MacPro écrit avec 250 Mo / s sur son propre disque, MacBook Pro avec 300 Mo / s). Résultat: un maigre 65 Mo / s via l'
dd
écriture de MacBook Pro vers MacPro (rsync
25 Mo / s). Voir les 25 Mo / s était le moment où nous avons commencé à remettre en question rsync. 65 Mo / s sont encore extrêmement lents. Ainsi, l'implémentation SMB sur macOS semble… enfin, discutable. - J'ai essayé différents paramètres d'ack avec dd et cp - pas de chance.
- Enfin, nous avons trouvé un moyen de répertorier toutes les options nsmb.conf disponibles. C'est simple
man nsmb.conf
. Attention, la version en ligne est obsolète!
Nous avons donc essayé quelques paramètres supplémentaires, parmi eux:
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
Remarque: smb_neg=smb3_only
n'est pas - comme je m'y attendais déjà - un paramètre valide. protocol_vers_map=4
devrait être l'équivalent valide.
Quoi qu'il en soit, aucun de ces paramètres n'a fait de différence pour nous.
Nouvelles questions en un coup d'œil
Pourquoi rsync est-il un moyen si coûteux de copier un (1!) Fichier. Il n'y a pas grand-chose à synchroniser / comparer ici, n'est-ce pas? Le tcpdump n'indique pas non plus une surcharge possible.
Pourquoi
dd
etcp
plus lent que le Finder macOS lors du transfert vers un partage SMB? Il semble que lors de la copie avec le Finder, il y ait beaucoup moins d'acquittements dans la communication TCP. (Encore une fois: le paramètre d'ack, par exemple,delayed_ack=1
n'a fait aucune différence pour nous.)Pourquoi Windows semble-t-il ignorer le MTU, envoyant des paquets TCP beaucoup plus gros et donc moins, ce qui donne les meilleures performances, par rapport à tout ce qui est possible via macOS.
Voici à quoi ressemblent les paquets de macOS (constamment 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"
Et cela venant de Windows (jusqu'à 26334, de taille variable)
"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"
Vous pouvez télécharger le fichier .csv complet ici (25,2 Mo), les noms de fichiers expliquent ce qui a été copié (système d'exploitation, méthode de transfert et taille du fichier).