LXC Samba Server Performance

Mrt12

Well-Known Member
May 19, 2019
134
9
58
44
Hallo zusammen

ich habe einen LXC Container aufgesetzt, der einen Samba-Server beinhaltet. Der Container läuft als "privileged" Container, was mir eigentlich nicht so gut gefällt, aber mit einem unprivilegierten LXC habe ich den Samba Server nicht zum Laufen gekriegt.

Warum ich das so mache:
a) ich möchte Samba nicht direkt in Proxmox laufen lassen, sondern das getrennt haben.
b) der Samba Server soll nicht als VM laufen, damit ich einen ZFS Mountpoint benutzen kann und dann die ZFS Snapshots benutzen kann.

Der Samba Server läuft, man kann auch zugreifen und alles, im Prinzip alles gut, aber was sehr merkwürdig ist, ist, dass die Performance schlecht ist. Ich habe das mal so ermittelt, in dem ich von einem Rechner aus übers Netzwerk einen grossen ISO File kopiere. Wenn ich den File auf ein bestehendes QNAP Nas kopiere, kann ich die 1GBit Leitung voll auslasten und bekomme laut Windows rund 110 MB/s. Wenn ich aber den selben File auf den LXC basierten Samba Server kopiere, dann startet der Kopiervorgang zwar auch mit 110 MB/s, wie es sein soll, fällt aber nach einigen Sekunden auf durchschnittlich 80 MB/s ab und oszilliert dann zwischen 60 MB/s und 90 MB/s.
Siehe Screenshot.

1701701325556.png

was ich ausschliesse:

a) an einer zu schwachen CPU kann es nicht liegen, denn wenn ich in Proxmox selber HTOP anschaue, sieht man, dass die CPU kaum belastet wird. Es ist ein 20 x Intel(R) Xeon(R) Silver 4310T CPU @ 2.30GHz (1 Socket). Meiner Meinung nach sollte der genug Kraft für diese Aufgabe haben.
b) an den Festplatten, wo mein ZFS drauf läuft, sollte es eigentlich auch nicht liegen, der IO Delay ist stets unter 1%. Man sieht auch am "zpool iostat -v 1", dass die Disks nicht voll ausgelastet werden.

Woran könnte es liegen, dass Samba unter LXC eine so komische Performance hat? ich habe schon einiges gegoogelt, andere Leute scheinen ähnliche Probleme zu haben, aber eine Lösung oder Begründung, warum das so sein muss, habe ich noch nicht gefunden.

Ich habe testweise meinem LXC sogar 16 CPU Cores und 16 GB RAM zugewiesen, was aber auch nichts half. Während des Kopierens habe ich die Memory-Auslastung innnerhalb des LXC angeschaut (auch unter HTOP) und gesehen, dass kaum RAM für das Caching benutzt wird.
 
Wie sieht denn deine ZFS Pool von aus?
$ zpool status <pool>
und
$ zpool list -v <pool>
.
 
ZFS benötigt schon einige IO und da sollte man bei HDDs z.B. Raid10 nutzen und auf SSDs (nvme o. SATA3) als "Cache" und "special device" setzen.
Mindestens ist das "special device" als ZFS mirror 2 Datenspeicher aus zu führen.
 
Hallo
ja, das weiss ich. Ich glaube fast nicht, dass es an meiner ZFS Performance liegt, denn die VMs laufen alle flüssig, selbst Windows. Hier der Output:

Code:
root@pve0:~# zpool status tank
  pool: tank
 state: ONLINE
  scan: scrub repaired 0B in 00:05:00 with 0 errors on Mon Dec  4 18:52:34 2023
config:

        NAME                                            STATE     READ WRITE CKSUM
        tank                                            ONLINE       0     0     0
          mirror-0                                      ONLINE       0     0     0
            ata-TOSHIBA_MG04ACA100N_53KUKC3LF6XF        ONLINE       0     0     0
            ata-TOSHIBA_MG04ACA100N_53KUKC3BF6XF        ONLINE       0     0     0
            ata-WDC_WD2005FBYZ-01YCBB3_WD-WCC6N0NK6NJD  ONLINE       0     0     0
          mirror-1                                      ONLINE       0     0     0
            ata-TOSHIBA_MG04ACA100N_53KUKC3JF6XF        ONLINE       0     0     0
            ata-TOSHIBA_MG04ACA100N_53KUKC3DF6XF        ONLINE       0     0     0
            ata-WDC_WD2005FBYZ-01YCBB3_WD-WCC6N7JZP610  ONLINE       0     0     0

