Windows Server 2012: SMB Multichannel

Windows Server 2012 поддерживает функцию SMB Multichannel, которая является частью протокла SMB 3.0 и позволяет сильно увеличить производительность и доступность файловых серверов.

SMB Multichannel позволяет файловым серверам использовать несколько сетевых подключений одновременно и предоставляет следующие возможности:

  • Увеличенная пропускная способность. Файловый сервер может при передаче данных использовать одновременно несколько сетевых подключений.
  • Отказоустойчивость к сбоям в сети. При использовании нескольких сетевых подключений клиент продолжает работать с файловым сервером, даже если несколько сетевых подключений перестанут работать.
  • Автоматическая настройка. SMB Multichannel автоматически обнаруживает существование нескольких доступных сетевых подключений и автоматически начинает их использовать по мере необходимости.

Требования. SMB Multichannel требует следующего:

  • Как минимум два компьютера с Windows Server 2012 или Windows 8

Нужна как минимум одна из следующих конфигураций:

  • Несколько сетевых адаптеров
  • Один или несколько сетевых адаптеров, подерживающих RSS (Receive Side Scaling)
  • Один или несколько сетевых адаптеров, объединённых в NIC Teaming
  • Один или несколько сетевых адаптеров, подерживающих RDMA (Remote Direct Memory Access)

Как работает? SMB Multichannel проектировался для достижения следующих целей:

  • Группировка и объединение одинаковых сетевых адаптеров (отказоустойчивость в случае сбоя)
  • Установка нескольких подключений (TCP/IP) в рамках одного сетевого адаптеров (эффективное использование ресурсов – процессора и ширины канала)

SMB клиент может использовать эти свойства как по отдельности, там и совместно. Клиент сам решает как их применять, в зависимости от имеющихся сетевых адаптеров.

Клиент отвечает за правила выбора сетевых адаптеров и количество подключений. Сервер же отвечает за определение доступных для клиента сетевых адаптеров, а так же их параметров. После первого подключения к серверу клиент использует специальную функция для того, чтобы пронумеровать сетевые адаптеры сервера, а так же получить их параметры.

Если существует несколько сетевых адаптеров на клиенте или сервере (или на обоих) и существует сетевой путь между ними, то карты будут помещены в специальный список, содержащий доступные сетевые адаптеры. В списке доступных сетевых адаптеров клиент будет их группировать по типу (1 GbE, 10 GbE, и RDMA). Среди этих групп клиент затем выберет, какие сетевые карты должны использоваться. Делается это упорядочиванием типов групп, затем выбирается группа с самым высоким приоритетом.

У разных типов адаптеров будет разный приоритет:

  1. RDMA-совместимые адаптеры (InfiniBand, iWARP, или RoCE)
  2. RSS совместимые адаптеры
  3. NIC Teaming адаптеры
  4. Стандартные сетевые адаптеры (физические или виртуальные)
  5. Беспроводные сетевые адаптеры

Как указывалось выше, клиент будет группировать сетевые адаптеры на основании их типа. Например, RDMA-совместимые адаптеры будут помещены в одну группу и будут использоваться вместе. Если и на клиенте и на сервере будет по два RDMA-совместимых адаптера, клиент будет использовать их всех. Если клиент и сервер имеют по 10GbE сетевому адаптеру, каждый из которых будет RSS-совместимый, то клиент будет создавать несколько TCP/IP подключений через один сетевой адаптер.

Клиент может столкнуться с несоответствием скоростей сетевых адаптеров. Например, будет иметь четыре 1GbE адаптера, а сервер один 10GbE адаптер. В этом случае клиент может создать TCP/IP соединения через каждый из своих 1GbE адаптеров. Это обеспечит большую производительность. Сценарий будет рабочим, так как общая пропускная способность со стороны сервера будет больше, чем со стороны клиента.

Нумерация сетевых адаптеров будет происходить динамически. Если сетевой адаптер будет удалён, или добавлен после того, как клиент начал взаимодействовать с сервером, изменения в списке сетевых адаптеров будут сразу же использоваться клиентом. Например, если пользователь начал копирование файла через беспроводную сеть, а затем подключил 1GbE сетевой адаптер, SMB клиент начнёт использовать новый адаптер, так как он будет иметь более высокий приоритет по сравнению с беспроводным.

