Как aws firecracker обрабатывает vcpu?
Я выполнил команду ниже в aws firecracker для настройки виртуальной машины. У меня на хост-машине только 8 виртуальных ЦП.
curl --unix-socket /tmp/firecracker.socket -i \
-X PUT 'http://localhost/machine-config' \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
-d '{
"vcpu_count": 20,
"mem_size_mib": 1024,
"ht_enabled": false
}'
В Kubernetes, если мы попытаемся настроить модуль с vcpu больше, чем max vcpu на хосте, он перейдет в состояние ожидания. но фейерверк не показал никаких ошибок или предупреждений, он просто запустил виртуальную машину.
Кто-нибудь любезно объясните, как фейерверк обрабатывает vcpu?
2 ответа
Firecracker - это VMM, а vCPU - это просто поток, работающий в хост-системе.
Я бы не стал путать управление ресурсами Kubernetes с поведением VMM - они ортогональны. Firecracker запускает виртуальные машины, а не модули.
Если бы вы использовали среду выполнения OCI в Kubernetes, которая использует Firecracker для изоляции, количество запросов / ограничений для результирующего модуля будет ограничено Kubernetes (scheduler/kubelet). Опять же, это ортогонально тому, как ведет себя VMM.
В Firecracker виртуальные ЦП реализованы как потоки.
При запуске экземпляра Firecracker создаст поток для каждого настроенного виртуального ЦП.
Например, работающая microvm с 4 настроенными vCPU имеет 6 потоков: основной поток (обрабатывает эмуляцию устройства), поток api (fc_api) и 4 потока vCPU.
ubuntu@ip-172-31-20-103:~$ ps H -o 'tid comm' 571
TID COMMAND
571 firecracker
572 fc_api
730 fc_vcpu3
731 fc_vcpu2
734 fc_vcpu1
735 fc_vcpu0
С Firecracker вы можете завышать подписку как на ЦП, так и на память, поэтому объем гостевой памяти и количество виртуальных ЦП могут быть намного выше, чем фактические физические ЦП и ОЗУ.
С Kubernetes все по-другому, так как он предотвратит чрезмерную подписку как на память, так и на процессор, когда вы укажете ограничения на процессор и память в определениях своих модулей.