Для начала хост, компьютер не очень мощный, даже наоборот, но в данном случае это не имеет никакого значения.
Processor: Intel(R) Celeron(R) CPU J3355 @ 2.00GHz
CPU cores: 2
Frequency: 2428.759 MHz
RAM: 15Gi
Swap: 8.0Gi
Kernel: Linux 5.15.108-1-pve x86_64
Disks:
sda 223.6G SSD
CPU: SHA256-hashing 500 MB
5.458 seconds
CPU: bzip2-compressing 500 MB
10.662 seconds
CPU: AES-encrypting 500 MB
2.635 seconds
ioping: seek rate
min/avg/max/mdev = 103.4 us / 146.3 us / 6.43 ms / 67.6 us
ioping: sequential read speed
generated 8.81 k requests in 5.00 s, 2.15 GiB, 1.76 k iops, 440.4 MiB/s
Теперь LXC контейнер:Processor: Intel(R) Celeron(R) CPU J3355 @ 2.00GHz
CPU cores: 2
Frequency: 2500.000 MHz
RAM: 2,0Gi
Swap: 512Mi
Kernel: Linux 5.15.108-1-pve x86_64
Disks:
sda 223,6G SSD
CPU: SHA256-hashing 500 MB
5,858 seconds
CPU: bzip2-compressing 500 MB
11,333 seconds
CPU: AES-encrypting 500 MB
2,666 seconds
ioping: seek rate
min/avg/max/mdev = 110.8 us / 163.9 us / 4.42 ms / 62.5 us
ioping: sequential read speed
generated 8.16 k requests in 5.00 s, 1.99 GiB, 1.63 k iops, 408.1 MiB/s
Как видим - разница на уровне погрешности измерений. Поэтому можно смело говорить, что производительность контейнеров примерно равна производительности хоста.Теперь KVM виртуальная машина, значения по умолчанию.
Processor: Common KVM processor
CPU cores: 2
Frequency: 1996.800 MHz
RAM: 3,9Gi
Swap: 974Mi
Kernel: Linux 4.19.0-20-amd64 x86_64
Disks:
sda 8G HDD
CPU: SHA256-hashing 500 MB
8,569 seconds
CPU: bzip2-compressing 500 MB
15,707 seconds
CPU: AES-encrypting 500 MB
15,507 seconds
ioping: seek rate
min/avg/max/mdev = 257.1 us / 698.5 us / 29.7 ms / 742.4 us
ioping: sequential read speed
generated 2.75 k requests in 5.00 s, 686.5 MiB, 549 iops, 137.3 MiB/s
В отличии от контейнера виртуалка добавляет отдельный слой виртуального железа и это вносит свои издержки.Так как у нас эмулируется
Common KVM processor, то сразу видим провал по частоте до номинальной и первые два процессорных теста примерно соответствуют разнице в частоте. А вот третий полностью зависит от поддержки аппаратных инструкций процессора и здесь разница довольно серьезная. Но зато
Common KVM processor является универсальным и переносимым. Дисковая система по умолчанию без кеширования и результат тоже хуже, чем на хосте.
Но и виртуальные машины применяются там. где нужна более серьезная изоляция на уровне железа, либо его специальная эмуляция, так как не все сценарии поддерживаются в контейнерах.
Если же нужна производительность, то смело берем LXC.