Recieve Side Scaling RSS für File Server

...wieder einmal Hubert mit einem weiteren Gastbeitrag aus unserem Netzwerkteam:

Hallo zusammen,

oft stellen wir im Rahmen von Performance Problemen auf Fileservern, aber auch auf DFS-Servern fest, dass Recieve Side Scaling (RSS) nicht aktiviert ist.
Deswegen möchte ich euch heute ein Paar Informationen mitgeben, was RSS eigentlich ist, und warum es insbesondere für Fileserver eine so essentielle Bedeutung hat.

Recieve Side Scaling gibt es in den Windows Betriebsystemen seit dem Scalable Networking Pack das auf Windows 2003 SP1 nachinstalliert werden konnte.
Seitdem ist es genauso wie TCP Chimney Offload und NetDMA integraler Bestandteil der Windows Server Betriebsysteme.

RSS ermöglicht es den Netzwerk I/O auf mehrere CPUs zu verteilen.
Ohne RSS findet der gesamte Network I/O auf einer einzelnen CPU statt und beschränkt somit den maximalen Netzwerkdurchsatz, den die Maschine liefern kann.
Nach meinen Erfahrungen, kann eine State-of-the-Art CPU unter optimalen Voraussetzungen bis zu 7 GBit/s reinen TCP Verkehrs (ntttcp.exe) aufs Netzwerk pumpen.
Ein 10GBit/s Link kann also ohne RSS ohnehin nicht saturiert werden.

Um RSS nutzen zu können muss die Netzwerkkarte und deren Treiber RSS unterstützen. Dies ist heutzutage aber bei eigentlich allen Server-Adaptern und auch bei Virtuellen Netzwerkkarten der Fall.
Damit RSS funktioniert muss es im Netzwerk-Treiber UND im Betriebssystem eingeschaltet und entsprechend konfiguriert sein.

Im Windows Betriebssystem (seit 2008) ist RSS per Default eingeschaltet.
Beim Netzwerk-Treiber gibt es scheinbar Unterschiede zwischen Herstellern und Treiberversion.

Neben dem Schalter „Ein/Aus“ unterstützen viele Treiber und auch das OS eine granularere Konfiguartion über die folgenden Einstellungen:

RSS Base Processor Number <-  Bestimm bei welcher CPU dieser Adapter anfängt zu zählen
Maximum RSS Processors <- bestimmt wieviele CPUs angefangen mit Base Processor Number RSS für diesen Adapter machen sollen.
RSS Queues <- bestimmt bei vielen moderneren Karten die Anzahl der Queues die der Treiber verwendet und sollte somit der Anzahl der RSS Processors

Somit ist es möglich zum Beispiel die erste NIC für RSS über Base Processor 0 und Max Processors 4 auf die die CPUs 0 – 3 zu konfigurieren und die zweite NIC auf die CPUs 4 – 7

Anmerkung: Die genauen Bezeichnungen der Einstellungen sind von Hersteller zu Hersteller leicht unterschiedlich und manche unterstützen noch zusätzliche Einstellungen.
Weitere Information zu RSS gibt es bei den jeweiligen Netzwerkkarten Herstellern und für die Betriebssystem Einstellungen hier:
https://technet.microsoft.com/en-us/library/hh997036.aspx
https://msdn.microsoft.com/en-us/library/windows/hardware/ff567236(v=vs.85).aspx

Warum aber ist RSS gerade für Fileserver so entscheidend wichtig?

Machen wir einen kurzen Abstecher in die Geschichte.
Mit aufkommen von Multi-Prozessor Maschinen, also lange bevor es RSS gab, brauchte man eine Möglichkeit auch die Fileserver-Arbeit auf mehrere Kerne zu verteilen.
Dafür gibt es im LanmanServer einen Thread der dieses Loadbalancing macht und die Arbeit den einzelnen WorkerQueues und somit den einzelnen CPUs zuordnet.

Als dann mit Windows 2008 die Implementation des neuen SMB Protokolls (SMB2) anstand, stand RSS bereits als Technologie zur Verfügung.
Daher wurde entschieden den zusätzlichen Overhead durch den zusätzlichen, und mit RSS redundanten, Loadbalancing-Thread einzusparen, und die Fileservice-Arbeit auf dem selben Kern zu erledigen, der auch den zugehörigen Network I/O bedient.
Dieser Effizienz-Gewinn gilt ebenso für SMB3.

Wenn also RSS abgeschaltet ist, und der gesamte Netzwerk I/O auf CPU0 läuft, wird auch die gesamte Fileservice Arbeit für SMB2 und SMB3 auf CPU0 erledigt.

Also, ganz platt gesagt: Euer dicker 8-Kern Fileserver ist ohne RSS defakto ein Single-Core Fileserver.

Insbesondere für CPU-intensive Operationen wie ABE-Filterung aber auch bei entsprechend stark frequentierten DFS-Namespace und Fileservern machen sich sehr schnell Performance Defizite bemerkbar, wenn RSS nicht eingeschaltet ist.
Zudem ist RSS eigentlich für alle Server Pflicht, die einen entsprechend hohen Netzwerkdurchsatz liefern müssen, oder viele gleichzeitige Verbindungen halten sollen.
Nehmt euch doch mal die Zeit und prüft auf euren File-Servern, SQL-Server, Exchange-Server, etc. wie es dort um RSS bestellt ist.
Am Besten wäre natürlich, wenn man dies gleich in die Setup-Prozeduren für neue Server mit aufnimmt.

Euer Hubert.