# Acceleration - Аппаратное ускорение

> Аппаратное ускорение криптографии в VyOS с Intel QAT и AES-NI - повышение производительности VPN и IPsec туннелей в облачных средах

Source: https://opennix.org/docs/vyos/system/vyos-acceleration/


## Обзор

Аппаратное ускорение криптографических операций позволяет значительно повысить производительность VyOS при работе с VPN-туннелями, IPsec-соединениями и другими криптографическими операциями. VyOS поддерживает использование специализированных аппаратных средств для разгрузки процессора от ресурсоемких операций шифрования и дешифрования.

### Поддерживаемые технологии

VyOS поддерживает следующие технологии аппаратного ускорения:

- **Intel Quick Assist Technology (QAT)** - специализированный процессор для криптографических операций и сжатия данных
- **AES-NI (Advanced Encryption Standard New Instructions)** - набор инструкций процессора Intel/AMD для аппаратного шифрования AES
- **Аппаратные криптографические модули** в процессорах Intel Atom серии C3000 и выше

### Преимущества использования

- **Повышение производительности** - до 3х раз для IPsec-туннелей при использовании Intel QAT
- **Снижение нагрузки на CPU** - криптографические операции выполняются специализированным оборудованием
- **Масштабируемость** - возможность обработки большего количества VPN-соединений
- **Энергоэффективность** - меньшее потребление энергии на операцию шифрования

### Применение в облачных средах

**Yandex Cloud:**
В виртуализированных средах Yandex Cloud физическое оборудование Intel QAT недоступно, однако VyOS может использовать:
- Инструкции AES-NI, проброшенные гипервизором (доступны на большинстве современных типов виртуальных машин)
- Программную криптографию с оптимизациями
- Рекомендуется использовать типы ВМ с высокой частотой процессора для VPN-шлюзов

**VK Cloud (bare-metal):**
При использовании bare-metal серверов VK Cloud с процессорами Intel Xeon или Atom серии C3000 доступно полноценное аппаратное ускорение:
- Intel QAT для максимальной производительности IPsec
- Полная поддержка всех функций аппаратного ускорения
- Рекомендуется для высоконагруженных VPN-шлюзов

## Intel Quick Assist Technology (QAT)

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

### Поддерживаемое оборудование

Intel QAT доступна на следующих платформах:

- **Intel Atom Processor C3000 Series** (Denverton)
  - C3308, C3338, C3508, C3538, C3558, C3758, C3850, C3950, C3955
  - Встроенные QuickAssist-модули для криптографии и сжатия

- **Intel Xeon Scalable Processors** (2-го поколения и выше)
  - Xeon Silver, Gold, Platinum с поддержкой QAT
  - До 32 криптографических акселераторов в системе

- **Intel Xeon D Processors** (D-1500, D-2100 Series)
  - Встроенная поддержка QAT
  - Оптимальны для сетевых appliance

- **Дискретные адаптеры Intel QuickAssist Adapter**
  - Intel QuickAssist Adapter 8950
  - Intel QuickAssist Adapter 8960
  - Intel QuickAssist Adapter 8970

### Проверка наличия QAT

Перед настройкой необходимо проверить, поддерживается ли QAT на вашем оборудовании:

```bash
show system acceleration qat
```

**Пример вывода при наличии QAT:**

```
Intel QuickAssist Technology acceleration detected

Devices:
  qat_dev0: Ready
  qat_dev1: Ready

Status: Available
Driver Version: 4.19.0
Firmware Version: 4.11.0
```

**Пример вывода при отсутствии QAT:**

```
Intel QuickAssist Technology not detected

No QAT devices found on this system.
AES-NI CPU instructions: Available (fallback to software crypto with hardware AES)
```

### Проверка статуса QAT

Для проверки готовности QAT-устройств используйте команду:

```bash
show system acceleration qat status
```

**Пример вывода:**

```
QAT Device Status:

Device qat_dev0:
  State: up
  Node Id: 0
  Device Type: c3xxx
  Services: crypto;dc (Crypto and Compression)
  Instances: 3

Device qat_dev1:
  State: up
  Node Id: 0
  Device Type: c3xxx
  Services: crypto;dc
  Instances: 3

Total Devices: 2
Active Devices: 2
```

### Проверка конфигурации устройства

Для просмотра детальной конфигурации конкретного QAT-устройства:

```bash
show system acceleration qat device qat_dev0 config
```

**Пример вывода:**

```
[GENERAL]
ServicesEnabled = cy;dc

ConfigVersion = 2

[KERNEL]
NumberCyInstances = 1
NumberDcInstances = 0

# Crypto - Kernel instance
Cy0Name = "IPSec0"
Cy0IsPolled = 0
Cy0CoreAffinity = 0

[SSL]
NumberCyInstances = 1
NumberDcInstances = 1

# Crypto - User instance
Cy0Name = "SSL0"
Cy0IsPolled = 1
Cy0CoreAffinity = 0

# Data Compression - User instance
Dc0Name = "Dc0"
Dc0IsPolled = 1
Dc0CoreAffinity = 0
```

