SMB- und Netzwerk-Performance-Optimierung

Fileserver-Performance-Probleme (insb. Branchensoftware wie DS-Win, Datev, BDE-basierte Anwendungen) in physischen und Hyper-V-Umgebungen unter Windows Server 2016/2019/2022/2025.

Vorbedingung: Die häufigsten Ursachen wurden bereits ausgeschlossen:

  • Defekte Hardware (Kabel, Switch-Port, NIC)
  • Virenscanner / EDR (Ausschlüsse für Datenbank-/Freigabepfade)
  • DNS-Konfiguration (nur interne DNS, keine öffentlichen Forwarder auf Clients)
  • Netzwerk-Auslastung / Duplex-Mismatch
  • Ausreichend RAM/CPU auf Host und VM

Hinweis: Änderungen schrittweise durchführen, zwischen den Schritten jeweils testen. Nicht alle Maßnahmen pauschal anwenden.


1. NIC-Offloading deaktivieren (LSO/RSC)

Ursache

Large Send Offload (LSO) und Receive Segment Coalescing (RSC) lassen die Netzwerkkarte Paket-Segmentierung bzw. -Zusammenführung übernehmen. In virtualisierten Umgebungen (Hyper-V) führt dies häufig zu Re-Segmentierung im vSwitch, erhöhter Latenz und Paketverlusten – besonders spürbar bei vielen kleinen SMB-Requests.

Durchführung – Physischer Host / Fileserver (Bare Metal)

Gerätemanager → Netzwerkadapter → physische NIC → Rechtsklick → Eigenschaften → Reiter "Erweitert"

Folgende Einträge auf Deaktiviert setzen:

  • Large-Send-Offload V2 (IPv4)
  • Large-Send-Offload V2 (IPv6)

Durchführung – Virtuelle Maschine (Hyper-V Gast)

Gerätemanager → Netzwerkadapter → Hyper-V Virtual Ethernet Adapter → Rechtsklick → Eigenschaften → Reiter "Erweitert"

Folgende Einträge auf Deaktiviert setzen:

  • Large Send Offload Version 2 (IPv4)
  • Large Send Offload Version 2 (IPv6)
  • Recv Segment Coalescing (IPv4)
  • Recv Segment Coalescing (IPv6)

Alternativ via PowerShell (schneller, reproduzierbar)

powershell

# Aktuelle Einstellungen anzeigen
Get-NetAdapterAdvancedProperty -Name "Ethernet" | Where-Object DisplayName -like "*Offload*"

# LSO deaktivieren
Disable-NetAdapterLso -Name "Ethernet"

# RSC deaktivieren (nur im Gast relevant)
Disable-NetAdapterRsc -Name "Ethernet"

Verifikation

powershell

Get-NetAdapterLso -Name "Ethernet"
Get-NetAdapterRsc -Name "Ethernet"

Erwartet: V2IPv4Enabled : False, V2IPv6Enabled : False, IPv4Enabled : False, IPv6Enabled : False.

Rollback

powershell

Enable-NetAdapterLso -Name "Ethernet"
Enable-NetAdapterRsc -Name "Ethernet"

Oder im Gerätemanager die Einträge wieder auf „Aktiviert“ setzen.


2. Software-RSC im Hyper-V vSwitch deaktivieren

Ursache

RSC im vSwitch ist seit Server 2019 standardmäßig aktiv. Es bündelt eingehende Pakete, bevor sie an die VM durchgereicht werden. Bei Workloads mit vielen kleinen Requests (SMB, Branchen-DBs) führt das zu erhöhter CPU-Last und Latenz-Spitzen.

Quelle: Microsoft Docs – RSC im vSwitch

Durchführung (am Hyper-V-Host, PowerShell als Administrator)

powershell

# Alle vSwitches auflisten (Name ermitteln)
Get-VMSwitch

# Software-RSC auf dem gewünschten vSwitch deaktivieren
Set-VMSwitch -Name "vSwitchName" -EnableSoftwareRsc $false

Verifikation

powershell

Get-VMSwitch -Name "vSwitchName" | Select-Object Name, EnableSoftwareRsc

Erwartet: EnableSoftwareRsc : False

Rollback

powershell

Set-VMSwitch -Name "vSwitchName" -EnableSoftwareRsc $true

