Files
proxy-scraper-checker/.github/scripts/allocator_bench_unix.sh
T

89 lines
2.0 KiB
Bash

#!/usr/bin/env bash
set -euo pipefail
TOKIO_FEATURE=""
if [[ "${TOKIO_MULTI_THREAD:-false}" == "true" ]]; then
TOKIO_FEATURE="tokio-multi-thread"
fi
allocators=(system jemalloc mimalloc_v2 mimalloc_v3)
if [[ "$RUNNER_OS" == "Linux" ]]; then
time_cmd=(/usr/bin/time -v)
parse_peak() {
awk -F': ' '/Maximum resident set size/ {print $2; exit}'
}
else
time_cmd=(/usr/bin/time -l)
parse_peak() {
awk '/maximum resident set size/ {print $1; exit}'
}
fi
build_features() {
local allocator="$1"
local features=""
if [[ "$allocator" != "system" ]]; then
features="$allocator"
fi
if [[ -n "$TOKIO_FEATURE" ]]; then
if [[ -n "$features" ]]; then
features="$features,$TOKIO_FEATURE"
else
features="$TOKIO_FEATURE"
fi
fi
echo "$features"
}
run_one() {
local allocator="$1"
local features
features="$(build_features "$allocator")"
local feature_args=()
if [[ -n "$features" ]]; then
feature_args=(--features "$features")
fi
local output
output="$(${time_cmd[@]} cargo run --release --locked "${feature_args[@]}" 2>&1 >/dev/null)"
local peak
peak="$(echo "$output" | parse_peak)"
if [[ -z "$peak" ]]; then
echo "Failed to parse peak memory for $allocator" >&2
exit 1
fi
if [[ "$RUNNER_OS" != "Linux" ]]; then
peak=$((peak / 1024))
fi
printf "%s\t%s\n" "$allocator" "$peak" >> results.tsv
}
if [[ "$RUNNER_OS" == "Windows" ]]; then
allocators=(system mimalloc_v2 mimalloc_v3)
fi
: > results.tsv
for allocator in "${allocators[@]}"; do
run_one "$allocator"
done
{
echo "### ${PLATFORM_LABEL:-unknown} (tokio-multi-thread=${TOKIO_MULTI_THREAD:-false})"
echo ""
echo "| Allocator | Peak KB |"
echo "| --- | ---: |"
sort -n -k2,2 results.tsv | while IFS=$'\t' read -r allocator peak; do
echo "| $allocator | $peak |"
done
best="$(sort -n -k2,2 results.tsv | head -n1)"
best_allocator="${best%%$'\t'*}"
best_peak="${best#*$'\t'}"
echo ""
echo "**Best:** $best_allocator ($best_peak KB)"
} >> "$GITHUB_STEP_SUMMARY"