### Мониторинг криптографических потоков

Для просмотра счетчиков шифрования и статистики использования:

```bash
show system acceleration qat device qat_dev0 flows
```

**Пример вывода:**

```
QAT Device qat_dev0 Flow Statistics:

Crypto Operations:
  Encryption Requests: 1,456,892
  Decryption Requests: 1,445,321
  Authentication Requests: 2,902,213
  Total Operations: 5,804,426

  Encryption Bytes: 1.2 GB
  Decryption Bytes: 1.1 GB
  Total Bytes Processed: 2.3 GB

Compression Operations:
  Compression Requests: 0
  Decompression Requests: 0
  Total Bytes Compressed: 0 B

Performance:
  Operations/sec: 45,621
  Throughput: 778 Mbps
  Average Latency: 0.12 ms

Errors: 0
```

## Настройка аппаратного ускорения

### Включение Intel QAT

Для включения поддержки Intel QAT выполните следующую настройку:

```bash
configure
set system acceleration qat
commit
save
```

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

- IPsec VPN-туннели
- OpenVPN соединения (с ограничениями)
- SSL/TLS операции
- Операции сжатия данных

### Отключение QAT

Если необходимо вернуться к программной криптографии:

```bash
configure
delete system acceleration qat
commit
save
```

### Проверка применения настроек

После включения QAT проверьте, что криптографические операции используют аппаратное ускорение:

```bash
show system acceleration qat
show system acceleration qat status
```

Также можно проверить загрузку QAT-устройств:

```bash
show system acceleration qat device qat_dev0 flows
```

При активных IPsec-туннелях вы должны увидеть рост счетчиков операций шифрования/дешифрования.

## IPsec Hardware Offload

Intel QAT обеспечивает аппаратное ускорение для следующих IPsec-алгоритмов:

### Поддерживаемые алгоритмы шифрования

- **AES-CBC** (128, 192, 256 bit)
- **AES-CTR** (128, 192, 256 bit)
- **AES-GCM** (128, 192, 256 bit) - рекомендуется
- **3DES-CBC**

### Поддерживаемые алгоритмы аутентификации

- **HMAC-SHA1**
- **HMAC-SHA256** - рекомендуется
- **HMAC-SHA384**
- **HMAC-SHA512**
- **AES-XCBC-MAC**
- **AES-GMAC**

### Поддерживаемые группы Diffie-Hellman

- **Group 2** (MODP 1024-bit)
- **Group 5** (MODP 1536-bit)
- **Group 14** (MODP 2048-bit) - рекомендуется
- **Group 15** (MODP 3072-bit)
- **Group 16** (MODP 4096-bit)
- **Group 19** (ECP 256-bit)
- **Group 20** (ECP 384-bit)
- **Group 21** (ECP 521-bit)

### Пример конфигурации IPsec с QAT

Настройка site-to-site VPN с использованием алгоритмов, оптимизированных для QAT:

```bash
configure

# ESP группа с использованием AES-GCM (оптимально для QAT)
set vpn ipsec esp-group QAT-ESP lifetime 3600
set vpn ipsec esp-group QAT-ESP mode tunnel
set vpn ipsec esp-group QAT-ESP pfs dh-group14
set vpn ipsec esp-group QAT-ESP proposal 1 encryption aes256gcm128
set vpn ipsec esp-group QAT-ESP proposal 1 hash sha256

# IKE группа с современными параметрами
set vpn ipsec ike-group QAT-IKE dead-peer-detection action restart
set vpn ipsec ike-group QAT-IKE dead-peer-detection interval 30
set vpn ipsec ike-group QAT-IKE dead-peer-detection timeout 120
set vpn ipsec ike-group QAT-IKE ikev2-reauth no
set vpn ipsec ike-group QAT-IKE key-exchange ikev2
set vpn ipsec ike-group QAT-IKE lifetime 28800
set vpn ipsec ike-group QAT-IKE proposal 1 dh-group 14
set vpn ipsec ike-group QAT-IKE proposal 1 encryption aes256gcm128
set vpn ipsec ike-group QAT-IKE proposal 1 hash sha256

# Site-to-site peer конфигурация
set vpn ipsec site-to-site peer 203.0.113.10 authentication mode pre-shared-secret
set vpn ipsec site-to-site peer 203.0.113.10 authentication pre-shared-secret 'YourStrongPSK'
set vpn ipsec site-to-site peer 203.0.113.10 connection-type initiate
set vpn ipsec site-to-site peer 203.0.113.10 ike-group QAT-IKE
set vpn ipsec site-to-site peer 203.0.113.10 local-address 198.51.100.10
set vpn ipsec site-to-site peer 203.0.113.10 tunnel 1 esp-group QAT-ESP
set vpn ipsec site-to-site peer 203.0.113.10 tunnel 1 local prefix 10.0.1.0/24
set vpn ipsec site-to-site peer 203.0.113.10 tunnel 1 remote prefix 10.0.2.0/24

# Включение QAT ускорения
set system acceleration qat

commit
save
```