errors: No known data errors
root@pve0:~# zpool list -v tank
NAME                                             SIZE  ALLOC   FREE  CKPOINT  EXPANDSZ   FRAG    CAP  DEDUP    HEALTH  ALTROOT
tank                                            1.81T  76.6G  1.74T        -         -     0%     4%  1.00x    ONLINE  -
  mirror-0                                       928G  38.1G   890G        -         -     0%  4.10%      -    ONLINE
    ata-TOSHIBA_MG04ACA100N_53KUKC3LF6XF         932G      -      -        -         -      -      -      -    ONLINE
    ata-TOSHIBA_MG04ACA100N_53KUKC3BF6XF         932G      -      -        -         -      -      -      -    ONLINE
    ata-WDC_WD2005FBYZ-01YCBB3_WD-WCC6N0NK6NJD  1.82T      -      -        -         -      -      -      -    ONLINE
  mirror-1                                       928G  38.5G   889G        -         -     0%  4.15%      -    ONLINE
    ata-TOSHIBA_MG04ACA100N_53KUKC3JF6XF         932G      -      -        -         -      -      -      -    ONLINE
    ata-TOSHIBA_MG04ACA100N_53KUKC3DF6XF         932G      -      -        -         -      -      -      -    ONLINE
    ata-WDC_WD2005FBYZ-01YCBB3_WD-WCC6N7JZP610  1.82T      -      -        -         -      -      -      -    ONLINE
root@pve0:~#
 
Hallo, ich habe das auch so laufen. Es hilft sehr, einfach das zfs set sync=disabled (pool) zu setzen und schon läuft es wieder gut.
 
Was du nicht vergessen darfst, eine NAS ist vorkonfiguriert, hier werden bereits verschiedene Einstellungen gesetzt, damit es eine guts Performance gibt. Vermutlich sind auf deiner NAS daher Einstellungen vorhanden, die in deinem Container nicht existieren.

Auch hast du in der NAS vielleicht auch SSD only?
Hast du mal auf dem Container eine Datei erstellt oder heruntergeladen um mal zu vergleichen?
Wenn aktiviert, solltest du versuchsweise auch mal die ZFS Compression deaktivieren.

Ansonsten poste doch mal ein paar Details, das man sich einfach mal einen Eindruck von deinem Setup machen kann.
 
Hallo

also, mit sync=disabled habe ich es schon versucht, das hilft nichts.
Wenn ich von einer Windows VM aus den Samba Share mounte, dann bekomme ich rund 200 MB/s, da die Daten dann nicht übers Netzwerk müssen. Das ist zwar immer noch etwas langsam, aber ganz OK.

Mein Server hat 128 GB RAM, wie gesagt die oben genannten Disks, 1 GBit Ethernet, und die oben genannte Xeon CPU.
Und wie gesagt habe ich den Samba Server in einem LXC Container installiert. Danach habe ich einen Domain Join gemacht, damit Benutzer sich mit ihrem normalen PC Usernamen auf den Share einloggen können. Was auch funktioniert. Aber eben, die Performance ist durchzogen.

SSD only habe ich nicht, ich benutze die SSDs nur für das Proxmox System. Die Daten liegen auf den Disks.

Was für Infos müsste ich noch geben?
 
@Mrt12 bitte lies doch meinen Post nochmal Satz für Satz.
Z.b. Hast du gesagt, deine NAS ist schnell. Ich kenne weder deine PVE Node im Detail noch deine NAS, daher z. B. die frage ob deine NAS SSD Only ist.

Ich habe dir ja auch noch weitere Optionen genannt, diese hast du ebenfalls ignoriert.

Wenn man dir helfen soll, ist es auch wichtig, dass du alles liest und ggf Rückfragen stellst, wenn unklar.
 
sorry, das mit dem NAS ist mir durch die Lappen gegangen.
Das NAS ist ein QNAP TS-659 mit 4 Disks, keine einzige SSD. Wenn ich hier auf die Disks schreibe, dann habe ich konstant ~110 MB/s.
ZFS Compression macht keinen Unterschied, habe ich soeben getestet. Im Normalfall benutze ich compression=zstd; wenn die Daten komprimierbar sind, hat es den Vorteil, dass weniger Daten auf die Disks geschrieben werden müssen und der Zugriff dadurch schneller ist. Die Xeon CPU hat ja genug Dampf, um die Kompression vorzunehmen. Compression=lz4 habe ich auch versucht, bringt keinen Unterschied.
 
