Samba - accès très lent

Bonjour à tous,

je me permets de solliciter votre aide car je n’arrive pas à comprendre mon souci :

J’ai un serveur sous Debian 10 équipé d’un samba 4.9 (la version des dépôts debian)
Cette machine me permet de centraliser pour mes utilisateurs l’ensemble des partages des différentes machines de mon réseau.
Sur cette machine Debian 10, j’ai plusieurs partages NFS4 et SMB qui correspondent à du SAN ou des machines diverses.
ces partages centralisés sur la Debian 10 sont partagés par samba auprès des users.

Cette architecture fonctionnait très bien sous Debian 8 mais depuis la migration en Debian 10 j’arrive à des temps d’accès chaotique : transfert de quelques Ko/s, des dossiers qui mettent parfois plusieurs minutes à s’afficher dans l’explorateur windows etc…

Schématiquement :

User — (smb) —> Debian 10 — (smb ou nfs) —> données à partager avec les user

Note : je n’ai pas procédé à une maj debian 8 vers 10 pour ma machine. j’ai monté une debian 10 sur laquelle j’ai importé ma base user dessus et mes fichiers de conf samba puis basculé mes users sur la nouvelle machine.

Quelques résultats de test :

Debian 10 — NFS —> données à partager :

time find /mnt/…/archives/2019/11/|wc -l

résultat du test :

662122

real    2m45,409s
user    0m1,185s
sys     0m15,716s

User —(smb) ----> Debian 10 — (NFS) ----> données à partager

662122

real	15m58,108s
user	0m2,976s
sys	0m22,077s

Debian 10 ---- SMB ------> données à partager :

time find /mnt/…/dossier/|wc -l

résultat du test :

75919

real    0m3,950s
user    0m0,049s
sys     0m0,584s

User ---- (smb) --> Debian 10 ---- (smb) —> Données à partager :

résultat du test :

75972

real	2m27,087s
user	0m0,205s
sys	0m2,722s

sur la debian 10 servant de proxy SMB :

cat /etc/samba/smb.conf
[global]
        pam password change = yes
        dns proxy = no
        client max protocol = SMB3
        passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* .
        follow symlinks = yes
        map to guest = bad user
        log file = /var/log/samba/log.%m
        getwd cache = yes
        syslog = 0
        encrypt passwords = true
        usershare allow guests = yes
        max log size = 1000
        passwd program = /usr/bin/passwd %u
        panic action = /usr/share/samba/panic-action %d
        security = user
        wide links = yes
        server string = %h server
        unix extensions = no
        workgroup = TOTO
        os level = 20
        obey pam restrictions = yes
        passdb backend = tdbsam
        invalid users = root

… suivi de mes partages

Merci d’avance pour votre aide, vos pistes …

Bonjour,

malheureusement mon souci reste d’actualité :

Voici mes derniers tests sur Debian 12 / Samba 4.17.12

smb.conf :

[global]
   workgroup = WORKGROUP
   log file = /var/log/samba/log.%m
   max log size = 1000
   logging = file
   panic action = /usr/share/samba/panic-action %d
   server role = standalone server
   obey pam restrictions = yes
   unix password sync = yes
   passwd program = /usr/bin/passwd %u
   passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* .
   pam password change = yes
   map to guest = bad user
   usershare allow guests = yes
[archive]
    path = /mnt/archive/current
    comment = filesystem source en BTRFS avec subvolume
    read only = yes
    guest ok = yes
    browseable = no

Utilisateur – SMB → mon serveur SMB DB12 – NFS (montage systemd) → Serveur de stockage (FS BTRFS)

Test réalisé entre le serveur SMB DB12 et mon serveur de stockage :

sync; echo 3 > /proc/sys/vm/drop_caches; time find /chemin_a_tester -type f | wc -l

114229 fichiers

résultat de la commande time : 0m12,887s

Test réalisé entre un poste utilisateur et le serveur SMB DB12 pour atteindre les données présentes sur le serveur de stockage :

114229 fichiers

résultat de la commande time : 2m33.541s

Dans ce dernier cas, voici les observations :

  • Serveur de stockage :
    • processus nfsd consomme 50% de cpu de manière stable jusqu’à la fin de l’exécution de la commande find sur le poste client
    • bande passante consommé (sens) entre le serveur de stockage et le serveur SMB DB12 : > 500 Mb/s jusqu’à la fin d’exécution de la commande find sur le poste client

Si je regarde avec wireshark entre le serveur de stockage et le serveur samba on constate que le volume de données échangé concernant les commande GETXATTR et LISTXATTRS.
J’ai également constaté que pour un test avec la commande find depuis le poste client, le client NFS sur le serveur SMB DB12 exécute entre 25 et 75 fois la commande GETXATTR pour chaque fichier présent dans le dossier. (confirmé avec la commande nfsstats -s avant et après l’exécution de la commande find)

