From 83422abaf4c117ac9e5016f56cf837b232ceb77d Mon Sep 17 00:00:00 2001 From: andreastaliad Date: Fri, 22 May 2026 21:23:28 +0300 Subject: [PATCH] maybe hopefully fixed cpu fork logging --- run_all_experiments.sh | 82 ++++++++++++++---------------------------- 1 file changed, 26 insertions(+), 56 deletions(-) diff --git a/run_all_experiments.sh b/run_all_experiments.sh index 1fbcc13..ea7f4ac 100644 --- a/run_all_experiments.sh +++ b/run_all_experiments.sh @@ -30,7 +30,6 @@ sample_process_csv() { local csv="$2" local start_uptime="$3" local max_seconds="$4" - local proc_step="${5:-0}" local have_pidstat=0 if command -v pidstat >/dev/null 2>&1; then @@ -47,9 +46,6 @@ sample_process_csv() { prev_cpu_idle=$((c_idle + c_iowait)) fi - local first_sample=1 - local next_proc_sample=0 - while kill -0 "$pid" 2>/dev/null; do local now_uptime elapsed_s now_uptime=$(awk '{print $1}' /proc/uptime) @@ -69,29 +65,14 @@ sample_process_csv() { 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) + 1) * proc_step)) - first_sample=0 - fi - if [ "$proc_count" -lt "$next_proc_sample" ]; then - should_sample=0 - else - should_sample=1 - next_proc_sample=$((next_proc_sample + proc_step)) - fi - fi + local load1 load5 load15 + read -r load1 load5 load15 _ < /proc/loadavg - if [ "$should_sample" -eq 1 ]; then - local load1 load5 load15 - read -r load1 load5 load15 _ < /proc/loadavg + local mem_total mem_avail mem_used + read -r mem_total mem_avail < <(get_mem_kb || echo "0 0") + mem_used=$((mem_total - mem_avail)) - local mem_total mem_avail mem_used - read -r mem_total mem_avail < <(get_mem_kb || echo "0 0") - mem_used=$((mem_total - mem_avail)) - - # Use pidstat for CPU and ps for memory/thread metrics. + # Use pidstat for CPU and /proc for memory/thread metrics. local cpu rss vsz nlwp rss=$(awk '/^VmRSS:/ {print $2}' "/proc/$pid/status" 2>/dev/null || echo 0) vsz=$(awk '/^VmSize:/ {print $2}' "/proc/$pid/status" 2>/dev/null || echo 0) @@ -104,30 +85,25 @@ sample_process_csv() { fi local stk=0 heap=0 - local sys_cpu_pct=0.00 - if [ -r /proc/stat ]; then - read -r _ c_user c_nice c_system c_idle c_iowait c_irq c_softirq c_steal _ _ < /proc/stat - local cpu_total=$((c_user + c_nice + c_system + c_idle + c_iowait + c_irq + c_softirq + c_steal)) - local cpu_idle=$((c_idle + c_iowait)) - local dt_total=$((cpu_total - prev_cpu_total)) - local dt_idle=$((cpu_idle - prev_cpu_idle)) - sys_cpu_pct=$(awk -v t="$dt_total" -v i="$dt_idle" 'BEGIN{ if (t<=0) printf "0.00"; else printf "%.2f", (100.0*(t-i))/t }') - prev_cpu_total=$cpu_total - prev_cpu_idle=$cpu_idle - fi - - printf "%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s\n" \ - "$(date -Iseconds)" "$elapsed_s" "$load1" "$load5" "$load15" \ - "$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}" \ - >> "$csv" + local sys_cpu_pct=0.00 + if [ -r /proc/stat ]; then + read -r _ c_user c_nice c_system c_idle c_iowait c_irq c_softirq c_steal _ _ < /proc/stat + local cpu_total=$((c_user + c_nice + c_system + c_idle + c_iowait + c_irq + c_softirq + c_steal)) + local cpu_idle=$((c_idle + c_iowait)) + local dt_total=$((cpu_total - prev_cpu_total)) + local dt_idle=$((cpu_idle - prev_cpu_idle)) + sys_cpu_pct=$(awk -v t="$dt_total" -v i="$dt_idle" 'BEGIN{ if (t<=0) printf "0.00"; else printf "%.2f", (100.0*(t-i))/t }') + prev_cpu_total=$cpu_total + prev_cpu_idle=$cpu_idle fi - if [ "$proc_step" -gt 0 ]; then - sleep 0.1 - else - sleep 1 - fi + printf "%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s\n" \ + "$(date -Iseconds)" "$elapsed_s" "$load1" "$load5" "$load15" \ + "$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}" \ + >> "$csv" + + sleep 0.2 done } @@ -136,7 +112,6 @@ run_with_sampling() { local cmd="$2" local csv="$3" local max_seconds="$4" - local proc_step="${5:-0}" log "Starting $name: $cmd" @@ -153,7 +128,7 @@ run_with_sampling() { pid=$! fi - sample_process_csv "$pid" "$csv" "$start_uptime" "$max_seconds" "$proc_step" + sample_process_csv "$pid" "$csv" "$start_uptime" "$max_seconds" set +e wait "$pid" @@ -188,7 +163,6 @@ compile_thread_stress # Defaults (override by env vars) ALLOW_DANGEROUS=${ALLOW_DANGEROUS:-0} FORK_BOMB_SECONDS=${FORK_BOMB_SECONDS:-5} -PROC_SAMPLE_STEP=${PROC_SAMPLE_STEP:-100} CREATION_TIME_ITERS=${CREATION_TIME_ITERS:-"100 1000 10000"} CREATION_TIME_SECONDS=${CREATION_TIME_SECONDS:-60} @@ -199,16 +173,14 @@ run_with_sampling \ "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'" \ "$OUT_DIR/creation_time.csv" \ - "$CREATION_TIME_SECONDS" \ - 0 + "$CREATION_TIME_SECONDS" if [ "$ALLOW_DANGEROUS" -eq 1 ]; then run_with_sampling \ "fork_bomb" \ "cd '$ROOT_DIR/fork_bomb' && ./fork_bomb" \ "$OUT_DIR/fork_bomb.csv" \ - "$FORK_BOMB_SECONDS" \ - "$PROC_SAMPLE_STEP" + "$FORK_BOMB_SECONDS" else 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" @@ -218,14 +190,12 @@ run_with_sampling \ "thread_recursive_scaling" \ "cd '$ROOT_DIR/thread_recursive_scaling' && ./run_thread_recursive.sh 6 6 6" \ "$OUT_DIR/thread_recursive_scaling.csv" \ - 0 \ 0 run_with_sampling \ "thread_stress" \ "cd '$ROOT_DIR/thread_stress_test' && ./thread_stress" \ "$OUT_DIR/thread_stress.csv" \ - 0 \ 0 log "All experiments finished"