Von meiner Seite Danke für die Darstellung der Hardware und der ZFS Mirrors-Stripe Verbundes.
Ohne SSD an den richtigen Stellen, wird es schwer mehr Schreibdurchsatz zu erhalten.
ZFS Anpassungen sollte man aber machen.
zfs atime=off <pool> wäre da einer und die Special Device bei HDDs.

Ich nutze u.a. als Datengrab in meinem NAS: ZFS RaidZ1 3x 4 TB - RaidZ1 3x 4 TB mit 500 GB SSD SATA3 als Special Device.
Damit erhalte ich im Schreiben von großen Blöcken dann auch "nur" 86 GByte/s.
Ein ZFS SIL/SLOG würde bei mir noch helfen.

Meine weiteren Proxmox VE oder BS mit ZFS FS laufen teilweise als ZFS Mirror mit NVMe M.2 oder SSD SATA3 basiert. Das bringt dann auch IOPS für den Proxmox BS.

Es lohnt sich die YT-Kanäle von 45Drives, Lawrence Systems, Level1Linux und sysopstv/ ZFS rocks! an zu sehen.
Von Grundlagen, über HowTO bis tägliches mit ZFS.
 
Hallo,
vielen Dank. Ja, atime=off habe ich auch. Hier meine komplette pool config:

Code:
root@pve0:~# zfs get all tank
NAME  PROPERTY              VALUE                  SOURCE
tank  type                  filesystem             -
tank  creation              Sun Dec  3 11:37 2023  -
tank  used                  362G                   -
tank  available             1.40T                  -
tank  referenced            112K                   -
tank  compressratio         1.46x                  -
tank  mounted               yes                    -
tank  quota                 none                   default
tank  reservation           none                   default
tank  recordsize            1M                     local
tank  mountpoint            /tank                  default
tank  sharenfs              off                    default
tank  checksum              on                     default
tank  compression           zstd                   local
tank  atime                 off                    local
tank  devices               on                     default
tank  exec                  on                     default
tank  setuid                on                     default
tank  readonly              off                    default
tank  zoned                 off                    default
tank  snapdir               hidden                 default
tank  aclmode               discard                default
tank  aclinherit            restricted             default
tank  createtxg             1                      -
tank  canmount              on                     default
tank  xattr                 sa                     local
tank  copies                1                      default
tank  version               5                      -
tank  utf8only              off                    -
tank  normalization         none                   -
tank  casesensitivity       sensitive              -
tank  vscan                 off                    default
tank  nbmand                off                    default
tank  sharesmb              off                    default
tank  refquota              none                   default
tank  refreservation        none                   default
tank  guid                  16995432735660404850   -
tank  primarycache          all                    default
tank  secondarycache        all                    default
tank  usedbysnapshots       0B                     -
tank  usedbydataset         112K                   -
tank  usedbychildren        362G                   -
tank  usedbyrefreservation  0B                     -
tank  logbias               latency                default
tank  objsetid              54                     -
tank  dedup                 off                    default
tank  mlslabel              none                   default
tank  sync                  standard               default
tank  dnodesize             auto                   local
tank  refcompressratio      1.00x                  -
tank  written               112K                   -
tank  logicalused           112G                   -
tank  logicalreferenced     50K                    -
tank  volmode               default                default
tank  filesystem_limit      none                   default
tank  snapshot_limit        none                   default
tank  filesystem_count      none                   default
tank  snapshot_count        none                   default
tank  snapdev               hidden                 default
tank  acltype               posix                  local
tank  context               none                   default
tank  fscontext             none                   default
tank  defcontext            none                   default
tank  rootcontext           none                   default
tank  relatime              off                    local
tank  redundant_metadata    all                    default
tank  overlay               on                     default
tank  encryption            off                    default
tank  keylocation           none                   default
tank  keyformat             none                   default
tank  pbkdf2iters           0                      default
tank  special_small_blocks  0                      default

Wenn ich direkt aus dem System auf die ZFS Disks zugreife, dann ist der Durchsatz auch mehr als OK. Aber irgend etwas ist da noch, was den Zugriff verlangsamt, wenn ich *aus einem Container heraus* zugreife! und das habe ich noch nicht verstanden.
 
blöde frage am rande, aber seh ich das richtig das du pro mirror 2x 1TB Platte und noch eine 2Tb Platte im gleichen Raid hast? ist dann nicht 1Tb komplett verschenkt?

mirror-0 928G 38.1G 890G - - 0% 4.10% - ONLINE
ata-TOSHIBA_MG04ACA100N_53KUKC3LF6XF 932G - - - - - - - ONLINE
ata-TOSHIBA_MG04ACA100N_53KUKC3BF6XF 932G - - - - - - - ONLINE
ata-WDC_WD2005FBYZ-01YCBB3_WD-WCC6N0NK6NJD 1.82T - - - - - - - ONLINE
 
