Path: blob/main/tests/integration_tests/performance/test_process_startup_time.py
1958 views
# Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved.1# SPDX-License-Identifier: Apache-2.02"""Test that the process startup time up to socket bind is within spec."""34import json5import os6import time7import platform89import host_tools.logging as log_tools10from host_tools.cargo_build import run_seccompiler_bin1112MAX_STARTUP_TIME_CPU_US = {'x86_64': 5500, 'aarch64': 2900}13""" The maximum acceptable startup time in CPU us. """14# TODO: Keep a `current` startup time in S3 and validate we don't regress151617def test_startup_time_new_pid_ns(test_microvm_with_api):18"""Check startup time when jailer is spawned in a new PID namespace."""19microvm = test_microvm_with_api20microvm.bin_cloner_path = None21microvm.jailer.new_pid_ns = True22_test_startup_time(microvm)232425def test_startup_time_daemonize(test_microvm_with_api):26"""Check startup time when jailer spawns Firecracker in a new PID ns."""27microvm = test_microvm_with_api28_test_startup_time(microvm)293031def test_startup_time_custom_seccomp(test_microvm_with_api):32"""Check the startup time for jailer and Firecracker up to socket bind, ...3334when using custom seccomp filters via the `--seccomp-filter` param.35"""36microvm = test_microvm_with_api3738_custom_filter_setup(microvm)3940_test_startup_time(microvm)414243def _test_startup_time(microvm):44microvm.spawn()4546microvm.basic_config(vcpu_count=2, mem_size_mib=1024)4748# Configure metrics.49metrics_fifo_path = os.path.join(microvm.path, 'metrics_fifo')50metrics_fifo = log_tools.Fifo(metrics_fifo_path)5152response = microvm.metrics.put(53metrics_path=microvm.create_jailed_resource(metrics_fifo.path)54)55assert microvm.api_session.is_status_no_content(response.status_code)5657microvm.start()58time.sleep(0.4)5960# The metrics fifo should be at index 1.61# Since metrics are flushed at InstanceStart, the first line will suffice.62lines = metrics_fifo.sequential_reader(1)63metrics = json.loads(lines[0])64startup_time_us = metrics['api_server']['process_startup_time_us']65cpu_startup_time_us = metrics['api_server']['process_startup_time_cpu_us']6667print('Process startup time is: {} us ({} CPU us)'68.format(startup_time_us, cpu_startup_time_us))6970assert cpu_startup_time_us > 071assert cpu_startup_time_us <= MAX_STARTUP_TIME_CPU_US[platform.machine()]727374def _custom_filter_setup(test_microvm):75bpf_path = os.path.join(test_microvm.path, 'bpf.out')7677run_seccompiler_bin(bpf_path)7879test_microvm.create_jailed_resource(bpf_path)80test_microvm.jailer.extra_args.update({"seccomp-filter": 'bpf.out'})818283