firecracker

Форк
0
/
sandbox.py 
77 строк · 2.0 Кб
1
#!/usr/bin/env python3
2
# Copyright 2023 Amazon.com, Inc. or its affiliates. All Rights Reserved.
3
# SPDX-License-Identifier: Apache-2.0
4

5
# pylint:disable=invalid-name
6

7
"""
8
Run Firecracker in an IPython REPL
9
"""
10

11
import argparse
12
import re
13
from pathlib import Path
14

15
from framework.artifacts import disks, kernels
16
from framework.microvm import MicroVMFactory
17
from host_tools.cargo_build import get_firecracker_binaries
18

19
kernels = list(kernels("vmlinux-*"))
20
rootfs = list(disks("ubuntu*ext4"))
21

22

23
def parse_byte_size(param):
24
    """
25
    >>> parse_byte_size("1MB")
26
    1048576
27
    """
28
    unit = {
29
        "MB": 2**20,
30
        "GB": 2**30,
31
    }
32
    match = re.match(r"(?P<val>\d+)(?P<unit>[MG]B)", param.upper())
33
    return int(match.group("val")) * unit[match.group("unit")]
34

35

36
parser = argparse.ArgumentParser()
37
parser.add_argument(
38
    "--kernel",
39
    choices=kernels,
40
    default=kernels[-1],
41
    help=f"Kernel to use. [{kernels[-1]}]",
42
)
43
parser.add_argument(
44
    "--rootfs",
45
    choices=rootfs,
46
    default=rootfs[-1],
47
    help=f"Rootfs to use. [{rootfs[-1]}]",
48
)
49
parser.add_argument("--vcpus", type=int, default=2)
50
parser.add_argument(
51
    "--guest-mem-size",
52
    type=parse_byte_size,
53
    default=128 * 2**20,  # 128MB
54
)
55
parser.add_argument("--rootfs-size", type=parse_byte_size, default=1 * 2**30)  # 1GB
56
parser.add_argument("--binary-dir", help="Path to the firecracker binaries")
57
args = parser.parse_args()
58
print(args)
59

60
bins = None
61
if args.binary_dir:
62
    binary_dir = Path(args.binary_dir).resolve()
63
    bins = binary_dir / "firecracker", binary_dir / "jailer"
64
else:
65
    bins = get_firecracker_binaries()
66

67
print("This step may take a while to compile Firecracker ...")
68
vmfcty = MicroVMFactory(*bins)
69
uvm = vmfcty.build(args.kernel, args.rootfs)
70
uvm.help.enable_console()
71
uvm.help.resize_disk(uvm.rootfs_file, args.rootfs_size)
72
uvm.spawn()
73
uvm.help.print_log()
74
uvm.add_net_iface()
75
uvm.basic_config(vcpu_count=args.vcpus, mem_size_mib=args.guest_mem_size // 2**20)
76
uvm.start()
77
uvm.get_all_metrics()
78

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.