Hallo Mrt12,

kannst du mal testweise den Samba Server auf dem Proxmox Host konfigurieren
um zu sehen ob es da einen Performance Unterschied zwischen LXC und Host gibt?

Wenn ja gibt es ein Problem mit dem Container, wenn nein ist es ein Problem mit der IO auf dem Host.

Netzwerk IO zwischen Windows und Proxmox Host, bzw Windows und LXC kannst du auch mal mit iperf3 messen.
 
blöde frage am rande, aber seh ich das richtig das du pro mirror 2x 1TB Platte und noch eine 2Tb Platte im gleichen Raid hast? ist dann nicht 1Tb komplett verschenkt?

mirror-0 928G 38.1G 890G - - 0% 4.10% - ONLINE
ata-TOSHIBA_MG04ACA100N_53KUKC3LF6XF 932G - - - - - - - ONLINE
ata-TOSHIBA_MG04ACA100N_53KUKC3BF6XF 932G - - - - - - - ONLINE
ata-WDC_WD2005FBYZ-01YCBB3_WD-WCC6N0NK6NJD 1.82T - - - - - - - ONLINE

Ja, das simmt. Die 2TB Platte war halt noch grad da, darum habe ich sie benutzt. Ich brauche nur 1TB. Für die Performance sollte das aber, glaube ich, keinen Unterschied machen.
 
Teil doch mal deine SMB Config mit uns.

Hier ist meine SMB Config:

Code:
[global]

    #-------------------------------------------------------------------
    # Browsing/Identification
    #
    netbios name = SAMBA
    realm = .............................. <- hab ich mal raus genommen
    security = ads
    workgroup = PMC

    #-------------------------------------------------------------------
    # Debugging/Accounting
    #
    log file = /var/log/samba/log.%I
    log level = 0
    max log size = 1000
    logging = file
    panic action = /usr/share/samba/panic-action %d

    #-------------------------------------------------------------------
    # Printing
    #
    load printers = no
    printing = bsd
    printcap name = /dev/null
    disable spoolss = yes

    #-------------------------------------------------------------------
    # Template
    #
    template homedir = /home/%D/%U
    template shell = /bin/bash

    #-------------------------------------------------------------------
    # idmap
    #
    idmap config * : backend = tdb
    idmap config * : range = 10000000-20000000
    idmap config PMC : backend = rid
    idmap config PMC : schema_mode = rfc2307
    idmap config PMC : range = 500-9999999
    idmap config PMC : unix_primary_group = yes
    #idmap config CAMPUS : unix_nss_info = yes

    #-------------------------------------------------------------------
    # winbind
    #
    #winbind enum users = yes
    #winbind enum groups = yes

    #-------------------------------------------------------------------
    # Mac OS X
    #
    ea support = yes
    vfs objects = catia fruit acl_xattr shadow_copy2
    shadow:snapdir = .zfs/snapshot
    shadow:format = -%Y-%m-%d-%H%M
    shadow:snapprefix = ^zfs-auto-snap_\(frequent\)\{0,1\}\(hourly\)\{0,1\}\(daily\)\{0,1\}\(monthly\)\{0,1\}
    shadow:delimiter = -20
    fruit:metadata = stream
    fruit:model = MacSamba
    fruit:veto_appledouble = no
    fruit:posix_rename = yes
    fruit:zero_file_id = yes
    fruit:wipe_intentionally_left_blank_rfork = yes
    fruit:delete_empty_adfiles = yes
    inherit acls = yes
    inherit permissions = yes
    acl_xattr:ignore system acls = yes



include = /etc/samba/shares.conf
 
Hallo Mrt12,

kannst du mal testweise den Samba Server auf dem Proxmox Host konfigurieren
um zu sehen ob es da einen Performance Unterschied zwischen LXC und Host gibt?

Wenn ja gibt es ein Problem mit dem Container, wenn nein ist es ein Problem mit der IO auf dem Host.

Netzwerk IO zwischen Windows und Proxmox Host, bzw Windows und LXC kannst du auch mal mit iperf3 messen.

das würde ich als letzte Notlösung machen, wenn wir nichts rausfinden. Weil, dazu muss ich den Host dem Active Directory joinen, was ich beim Proxmox Host eigentlich nicht gern tun würde. Das mit iperf3 werde ich testen!
 
Hallo,

ich verwende noch diese Sambaeinstellungen:
Code:
[global]
  server max protocol = SMB3
  server min protocol = SMB2