3. SMB-AutoDisconnect abschalten

Ursache

Der SMB-Server trennt Idle-Sessions standardmäßig nach 15 Minuten. Anwendungen, die Handles dauerhaft offen halten oder sporadisch zugreifen, müssen dadurch ständig neu verbinden – das erzeugt merkliche Verzögerungen und im schlimmsten Fall Lock-Probleme.

Durchführung (am Fileserver, CMD oder PowerShell als Administrator)

cmd

net config server /autodisconnect:-1

Der Wert -1 deaktiviert das automatische Trennen vollständig.

Verifikation

cmd

net config server

Erwartet in der Ausgabe: Leerlaufzeit einer Serversitzung (Min): -1

Rollback

cmd

net config server /autodisconnect:15

(15 Minuten = Windows-Standardwert)


4. SMB-Leases auf kritischen Freigaben deaktivieren

Ursache

SMB-Leases cachen Datei-Handles clientseitig, um Round-Trips zum Server zu sparen. Bei Multi-User-Zugriff auf dieselben Dateien (z. B. geteilte Datenbanken wie BDE, Paradox, proprietäre Branchenformate) führen Leases zu Invalidierungs-Kaskaden und Locking-Problemen. Das Abschalten zwingt jeden Zugriff zum direkten Server-Round-Trip – langsamer im Einzelzugriff, aber deutlich stabiler und oft schneller bei konkurrierendem Zugriff.

Achtung: Nur auf Freigaben anwenden, bei denen das Verhalten dokumentiert problematisch ist (z. B. DS-Win). Nicht pauschal auf alle Freigaben.

Durchführung (am Fileserver, PowerShell als Administrator)

powershell

# Beispiel: Freigabe "H" (Freigabename, nicht Laufwerksbuchstabe)
Set-SmbShare -Name "H" -LeasingMode None
# Rückfrage mit "J" bestätigen

Verifikation

powershell

Get-SmbShare -Name "H" | Select-Object *

Erwartet: LeasingMode : None

Rollback

powershell

Set-SmbShare -Name "H" -LeasingMode Full

5. Optionale weitere Stellschrauben

Diese Punkte nur gezielt prüfen, wenn die obigen Maßnahmen nicht ausreichen:

NIC-Ebene

  • VMQ (Virtual Machine Queues): Bei älteren Broadcom-NICs bekannt problematisch – testweise deaktivieren (Disable-NetAdapterVmq).
  • Interrupt Moderation: Bei latenzsensiblen Workloads auf „Low“ oder „Off“ stellen.
  • Flow Control: Auf Switch- und NIC-Seite abgleichen (beide an oder beide aus).
  • Jumbo Frames (MTU 9000): Nur wenn End-to-End durchgängig unterstützt (NIC, Switch, Gegenstelle). Sonst kontraproduktiv.
  • SR-IOV: Bei unterstützter Hardware im Hyper-V aktivieren für minimale Overhead-Pfade.

SMB-Ebene

  • SMB-Signing: Sicherheitsrelevant – nicht leichtfertig abschalten. Falls via GPO erzwungen und Performance-kritisch, Auswirkungen bewusst abwägen.
  • Oplocks: Set-SmbClientConfiguration -OplocksDisabled $true nur als Ausnahme bei nachweislichen Problemen. Pauschales Deaktivieren verschlechtert die Performance in den meisten Fällen.
  • SMB-Multichannel: Prüfen, ob sinnvoll nutzbar (mehrere NICs oder RSS-fähige Adapter).

Server-Ebene

  • Energieoptionen: Auf „Höchstleistung“ stellen (powercfg -setactive SCHEME_MIN). Balanced-Profile drosseln CPU-Takt.
  • Receive Side Scaling (RSS): Aktiv halten, mehrere CPU-Kerne für NIC-Interrupts konfigurieren.

6. Dokumentation nach Änderung

Nach jedem Eingriff dokumentieren:

  • Datum, Uhrzeit, durchführende Person
  • Betroffener Server / VM / Freigabe
  • Ausgangszustand (Ausgabe der Get-*-Cmdlets)
  • Durchgeführte Änderung
  • Neuer Zustand (Verifikations-Ausgabe)
  • Wahrgenommene Auswirkung (subjektiv + ggf. Messung)

Referenzen