From 2e7d2ee0ac355297a1f4cf3e7d449ae3733e476a Mon Sep 17 00:00:00 2001 From: andreastaliad Date: Fri, 22 May 2026 21:03:18 +0300 Subject: [PATCH] maybe fixed cpu fork logging --- run_all_experiments.sh | 28 ++++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/run_all_experiments.sh b/run_all_experiments.sh index fb704e1..c42109b 100644 --- a/run_all_experiments.sh +++ b/run_all_experiments.sh @@ -38,6 +38,14 @@ sample_process_csv() { log "pidstat not found; install sysstat for accurate CPU sampling" fi + local prev_cpu_total=0 + local prev_cpu_idle=0 + 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 + prev_cpu_total=$((c_user + c_nice + c_system + c_idle + c_iowait + c_irq + c_softirq + c_steal)) + prev_cpu_idle=$((c_idle + c_iowait)) + fi + while kill -0 "$pid" 2>/dev/null; do local now_uptime elapsed_s now_uptime=$(awk '{print $1}' /proc/uptime) @@ -77,10 +85,22 @@ sample_process_csv() { fi local stk=0 heap=0 - printf "%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s\n" \ + 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" "${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" sleep 1 @@ -95,7 +115,7 @@ run_with_sampling() { log "Starting $name: $cmd" - echo "timestamp,elapsed_s,load1,load5,load15,mem_total_kb,mem_available_kb,mem_used_kb,proc_count,thread_count_total,pid,cpu_pct,rss_kb,vsz_kb,stack_kb,heap_kb,proc_threads" > "$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" > "$csv" local start_uptime pid start_uptime=$(awk '{print $1}' /proc/uptime) @@ -163,7 +183,7 @@ if [ "$ALLOW_DANGEROUS" -eq 1 ]; then "$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,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" fi run_with_sampling \