ืขื“ื›ื•ืŸ ืœ-Intel Cloud Hypervisor 0.3 ื•-Amazon Firecracker 0.19 hypervisors ืฉื ื›ืชื‘ื• ื‘-Rust

ืื™ื ื˜ืœ ะพะฟัƒะฑะปะธะบะพะฒะฐะปะฐ ื’ืจืกื” ื—ื“ืฉื” ืฉืœ hypervisor Cloud Hypervisor 0.3. ื”ื”ื™ืคืจื•ื•ื™ื–ืจ ื‘ื ื•ื™ ืขืœ ืจื›ื™ื‘ื™ื
ืคืจื•ื™ืงื˜ ืžืฉื•ืชืฃ ื—ืœื•ื“ื”-VMM, ืฉื‘ื” ืžืฉืชืชืคื•ืช ื‘ื ื•ืกืฃ ืœืื™ื ื˜ืœ ื’ื ืขืœื™ื‘ืื‘ื, ืืžื–ื•ืŸ, ื’ื•ื’ืœ ื•ืจื“ ื”ืื˜. Rust-VMM ื›ืชื•ื‘ ื‘ืฉืคืช Rust ื•ืžืืคืฉืจ ืœืš ืœื™ืฆื•ืจ ื”ื™ืคืจื•ื•ื™ื–ื•ืจื™ื ืกืคืฆื™ืคื™ื™ื ืœืžืฉื™ืžื”. Cloud Hypervisor ื”ื•ื Hypervisor ืื—ื“ ื›ื–ื” ื”ืžืกืคืง ืฆื’ ืžื›ื•ื ื” ื•ื™ืจื˜ื•ืืœื™ืช ื‘ืจืžื” ื’ื‘ื•ื”ื” (VMM) ื”ืคื•ืขืœ ืขืœ ื’ื‘ื™ KVM ื•ืžื•ืชืื ืœืžืฉื™ืžื•ืช ืžืงื•ืจื™ื•ืช ื‘ืขื ืŸ. ืงื•ื“ ืคืจื•ื™ืงื˜ ื–ืžื™ืŸ ืžื•ืจืฉื” ืชื—ืช Apache 2.0.

Cloud Hypervisor ืžืชืžืงื“ืช ื‘ื”ืคืขืœืช ื”ืคืฆื•ืช ืœื™ื ื•ืงืก ืžื•ื“ืจื ื™ื•ืช ืชื•ืš ืฉื™ืžื•ืฉ ื‘ืžื›ืฉื™ืจื™ื ืคืจ-ื•ื™ืจื˜ื•ืืœื™ื™ื ืžื‘ื•ืกืกื™ ื•ื™ืจื˜ื•ืืœื™. ื‘ื™ืŸ ื”ื™ืขื“ื™ื ื”ืžืจื›ื–ื™ื™ื ืฉื”ื•ื–ื›ืจื• ื”ื: ื”ื™ืขื ื•ืช ื’ื‘ื•ื”ื”, ืฆืจื™ื›ืช ื–ื™ื›ืจื•ืŸ ื ืžื•ื›ื”, ื‘ื™ืฆื•ืขื™ื ื’ื‘ื•ื”ื™ื, ืชืฆื•ืจื” ืคืฉื•ื˜ื” ื•ื”ืคื—ืชืช ื•ืงื˜ื•ืจื™ ืชืงื™ืคื” ืืคืฉืจื™ื™ื.

ืชืžื™ื›ืช ื”ืืžื•ืœืฆื™ื” ื ืฉืžืจืช ืœืžื™ื ื™ืžื•ื ื•ื”ื”ืชืžืงื“ื•ืช ื”ื™ื ื‘ืคืจื” ื•ื™ืจื˜ื•ืืœื™ื–ืฆื™ื”. ื ื›ื•ืŸ ืœืขื›ืฉื™ื• ืจืง ืžืขืจื›ื•ืช x86_64 ื ืชืžื›ื•ืช, ืื‘ืœ ืชืžื™ื›ื” ื‘- AArch64 ืžืชื•ื›ื ื ืช. ืขื‘ื•ืจ ืžืขืจื›ื•ืช ืื•ืจื—ื•ืช, ืจืง ื‘ื ื™ื™ืช 64 ืกื™ื‘ื™ื•ืช ืฉืœ ืœื™ื ื•ืงืก ื ืชืžื›ื•ืช ื›ืขืช. ื”ืžืขื‘ื“, ื”ื–ื™ื›ืจื•ืŸ, ื”-PCI ื•ื”-NVDIMM ืžื•ื’ื“ืจื™ื ื‘ืฉืœื‘ ื”ื”ืจื›ื‘ื”. ืืคืฉืจ ืœื”ืขื‘ื™ืจ ืžื›ื•ื ื•ืช ื•ื™ืจื˜ื•ืืœื™ื•ืช ื‘ื™ืŸ ืฉืจืชื™ื.

