SMB 3.0, SMB Multichannel e SMB 3.02

Tramite Windows Server 2012 è possibile utilizzare le share di rete come storage per i server applicativi (SQL Server, Hyper-V). Per la precisione la possibilità di utilizzare share di rete per memorizzare database utente era già presente in SQL Server 2008 R2, mentre SQL Server 2012 ha aggiunto la possibilità di memorizzare su share anche i database di sistema. Ora con WS2012 anche Hyper-V permette di eseguire VM i cui vhd/vhdx sono memorizzati su una share di rete.

Nella versione 3.0 dell’SMB (Server Message Block) presente in WS2012 è stato introdotto l’SMB Multichannel, una tecnologia simile al Multipath I/O, ma pensata per l’accesso condiviso dei tramite share di rete (l’SMB 3.0 è in relata il rename della SMB 2.2). L’SMB Multichannel permette di trarre vantaggio da schede di rete multiple per maggiori performance tramite aggregazione di banda e fault tollerance mediante l’uso di path di rete multipli verso una share SMB.

Tre sono i punti di forza dell’SMB Multichannel:

  1. Aumento del throughput mediante la trasmissione simultanea di dati utilizzando connessioni multiple.
  2. Fault Tolerance grazie a multiple connessioni di rete contemporanee.
  3. Configurazione automatica in quanto l’SMB Multichannel esegue il discover automatico dell’esistenza dei path di rete multipli disponibili e dinamicamente crea le connessioni. In altre parole non occorre installare alcun ruolo, funzionalità o componente in quanto l’SMB Multichannel è abilitato per default.

Come ho detto l’SMB Multichannel è una delle novità dell’SMB 3.0 che introduce le seguenti novità (per una panoramica si veda la KB2709568 New SMB 3.0 features in the Windows Server 2012 file server):

  • SMB Transparent Failover
  • SMB Scale Out
  • SMB Multichannel
  • SMB Direct
  • SMB Encryption
  • VSS for SMB file shares
  • SMB Directory Leasing
  • SMB PowerShell

Per ulteriori informazioni si veda anche la KB2696547 How to enable and disable SMBv1, SMBv2, and SMBv3 in Windows Vista, Windows Server 2008, Windows 7, Windows Server 2008 R2, Windows 8, and Windows Server 2012.

Requisiti dell’SMB Multichannel

  1. Le connessioni devono avvenire mediante sistemi che supportino l’SMB 3.0 e quindi Windows 8 o superiore, Windows Server 2012 o superiore oppure NAS con supporto all’SMB 3.0 (per esempio EMC ha annunciato il supporto per VNX, EMC VMAX, EMC Isilon, ma non è la sola anche NetApp ne ha annunciato il supporto e inoltre Samba 4.0 rilasciato l’11 dicembre 2012 oltre al supporto per Active Directory contiene un’implementazione iniziale di SMB3 questo significa che piano pino i NAS basati su distribuzioni Linux avranno il supporto all’SMB Multichannel).
    I client SMB 1.0 e 2.x quando si connettono ad un server SMB 3.0 utilizzano una singola connessione SMB.
  2. Una delle seguenti configurazioni per quando riguarda la connettività di rete:
    • Schede di rete multiple
    • Una o più schede di rete con supporto all’RSS (Receive Side Scaling)
    • Una o più schede di rete configurare tramite NIC Teaming
    • Una o più schede di rete con supporto all’RDMA (Remote Direct Memory Access)

Quindi non verrà utilizzato l’SMB Multichannel nei seguenti scenari:

  • Connessione mediante una sola NIC senza supporto all’RSS
  • Connessione mediante NIC tutte con velocità differenti in quanto l’SMB Multichannel scegli di utilizzare la NIC più veloce lasciando le altre in idle. Perchè l’SMB Multichannel venga utilizzato occorre che le NIC siano dello stesso tipo (con supporto a RDMA, RSS o meno) e velocità