Настройка. SMB Multichannel включен по умолчанию. Ставить какие-либо дополнительные компоненты или роли не нужно. SMB клиент автоматически найдёт и начнёт использовать несколько сетевых подключений при обнаружении правильной конфигурации.

Не смотря на то, что SMB Multichannel включен по умолчанию, его можно отключить при необходимости.

На стороне SMB сервера отключение происходит следующим образом:

Set-SmbServerConfiguration -EnableMultiChannel $false

На стороне SMB клиента отключение происходит следующим образом:

Set-SmbClientConfiguration -EnableMultiChannel $false

Обратное включение на стороне сервера:

Set-SmbServerConfiguration -EnableMultiChannel $true

Обратное включение на стороне клиента:

Set-SmbClientConfiguration -EnableMultiChannel $true

Функцию необходимо включать и со стороны сервера и со стороны клиента, иначе она не будет работать.

Ниже подробнее рассмотрены разные конфигурации, с которыми может работать SMB Multichannel

  • Один RSS сетевой адаптер. В этой стандартной конфигурации и SMB клиент и SMB сервер используют один 10GbE адаптер. Без SMB Multichannel, если установлена одна SMB-сессия, протокол SMB использует единственное TCP/IP подключение, которое сопоставляется с одним ядром процессора. Если совершается множество мелких операций чтения/записи, производительность ядра процессора может стать узким местом.Большинство сетевых адаптеров сегодня предлагают использовать функцию Receive Side Scaling (RSS), которая позволяет автоматически распределять несколько подключений по нескольким ядрам процессора. Тем не менее, при одном подключении RSS не поможет.С SMB Multichannel, при использовании сетевого адаптера, поддерживающего RSS, SMB будет создавать несколько TCP/IP подключений для одной SMB-сессии. таким образом устраняется возможное узкое место, связанное с использование только одного ядра процессора, в случае, когда требуется осуществить много небольших операций чтения/записи.
  • Несколько сетевых адаптеров. При использовании нескольких сетевых адаптеров при отключенном SMB Multichannel устанавливается всего одна SMB-сессия, SMB создаёт одно TCP/IP подключение, использующее только один сетевой адаптер. В этой ситуации не только нельзя объединить пропускную способность нескольких карт, но и возникает вероятность сбоя, если используемый сетевой адаптер выйдет из строя или будет отключен.При использовании SMB Multichannel SMB создаст несколько TCP/IP подключений для единственной SMB-сессии (по крайней мере по одному на каждый сетевой адаптер, или больше, если сетевые адаптеры поддерживают RSS). Это позволит SMB использовать общую пропускную способность всех сетевых адаптеров, а так же позволит SMB клиенту продолжать работать в случае выхода из строя одного сетевого адаптера.
  • Использование NIC Teaming. Windows Server 2012 поддерживает возможность объединять несколько сетевых адаптеров в один при помощи новой функции – NIC Teaming. Хотя такое объединение будет отказоустойчивым, SMB без SMB Multichannel будет создавать только одно TCP/IP подключение. Это означает, что будут ограничения по числу используемых процессорных ядер. Кроме этого будет использоваться не вся пропускная способность объединения сетевых адаптеров.SMB Multichannel создаст несколько TCP/IP подключений, что позволит лучше распределять нагрузку на ядра процессора и использовать всю доступную пропускную способность. NIC Teaming будет предоставлять отказоустойчивую конфигурацию, которая будет работать быстрее чем при использовании одного SMB Multichannel. NIC Teaming рекомендуется использовать так же и потому, что он предоставляет отказоустойчивость и для других задач, не связанных с SMB.
  • Один или несколько RDMA сетевых адаптеров. SMB Multichannel отвечает за обнаружение поддержки RDMA сетевого адаптера, что в дальнейшем позволяет использовать функцию SMB Direct (SMB over RDMA). Без SMB Multichannel SMB будет использовать обычный TCP/IP на этих RDMA-совместимых сетевых адаптерах.При использовании SMB Multichannel SMB определит, что сетевые адаптеры RDMA-совместимые и создаст несколько RDMA-подключений для одной SMB-сессии (два на каждый сетевой адаптер). Это позволит SMB использовать высокую пропускную способность, низкие задержки и низкую загрузку процессора. Если используется несколько RDMA сетевых карт, то конфигурация будет отказоустойчивой.
  • Совместимость SMB Multichannel, RDMA и NIC Teaming. В таблице ниже собраны различные характеристики, доступные при использовании различных комбинаций SMB Multichannel, RDMA (SMB Direct) и NIC Teaming.
    Для сетевых адаптеров, не поддерживающих RDMA, лучше всего использовать комбинацию NIC Teaming и SMB Multichannel. Она даст наибольшую пропускную способность и отказоустойчивость для приложений использующих SMB и другие протоколы.Для сетевых адаптеров, поддерживающих RDMA, NIC Teaming не самый хороший вариант, так как отключает RDMA.
  • Простые конфигурации, в которых не используется SMB Multichannel. Следующие конфигурации не используют SMB Multichannel:Единственный, не поддерживающий RSS, сетевой адаптер. Эта конфигурация не позволяет использовать несколько сетевых подключений, следовательно SMB Multichannel использоваться не будет.Сетевые адаптеры с различными скоростями работы. SMB Multichannel использует самую быструю сетевую карту. Сетевые карты одинаковых типов (RDMA, RSS) и скоростей будут использоваться SMB Multichannel одновременно, поэтому медленный адаптер не будет задействован.

