From 3bcb519ca17fad1d2a4c9ec94e02b797d2cda859 Mon Sep 17 00:00:00 2001 From: wukong Date: Sat, 20 Dec 2025 18:14:42 -0800 Subject: added commented out alternate uptime prediction; changed to merge_meas() of t_meas[] estimate when t[before] == t[after], this provides a sub-second uncertainty when used with systime() and helps derived estimates converge; set shell script to use uncertainty based sleep time in main loop; --- ckt0.awk | 45 ++++++++++++++++++++++++++++----------------- ckt0.sh | 5 ++--- 2 files changed, 30 insertions(+), 20 deletions(-) diff --git a/ckt0.awk b/ckt0.awk index dd83717..1c7ca6e 100644 --- a/ckt0.awk +++ b/ckt0.awk @@ -28,18 +28,17 @@ function merge_meas(est_val, est_unc, meas_val, meas_unc) { function sigfig(val, unc) { - ordmag_val = log10(val) - ordmag_unc = log10(unc) + omag_val = log10(val) + omag_unc = log10(unc) - ordmag_high = sqrt((ordmag_val)^2.0 + (ordmag_unc)^2.0) - ordmag_low = ((ordmag_val)^-1.0 + (ordmag_unc)^-1.0)^-1.0 - ordmag_range = ordmag_high - ordmag_low + omag_high = sqrt((omag_val)^2.0 + (omag_unc)^2.0) + omag_low = ((omag_val)^-1.0 + (omag_unc)^-1.0)^-1.0 - sigfig_unc = sprintf("%.f", ordmag_range) - sigfig_val = sprintf("%.f", sigfig_unc + 6.0) + sfig_unc = sprintf("%.f", sqrt((omag_high - omag_low)^2.0 + 6.0^2.0)) + sfig_val = sprintf("%.f", sqrt(sfig_unc^2.0 + 6.0^2.0)) - ofmt_val = "%." sigfig_val "g" - ofmt_unc = "%." sigfig_unc "g" + ofmt_val = "%." sfig_val "g" + ofmt_unc = "%." sfig_unc "g" return sprintf(ofmt_val OFS ofmt_unc, val, unc) @@ -154,11 +153,7 @@ BEGIN { "uname" | getline uname close("uname") - #print("_systime_", systime()) - #print("_boottime_", ck_boottime()) - # check ARGV for previous estimates - #print("ARGC:", ARGC) if (ARGC) { ARGV[1] ? t_prev[1] = ARGV[1] : t_prev[1] = 0.0 ARGV[2] ? t_prev[2] = ARGV[2] : t_prev[2] = systime() @@ -167,7 +162,6 @@ BEGIN { ARGV[5] ? t0_prev[1] = ARGV[5] : split(ck_boottime(uname), t0_prev) ARGV[6] ? t0_prev[2] = ARGV[6] : split(ck_boottime(uname), t0_prev) } - #print( t_prev[1], t_prev[2], t_up_prev[1], t_up_prev[2], t0_prev[1], t0_prev[2] ) # check systime, check uptime, check systime again t_meas[1] = ck_time(uname) @@ -179,7 +173,7 @@ BEGIN { t_meas[2] -= t_meas[1] t_meas[1] += 0.5*t_meas[2] } else { - t_meas[2] = 1.0 + split(merge_meas(t_meas[1], 1.0, t_meas[2], 1.0), t_meas) } t_meas_str = sigfig(t_meas[1], t_meas[2]) @@ -190,19 +184,36 @@ BEGIN { # predict uptime based on dt, t_up(new) = t_up(old) + dt t_up_est[1] = t_up_prev[1] + dt[1] t_up_est[2] = t_up_prev[2] + dt[2] + t_up_est[2] += sqrt((t_up_est[1] - t_up_prev[1] - dt[1])^2.0) + + # alt. prediction based on t0 + t_up_alt[1] = t_meas[1] - t0_prev[1] + t_up_alt[2] = t_meas[2] + t0_prev[2] + + # dt_up_alt + # dt_up_alt[1] = t_up_alt[1] - (t_prev[1] - t0_prev[1]) + # dt_up_alt[2] = t_up_alt[2] + (t_prev[2] + t0_prev[2]) + + # merge alt. prediction + # t_up_alt[2] += sqrt((dt_up_alt[1] - dt[1])^2.0) + # t_up_alt[2] += sqrt((t_up_alt[1] - t_up_est[1])^2.0) + # t_up_est[2] += sqrt((t_up_est[1] - t_up_alt[1])^2.0) + + # split(merge_meas(t_up_est[1], t_up_est[2], t_up_alt[1], t_up_alt[2]), t_up_est) + # t_up_est[2] += (1.0E-3*rand())^2.0 # merge predicted and measured uptimes split(merge_meas(t_up_est[1], t_up_est[2], t_up_meas[1], t_up_meas[2]), t_up_est) - t_up_est[2] = sqrt( t_up_est[2]^2.0 + (t_up_est[1] - t_up_prev[1] - dt[1])^2.0 ) t_up_est_str = sigfig(t_up_est[1], t_up_est[2]) # evaluate measured boot time, t0 t0_est[1] = t_meas[1] - t_up_est[1] t0_est[2] = t_meas[2] + t_up_est[2] + t0_est[2] += sqrt((t0_est[1] - t0_prev[1])^2.0) # merge previous and updated boot time, t0 split(merge_meas(t0_est[1], t0_est[2], t0_prev[1], t0_prev[2]), t0_est) - t0_est[2] = sqrt( t0_est[2]^2.0 + (t0_est[1] - t0_prev[1])^2.0 ) + t0_est_str = sigfig(t0_est[1], t0_est[2]) print(t_meas_str, t_up_est_str, t0_est_str) diff --git a/ckt0.sh b/ckt0.sh index 88fbb78..cf54ad0 100644 --- a/ckt0.sh +++ b/ckt0.sh @@ -25,10 +25,9 @@ for N in $(seq 0 10080) ; do printf "${N} ${t0_est}\n" | column -t t0_est=$( mawk -f ckt0.awk ${t0_est} | tail -n2 ) #mawk -f ckt0.awk - sleep $( mawk 'BEGIN {print(sqrt( rand()^2.0 + 1.0 ))}' ) + #sleep $( mawk 'BEGIN {print(sqrt( rand()^2.0 + 1.0 ))}' ) #sleep $( echo $t0_est | mawk '{print(sqrt( ((60.0*$4)/(60.0 + $4))^2.0 + rand()^2.0 ))}' ) - #sleep $( echo $t0_est | mawk '{print(sqrt( ($2)^2.0 + ($4)^2.0 + ($6)^2.0 + rand()^2.0 ))}' ) - #sleep $( echo $t0_est | mawk '{print( 10.0 - (systime() - $5)%10.0 + 0.5*rand()^2.0 )}' ) + sleep $( echo $t0_est | mawk '{print( sqrt($2^2.0 + $4^2.0 + $6^2.0 + rand()^2.0)%30.0 )}' ) done -- cgit v1.2.3