Скільки ядер потрібно OpenVPN? Залежить від шляху
Один потік може зайняти одне ядро, поки сервер виглядає простоюючим. Порівняйте шлях у просторі користувача з вивантаженням у ядро, а потім виміряйте паралельність, яку ви справді обслуговуєте.
Два сервери з однаковою кількістю процесорів можуть забезпечувати зовсім різну пропускну здатність, бо важливе число — це скільки ядер активний шлях даних здатен реально використати. Один демон у просторі користувача, що обробляє пакети одного клієнта, обмежений одним ядром, тоді як вивантажений шлях у ядрі може розподілити цю роботу. Жодне з тверджень не каже, що зробить конкретна машина з вашим трафіком, тому вимірювання йде раніше за підрахунок ядер.
Порівняння нижче — про те, де обробляються пакети, а не про те, який продукт швидший в абстрактному сенсі. Це різні питання з різними відповідями.
Одне ядро на потік на шляху в просторі користувача
У традиційному екземплярі Community OpenVPN канал даних обробляється в просторі користувача, і зайняте з'єднання може закріпити один процесор, тоді як загальне завантаження машини залишається непомітним. Тому додавання ядер до хоста, який уже насичений на одному потоці, нічого не змінює: планувальник не має способу розділити цю роботу. Структура один процес на клієнта обмежує передавання одного клієнта можливостями одного ядра, хоч би якою була загальна кількість ядер. Під час тесту читайте завантаження окремих ядер, а не сумарну цифру, інакше вузьке місце виглядатиме як вільний запас.
Запуск кількох екземплярів сервера на одному хості розподіляє окремих клієнтів між процесами. Він не розпаралелює наявне з'єднання і вимагає окремих пулів, слухачів і рішень маршрутизації.
Інший шлях: пакети в ядрі
Вивантаження каналу даних переносить підтримуване оброблення пакетів і криптографію в ядро, де робота може використати кілька ядер. Це змінює питання про ємність з одного ядра на машину, але лише для конфігурацій, які підтримує реалізація: сумісний модуль ядра, придатний шифр даних і конфігурація без функцій, які вивантаження виключає. Встановити модуль — не те саме, що використовувати його, тому підтвердьте активний режим із журналу самого з'єднання або з виводу стану. Банер версії доводить, що доступно, а не що працює.
Вивантаження не прибирає автентифікацію або канал керування і не робить кожне розгортання багатоядерним. Це локальне прискорення сумісного шляху даних, і вимоги різняться залежно від платформи та версії.
Що насправді вирішує порівняння
Справжній вибір — між прийняттям стелі на потік, розподілом клієнтів між екземплярами та переходом на підтримувану конфігурацію з вивантаженням. Кожен варіант вирішує іншу проблему, і вибір неправильного коштує грошей, не зрушуючи число. Важливий той тест, який повторює спосіб використання сервісу.
Виміряйте три форми: один клієнт з однією передачею, один клієнт з кількома потоками і кілька клієнтів разом. Висока сума в третій не доводить, що одне завантаження здатне її досягти, а повільна одиночна передача не доводить, що сервер вичерпав загальну ємність. Результати відповідають на різні питання, і обидва варто зберегти.
Лише середня форма каже, чи допомагає паралельність усередині одного клієнта, що зазвичай є властивістю транспорту й шляху, а не сервера. Лише перша каже про стелю, яку побачить один застосунок. Тримайте навантаження однаковим між запусками, щоб порівняння щось означало.
Вимірювати так, щоб число щось означало
Запишіть версії сервера і клієнта, активний шлях даних, узгоджений шифр даних, напрямок передавання, розміри пакетів, кількість потоків і тривалість. Стежте за активністю кожного ядра та втратами пакетів і черг на обох кінцях, бо інтерфейс самого клієнта, мережа провайдера або служба призначення можуть стати межею першими. Змінюйте по одній змінній за раз, адже запуск, що змінює шифр, стиснення, MTU і вивантаження одночасно, не скаже, що саме мало значення. Під час тесту зберігайте ту політику доступу, яку ви справді збираєтеся впроваджувати, бо лабораторна схема, яку ніхто не запустить, доводить мало.
Потім залиште запас для каналу керування, для повторних переговорів і для всього іншого, що працює на хості.
Повідомляйте, що конфігурація витримала за заявленої паралельності, а не швидкість, екстрапольовану з чужого обладнання. Число з доданими умовами тесту корисне; обіцянка без них — здогад, яку вам потім пригадають.