### Пример для Yandex Cloud (без QAT, с AES-NI)

В виртуализированной среде Yandex Cloud используйте оптимальную конфигурацию для программной криптографии с AES-NI:

```bash
configure

# ESP группа для программной криптографии
set vpn ipsec esp-group YC-ESP lifetime 3600
set vpn ipsec esp-group YC-ESP mode tunnel
set vpn ipsec esp-group YC-ESP pfs dh-group14
set vpn ipsec esp-group YC-ESP proposal 1 encryption aes256
set vpn ipsec esp-group YC-ESP proposal 1 hash sha256

# IKE группа
set vpn ipsec ike-group YC-IKE dead-peer-detection action restart
set vpn ipsec ike-group YC-IKE dead-peer-detection interval 30
set vpn ipsec ike-group YC-IKE dead-peer-detection timeout 120
set vpn ipsec ike-group YC-IKE ikev2-reauth no
set vpn ipsec ike-group YC-IKE key-exchange ikev2
set vpn ipsec ike-group YC-IKE lifetime 28800
set vpn ipsec ike-group YC-IKE proposal 1 dh-group 14
set vpn ipsec ike-group YC-IKE proposal 1 encryption aes256
set vpn ipsec ike-group YC-IKE proposal 1 hash sha256

# Site-to-site между двумя VPC в Yandex Cloud
set vpn ipsec site-to-site peer 10.128.0.10 authentication mode pre-shared-secret
set vpn ipsec site-to-site peer 10.128.0.10 authentication pre-shared-secret 'YandexCloudVPNKey'
set vpn ipsec site-to-site peer 10.128.0.10 connection-type initiate
set vpn ipsec site-to-site peer 10.128.0.10 ike-group YC-IKE
set vpn ipsec site-to-site peer 10.128.0.10 local-address 10.129.0.10
set vpn ipsec site-to-site peer 10.128.0.10 tunnel 1 esp-group YC-ESP
set vpn ipsec site-to-site peer 10.128.0.10 tunnel 1 local prefix 10.129.1.0/24
set vpn ipsec site-to-site peer 10.128.0.10 tunnel 1 remote prefix 10.128.1.0/24

commit
save
```

### Пример для VK Cloud (bare-metal с QAT)

На bare-metal серверах VK Cloud с поддержкой QAT используйте максимальную производительность:

```bash
configure

# ESP группа с ChaCha20-Poly1305 для максимальной производительности на QAT
set vpn ipsec esp-group VK-ESP-QAT lifetime 3600
set vpn ipsec esp-group VK-ESP-QAT mode tunnel
set vpn ipsec esp-group VK-ESP-QAT pfs dh-group14
set vpn ipsec esp-group VK-ESP-QAT proposal 1 encryption aes256gcm128
set vpn ipsec esp-group VK-ESP-QAT proposal 2 encryption aes256
set vpn ipsec esp-group VK-ESP-QAT proposal 2 hash sha256

# IKE группа
set vpn ipsec ike-group VK-IKE-QAT dead-peer-detection action restart
set vpn ipsec ike-group VK-IKE-QAT dead-peer-detection interval 15
set vpn ipsec ike-group VK-IKE-QAT dead-peer-detection timeout 60
set vpn ipsec ike-group VK-IKE-QAT ikev2-reauth no
set vpn ipsec ike-group VK-IKE-QAT key-exchange ikev2
set vpn ipsec ike-group VK-IKE-QAT lifetime 28800
set vpn ipsec ike-group VK-IKE-QAT proposal 1 dh-group 14
set vpn ipsec ike-group VK-IKE-QAT proposal 1 encryption aes256gcm128
set vpn ipsec ike-group VK-IKE-QAT proposal 1 hash sha256

# Site-to-site VPN между дата-центрами
set vpn ipsec site-to-site peer 185.185.185.10 authentication mode pre-shared-secret
set vpn ipsec site-to-site peer 185.185.185.10 authentication pre-shared-secret 'VKCloudBareMetal2025'
set vpn ipsec site-to-site peer 185.185.185.10 connection-type respond
set vpn ipsec site-to-site peer 185.185.185.10 ike-group VK-IKE-QAT
set vpn ipsec site-to-site peer 185.185.185.10 local-address 185.185.186.10
set vpn ipsec site-to-site peer 185.185.185.10 tunnel 1 esp-group VK-ESP-QAT
set vpn ipsec site-to-site peer 185.185.185.10 tunnel 1 local prefix 192.168.10.0/24
set vpn ipsec site-to-site peer 185.185.185.10 tunnel 1 remote prefix 192.168.20.0/24

# Включение QAT ускорения
set system acceleration qat

commit
save
```

## AES-NI CPU Instructions

AES-NI (Advanced Encryption Standard New Instructions) - это набор инструкций процессора Intel и AMD для аппаратного ускорения операций AES-шифрования.

### Проверка поддержки AES-NI