Come detto precedentemente l’SMB Multichannel è abilitato per default, ma volendo è possibile disabilitarlo e riabilitarlo tramite PowerShell se si intende eseguire verifiche per ragioni di test (ovviamente perché l’SMB Multichannel venga utilizzato deve essere abilitato, o meglio non disabilitato, sia lato server SMB che client SMB):

  • Disabilitazione sul server SMB: Set-SmbServerConfiguration -EnableMultiChannel $false
  • Disabilitazione sul client SMB: Set-SmbClientConfiguration -EnableMultiChannel $false
  • (Ri)Abilitazione sul server SMB: Set-SmbServerConfiguration -EnableMultiChannel $true
  • (Ri)Abilitazione sul client SMB: Set-SmbClientConfiguration -EnableMultiChannel $true

Configurazione a singola scheda di rete con supporto all’RSS

In uno scenario in cui il client e il server SMB sono connessi tramite una NIC con supporto all’RSS che permette di distribuire il carico della gestione delle connessioni TCP su più core (o processori) senza l’SMB Multichannel verrà instaurata una sola sessione SMB e quindi sarà utilizzata una sola connessione TCP/IP che verrà gestita da una sola CPU.

image

Grazie all’SMB Multichannel invece verranno create più connessioni TCP/IP che grazie all’RSS saranno gestite da più core evitando quindi colli di bottiglia legati all’uso di un singolo core che possono verificarsi quando sono eseguiti molti piccoli IO.

image

Per maggiori informazioni sull’RSS si veda Receive side scaling on Intel Network Adapters, per correggere un problema legato alla corretta gestione dell’utilizzo dei core su computer con tre o più NIC con supporto a RSS si installi la KB2846837 Incorrect RSS processor assignment on a Windows 8 or Windows Server 2012-based computer that has multi-core processors (per verificare se le NIC supportano RSS è possibile utilizzare il comando PowerShell Get-NetAdapterRss).

Configurazione a schede di rete multiple

In uno scenario in cui il client e il server SMB sono connessi tramite NIC multiple senza l’SMB Multichannel verrà instaurata una sola sessione SMB e quindi sarà utilizzata una sola connessione TCP/IP indipendentemente che dal fatto che vi siano più NIC a disposizione con la conseguenza che di fatto verrà utilizzata una sola NIC sul client e sul server senza che vi sia aggregazione di banda o fault tollerance.

image 

Mediante all’SMB Multichannel invece verranno create più connessioni TCP/IP per una singola sessione SMB, almeno una per ogni NIC e sulle NIC con supporto all’RSS più di una. In questo modo la sessione SMB usufruirà di banda maggiore e sarà garantita la Fault Tolerance.

image

Configurazione a singola o multiple schede di rete con supporto all’RDMA

L’SMB Multichannel si occupa anche di rilevare se le NIC supportano l’RDMA per abilitare l’SMB Direct (SMB over RDMA), l’RDMA permette di utilizzare completamente la velocità della NIC, avere bassa latenza e basso utilizzo della CPU di conseguenza l’SMB Direct permette di aumentare il throughput, abbassare la latenza e ridurre l’utilizzo della CPU. Per workload come SQL Server e Hyper-V l’SMB Direct permette di utilizzare una server remoto per archiviazione su share garantendo performance simili ad uno storage locale. Al momento vi sono tre tipologie di NIC con supporto all’RDMA: iWARP, Infiniband, e RoCE (RDMA over Converged Ethernet).

In uno scenario in cui il client e il server SMB sono connessi tramite NIC singola o multiple con supporto all’RDMA senza l’SMB Multichannel l’SMB Direct non verrà abilitato e sarà usata una sola connessione TCP/IP.

image

Mediante all’SMB Multichannel verrà invece rilevato il supporto all’RDMA della/e NIC e saranno create due sessioni RDMA per ogni NIC per una singola sessione SMB, in questo modo si avrà un elevato throughput, bassa latenza, basso utilizzo della CPU e fault tolerance (nel caso si usino multiple NIC).

