Копіювання файлу між двома машинами Windows іде швидко, доки обидві не підключаться до однієї й тієї ж VPN, і тоді воно провалюється, хоча тест пропускної здатності через ту саму пару досі показує майже швидкість лінії. Саме ця різниця і є діагнозом: з’єднання в порядку, і щось обирає гірший шлях для самого передання. Це щось зазвичай багатоканальність SMB3, яка робить точно те, для чого створена. Вилучіть зайвий канал, і копія повернеться на фізичне з’єднання.

Симптом чекає на найповільніший канал

Багатоканальність дозволяє одному сеансу SMB використовувати кілька з’єднань TCP, по одному на кожну придатну пару адрес між клієнтом і сервером. Коли обидві машини перебувають у локальній мережі й в одному тунелі, Windows може зіставити адреси локальної мережі з адресами тунелю і вважати обидві пари придатними. У результаті сеанс має більше каналів, ніж потрібно фізичному з’єднанню, і один із них значно повільніший.

Це не збій. Це очікування, бо сеанс не може завершитися швидше за найповільніший канал.

Тому тест пропускної здатності може виглядати здоровим, поки копія ледве повзе: вимірювання одного потоку може вибрати один шлях, а передання було розподілене на два. Прочитайте список каналів, перш ніж змінювати будь-яке налаштування адаптера, і читайте його, поки копія ще виконується, бо неактивний сеанс нічого не показує. Те, що ви запишете, має називати інтерфейс за кожним каналом, а не лише те, наскільки повільним здався результат.

Переконайтеся, що існує другий канал

Дві команди cmdlet відповідають на це питання прямо. Список з’єднань показує використовувані канали, а зведення сеансу — саме з’єднання. Запустіть обидві під час повільного копіювання.

Get-SmbMultichannelConnection
Get-SmbConnection

Шукайте більше одного рядка, позначеного як вибраний для того самого сервера, потім визначте адресу клієнта в підозрілому рядку. Якщо ця адреса належить адаптеру тунелю, другий шлях реальний і підтверджений. Якщо кожен рядок належить фізичному інтерфейсу, багатоканальність тут ні до чого, і копія повільна з іншої причини. Зробіть це підтвердження першим, бо виправлення достатньо руйнівне, щоб заслужити хвилину доказів.

Get-NetIPAddress -IPAddress 10.20.30.44

Адреси тут є заповнювачами. Замініть їх тим, що повідомляє ваш власний вивід, бо копіювання адреси з блогу — це спосіб, у який робоча команда перетворюється на заплутане повідомлення про помилку.

Вилучіть тунель із SMB і потім виміряйте знову

Вимкнення багатоканальності — найшвидший спосіб підтвердити діагноз, і воно зворотне. Застосуйте клієнтське налаштування на машині, що копіює, а серверне — на машині, що розміщує спільний ресурс, бо будь-яка сторона сама може підтримувати зайвий канал живим. Зміна стосується нових з’єднань, а не наявних, тож відкритий сеанс її переживе. Перезавантажте обидві машини або принаймні закрийте всі дескриптори до спільного ресурсу, перш ніж щось вимірювати.

Set-SmbClientConfiguration -EnableMultiChannel $false -Force
Set-SmbServerConfiguration -EnableMultiChannel $false -Force

Підтвердьте новий стан, потім подивіться, що сервер тепер оголошує клієнтам.

Get-SmbClientConfiguration | Select-Object EnableMultiChannel
Get-SmbServerNetworkInterface | Format-List *

Інтерфейс тунелю має зникнути з цього оголошеного списку. Якщо ні, налаштування потрапило не на той кінець або старий сеанс ще відкритий. Якщо спільний доступ до файлів просто не повинен використовувати тунель, від’єднайте серверний компонент від цього адаптера, і тунель залишиться придатним для всіх інших служб.

Get-NetAdapterBinding -Name "OpenVPN Data Channel Offload"
Disable-NetAdapterBinding -Name "OpenVPN Data Channel Offload" -ComponentID ms_server

Надавайте перевагу шляху через локальну мережу, не вдаючи, що він видаляє канали

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

Get-NetIPInterface | Sort-Object InterfaceMetric | Select-Object InterfaceAlias, InterfaceMetric
Set-NetIPInterface -InterfaceAlias "OpenVPN Data Channel Offload" -AutomaticMetric Disabled -InterfaceMetric 1000

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

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

Схожі статті