ื‘ื’ืจืกื” ื”ื—ื“ืฉื”:

  • ื”ืขื‘ื•ื“ื” ื ืžืฉื›ื” ืขืœ ื”ืขื‘ืจืช I/O ืคืจื•ื™ืจื˜ื•ืืœื™ื–ืฆื™ื” ืœืชื”ืœื™ื›ื™ื ื ืคืจื“ื™ื. ื”ื™ื›ื•ืœืช ืœื”ืฉืชืžืฉ ื‘-backends ื ื•ืกืคื” ืœืื™ื ื˜ืจืืงืฆื™ื” ืขื ืžื›ืฉื™ืจื™ ื—ืกื™ืžื” vhost-user-blk. ื”ืฉื™ื ื•ื™ ืžืืคืฉืจ ืœื—ื‘ืจ ื”ืชืงื ื™ ื‘ืœื•ืง ื”ืžื‘ื•ืกืกื™ื ืขืœ ืžื•ื“ื•ืœ vhost-user ืœ-Cloud Hypervisor, ื›ื’ื•ืŸ SPDK, ื›ื—ืœืงื™ื ืื—ื•ืจื™ื™ื ืœืื—ืกื•ืŸ ืคืจื•ื™ืจื˜ื•ืืœื™ื–ืฆื™ื”;
  • ืชืžื™ื›ื” ื‘ื”ืขื‘ืจืช ืคืขื•ืœื•ืช ืจืฉืช ืœ-backends, ื”ื•ืฆื’ื” ื‘ืžื”ื“ื•ืจื” ื”ืื—ืจื•ื ื” vhost-user-net, ืžื•ืจื—ื‘ ืขื ืงืฆื” ืื—ื•ืจื™ ื—ื“ืฉ ื”ืžื‘ื•ืกืก ืขืœ ืžื ื”ืœ ื”ืชืงืŸ ืจืฉืช ื•ื™ืจื˜ื•ืืœื™ TAP. ื”ืงืฆื” ื”ืื—ื•ืจื™ ื›ืชื•ื‘ ื‘-Rust ื•ืžืฉืžืฉ ื›ืขืช ื‘-Cloud Hypervisor ื›ืืจื›ื™ื˜ืงื˜ื•ืจืช ื”ืจืฉืช ื”ืคืืจื-ื•ื™ืจื˜ื•ืืœื™ืช ื”ืจืืฉื™ืช;
  • ื›ื“ื™ ืœื”ื’ื‘ื™ืจ ืืช ื”ื™ืขื™ืœื•ืช ื•ื”ืื‘ื˜ื—ื” ืฉืœ ื”ืชืงืฉื•ืจืช ื‘ื™ืŸ ื”ืกื‘ื™ื‘ื” ื”ืžืืจื—ืช ืœืžืขืจื›ืช ื”ืื•ืจื—ืช, ืžื•ืฆืข ื™ื™ืฉื•ื ื”ื™ื‘ืจื™ื“ื™ ืฉืœ ืฉืงืขื™ื ืขื ื›ืชื•ื‘ืช AF_VSOCK (ืฉืงืขื™ ืจืฉืช ื•ื™ืจื˜ื•ืืœื™ื™ื), ื”ืคื•ืขืœื™ื ื‘ืืžืฆืขื•ืช virtio. ื”ื™ื™ืฉื•ื ืžื‘ื•ืกืก ืขืœ ื”ืชืคืชื—ื•ื™ื•ืช ืฉืœ ื”ืคืจื•ื™ืงื˜ ื—ื–ื™ื–, ืฉืคื•ืชื—ื” ืขืœ ื™ื“ื™ ืืžื–ื•ืŸ. VSOCK ืžืืคืฉืจ ืœืš ืœื”ืฉืชืžืฉ ื‘-POSIX Sockets API ื”ืกื˜ื ื“ืจื˜ื™ ืœืื™ื ื˜ืจืืงืฆื™ื” ื‘ื™ืŸ ื™ื™ืฉื•ืžื™ื ื‘ืฆื“ ื”ืื•ืจื— ื•ื”ืžืืจื—, ืžื” ืฉืžืงืœ ืขืœ ื”ืชืืžืช ืชื•ื›ื ื™ื•ืช ืจืฉืช ืจื’ื™ืœื•ืช ืœืื™ื ื˜ืจืืงืฆื™ื” ื›ื–ื• ื•ืœื™ื™ืฉื ืืช ื”ืื™ื ื˜ืจืืงืฆื™ื” ืฉืœ ืžืกืคืจ ืชื•ื›ื ื•ืช ืœืงื•ื— ืขื ืืคืœื™ืงืฆื™ื™ืช ืฉืจืช ืื—ืช;
  • ืกื™ืคืง ืชืžื™ื›ื” ืจืืฉื•ื ื™ืช ืขื‘ื•ืจ ืžืžืฉืง API ืœื ื™ื”ื•ืœ ื‘ืืžืฆืขื•ืช ืคืจื•ื˜ื•ืงื•ืœ HTTP. ื‘ืขืชื™ื“, API ื–ื” ื™ืืคืฉืจ ืœื™ื–ื•ื ืคืขื•ืœื•ืช ืืกื™ื ื›ืจื•ื ื™ื•ืช ื‘ืžืขืจื›ื•ืช ืื•ืจื—ื•ืช, ื›ื’ื•ืŸ ื—ื™ื‘ื•ืจ ื—ื ืœืžืฉืื‘ื™ื ื•ืกื‘ื™ื‘ื•ืช ื”ื’ื™ืจื”;
  • ื ื•ืกืคื” ืฉื›ื‘ื” ืขื ืžื™ืžื•ืฉ ืชืขื‘ื•ืจื” ื”ืžื‘ื•ืกืก ืขืœ virtio MMIO (Memory mapd virtio), ืฉื ื™ืชืŸ ืœื”ืฉืชืžืฉ ื‘ื” ืœื™ืฆื™ืจืช ืžืขืจื›ื•ืช ืื•ืจื—ื•ืช ืžื™ื ื™ืžืœื™ืกื˜ื™ื•ืช ืฉืื™ื ืŸ ื“ื•ืจืฉื•ืช ืืžื•ืœืฆื™ื™ืช ืื•ื˜ื•ื‘ื•ืก PCI;
  • ื›ื—ืœืง ืžื”ื™ื•ื–ืžื” ืœื”ืจื—ื‘ืช ื”ืชืžื™ื›ื” ื‘ื”ืคืขืœืช ืžืขืจื›ื•ืช ืื•ืจื—ื™ื ืžืงื•ื ื ื•ืช, Cloud Hypervisor ื”ื•ืกื™ืคื” ืืช ื”ื™ื›ื•ืœืช ืœื”ืขื‘ื™ืจ ื”ืชืงื ื™ IOMMU ืžื•ื™ืจื˜ื•ืืœื™ื™ื ื‘ืืžืฆืขื•ืช virtio, ืžื” ืฉืžืฉืคืจ ืืช ื”ืื‘ื˜ื—ื” ืฉืœ ื”ืขื‘ืจื” ืžืงื•ื ื ืช ื•ื™ืฉื™ืจื” ืฉืœ ืžื›ืฉื™ืจื™ื.
  • ืกื™ืคืง ืชืžื™ื›ื” ืขื‘ื•ืจ ืื•ื‘ื•ื ื˜ื• 19.10;
  • ื ื•ืกืคื” ืืช ื”ื™ื›ื•ืœืช ืœื”ืคืขื™ืœ ืžืขืจื›ื•ืช ืื•ืจื—ื•ืช ืขื ื™ื•ืชืจ ืž-64 ื’'ื™ื’ื”-ื‘ื™ื™ื˜ ืฉืœ ื–ื™ื›ืจื•ืŸ RAM.