image

Si noti che per usufruire l’RDMA le NIC non vanno messe in Team, inoltre quando una sessione RDMA viene creata la connessione TCP/IP utilizzata per la negoziazione non viene più utilizzata come riportato nel post The basics of SMB Multichannel, a feature of Windows Server 2012 and SMB 3.0:

Note 1: A team of RDMA-capable teams is reported as non-RDMA capable. If you intend to use the RDMA capability of the NIC, do not team them.

Note 2: After at least one RDMA connection is created, the TCP/IP connection used for the original protocol negotiation is no longer used. However, that connection is kept around in case the RDMA connections fail.

E’ possibile gestire l’SMB Direct tramite PowerShell:

  • Disabilitazione su di una NIC: Disable-NetAdapterRdma InterfaceName
  • Disabilitazione su tutte le NIC: Set-NetOffloadGlobalSetting -NetworkDirect Disabled
  • (Ri)Abilitazione su una NIC: Enable-NetAdapterRDMA InterfaceName 
  • (Ri)Abililitazione su tutte le NIC: Set-NetOffloadGlobalSetting -NetworkDirect Enabled

Per uno step-by-step sull’implementazione dell’SMB Direct si veda Deploying Windows Server 2012 with SMB Direct (SMB over RDMA) and the Intel NetEffect NE020 card using iWARP – Step by Step

Per ulteriori informazioni si veda Improve Performance of a File Server with SMB Direct e in particolare si notino i seguenti tips:

Increase performance of file servers

The purpose of using RDMA-capable network adapters and SMB Direct is to improve the performance on SMB file servers. The list below outlines some tips to help you reach optimal performance from your file servers. Note that these tips are not necessarily related to SMB Direct.

  • Disable hyperthreading. You can disable hyperthreading using a BIOS setting for the processor during the BIOS setup.
  • Disable processor C States. You can disable C States using a BIOS setting for the processor during the BIOS setup.
  • Set server power profile. Ensure that you set the server power profile to “high performance”. This disables the clock frequency scaling and makes sure you are achieving the best possible performance. To do this, type the following at a command prompt: POWERCFG.EXE /S SCHEME_MIN

Configurazione con schede di rete in Teaming

Con Windows Server 2012 è stata introdotta la possibilità di unire più schede di rete come fossero una sola tramite la feature denominata NIC Teaming noto anche come Load Balancing/Failover (LBFO).

In uno scenario in cui il client e il server SMB sono connessi tramite NIC multiple su cui è configurato il NIC Teaming senza l’SMB Multichannel verrà creata una sola connessione TCP/IP per team quindi verrà garantita la Fault Tollerance, ma si avranno limitazioni per quanto riguarda la possibilità di utilizzare l’intera banda del team e in termini di core utilizzati per la gestione della sessione SMB. Infatti verrà di fatto solo utilizzata una NIC e un core.

image

Mediante all’SMB Multichannel verranno invece create per una singola sessione SMB più connessioni TCP/IP che saranno bilanciate su più core con un migliore utilizzo della banda resa disponibile dal team, ovviamente il NIC Teaming continuerà ad offrire la Fault Tollerance.

image 

Il NIC Teaming può anche essere utilizzato con workloads che non prevedono l’utilizzo di SMB in questo caso ovviamente non entrerà in gioco l’SMB Multichannel che va ad aumentare le performance del NIC Teaming che comunque garantisce il Fault Tollerance.

Come detto precedentemente se NIC con supporto all’RDMA vengono messe in team perdono la possibilità di utilizzare l’RDMA.

Considerazioni sulla compatibilità di RDMA, NIC Teaming e SMB Multichannel

Nella seguente tabella vengono schematizzate i benefici che ciascuna configurazione e tecnologia può apportare nella gestione di una sessione SMB:

image