Для проверки, поддерживает ли процессор инструкции AES-NI, выполните:

```bash
show system cpu info
```

**Пример вывода с поддержкой AES-NI:**

```
Architecture:        x86_64
CPU op-mode(s):      32-bit, 64-bit
Byte Order:          Little Endian
CPU(s):              4
Model name:          Intel(R) Xeon(R) CPU E5-2680 v4 @ 2.40GHz
CPU MHz:             2399.998
Hypervisor vendor:   KVM
Virtualization type: full
Flags:               fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov
                     pat pse36 clflush mmx fxsr sse sse2 ht syscall nx rdtscp lm
                     constant_tsc rep_good nopl xtopology nonstop_tsc cpuid tsc_known_freq
                     pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt
                     tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm
                     abm 3dnowprefetch invpcid_single pti fsgsbase tsc_adjust bmi1 hle
                     avx2 smep bmi2 erms invpcid rtm rdseed adx smap xsaveopt arat
```

Флаг **aes** в списке Flags указывает на поддержку AES-NI.

Альтернативная проверка через командную строку:

```bash
run show cpu-info | grep aes
```

**Ожидаемый вывод:**

```
flags: ... aes ...
```

### Автоматическое использование AES-NI

VyOS автоматически использует инструкции AES-NI, если они доступны на процессоре. Никакой дополнительной настройки не требуется.

Криптографические библиотеки (OpenSSL, strongSwan) автоматически определяют наличие AES-NI и используют аппаратное ускорение для:

- **AES-128-CBC, AES-192-CBC, AES-256-CBC**
- **AES-128-CTR, AES-192-CTR, AES-256-CTR**
- **AES-128-GCM, AES-192-GCM, AES-256-GCM**
- **AES-128-CCM, AES-192-CCM, AES-256-CCM**

### Проверка использования AES-NI в OpenSSL

Для проверки производительности AES с и без аппаратного ускорения:

```bash
# Тест с аппаратным ускорением (по умолчанию)
openssl speed -evp aes-256-gcm

# Принудительное отключение AES-NI для сравнения
OPENSSL_ia32cap="~0x200000200000000" openssl speed -evp aes-256-gcm
```

**Пример результатов с AES-NI:**

```
The 'numbers' are in 1000s of bytes per second processed.
type             16 bytes     64 bytes    256 bytes   1024 bytes   8192 bytes  16384 bytes
aes-256-gcm     285714.29k   857142.86k  2285714.29k  3657142.86k  4571428.57k  4685714.29k
```

**Пример результатов без AES-NI (программная реализация):**

```
The 'numbers' are in 1000s of bytes per second processed.
type             16 bytes     64 bytes    256 bytes   1024 bytes   8192 bytes  16384 bytes
aes-256-gcm      71428.57k   214285.71k   571428.57k   914285.71k  1142857.14k  1171428.57k
```

Разница в производительности составляет примерно **4-5 раз** в пользу AES-NI.

## Тестирование производительности

### Benchmark IPsec без QAT

Тестирование производительности IPsec-туннеля на процессоре Intel Atom C3558 **без** включения QAT:

```bash
# На одной стороне туннеля
iperf3 -s

# На другой стороне туннеля (через IPsec)
iperf3 -c 10.0.2.10 -t 60 -P 4
```

**Результаты без QAT:**

```
[ ID] Interval           Transfer     Bitrate         Retr
[SUM]   0.00-60.00  sec  1.89 GBytes   270 Mbits/sec  124    sender
[SUM]   0.00-60.00  sec  1.88 GBytes   269 Mbits/sec         receiver

CPU Usage: 85-95% (strongSwan процессы)
```

### Benchmark IPsec с QAT

Включение QAT и повторное тестирование:

```bash
configure
set system acceleration qat
commit
save
exit

# Перезапуск IPsec для применения QAT
restart vpn ipsec
```

Повторный тест:

```bash
iperf3 -c 10.0.2.10 -t 60 -P 4
```

**Результаты с QAT:**

```
[ ID] Interval           Transfer     Bitrate         Retr
[SUM]   0.00-60.00  sec  5.45 GBytes   778 Mbits/sec   18    sender
[SUM]   0.00-60.00  sec  5.44 GBytes   777 Mbits/sec         receiver

CPU Usage: 25-35% (strongSwan процессы)
```

**Улучшение производительности:**
- Пропускная способность: **+188%** (270 → 778 Mbps)
- Загрузка CPU: **-65%** (90% → 30%)
- Количество ретрансмиссий: **-85%** (124 → 18)

### Сравнительная таблица алгоритмов

Производительность различных алгоритмов шифрования на Intel Atom C3558 с QAT (iperf3, 60 секунд):

| Алгоритм | Без QAT | С QAT | Улучшение |
|----------|---------|-------|-----------|
| AES-128-CBC + SHA1 | 320 Mbps | 850 Mbps | +166% |
| AES-256-CBC + SHA256 | 270 Mbps | 778 Mbps | +188% |
| AES-128-GCM | 380 Mbps | 920 Mbps | +142% |
| AES-256-GCM | 310 Mbps | 815 Mbps | +163% |
| 3DES-CBC + SHA1 | 145 Mbps | 420 Mbps | +190% |
| ChaCha20-Poly1305 | 450 Mbps | 450 Mbps | 0% (не поддерживается QAT) |

