mirror of
https://github.com/asterinas/asterinas.git
synced 2025-06-08 21:06:48 +00:00
86 lines
2.5 KiB
Bash
Executable File
86 lines
2.5 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# SPDX-License-Identifier: MPL-2.0
|
|
|
|
set -e
|
|
|
|
BENCHMARK_PATH=$1
|
|
ASTERINAS_GUEST_CMD=$2
|
|
LINUX_GUEST_CMD=$3
|
|
ASTERINAS_OUTPUT=$4
|
|
LINUX_OUTPUT=$5
|
|
# Message to monitor in the log file to determine whether the VM is ready
|
|
# It should align with bench_runner.sh
|
|
READY_MESSAGE="The VM is ready for the benchmark."
|
|
|
|
# Import the common functions
|
|
BENCHMARK_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)/../"
|
|
source "${BENCHMARK_DIR}/common/prepare_host.sh"
|
|
|
|
if [[ "$BENCHMARK_PATH" =~ "iperf" ]]; then
|
|
# Persist Iperf port
|
|
export IPERF_PORT=5201
|
|
elif [[ "$BENCHMARK_PATH" =~ "nginx" ]]; then
|
|
# Persist Nginx port
|
|
export NGINX_PORT=8080
|
|
elif [[ "$BENCHMARK_PATH" =~ "redis" ]]; then
|
|
# Persist Redis port
|
|
export REDIS_PORT=6379
|
|
elif [[ "$BENCHMARK_PATH" =~ "tcp_virtio_lat" ]]; then
|
|
# Persist lmbench/tcp_lat port
|
|
export LMBENCH_TCP_LAT_PORT=31234
|
|
elif [[ "$BENCHMARK_PATH" =~ "tcp_virtio_bw" ]]; then
|
|
# Persist lmbench/bw_tcp port
|
|
export LMBENCH_TCP_BW_PORT=31236
|
|
fi
|
|
|
|
# Function to run the benchmark
|
|
# Parameters:
|
|
# $1: guest command to run on the VM
|
|
# $2: output file to store the benchmark results
|
|
# $3: log file to monitor for the ready message
|
|
# $4: ready message to monitor in the log file
|
|
run_benchmark() {
|
|
local guest_cmd=$1
|
|
local output_file=$2
|
|
local guest_log_file=$3
|
|
local ready_message=$4
|
|
|
|
echo "Running the benchmark on the VM..."
|
|
eval "${guest_cmd}" | tee "${guest_log_file}" &
|
|
|
|
# Monitor the log file for the ready message
|
|
echo "Waiting for the ready message: ${ready_message}"
|
|
while true; do
|
|
if grep -q "${ready_message}" "${guest_log_file}"; then
|
|
echo "Ready message detected. Running the benchmark on the host..."
|
|
break
|
|
fi
|
|
sleep 1
|
|
done
|
|
|
|
# Sleep for a short time to ensure the guest is fully ready
|
|
sleep 1
|
|
|
|
# The listening server address in guest VM
|
|
export GUEST_SERVER_IP_ADDRESS=10.0.2.15
|
|
|
|
# Run the host command and save the output to the specified file.
|
|
bash "${BENCHMARK_PATH}/host.sh" 2>&1 | tee "${output_file}"
|
|
|
|
# Clean up the log file
|
|
rm -f "${guest_log_file}"
|
|
}
|
|
|
|
# Run the benchmark on the Asterinas VM
|
|
run_benchmark "${ASTERINAS_GUEST_CMD}" "${ASTERINAS_OUTPUT}" "/tmp/asterinas.log" "${READY_MESSAGE}"
|
|
|
|
# Wait for the Asterinas QEMU process to exit
|
|
wait
|
|
|
|
# Run the benchmark on the Linux VM
|
|
prepare_fs
|
|
run_benchmark "${LINUX_GUEST_CMD}" "${LINUX_OUTPUT}" "/tmp/linux.log" "${READY_MESSAGE}"
|
|
|
|
# Wait for the Linux QEMU process to exit
|
|
wait |