SMB Multichannel в Windows Server 2012
SMB Multichannel – одна из возможностей протокола SMB 3.0, призванная повысить производительность и отказоустойчивость на уровне сетевого соединения при работе с файловыми серверами. Для использования этой возможности SMB-клиент и SMB-сервер должны поддерживать SMB 3.0, который, в свою очередь, реализован в Windows Server 2012 и Windows 8.
Какие преимущества дает SMB Multichannel?
SMB Multichannel позволяет одновременно использовать несколько сетевых соединений с файловым сервером, тем самым обеспечивая:
- Увеличенную пропускную способность. Клиент и сервер SMB могут передавать больший объем данных, одновременно задействуя несколько сетевых соединений, установленных с помощью одного высокоскоростного сетевого адаптера, например 10GbE, или нескольких сетевых адаптеров. В случае нескольких сетевых адаптеров SMB Multichannel фактически агрегирует их полосы пропускания.
- Отказоустойчивость. Выполняемые сетевые операции, например копирование файла, не прерываются в случае потери одного или нескольких соединений до тех пор, пока хотя бы одно соединение продолжает существовать. Потеря соединения может происходить как из-за проблем в сетевой среде (обрыв кабеля, поломка коммутатора и пр.), так и из-за проблем с сетевым адаптером. Таким образом, при использовании нескольких сетевых адаптеров SMB Multichannel обеспечивает отказоустойчивость на уровне физической сетевой карты. Но еще раз отмечу, только для операций по протоколу SMB.
Каковы требования для работы SMB Multichannel?
Для работы SMB Multichannel необходимо выполнение двух требований:
- SMB 3.0 на клиенте и на сервере. На текущий момент эта версия протокола реализована в Windows Server 2012 и Windows 8
- Одна из поддерживаемых конфигураций, рассматриваемых ниже
Поддерживаемые конфигурации
Для работы SMB Multichannel клиент и сервер должны поддерживать как минимум одну из перечисленных ниже конфигураций:
- Несколько сетевых адаптеров с одинаковой скоростью.
- Один и более сетевых адаптеров с поддержкой RSS (Receive Side Scaling)
- Два и более сетевых адаптеров, объединенных в группу с помощью NIC Teaming
- Один и более сетевых адаптеров с поддержкой RDMA (Remote Direct Memory Access)
Как следствие, SMB Multichannel не будет работать, если на компьютере один сетевой адаптер, не поддерживающий RSS, либо если адаптеров несколько, но они работают с разной скоростью. В последнем случае трафик будет передаваться по наиболее быстрому адаптеру.
Некоторые пояснения касательно отдельных конфигураций.
Сетевой адаптер с поддержкой RSS
В отсутствие SMB Multichannel при обращении SMB-клиента к SMB-серверу открывается SMB-сессия, в рамках которой устанавливается одно TCP/IP-соединение. Обработка трафика по этому соединению осуществляется одним из доступных процессорных ядер. Если сетевой адаптер не поддерживает RSS, то в принципе весь сетевой трафик обрабатывается одним ядром, как правило, CPU0. Если сетевой адаптер поддерживает RSS, то обработка сетевого трафика распределяется по доступным процессорным ядрам. Однако без SMB Multichannel в рамках одной сессии устанавливается только одно соединение, и RSS ничем не может помочь этой конкретной сессии.
В случае же SMB Multichannel, если сетевой адаптер поддерживает RSS, то протокол SMB в рамках одной сессии устанавливает несколько соединений (по умолчанию 4 на RSS-интерфейс), а RSS, в свою очередь, распределяет обработку трафика через эти соединения по доступным ядрам.
Соответственно, даже при использовании одного RSS-адаптера SMB Multichannel позволяет ускорить сетевые операции и более эффективно задействовать имеющуюся полосу пропускания. И прежде всего это актуально для адаптеров 10GbE.
Что нам не может обеспечить SMB Multichannel в конфигурации с одним физическим адаптером, так это отказоустойчивость, поскольку понятно, что если единственный адаптер выходит из строя, то мы теряем все соединения.
В Windows Server 2012 и Windows 8 проще всего определить, какие адаптеры и с какими текущими параметрами поддерживают RSS, можно с помощью командлета PowerShell Get-NetAdapterRss
Два и более адаптеров, объединенных с помощью NIC Teaming
Использование NIC Teaming не является требованием для SMB Multichannel. Если в системе, например, два гигабитных адаптера, то SMB Multichannel может использовать их безо всякого тиминга. Однако объединение адаптеров в тиминговую группу даст дополнительное преимущество с точки зрения отказоустойчивости. Без тиминга SMB Multichannel обеспечит отказоустойчивость только SMB-трафика, вместе с NIC Teaming вы получите отказоустойчивость любого сетевого трафика. При этом и с тимингом, и без оного SMB Multichannel агрегирует доступные полосы пропускания имеющихся адаптеров.
Один и более сетевых адаптеров с поддержкой RDMA (Remote Direct Memory Access)
Технология RDMA обеспечивает низкие задержки при передачи данных по сети и снижение нагрузки на процессор. SMB Multichannel устанавливает для каждой SMB-сессии два соединения на каждый RDMA-интерфейс. Если RDMA-адаптеров несколько, дополнительно обеспечивается и отказоустойчивость. Надо отметить, что если вы объединяете RDMA-интерфейсы в группу средствами NIC Teaming в Windows Server 2012, то ОС рассматривает эти интерфейсы как non-RDMA. То есть в тиминге возможности RDMA вам не доступны. По аналогии с RSS получить информацию об адаптерах с поддержкой RDMA и их конфигурации можно с помощью командлета Get-NetAdapterRdma.
Несколько сетевых адаптеров с одинаковой скоростью
Это самый простой вариант конфигурации, при котором SMB Multichannel просто работает. Если адаптеры не поддерживают RSS, то устанавливается по одному соединению на интерфейс.
И теперь самое время обсудить настройку SMB Multichannel.
Настройка SMB Multichannel
Прелесть технологии в том, что она настраивается автоматически. Если ОС обнаруживает одну из поддерживаемых конфигураций (см. выше), то автоматически применяется SMB Multichannel. Тем не менее, вы можете убедиться в том, что технология включена с помощью Get-SmbClientConfiguration или Get-SmbServerConfiguration.
Дополнительно, Get-SmbClientNetworkInterface покажет вам, задействованы ли RSS и RDMA для доступных интерфейсов.
Я уже упомянул количество устанавливаемых соединений для различных типов сетевых интерфейсов (4 на RSS-адаптер, 2 на RDMA-адаптер, 1 на обычный NIC). По умолчанию SMB Multichannel использует максимум 8 соединений для каждой пары клиент/сервер. И это число может ограничивать количество соединение на один сетевой интерфейс. Например, если у вас три RSS-адаптера, то будет установлено три соединения через первый, три через второй и два через третий.
Рекомендуется использовать настройки SMB Multichannel по умолчанию. Тем не менее, эти настройки могут быть изменены. Например, максимально количество соединений на пару клиент/сервер устанавливается следующим образом:
Ну и наконец если по каким-то причинам необходимо отключить SMB Multichannel, например для тестирования или диагностики, это можно сделать следующими двумя командами на сервере и клиенте соответственно:
Set-SmbServerConfiguration -EnableMultiChannel $false
Set-SmbClientConfiguration -EnableMultiChannel $false
Эти же команды со значением $true снова включат технологию.
SMB Multichannel в действии
Если в вашей системе одна из поддерживаемых конфигураций, то при открытии общей папки на сервере SMB Multichannel установит несколько соединений. Убедиться в этом можно с помощью Get-SmbMultichannelConnection. В моей среде с двумя гигабитными карточками это выглядит так:
Далее, запустив копирование файла с сетевого ресурса, в Performance Monitor можно наблюдать, что копирование осуществляется с помощью обоих сетевых адаптеров.
Выключив один из адаптеров, вы увидите, что операция копирования не прервется, а вся нагрузка будет перекинута на оставшийся адаптер.
Посмотреть работу SMB Multichannel в динамике, а также сравнить, как ведет себя ОС при отключенной технологии, вы можете в моем веб-касте (проскроллируйте до демонстрации SMB Multichannel).
Таким образом, благодаря SMB Multichannel можно повысить эффективность и надежность сетевых операций. В сочетании же с другими технологиями Windows Server 2012, такими как SMB Scale Out, SMB Transparent Failover и ряд других (о них речь пойдет в других постах), вы можете штатными средствами ОС обеспечить высокий уровень доступности запущенных сервисов на разных уровнях: дисковая подсистема, узел кластера, сетевой интерфейс.