Quindi riassumendo potremmo dire che:

  • Se si hanno NIC senza il supporto all’RDMA la cosa migliore è utilizzare la combinazione NIC Teaming con SMB Multichannel
  • Se si hanno NIC con supporto all’RDMA è meglio non utilizzare il NIC Teaming perché non si l’RDMA non sarebbe utilizzabile, ma conviene utilizzare schede di rete multiple per avere la Fault Tolerance.

Considerazioni sulle performace dell’SMB Multichannel

Nella seguente slide vengo riportati i risultati di alcuni test eseguiti disponibili nella White Paper Windows 8 SMB 2.2 File Sharing Performance

image

Come riportato nel seguente The basics of SMB Multichannel, a feature of Windows Server 2012 and SMB 3.0, l’SMB Multichannel utilizza un numero di connessioni TCP/IP per NIC che può variare da 1 a 4 per un massimo totale di 8 (per default) in relazione al tipo di interfaccia di rete utilizzato o per meglio dire in base al supporto di RSS, RDMA da parte della NIC:

SMB Multichannel will use a different number of connections depending on the type of interface:

  • For RSS-capable interfaces, 4 TCP/IP connections per interface are used
  • For RDMA-capable interfaces, 2 RDMA connections per interface are used
  • For all other interfaces, 1 TCP/IP connection per interface is used

There is also a limit of 8 connections total per client/server pair which will limit the number connections per interface.

For instance, if you have 3 RSS-capable interfaces, you will end up with 3 connections on the first, 3 connections on the second and 2 connections on the third interface.

We recommend that you keep the default settings for SMB Multichannel. However, those parameters can be adjusted.