ื‘ื ื•ืกืฃ, ื ื™ืชืŸ ืœืฆื™ื™ืŸ ื ื•ืฉื ื—ื“ืฉ ืกืžื•ืš ืžืคื•ืชื— ืฆื’ ืžื›ื•ื ื” ื•ื™ืจื˜ื•ืืœื™ืช ื—ื–ื™ื–, ื›ืชื•ื‘ ื’ื ื‘-Rust, ืžื‘ื•ืกืก ืขืœ Rust-VMM ื•ืคื•ืขืœ ืขืœ ื’ื‘ื™ KVM. ื—ื–ื™ื– ื”ื•ื ื”ืžื–ืœื’ ืฉืœ ื”ืคืจื•ื™ืงื˜ CrosVM, ื”ืžืฉืžืฉ ืืช Google ืœื”ืคืขืœืช ื™ื™ืฉื•ืžื™ื ืœื™ื ื•ืงืก ะธ ืื ื“ืจื•ืื™ื“ ื‘-ChromeOS. Firecracker ืžืคื•ืชื— ืขืœ ื™ื“ื™ Amazon Web Services ื›ื“ื™ ืœืฉืคืจ ืืช ื”ื‘ื™ืฆื•ืขื™ื ื•ื”ื™ืขื™ืœื•ืช ืฉืœ ืคืœื˜ืคื•ืจืžื•ืช AWS Lambda ื•-AWS Fargate.

