From a0410d4fbb5d018d0426957e82c27f5ba166c80e Mon Sep 17 00:00:00 2001 From: andreastaliad Date: Fri, 22 May 2026 20:49:36 +0300 Subject: [PATCH] maybe fixed cpu fork logging --- run_all_experiments.sh | 48 +++++++++++++++++++----------------------- 1 file changed, 22 insertions(+), 26 deletions(-) diff --git a/run_all_experiments.sh b/run_all_experiments.sh index 399da2c..2deab2a 100644 --- a/run_all_experiments.sh +++ b/run_all_experiments.sh @@ -14,13 +14,19 @@ log() { } count_processes() { - # Avoid find -regex portability issues (busybox) by using globbing on /proc. - ls -d /proc/[0-9]* 2>/dev/null | wc -l + if command -v ps >/dev/null 2>&1; then + ps -e -o pid= 2>/dev/null | wc -l + else + echo 0 + fi } count_threads_total() { - # Sum Threads: from all /proc//status entries. - awk '/^Threads:/ {sum+=$2} END {print sum+0}' /proc/[0-9]*/status 2>/dev/null || echo 0 + if command -v ps >/dev/null 2>&1; then + ps -e -o nlwp= 2>/dev/null | awk '{sum+=$1} END {print sum+0}' + else + echo 0 + fi } get_mem_kb() { @@ -33,16 +39,6 @@ sample_process_csv() { local start_uptime="$3" local max_seconds="$4" - local clk_tck - clk_tck=$(getconf CLK_TCK) - - local prev_uptime prev_ticks - prev_uptime=$(awk '{print $1}' /proc/uptime) - prev_ticks=0 - if [ -r "/proc/$pid/stat" ]; then - prev_ticks=$(awk '{print $14 + $15}' "/proc/$pid/stat") - fi - while kill -0 "$pid" 2>/dev/null; do local now_uptime elapsed_s now_uptime=$(awk '{print $1}' /proc/uptime) @@ -69,22 +65,23 @@ sample_process_csv() { proc_count=$(count_processes || echo 0) thread_total=$(count_threads_total || echo 0) - local rss=0 vsz=0 stk=0 heap=0 nlwp=0 - if [ -r "/proc/$pid/status" ]; then - rss=$(awk '/^VmRSS:/ {print $2}' "/proc/$pid/status") - vsz=$(awk '/^VmSize:/ {print $2}' "/proc/$pid/status") - stk=$(awk '/^VmStk:/ {print $2}' "/proc/$pid/status") - heap=$(awk '/^VmData:/ {print $2}' "/proc/$pid/status") - nlwp=$(awk '/^Threads:/ {print $2}' "/proc/$pid/status") - fi - # Use ps directly to avoid zero deltas for very short-lived processes. - local cpu + local cpu rss vsz nlwp if command -v ps >/dev/null 2>&1; then - cpu=$(ps -o %cpu= -p "$pid" 2>/dev/null | awk '{print $1}' || true) + read -r cpu rss vsz nlwp < <(ps -o %cpu=,rss=,vsz=,nlwp= -p "$pid" 2>/dev/null || echo "0 0 0 0") + cpu=${cpu:-0} + rss=${rss:-0} + vsz=${vsz:-0} + nlwp=${nlwp:-0} + # Some busybox builds scale %CPU by 100. + cpu=$(awk -v c="$cpu" 'BEGIN{ if (c>1000) printf "%.2f", c/100; else printf "%.2f", c }') else cpu=0.00 + rss=0 + vsz=0 + nlwp=0 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" \ "$(date -Iseconds)" "$elapsed_s" "$load1" "$load5" "$load15" \ @@ -92,7 +89,6 @@ sample_process_csv() { "$pid" "$cpu" "${rss:-0}" "${vsz:-0}" "${stk:-0}" "${heap:-0}" "${nlwp:-0}" \ >> "$csv" - prev_uptime=$now_uptime sleep 1 done }