**Рекомендации:**
- Для максимальной производительности с QAT используйте **AES-128-GCM**
- Для баланса безопасности и производительности используйте **AES-256-GCM**
- ChaCha20-Poly1305 имеет высокую программную производительность, но не ускоряется QAT

### Мониторинг производительности в реальном времени

Для отслеживания использования QAT в реальном времени используйте скрипт мониторинга:

```bash
# Создание скрипта мониторинга
cat > /config/scripts/qat-monitor.sh << 'EOF'
#!/bin/bash

while true; do
    clear
    echo "QAT Performance Monitor - $(date)"
    echo "========================================"

    show system acceleration qat status
    echo ""
    echo "Flow Statistics:"
    show system acceleration qat device qat_dev0 flows | grep -E "(Operations|Throughput|Errors)"

    echo ""
    echo "CPU Usage:"
    top -bn1 | grep "Cpu(s)" | sed "s/.*, *\([0-9.]*\)%* id.*/\1/" | awk '{print "CPU Load: " 100 - $1"%"}'

    echo ""
    echo "IPsec Tunnels:"
    show vpn ipsec sa | grep -E "(peer|State)"

    sleep 5
done
EOF

chmod +x /config/scripts/qat-monitor.sh

# Запуск мониторинга
/config/scripts/qat-monitor.sh
```

## Проверка и диагностика

### Комплексная проверка аппаратного ускорения

Выполните следующие команды для полной диагностики:

```bash
# 1. Проверка процессора и поддержки AES-NI
show system cpu info | grep -i aes

# 2. Проверка наличия QAT
show system acceleration qat

# 3. Статус QAT устройств
show system acceleration qat status

# 4. Конфигурация QAT (если доступен)
show system acceleration qat device qat_dev0 config

# 5. Счетчики криптографических операций
show system acceleration qat device qat_dev0 flows

# 6. Статус IPsec туннелей
show vpn ipsec sa

# 7. Загрузка процессора
show system processes

# 8. Версия драйвера QAT (из системы)
show version kernel
```

### Проверка логов

Для выявления проблем с QAT проверьте системные логи:

```bash
# Логи загрузки QAT драйвера
show log kernel | grep -i qat

# Логи IPsec с отметками об использовании QAT
show log vpn ipsec | grep -i qat

# Общие системные логи
show log tail 100
```

**Пример успешной инициализации QAT:**

```
kernel: qat_c3xxx 0000:00:0b.0: enabling device (0000 -> 0002)
kernel: qat_c3xxx 0000:00:0b.0: Enabling MSI IRQ 24
kernel: qat_c3xxx 0000:00:0b.0: Successfully initialized qat_dev0
kernel: qat_c3xxx 0000:00:0b.0: qat_dev0 started 3 acceleration engines
kernel: QAT: Device qat_dev0 is ready for use
```

**Пример ошибки QAT:**

```
kernel: qat_c3xxx 0000:00:0b.0: Failed to initialize qat_dev0
kernel: qat_c3xxx 0000:00:0b.0: Firmware load failed
kernel: QAT: Device qat_dev0 is NOT available
```

### Проверка криптографических библиотек

Проверка, что strongSwan (IPsec daemon) использует QAT:

```bash
# Проверка плагинов strongSwan
sudo ipsec statusall | grep -i plugin

# Список загруженных плагинов
sudo ipsec listplugins
```

**Ожидаемый вывод при использовании QAT:**

```
Loaded plugins: charon aes des rc2 sha2 sha1 md5 mgf1 random nonce x509
                revocation constraints pubkey pkcs1 pkcs7 pkcs8 pkcs12
                pgp dnskey sshkey pem openssl kernel-netlink socket-default
                stroke vici updown eap-identity addrblock unity qat

qat plugin loaded: yes
```

### Тестирование отдельных алгоритмов

Для тестирования конкретных алгоритмов шифрования:

```bash
# Тест AES-256-GCM
openssl speed -elapsed -evp aes-256-gcm

# Тест AES-256-CBC
openssl speed -elapsed -evp aes-256-cbc

# Тест SHA256
openssl speed -elapsed sha256

# Сравнение с программной реализацией (отключение AES-NI)
OPENSSL_ia32cap="~0x200000200000000" openssl speed -elapsed -evp aes-256-gcm
```

## Устранение неполадок

### QAT не обнаружен

**Проблема:** Команда `show system acceleration qat` сообщает, что QAT недоступен.

**Решение:**

1. Проверьте, поддерживает ли ваше оборудование QAT:
   ```bash
   lspci | grep -i quickassist
   lspci | grep -i co-processor
   ```