Количество SMB подключений на сетевой адаптер. SMB Multichannel будет использовать разное количество подключений в зависимости от типа сетевого адаптера:

  • Для RSS-совместимых адаптеров, четыре TCP/IP подключения на сетевой адаптер
  • Для RDMA-совместимых адаптеров, два TCP/IP подключения на сетевой адаптер
  • Для остальных – одно TCP/IP подключение на сетевой адаптер

Существует так же ограничение на восемь TCP/IP подключений на пару клиент/сервер, которое так же ограничивает количество подключений на сетевой адаптер.

Рекомендуется эти дефолтные значения не менять.

При необходимости, общее количество подключений на пару клиент/сервер выставляется в N следующим образом:

Set-SmbClientConfiguration –MaximumConnectionCountPerServer <N>

При необходимости, общее количество подключений через RSS-совместимый адаптер выставляется в N следующим образом:

Set-SmbClientConfiguration -ConnectionCountPerRssNetworkInterface <N>

Количество подключений через RDMA-совместимый адаптер выставляется в N следующим образом:

Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\Lanman\Workstation
Parameters" ConnectionCountPerRdmaNetworkInterface -Type DWORD -Value <N> –Force

Количество подключений для остальных типов адаптеров выставляется следующим образом:

Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\Lanman\Workstation
Parameters" ConnectionCountPerNetworkInterface -Type DWORD -Value <N> –Force

Последнее делать рекомендуется только для решения возникающих проблем, так как снижает производительность файлового сервера. По завершении рекомендуется возвращать это значение в единицу.

Ограничения SMB Multichannel. Для контроля SMB Multichannel в более сложных конфигурациях используются командлеты SmbMultichannelConstraint. Например, если у нас имеются четыре сетевых адаптера, но мы хотим, чтобы SMB Multichannel из них использовал только два, то можно использовать следующие команды:

New-SmbMultichannelConstraint -ServerName FS1 -InterfaceIndex 12, 19

или

New-SmbMultichannelConstraint -ServerName FS1 -InterfaceAlias RDMA1, RDMA2

Следует помнить что:

  • Ограничения делаются со стороны клиента и сохраняются в реестре
  • Ограничения делаются на сервер, так как может понадобиться настраивать разные сетевые адаптеры для работы с разными серверами
  • Указываются сетевые адаптеры, которые нужно использовать, а не наоборот
  • Получить список сетевых адаптеров можно через Get-NetAdapter
  • К серверам, которые не указываются в ограничениях применяются дефолтные настройки

Исходные документы:
The basics of SMB Multichannel, a feature of Windows Server 2012 and SMB 3.0
Windows 8 SMB 2.2 File Sharing Performance

2 thoughts on “Windows Server 2012: SMB Multichannel

Leave a Reply

Your email address will not be published. Required fields are marked *