Как 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 все по-другому, так как он предотвратит чрезмерную подписку как на память, так и на процессор, когда вы укажете ограничения на процессор и память в определениях своих модулей.

Другие вопросы по тегам