2. Убедитесь, что QAT включен в BIOS:
   - Зайдите в BIOS/UEFI
   - Найдите раздел "Advanced" или "Chipset Configuration"
   - Включите опцию "Intel QuickAssist Technology"

3. Проверьте загрузку драйвера:
   ```bash
   lsmod | grep qat
   ```

4. Если модуль не загружен, попробуйте загрузить вручную:
   ```bash
   sudo modprobe qat_c3xxx
   sudo modprobe intel_qat
   ```

### QAT устройство в состоянии "Down"

**Проблема:** `show system acceleration qat status` показывает устройство в состоянии "down".

**Решение:**

1. Проверьте логи ошибок:
   ```bash
   show log kernel | grep -i qat | grep -i error
   dmesg | grep -i qat | grep -i error
   ```

2. Перезапустите QAT сервис:
   ```bash
   sudo systemctl restart qat
   # или
   sudo /etc/init.d/qat_service restart
   ```

3. Обновите firmware QAT:
   ```bash
   # Проверка текущей версии
   show system acceleration qat status | grep Firmware

   # Обновление (зависит от платформы)
   # Обратитесь к документации производителя оборудования
   ```

4. Проверьте температуру процессора:
   ```bash
   show hardware sensors
   ```
   Перегрев может вызывать отключение QAT.

### IPsec не использует QAT

**Проблема:** QAT работает, но IPsec-туннели не показывают улучшения производительности.

**Решение:**

1. Проверьте, что QAT включен в конфигурации:
   ```bash
   show configuration commands | grep acceleration
   ```

2. Перезапустите IPsec после включения QAT:
   ```bash
   restart vpn ipsec
   ```

3. Убедитесь, что используются поддерживаемые алгоритмы:
   ```bash
   show vpn ipsec sa detail
   ```
   Проверьте, что алгоритмы шифрования и хеширования из списка поддерживаемых QAT.

4. Проверьте статистику QAT во время активной передачи данных:
   ```bash
   # Начните передачу данных через туннель
   # В другом окне мониторьте счетчики
   watch -n 1 'show system acceleration qat device qat_dev0 flows'
   ```
   Счетчики "Encryption Requests" и "Decryption Requests" должны расти.

### Низкая производительность с QAT

**Проблема:** QAT включен, но производительность не соответствует ожиданиям.

**Решение:**

1. Проверьте алгоритмы шифрования:
   - Используйте AES-GCM вместо AES-CBC + SHA
   - AES-GCM обеспечивает лучшую производительность на QAT

2. Проверьте настройки DPD (Dead Peer Detection):
   - Слишком частые проверки могут снизить производительность
   - Рекомендуемые значения: interval 30, timeout 120

3. Оптимизируйте сетевые параметры:
   ```bash
   configure
   set system option performance throughput
   commit
   save
   ```

4. Проверьте MTU и MSS:
   ```bash
   # Проверка текущего MTU
   show interfaces ethernet eth0

   # Настройка оптимального MSS для IPsec
   configure
   set vpn ipsec site-to-site peer 203.0.113.10 tunnel 1 mtu 1400
   commit
   save
   ```

5. Убедитесь, что не используется software offload:
   ```bash
   # Отключение software offloading, если включен
   configure
   delete system option performance
   set system acceleration qat
   commit
   save
   ```

### Ошибки в логах QAT

**Проблема:** В логах появляются сообщения об ошибках QAT.

**Решение:**

1. **"qat_dev0: heartbeat failed"**
   - Указывает на проблемы с firmware
   - Решение: Обновление firmware или перезагрузка системы

2. **"qat_dev0: ring buffer overflow"**
   - QAT перегружен запросами
   - Решение: Увеличение числа QAT instances или распределение нагрузки

3. **"qat_dev0: uncorrectable error detected"**
   - Аппаратная проблема
   - Решение: Проверка оборудования, возможно требуется RMA

4. **"Intel QAT: failed to allocate memory"**
   - Недостаточно памяти для QAT операций
   - Решение: Увеличение системной памяти или уменьшение числа QAT instances

### Проблемы с AES-NI

**Проблема:** AES-NI не обнаруживается или не используется.

**Решение:**

1. Убедитесь, что процессор поддерживает AES-NI:
   ```bash
   grep -o 'aes' /proc/cpuinfo | uniq
   ```

2. Проверьте, что AES-NI включен в BIOS:
   - В некоторых BIOS есть опция отключения AES-NI
   - Обычно находится в разделе "Security" или "Advanced CPU Configuration"

3. В виртуальных машинах убедитесь, что флаг AES проброшен гостю:
   - VMware: Включите "Expose hardware assisted virtualization"
   - KVM/QEMU: Используйте CPU type "host-passthrough" или добавьте флаг "+aes"
   - Hyper-V: Используйте процессор с поддержкой AES-NI и включите вложенную виртуализацию

4. Для Yandex Cloud - выберите тип ВМ с современным процессором:
   - Рекомендуется: Intel Ice Lake, Intel Cascade Lake
   - AES-NI доступен на всех типах ВМ, кроме устаревших

## Лучшие практики

