maybe fixed cpu fork logging
This commit is contained in:
+31
-7
@@ -30,6 +30,7 @@ sample_process_csv() {
|
|||||||
local csv="$2"
|
local csv="$2"
|
||||||
local start_uptime="$3"
|
local start_uptime="$3"
|
||||||
local max_seconds="$4"
|
local max_seconds="$4"
|
||||||
|
local proc_step="${5:-0}"
|
||||||
|
|
||||||
local have_pidstat=0
|
local have_pidstat=0
|
||||||
if command -v pidstat >/dev/null 2>&1; then
|
if command -v pidstat >/dev/null 2>&1; then
|
||||||
@@ -46,6 +47,9 @@ sample_process_csv() {
|
|||||||
prev_cpu_idle=$((c_idle + c_iowait))
|
prev_cpu_idle=$((c_idle + c_iowait))
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
local first_sample=1
|
||||||
|
local next_proc_sample=0
|
||||||
|
|
||||||
while kill -0 "$pid" 2>/dev/null; do
|
while kill -0 "$pid" 2>/dev/null; do
|
||||||
local now_uptime elapsed_s
|
local now_uptime elapsed_s
|
||||||
now_uptime=$(awk '{print $1}' /proc/uptime)
|
now_uptime=$(awk '{print $1}' /proc/uptime)
|
||||||
@@ -61,6 +65,23 @@ sample_process_csv() {
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
local proc_count thread_total
|
||||||
|
proc_count=$(count_processes || echo 0)
|
||||||
|
thread_total=$(count_threads_total || echo 0)
|
||||||
|
|
||||||
|
local should_sample=1
|
||||||
|
if [ "$proc_step" -gt 0 ]; then
|
||||||
|
if [ "$first_sample" -eq 1 ]; then
|
||||||
|
next_proc_sample=$((proc_count + proc_step))
|
||||||
|
first_sample=0
|
||||||
|
elif [ "$proc_count" -lt "$next_proc_sample" ]; then
|
||||||
|
should_sample=0
|
||||||
|
else
|
||||||
|
next_proc_sample=$((proc_count + proc_step))
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$should_sample" -eq 1 ]; then
|
||||||
local load1 load5 load15
|
local load1 load5 load15
|
||||||
read -r load1 load5 load15 _ < /proc/loadavg
|
read -r load1 load5 load15 _ < /proc/loadavg
|
||||||
|
|
||||||
@@ -68,10 +89,6 @@ sample_process_csv() {
|
|||||||
read -r mem_total mem_avail < <(get_mem_kb || echo "0 0")
|
read -r mem_total mem_avail < <(get_mem_kb || echo "0 0")
|
||||||
mem_used=$((mem_total - mem_avail))
|
mem_used=$((mem_total - mem_avail))
|
||||||
|
|
||||||
local proc_count thread_total
|
|
||||||
proc_count=$(count_processes || echo 0)
|
|
||||||
thread_total=$(count_threads_total || echo 0)
|
|
||||||
|
|
||||||
# Use pidstat for CPU and ps for memory/thread metrics.
|
# Use pidstat for CPU and ps for memory/thread metrics.
|
||||||
local cpu rss vsz nlwp
|
local cpu rss vsz nlwp
|
||||||
rss=$(awk '/^VmRSS:/ {print $2}' "/proc/$pid/status" 2>/dev/null || echo 0)
|
rss=$(awk '/^VmRSS:/ {print $2}' "/proc/$pid/status" 2>/dev/null || echo 0)
|
||||||
@@ -102,6 +119,7 @@ sample_process_csv() {
|
|||||||
"$mem_total" "$mem_avail" "$mem_used" "$proc_count" "$thread_total" \
|
"$mem_total" "$mem_avail" "$mem_used" "$proc_count" "$thread_total" \
|
||||||
"$pid" "$cpu" "$sys_cpu_pct" "${rss:-0}" "${vsz:-0}" "${stk:-0}" "${heap:-0}" "${nlwp:-0}" \
|
"$pid" "$cpu" "$sys_cpu_pct" "${rss:-0}" "${vsz:-0}" "${stk:-0}" "${heap:-0}" "${nlwp:-0}" \
|
||||||
>> "$csv"
|
>> "$csv"
|
||||||
|
fi
|
||||||
|
|
||||||
sleep 1
|
sleep 1
|
||||||
done
|
done
|
||||||
@@ -112,6 +130,7 @@ run_with_sampling() {
|
|||||||
local cmd="$2"
|
local cmd="$2"
|
||||||
local csv="$3"
|
local csv="$3"
|
||||||
local max_seconds="$4"
|
local max_seconds="$4"
|
||||||
|
local proc_step="${5:-0}"
|
||||||
|
|
||||||
log "Starting $name: $cmd"
|
log "Starting $name: $cmd"
|
||||||
|
|
||||||
@@ -128,7 +147,7 @@ run_with_sampling() {
|
|||||||
pid=$!
|
pid=$!
|
||||||
fi
|
fi
|
||||||
|
|
||||||
sample_process_csv "$pid" "$csv" "$start_uptime" "$max_seconds"
|
sample_process_csv "$pid" "$csv" "$start_uptime" "$max_seconds" "$proc_step"
|
||||||
|
|
||||||
set +e
|
set +e
|
||||||
wait "$pid"
|
wait "$pid"
|
||||||
@@ -163,6 +182,7 @@ compile_thread_stress
|
|||||||
# Defaults (override by env vars)
|
# Defaults (override by env vars)
|
||||||
ALLOW_DANGEROUS=${ALLOW_DANGEROUS:-0}
|
ALLOW_DANGEROUS=${ALLOW_DANGEROUS:-0}
|
||||||
FORK_BOMB_SECONDS=${FORK_BOMB_SECONDS:-5}
|
FORK_BOMB_SECONDS=${FORK_BOMB_SECONDS:-5}
|
||||||
|
PROC_SAMPLE_STEP=${PROC_SAMPLE_STEP:-50}
|
||||||
CREATION_TIME_ITERS=${CREATION_TIME_ITERS:-"100 1000 10000"}
|
CREATION_TIME_ITERS=${CREATION_TIME_ITERS:-"100 1000 10000"}
|
||||||
CREATION_TIME_SECONDS=${CREATION_TIME_SECONDS:-60}
|
CREATION_TIME_SECONDS=${CREATION_TIME_SECONDS:-60}
|
||||||
|
|
||||||
@@ -173,14 +193,16 @@ run_with_sampling \
|
|||||||
"creation_time" \
|
"creation_time" \
|
||||||
"cd '$ROOT_DIR/creation_time_experiment' && { for n in $CREATION_TIME_ITERS; do echo \"=== iterations=\$n ===\"; ./creation_time -n \"\$n\"; done; } >'$CREATION_TIME_STDOUT' 2>'$CREATION_TIME_STDERR'" \
|
"cd '$ROOT_DIR/creation_time_experiment' && { for n in $CREATION_TIME_ITERS; do echo \"=== iterations=\$n ===\"; ./creation_time -n \"\$n\"; done; } >'$CREATION_TIME_STDOUT' 2>'$CREATION_TIME_STDERR'" \
|
||||||
"$OUT_DIR/creation_time.csv" \
|
"$OUT_DIR/creation_time.csv" \
|
||||||
"$CREATION_TIME_SECONDS"
|
"$CREATION_TIME_SECONDS" \
|
||||||
|
0
|
||||||
|
|
||||||
if [ "$ALLOW_DANGEROUS" -eq 1 ]; then
|
if [ "$ALLOW_DANGEROUS" -eq 1 ]; then
|
||||||
run_with_sampling \
|
run_with_sampling \
|
||||||
"fork_bomb" \
|
"fork_bomb" \
|
||||||
"cd '$ROOT_DIR/fork_bomb' && ./fork_bomb" \
|
"cd '$ROOT_DIR/fork_bomb' && ./fork_bomb" \
|
||||||
"$OUT_DIR/fork_bomb.csv" \
|
"$OUT_DIR/fork_bomb.csv" \
|
||||||
"$FORK_BOMB_SECONDS"
|
"$FORK_BOMB_SECONDS" \
|
||||||
|
"$PROC_SAMPLE_STEP"
|
||||||
else
|
else
|
||||||
log "Skipping fork_bomb (set ALLOW_DANGEROUS=1 to run)"
|
log "Skipping fork_bomb (set ALLOW_DANGEROUS=1 to run)"
|
||||||
echo "timestamp,elapsed_s,load1,load5,load15,mem_total_kb,mem_available_kb,mem_used_kb,proc_count,thread_count_total,pid,cpu_pct,sys_cpu_pct,rss_kb,vsz_kb,stack_kb,heap_kb,proc_threads" > "$OUT_DIR/fork_bomb.csv"
|
echo "timestamp,elapsed_s,load1,load5,load15,mem_total_kb,mem_available_kb,mem_used_kb,proc_count,thread_count_total,pid,cpu_pct,sys_cpu_pct,rss_kb,vsz_kb,stack_kb,heap_kb,proc_threads" > "$OUT_DIR/fork_bomb.csv"
|
||||||
@@ -190,12 +212,14 @@ run_with_sampling \
|
|||||||
"thread_recursive_scaling" \
|
"thread_recursive_scaling" \
|
||||||
"cd '$ROOT_DIR/thread_recursive_scaling' && ./run_thread_recursive.sh 6 6 6" \
|
"cd '$ROOT_DIR/thread_recursive_scaling' && ./run_thread_recursive.sh 6 6 6" \
|
||||||
"$OUT_DIR/thread_recursive_scaling.csv" \
|
"$OUT_DIR/thread_recursive_scaling.csv" \
|
||||||
|
0 \
|
||||||
0
|
0
|
||||||
|
|
||||||
run_with_sampling \
|
run_with_sampling \
|
||||||
"thread_stress" \
|
"thread_stress" \
|
||||||
"cd '$ROOT_DIR/thread_stress_test' && ./thread_stress" \
|
"cd '$ROOT_DIR/thread_stress_test' && ./thread_stress" \
|
||||||
"$OUT_DIR/thread_stress.csv" \
|
"$OUT_DIR/thread_stress.csv" \
|
||||||
|
0 \
|
||||||
0
|
0
|
||||||
|
|
||||||
log "All experiments finished"
|
log "All experiments finished"
|
||||||
|
|||||||
Reference in New Issue
Block a user