ื”ืคืœื˜ืคื•ืจืžื” ื ื•ืขื“ื” ืœื”ืคืขื™ืœ ืžื›ื•ื ื•ืช ื•ื™ืจื˜ื•ืืœื™ื•ืช ืขื ืชืงื•ืจื” ืžื™ื ื™ืžืœื™ืช ื•ืžืกืคืงืช ื›ืœื™ื ืœื™ืฆื™ืจื” ื•ื ื™ื”ื•ืœ ืฉืœ ืกื‘ื™ื‘ื•ืช ื•ืฉื™ืจื•ืชื™ื ืžื‘ื•ื“ื“ื™ื ืฉื ื‘ื ื• ื‘ืืžืฆืขื•ืช ืžื•ื“ืœ ืคื™ืชื•ื— ืœืœื ืฉืจืช (ืคื•ื ืงืฆื™ื” ื›ืฉื™ืจื•ืช). Firecracker ืžืฆื™ืขื” ืžื›ื•ื ื•ืช ื•ื™ืจื˜ื•ืืœื™ื•ืช ืงืœื•ืช ืžืฉืงืœ, ื”ื ืงืจืื•ืช microVMs, ื”ืžืฉืชืžืฉื•ืช ื‘ื˜ื›ื ื•ืœื•ื’ื™ื•ืช ื•ื™ืจื˜ื•ืืœื™ื–ืฆื™ื” ืฉืœ ื—ื•ืžืจื” ื›ื“ื™ ืœืกืคืง ื‘ื™ื“ื•ื“ ืžืœื ืชื•ืš ืืกืคืงืช ื”ื‘ื™ืฆื•ืขื™ื ื•ื”ื’ืžื™ืฉื•ืช ืฉืœ ืงื•ื ื˜ื™ื™ื ืจื™ื ืžืกื•ืจืชื™ื™ื. ืœื“ื•ื’ืžื”, ื‘ืขืช ืฉื™ืžื•ืฉ ื‘-Firecracker, ื”ื–ืžืŸ ืžืจื’ืข ื”ืฉืงืช microVM ื•ืขื“ ืœืชื—ื™ืœืช ื”ืคืขืœืช ื”ืืคืœื™ืงืฆื™ื” ืื™ื ื• ืขื•ืœื” ืขืœ 125ms, ืžื” ืฉืžืืคืฉืจ ืœื”ืฉื™ืง ืžื›ื•ื ื•ืช ื•ื™ืจื˜ื•ืืœื™ื•ืช ื—ื“ืฉื•ืช ื‘ืขื•ืฆืžื” ืฉืœ ืขื“ 150 ืกื‘ื™ื‘ื•ืช ื‘ืฉื ื™ื™ื”.