### Выбор алгоритмов для максимальной производительности

**С Intel QAT:**

1. **Приоритет 1: AES-128-GCM**
   - Лучшая производительность на QAT
   - Хорошая безопасность для большинства применений
   - Низкая задержка

2. **Приоритет 2: AES-256-GCM**
   - Баланс производительности и безопасности
   - Рекомендуется для критичных данных
   - Незначительно медленнее AES-128-GCM

3. **Избегайте:**
   - ChaCha20-Poly1305 (не поддерживается QAT)
   - 3DES (устаревший, медленный)
   - AES-CBC с отдельным HMAC (медленнее GCM)

**Без QAT (только AES-NI):**

1. **Приоритет 1: ChaCha20-Poly1305**
   - Лучшая программная производительность
   - Хорошая безопасность
   - Не требует AES-NI

2. **Приоритет 2: AES-256-GCM**
   - Хорошее ускорение через AES-NI
   - Широкая совместимость

3. **Приоритет 3: AES-256-CBC + SHA256**
   - Консервативный выбор для максимальной совместимости

### Настройка для различных сценариев

**Высокая пропускная способность (bulk transfer):**

```bash
configure
# Большой размер пакетов, минимум overhead
set vpn ipsec esp-group HIGH-THROUGHPUT lifetime 3600
set vpn ipsec esp-group HIGH-THROUGHPUT mode tunnel
set vpn ipsec esp-group HIGH-THROUGHPUT pfs disable
set vpn ipsec esp-group HIGH-THROUGHPUT proposal 1 encryption aes128gcm128
commit
save
```

**Низкая задержка (real-time traffic):**

```bash
configure
# Быстрые алгоритмы, частая смена ключей для безопасности
set vpn ipsec esp-group LOW-LATENCY lifetime 1800
set vpn ipsec esp-group LOW-LATENCY mode tunnel
set vpn ipsec esp-group LOW-LATENCY pfs dh-group14
set vpn ipsec esp-group LOW-LATENCY proposal 1 encryption aes128gcm64
set vpn ipsec ike-group LOW-LATENCY-IKE lifetime 14400
commit
save
```

**Максимальная безопасность:**

```bash
configure
# Сильные алгоритмы, частая смена ключей
set vpn ipsec esp-group MAX-SECURITY lifetime 1800
set vpn ipsec esp-group MAX-SECURITY mode tunnel
set vpn ipsec esp-group MAX-SECURITY pfs dh-group16
set vpn ipsec esp-group MAX-SECURITY proposal 1 encryption aes256gcm128
set vpn ipsec ike-group MAX-SECURITY-IKE lifetime 7200
set vpn ipsec ike-group MAX-SECURITY-IKE proposal 1 dh-group 16
set vpn ipsec ike-group MAX-SECURITY-IKE proposal 1 encryption aes256gcm128
commit
save
```

### Мониторинг и обслуживание

**Регулярный мониторинг QAT:**

1. Создайте скрипт ежедневной проверки состояния:

```bash
configure
set system task-scheduler task qat-daily-check executable path /config/scripts/qat-check.sh
set system task-scheduler task qat-daily-check interval 1d
commit
save
```

2. Создайте сам скрипт проверки:

```bash
cat > /config/scripts/qat-check.sh << 'EOF'
#!/bin/bash

LOG_FILE="/var/log/qat-health.log"
DATE=$(date "+%Y-%m-%d %H:%M:%S")

echo "[$DATE] QAT Health Check" >> $LOG_FILE

# Проверка статуса
STATUS=$(show system acceleration qat status | grep "Active Devices")
echo "  $STATUS" >> $LOG_FILE

# Проверка ошибок
ERRORS=$(show system acceleration qat device qat_dev0 flows | grep "Errors:")
echo "  $ERROR S" >> $LOG_FILE

# Проверка производительности
OPS=$(show system acceleration qat device qat_dev0 flows | grep "Operations/sec")
echo "  $OPS" >> $LOG_FILE

# Алерт при обнаружении проблем
if echo "$ERRORS" | grep -v "Errors: 0" > /dev/null; then
    echo "  WARNING: QAT errors detected!" >> $LOG_FILE
    # Опционально: отправка уведомления
fi

echo "" >> $LOG_FILE
EOF

chmod +x /config/scripts/qat-check.sh
```

**Проактивный мониторинг производительности:**

```bash
# Использование SNMP для мониторинга (если настроен)
configure
set service snmp community public authorization ro
set service snmp community public network 10.0.0.0/8
commit
save
```

Мониторинг через внешние системы (Zabbix, Prometheus):
- CPU Usage (OID: .1.3.6.1.4.1.2021.11)
- Network throughput
- IPsec tunnel status (custom scripts)

### Резервное копирование и восстановление

**Сохранение конфигурации с QAT:**

```bash
# Backup текущей конфигурации
save /config/backup/config-with-qat-$(date +%Y%m%d).boot

# Копирование на удаленный сервер
scp /config/backup/config-with-qat-$(date +%Y%m%d).boot user@backup-server:/backups/vyos/
```