#
#  client min protocol = SMB2
   client min protocol = CORE
#  client min protocol = NT1

# server string is the equivalent of the NT Description field
  server string = %h server
  server signing = no
#
   map to guest = never
#
   socket options = TCP_NODELAY
   read raw = yes
   write raw = yes
   oplocks = yes
   kernel oplocks = yes
   max xmit = 65535
   deadtime = 15
   getwd cache = yes
#
   min receivefile size = 16384
   use sendfile = Yes
   aio read size = 16384
   aio write size = 16384

läuft dein Samba Server auch in einem LXC?

ich habe das jetzt ausprobiert. Ich habe eine 8GB grosse tar Datei rum kopiert.
Die Performance ist sehr schlecht. Gelegentlich geht der Speed auf 110MB/s hoch, das wäre OK, aber bricht dann wieder ein:

2023-12-05_18-39-53.png

das ist über ein 1GBit Ethernet. Während des Kopiervorgangs sehe ich die CPU und Memory Auslastung auf meinem LXC an, sieht eigentlich nicht aus, als ob der viel cachen würde:

Screenshot_2023-12-05_18-41-00.png

ich wollte das eigentlich als Fileserver für ca. 10 Benutzer einrichten. Aber so ist das unbrauchbar :-( und langsam habe ich echt keine Ideen mehr, woran es liegen könnte. Den Samba direkt auf dem Proxmox host zu installieren, ist eigentlich meiner Meinung nach keine gute Idee.


EDIT:
was ich schon mal ausschliessen kann ist, dass es an ZFS liegt. Ich habe den Storage des LXC Containers mal auf dieselbe SSD verschoben, von der Proxmox läuft. Diese sollte auf jeden Fall schnell genug sein. Und auch auf der SSD ist die Performance so schlecht, d.h. stark schwankend. Ich suche weiter.
 
Last edited:
Hallo zusammen

also, teilweise Entwarnung:
nachdem ich jetzt schier endlos herum gepröbelt habe, habe ich herausgefunden, dass wohl offenbar mein Switch, an dem mein Rechner hängt, ein Problem hat. Denn wenn nun meinen Laptop genommen habe und an einen anderen Switch gegangen bin, war das Problem weg:

Lesen vom Samba Share (sprich kopieren einer grossen Datei aus dem Share auf die lokale Disk) gibt reproduzierbar dauerhaft 113 MB/s. Und das bei eingeschalteter Kompression (zstd), atime=off, relatime=off. Das ist schon mal gut! das Lesen scheint also OK zu sein.

1702023105016.png

Wenn ich übrigens von einer VM, die auf dem selben Proxmox Host läuft, auf den Samba zugreife, sieht das natürlich anders aus:

1702023220254.png

das ist auch klar, weil hier die Daten nicht übers Netzwerk müssen, sondern nur vom LXC zur VM direkt durchgereicht werden können. Warum die Performance so schwankt, weiss ich grade nicht, aber kann natürlich damit zusammen hängen, dass auf dem Proxmox Host ja noch ein paar andere VM laufen, die ja auch zugreifen. Und, Windows halt...... die ~200..300 MB/s sind aber meiner Meinung nach OK. Viel viel schneller kann es wohl nicht werden, weil der Speicher ja aus Festplatten besteht und da dann irgendwann wohl der Flaschenhals auftaucht.

Jetzt, beim Schreiben auf den Samba Share sieht es ein wenig anders aus. Hier der Test, wenn ich auf dem selben Proxmox Host aus einer VM auf den Samba LXC schreibe:

1702023427305.png

Speed ist grundsätzlich OK, aber bricht zwischendurch auf 0 ein.

Wenn ich vom Laptop aus (am funktionierenden Switch!) schreibe, dann sieht es ähnlich aus. Ich habe leider grade kein Screenshot. Aber grundsätzlich ist die Performance OK, aber zwischendurch macht er lange Pausen, wo der Speed dann auf 0 zusammen bricht. Woran kann das liegen?
 
ich denke das er beim Schreiben dann ne Pause macht und dann den Cache auf die HDDs schreibt und wenn das fertig ist er wieder weiter macht
 
  • Like
Reactions: Dunuin

About

The Proxmox community has been around for many years and offers help and support for Proxmox VE, Proxmox Backup Server, and Proxmox Mail Gateway.
We think our community is one of the best thanks to people like you!

Get your subscription!

The Proxmox team works very hard to make sure you are running the best software and getting stable updates and security enhancements, as well as quick enterprise support. Tens of thousands of happy customers have a Proxmox subscription. Get yours easily in our online shop.

Buy now!