E’ possibile gestire il numero di connessioni tramite PowerShell:

  • Impostazione numero totale di connessioni TCP/IP tra client e server SMB:
    Set-SmbClientConfiguration –MaximumConnectionCountPerServer <n>
  • Impostazione numero connessioni TCP/IP per una NIC con supporto a RSS:
    Set-SmbClientConfiguration -ConnectionCountPerRssNetworkInterface <n>
  • Impostazione numero connessioni TCP/IP per una NIC con supporto a RDMA (tramite chiave di registro:
    Set-ItemProperty –Path ‘”HKLM:\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters”’ ConnectionCountPerRdmaNetworkInterface -Type DWORD -Value <n> –Force
  • Impostazione numero connessioni TCP/IP per NIC senza supporto a RSS e RDMA (tramite chiave di registro):
    Set-ItemProperty –Path ‘”HKLM:\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters”’ ConnectionCountPerNetworkInterface -Type DWORD -Value <n> –Force

Sempre tramite PowerShell è anche possibile specificare che il client SMB di utilizzare solo alcune delle NIC e tutte quando accede ad un file server, per esempio se si hanno 4 NIC (NIC01, NIC02, NIC03, NIC04) e si vuole usare solo NIC01 e NIC02 (con ID 12 e 19) quando si accede al file Server SrvFS01 è possibile eseguire i comandi:

New-SmbMultichannelConstraint –ServerName SrvFS01 -InterfaceIndex 12, 19

oppure

New-SmbMultichannelConstraint –ServerName SrvFS01 -InterfaceAlias NIC01, NIC02

Per un elenco delle NIC è possibile usare il comando Get-NetAdapter.

Per alcune considerazione sulle performance per quanto riguarda l’utilizzo di Hyper-V in combinazione con l’SMB (ovvero quando i VHD/VHDX sono memorizzati su share di rete) si veda Hyper-V over SMB – Performance considerations.

Riferimenti e novità in Windows Server 2012 R2

Per ulteriori approfondimenti è possibile fare riferimento ai seguenti:

Per quanti riguarda invece le novità che Windows Server 2012 R2 introdurrà è possibile vedere i seguenti:

In particolare in WS2012 R2 introdurrà SMB 3.02 in cui saranno disponibili le seguenti nuove funzionalità:

  • Automatic rebalancing of Scale-Out File Server clients: le connessioni SMB client saranno tracciate per share e non per server quindi i client vengono rediretti al nodo cluster che ha l’accesso più performante al volume usato dalla share, in questo modo si aumenta l’efficienza e il traffico di redirezione tra i nodi del file server.
  • VHDX files as shared storage for guest clustering: Permettere di semplificare la creazione di guest cluster consentendo di utilizzare come storage per le VM i VHDX. E’ possibile utilizzare come storage i VHDX su Cluster Shared Volumes (CSV) o su SMB Scale-Out file shares (per maggiori informazioni si veda Deploy a Guest Cluster Using a Shared Virtual Hard Disk).
  • Hyper-V Live Migration over SMB: In WS2012R2 è possibile eseguire la live migration delle VM utilizzando SMB 3.0 come trasporto sfruttanto SMB Multichannel e SMB Direct per ottenere elevate velocità di migrazione delle VM a fronte di un basso utilizzo della CPU.
  • Improved SMB bandwidth management: E’ ora possibile configurare la banda SMB per gestire tre tipi di traffico SMB ovvero default, live migration e virtual machine.
  • Support for multiple SMB instances on a Scale-Out File Server: Fornisce un’istanza aggiuntiva su ogni nodo del cluster di uno Scale-Out File Server specificatamente per il traffico CSV. Un’istanza di default può gestire il traffico in entrata dei client SMB, mentre un’altra istanza può gestire il traffico iter-node CSV in modo aumentare la scalabilità e l’affidabilità del traffico tra i nodi CSV.

Di seguito invece le funzionalità che sono state aggiornate o migliorate in WS2012R2:

  • SMB Direct (SMB over RDMA): Miglioramento delle performance per i workloads che causano piccoli I/O come ad esempio database OLTP in VM. I miglioramenti risultano evidenti quando vengono utilizzate NIC ad alta velocità (40 Gbps Ethernet and 56 Gbps InfiniBand).
  • SMB 1.0 opzionale: le features dell’SMB 1.0 legacy computer browser service e Remote Administration Protocol (RAP) sono state separate e possono essere eliminate se nell’infrastruttura non vi sono client SMB che le utilizzano (Windows XP/Windows Server 2003). Rimuovendo tali funzionalità si avranno benefici in termini di sicurezza.

Come descritto in questo post Storage Transformation for your Datacenter si sta facendo strada un nuovo modello di storage condiviso basato su SMB che risulta interessante soprattutto per le infrastrutture a budget limitato dove una SAN non è disponibile.

image

 

Infatti come riportato sempre nel post Storage Transformation for your Datacenter vengono riportati i risultati delle performance relative allo storage (il documento completo è disponibile al seguente ESG Lab report) in cui risulta evidente come ad esempio i worloads OLTP eseguiti in VM siano allineati in performance rispetto all’utilizzo di SAN Fiber Channel o iSCSI

image

An additional upcoming report includes additional performance validation, such as the table below, which compares 2, 4, 6, and 8 VM SQL workload transactions per second across various storage architectures.

Ulteriori informazioni si possono trovare nell’ebook gratuito Introducing Windows Server 2012 R2 Preview Release dove vengono riportate le seguenti:

Miglioramenti all’SMB Direct

“the performance of SMB Direct has been enhanced to provide a 50 percent improvement for small IO workloads when used with RDMA-capable network adapters. For example, 8KB data transfers have now increased from about 300K I/O operations per second (IOPS) to about 450K IOPS per interface”

Gestione della banda SMB

“three categories of bandwidth limits have been configured to ensure optimal performance of the various infrastructure components present in this infrastructure:

  • Default A limit of 100 MB/s has been configured for Hyper-V host 1 to use SMB when performing file copies from the file server used for library storage by VMM 2012 R2.
  • VirtualMachine No limit has been set for the amount of bandwidth that Hyper-V host 1 can utilize when using SMB to access virtual machine files stored on the SoFS.
  • LiveMigration A limit of 500 MB/s has been set for SMB to use when performing live migrations of virtual machines from Hyper-V host 1 to Hyper-V host 2.”

image