ื”ืžื”ื“ื•ืจื” ื”ื—ื“ืฉื” ืฉืœ Firecracker ืžื•ืกื™ืคื” ืžืฆื‘ ืคืขื•ืœื” ืžื‘ืœื™ ืœื”ืคืขื™ืœ ืืช ื”ืžื˜ืคืœ ื‘-API ("-no-api"), ื•ืžื’ื‘ื™ืœื” ืืช ื”ืกื‘ื™ื‘ื” ืจืง ืœื”ื’ื“ืจื•ืช ื”ืžืงื•ื“ื“ื•ืช ื‘ืงื•ื‘ืฅ ื”ืชืฆื•ืจื”. ื”ืชืฆื•ืจื” ื”ืกื˜ื˜ื™ืช ืžื•ื’ื“ืจืช ื‘ืืžืฆืขื•ืช ื”ืืคืฉืจื•ืช "--config-file" ื•ืžื•ื’ื“ืจืช ื‘ืคื•ืจืžื˜ JSON. ืžืืคืฉืจื•ื™ื•ืช ืฉื•ืจืช ื”ืคืงื•ื“ื”, ื ื•ืกืคื” ื’ื ืชืžื™ื›ื” ื‘ืžืคืจื™ื“ "โ€”", ืฉื”ื“ื’ืœื™ื ืฉืฆื•ื™ื ื• ืœืื—ืจ ืžื›ืŸ ืžื•ืขื‘ืจื™ื ืœืื•ืจืš ื”ืฉืจืฉืจืช ืœืœื ืขื™ื‘ื•ื“.

ื’ื ืืžื–ื•ืŸ, ื”ืžืคืชื—ืช Firecracker ื”ื•ื›ืจื– ืขืœ ืžืชืŸ ื—ืกื•ืช ืœืžืคืชื—ื™ ืฉืคืช ื”ืชื›ื ื•ืช Rust. ื™ืฆื•ื™ืŸ ื›ื™ ื ืขืฉื” ืฉื™ืžื•ืฉ ื”ื•ืœืš ื•ื’ื•ื‘ืจ ื‘-Rust ื‘ืคืจื•ื™ืงื˜ื™ื ืฉืœ ื”ื—ื‘ืจื” ื•ื”ืคื™ืชื•ื—ื™ื ืขืœื™ื” ื›ื‘ืจ ื™ื•ืฉืžื• ื‘ืฉื™ืจื•ืชื™ื ื›ืžื• Lambda, EC2 ื•-S3. ืืžื–ื•ืŸ ืกื™ืคืงื” ืœืคืจื•ื™ืงื˜ Rust ืืช ื”ืชืฉืชื™ืช ืœืื—ืกื•ืŸ ืžื”ื“ื•ืจื•ืช ื•ื‘ื ื™ื™ื” ื‘-S3, ืœื”ืจื™ืฅ ืžื‘ื—ื ื™ ืจื’ืจืกื™ื” ื‘-EC2 ื•ืœืชื—ื–ืง ืืชืจ docs.rs ืขื ืชื™ืขื•ื“ ืœื›ืœ ื”ื—ื‘ื™ืœื•ืช ืžืžืื’ืจ crates.io.

ื’ื ืืžื–ื•ืŸ ื”ื’ื™ืฉื• ะฟั€ะพะณั€ะฐะผะผัƒ ืืฉืจืื™ ืงื™ื“ื•ื ืžื›ื™ืจื•ืช ืฉืœ AWS, ืฉื‘ื• ืคืจื•ื™ืงื˜ื™ ืงื•ื“ ืคืชื•ื— ื™ื›ื•ืœื™ื ืœืงื‘ืœ ื’ื™ืฉื” ื—ื•ืคืฉื™ืช ืœืฉื™ืจื•ืชื™ AWS ืฉื™ื›ื•ืœื™ื ืœืฉืžืฉ ืœืื—ืกื•ืŸ ืžืฉืื‘ื™ื, ื‘ื ื™ื™ื”, ืื™ื ื˜ื’ืจืฆื™ื” ืจืฆื™ืคื” ื•ื‘ื“ื™ืงื•ืช. ื‘ื™ืŸ ื”ืคืจื•ื™ืงื˜ื™ื ืฉื›ื‘ืจ ืื•ืฉืจื• ืœื”ืฉืชืชืคื•ืช ื‘ืชื•ื›ื ื™ืช, ื‘ื ื•ืกืฃ ืœ-Rust, ืฆื•ื™ื ื• AdoptOpenJDK, Maven Central, Kubernetes, Prometheus, Envoy ื•ื’'ื•ืœื™ื”. ื”ื’ืฉื•ืช ืžืชืงื‘ืœื•ืช ืžื›ืœ ืคืจื•ื™ืงื˜ ืงื•ื“ ืคืชื•ื— ื”ืžื•ืขื‘ืจ ืชื—ืช ืจื™ืฉื™ื•ื ื•ืช ืžืื•ืฉืจื™ื ืฉืœ OSI.

ืžืงื•ืจ: OpenNet.ru

ื”ื•ืกืคืช ืชื’ื•ื‘ื”