Ce dernier point permet d’expliquer pourquoi on a cette consommation de BP et la charge CPU coté serveur de stockage et laisse penser à des « retry » pour chaque fichier sans pouvoir l’expliquer et/ou solutionner le souci.

Ce que je m’explique pas pourquoi avec une debian 9 / samba 4.5.x on a pas ce comportement/souci et à partir de debian 10 on a ce comportement.

Après plusieurs recherches j’ai pris connaissance d’un possible souci avec BTRFS et les subvolumes mais pour exclure ce souci j’ai déployé une partition en EXT4 sur le serveur de stockage, copier les données et réalisé les mêmes tests avec des résultats similaires/comportement similaire.

Si je change mon montage de la manière suivante :

Utilisateur – SMB → mon serveur SMB DB12 – SMB (montage systemd) → Serveur de stockage (FS BTRFS)

On constate des temps quasiment identiques mais :

  • la BP entre le serveur de stockage et le serveur SMB passe de > 500 Mb/s (TX) à une moyenne de 10 Mb/s mais cette fois symétrique (autant en RX qu’en TX)
  • le processus SMB sur le serveur de stockage (pour remplacer NFSd) consomme environ 25% de CPU en permanence jusqu’à la fin d’exécution de la commande find sur le poste client.

Je ne vois vraiment pas comment solutionner ce souci.

Merci d’avance pour vos idées, aide.

Cordialement,
Guedz.

Peut une question de version de protocole. Le SMB V1 est lent comparé au SMBV3. C’est celui qu’il faut privilégier et donc configurer.

Poste utilisateur – SMB → Serveur SMB DB12 – NFS → Serveur de stockage

Poste utilisateur :

Output de la commande mount :

//monserveur.domain.local/share1 on /tmp/test type cifs (rw,relatime,vers=3.1.1,cache=strict,username=test,uid=0,noforceuid,gid=0,noforcegid,addr=192.168.1.151,file_mode=0755,dir_mode=0755,soft,nounix,serverino,mapposix,rsize=4194304,wsize=4194304,bsize=1048576,echo_interval=60,actimeo=1,closetimeo=1)

Sur le serveur SMB DB12 :

Output de la commande mount :

storage.domain.local:/mnt/archive/current on /mnt/share/test type nfs4 (rw,noatime,nodiratime,vers=4.2,rsize=1048576,wsize=1048576,namlen=255,hard,proto=tcp,timeo=600,retrans=2,s
ec=sys,clientaddr=192.168.1.151,local_lock=none,addr=192.168.1.112)

Considérant que tu passe ensuite via une connexion NFS vers le stockage, as-tu fait une vérification des performance à la fois du lien NFS et du stockage?

as-tu fait une vérification des performance à la fois du lien NFS et du stockage?

Oui

Quand je réalise mes tests :

  • je teste toujours Poste utilisateur vers Stockage via le fameux serveur SMB en debian 12 (source du souci)
  • je teste toujours serveur SMB vers stockage
  • je contrôle le monitoring nagios (BP, CPU, RAM) qui est réalisé sur tous les serveurs
  • je teste également via mon serveur SMB en debian 9 pour comparer

Aujourd’hui je dispose de cette infrastructure :

Utilisateur (LAN) -- Switch LAN -- FW -- Switch DMZ -- Serveur SMB Debian 12 (même souci avec 10 ou 11)
                                               |------------- Serveur stockage
                                               | ------------- Serveur SMB Debian 9

Aucun souci avec le Samba en debian 9

Pour complément d’information je me suis même amusé à identifier ce qui change coté configuration entre debian 9 (samba 4.5) et debian >= 10

image

J’ai pas identifié ce qui pourrait corriger mon souci.

Cependant avec les paramètres suivants sur Debian 12 :

  • ea support = no
  • map readonly = yes
  • store dos attributes = no

J’arrive à réduire de 40 secondes le temps de chargement du dossier sur un temps d’environ 2m à 2m10 sans ces paramètres sachant que l’on est à max 20 secondes entre le serveur SMB et le stockage.

Dans ce cas de figure, on constate que la BP entre le serveur SMB et le stockage augmente en moyenne de 50 Mb/s

pourquoi tu parle de Debian 10 alors que ton serveur est un Debian 12 si on considère tes derniers messages?

Effectivement le post date de plusieurs années et j’ai identifié le souci en passant à l’époque de Debian 9 à 10 mais personne ne m’a répondu pour le moment.
Effectivement aujourd’hui ma VM / ma cible c’est une debian 12 mais j’ai le souci depuis Debian 10.
Et vous imaginez bien que le souci existe également avec Debian 11.
Là j’ai vraiment besoin de migrer pour raison de sécurité mon serveur SMB de debian 9 à 12.
Raison pour laquelle je relance le sujet non résolu.

Je rajouterais également :slight_smile: qu’en 5 ans j’ai même mis à jour le coeur de réseau avec des switchs plus performants mais le souci reste le même.