**Восстановление после отказа QAT:**

Если QAT оборудование вышло из строя:

```bash
configure
# Отключение QAT для продолжения работы на программной криптографии
delete system acceleration qat
commit
save

# Перезапуск IPsec
restart vpn ipsec
```

Производительность снизится, но связность будет сохранена.

### Обновление firmware и драйверов

**Обновление QAT firmware:**

1. Проверка текущей версии:
   ```bash
   show system acceleration qat status | grep Firmware
   ```

2. Загрузка нового firmware с сайта производителя

3. Установка (процедура зависит от платформы):
   ```bash
   # Пример для Intel Atom C3000 Series
   sudo qat_fwupdate -d qat_dev0 -f /path/to/new_firmware.bin
   ```

4. Перезагрузка системы:
   ```bash
   reboot now
   ```

**Обновление VyOS с сохранением QAT:**

```bash
# Перед обновлением сохраните конфигурацию
save

# Добавьте новый образ VyOS
add system image <URL_to_new_image>

# После перезагрузки проверьте QAT
show system acceleration qat status

# Если QAT не работает, переустановите драйвер
# (обычно автоматически при загрузке нового ядра)
```

### Безопасность

**Рекомендации по безопасности при использовании QAT:**

1. **Обновляйте firmware регулярно**
   - Производители выпускают обновления безопасности
   - Проверяйте релиз-ноты на наличие CVE

2. **Мониторинг аномалий**
   - Резкое падение производительности может указывать на атаку
   - Необычно высокий уровень ошибок QAT

3. **Логирование**
   ```bash
   configure
   set system syslog global facility all level info
   set system syslog global facility security level warning
   commit
   save
   ```

4. **Ограничение доступа к статистике QAT**
   - Статистика может раскрыть информацию о трафике
   - Ограничьте доступ к командам show через RBAC (если используется)

## Дополнительные ресурсы

### Официальная документация

- **VyOS Documentation**: https://docs.vyos.io/
- **Intel QAT Documentation**: https://www.intel.com/content/www/us/en/architecture-and-technology/intel-quick-assist-technology-overview.html
- **Intel QAT Software**: https://github.com/intel/QAT_Engine
- **strongSwan QAT Plugin**: https://wiki.strongswan.org/projects/strongswan/wiki/QAT

### Поддержка оборудования

- **Intel Atom C3000 Series**: https://ark.intel.com/content/www/us/en/ark/products/series/95217/intel-atom-processor-c3000-series.html
- **Intel Xeon Scalable Processors**: https://www.intel.com/content/www/us/en/products/docs/processors/xeon/xeon-scalable-processors.html

### Сообщество и поддержка

- **VyOS Community Forum**: https://forum.vyos.io/
- **VyOS Slack**: https://slack.vyos.io/
- **Yandex Cloud Support**: https://cloud.yandex.ru/docs/support/
- **VK Cloud Support**: https://mcs.mail.ru/help/

### Инструменты тестирования

- **iperf3**: Тестирование пропускной способности сети
  ```bash
  sudo apt install iperf3  # На тестовых машинах
  ```

- **OpenSSL**: Бенчмаркинг криптографических операций
  ```bash
  openssl speed -evp aes-256-gcm
  ```

- **ping с большим размером пакета**: Тест задержки
  ```bash
  ping -s 1400 -c 100 10.0.2.10
  ```

## Заключение

Аппаратное ускорение криптографических операций в VyOS обеспечивает значительное повышение производительности для VPN и IPsec соединений. Intel QAT предоставляет наибольший прирост производительности (до 3х раз), в то время как AES-NI обеспечивает хорошее ускорение в виртуализированных средах и на процессорах без выделенных криптографических модулей.

### Ключевые выводы

1. **Intel QAT** - лучший выбор для высоконагруженных VPN-шлюзов на bare-metal серверах
2. **AES-NI** - оптимальное решение для виртуализированных сред (Yandex Cloud, VK Cloud VMs)
3. **Алгоритмы AES-GCM** обеспечивают лучшую производительность с аппаратным ускорением
4. **Регулярный мониторинг** QAT необходим для обеспечения стабильной работы
5. **Резервная программная криптография** обеспечивает работоспособность при отказе QAT

### Рекомендуемая конфигурация

**Для bare-metal с QAT (VK Cloud, dedicated):**
- Включите `set system acceleration qat`
- Используйте AES-256-GCM с SHA256
- Настройте мониторинг QAT
- Регулярно обновляйте firmware

**Для виртуализированных сред (Yandex Cloud):**
- Используйте AES-256-GCM (автоматическое использование AES-NI)
- Выбирайте ВМ с современными процессорами
- Рассмотрите ChaCha20-Poly1305 для лучшей программной производительности

**Для гибридных сценариев:**
- Настройте оба алгоритма в порядке приоритета
- Обеспечьте fallback на программную криптографию
- Используйте одинаковые алгоритмы на обоих концах туннеля

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

