mirror of
https://github.com/Ysurac/openmptcprouter-feeds.git
synced 2025-03-09 15:40:03 +00:00
Update sqm autorate
This commit is contained in:
parent
85dc4c0887
commit
199763fc51
2 changed files with 421 additions and 421 deletions
|
@ -28,6 +28,9 @@ cake_autorate_version="3.1.0-PRERELEASE"
|
||||||
## accessible via fds in the form: ${process_name_fd}
|
## accessible via fds in the form: ${process_name_fd}
|
||||||
## thereby to enable transferring instructions and data between processes
|
## thereby to enable transferring instructions and data between processes
|
||||||
|
|
||||||
|
# Set the IFS to space and comma
|
||||||
|
IFS=" ,"
|
||||||
|
|
||||||
# Initialize file descriptors
|
# Initialize file descriptors
|
||||||
## -1 signifies that the log file fd will not be used and
|
## -1 signifies that the log file fd will not be used and
|
||||||
## that the log file will be written to directly
|
## that the log file will be written to directly
|
||||||
|
@ -126,15 +129,18 @@ log_msg()
|
||||||
|
|
||||||
DEBUG)
|
DEBUG)
|
||||||
((debug == 0)) && return # skip over DEBUG messages where debug disabled
|
((debug == 0)) && return # skip over DEBUG messages where debug disabled
|
||||||
((log_DEBUG_messages_to_syslog)) && ((use_logger)) && logger -t "cake-autorate.${instance_id}" "${type}: ${log_timestamp} ${msg}"
|
((log_DEBUG_messages_to_syslog)) && ((use_logger)) && \
|
||||||
|
logger -t "cake-autorate.${instance_id}" "${type}: ${log_timestamp} ${msg}"
|
||||||
;;
|
;;
|
||||||
|
|
||||||
ERROR)
|
ERROR)
|
||||||
((use_logger)) && logger -t "cake-autorate.${instance_id}" "${type}: ${log_timestamp} ${msg}"
|
((use_logger)) && \
|
||||||
|
logger -t "cake-autorate.${instance_id}" "${type}: ${log_timestamp} ${msg}"
|
||||||
;;
|
;;
|
||||||
|
|
||||||
SYSLOG)
|
SYSLOG)
|
||||||
((use_logger)) && logger -t "cake-autorate.${instance_id}" "INFO: ${log_timestamp} ${msg}"
|
((use_logger)) && \
|
||||||
|
logger -t "cake-autorate.${instance_id}" "INFO: ${log_timestamp} ${msg}"
|
||||||
;;
|
;;
|
||||||
|
|
||||||
*)
|
*)
|
||||||
|
@ -157,7 +163,7 @@ print_headers()
|
||||||
{
|
{
|
||||||
log_msg "DEBUG" "Starting: ${FUNCNAME[0]} with PID: ${BASHPID}"
|
log_msg "DEBUG" "Starting: ${FUNCNAME[0]} with PID: ${BASHPID}"
|
||||||
|
|
||||||
header="DATA_HEADER; LOG_DATETIME; LOG_TIMESTAMP; PROC_TIME_US; DL_ACHIEVED_RATE_KBPS; UL_ACHIEVED_RATE_KBPS; DL_LOAD_PERCENT; UL_LOAD_PERCENT; ICMP_TIMESTAMP; REFLECTOR; SEQUENCE; DL_OWD_BASELINE; DL_OWD_US; DL_OWD_DELTA_EWMA_US; DL_OWD_DELTA_US; DL_ADJ_DELAY_THR; UL_OWD_BASELINE; UL_OWD_US; UL_OWD_DELTA_EWMA_US; UL_OWD_DELTA_US; UL_ADJ_DELAY_THR; DL_SUM_DELAYS; DL_AVG_OWD_DELTA_US; DL_ADJ_OWD_DELTA_THR_US; UL_SUM_DELAYS; UL_AVG_OWD_DELTA; UL_ADJ_OWD_DELTA_THR_US; DL_LOAD_CONDITION; UL_LOAD_CONDITION; CAKE_DL_RATE_KBPS; CAKE_UL_RATE_KBPS"
|
header="DATA_HEADER; LOG_DATETIME; LOG_TIMESTAMP; PROC_TIME_US; DL_ACHIEVED_RATE_KBPS; UL_ACHIEVED_RATE_KBPS; DL_LOAD_PERCENT; UL_LOAD_PERCENT; ICMP_TIMESTAMP; REFLECTOR; SEQUENCE; DL_OWD_BASELINE; DL_OWD_US; DL_OWD_DELTA_EWMA_US; DL_OWD_DELTA_US; DL_ADJ_DELAY_THR; UL_OWD_BASELINE; UL_OWD_US; UL_OWD_DELTA_EWMA_US; UL_OWD_DELTA_US; UL_ADJ_DELAY_THR; DL_SUM_DELAYS; DL_AVG_OWD_DELTA_US; DL_ADJ_AVG_OWD_DELTA_THR_US; UL_SUM_DELAYS; UL_AVG_OWD_DELTA_US; UL_ADJ_AVG_OWD_DELTA_THR_US; DL_LOAD_CONDITION; UL_LOAD_CONDITION; CAKE_DL_RATE_KBPS; CAKE_UL_RATE_KBPS"
|
||||||
((log_to_file)) && printf '%s\n' "${header}" >> "${log_file_path}"
|
((log_to_file)) && printf '%s\n' "${header}" >> "${log_file_path}"
|
||||||
((terminal)) && printf '%s\n' "${header}"
|
((terminal)) && printf '%s\n' "${header}"
|
||||||
|
|
||||||
|
@ -378,17 +384,17 @@ update_shaper_rate()
|
||||||
*bb*)
|
*bb*)
|
||||||
if (( t_start_us > (t_last_bufferbloat_us["${direction}"]+bufferbloat_refractory_period_us) ))
|
if (( t_start_us > (t_last_bufferbloat_us["${direction}"]+bufferbloat_refractory_period_us) ))
|
||||||
then
|
then
|
||||||
if (( avg_owd_delta_thr_us["${direction}"] == 0 ))
|
if (( compensated_avg_owd_delta_thr_us["${direction}"] <= compensated_owd_delta_thr_us["${direction}"] ))
|
||||||
then
|
then
|
||||||
shaper_rate_adjust_down_bufferbloat_factor=1000
|
shaper_rate_adjust_down_bufferbloat_factor=1000
|
||||||
elif (( avg_owd_delta_us["${direction}"] > 0 ))
|
elif (( (avg_owd_delta_us["${direction}"]-compensated_owd_delta_thr_us["${direction}"]) > 0 ))
|
||||||
then
|
then
|
||||||
shaper_rate_adjust_down_bufferbloat_factor=$(( (1000*avg_owd_delta_us["${direction}"])/compensated_avg_owd_delta_thr_us["${direction}"] ))
|
shaper_rate_adjust_down_bufferbloat_factor=$(( (1000*(avg_owd_delta_us["${direction}"]-compensated_owd_delta_thr_us["${direction}"]))/(compensated_avg_owd_delta_thr_us["${direction}"]-compensated_owd_delta_thr_us["${direction}"]) ))
|
||||||
(( shaper_rate_adjust_down_bufferbloat_factor > 1000 )) && shaper_rate_adjust_down_bufferbloat_factor=1000
|
(( shaper_rate_adjust_down_bufferbloat_factor > 1000 )) && shaper_rate_adjust_down_bufferbloat_factor=1000
|
||||||
else
|
else
|
||||||
shaper_rate_adjust_down_bufferbloat_factor=0
|
shaper_rate_adjust_down_bufferbloat_factor=0
|
||||||
fi
|
fi
|
||||||
shaper_rate_adjust_down_bufferbloat=$(( 1000000-shaper_rate_adjust_down_bufferbloat_factor*(1000-shaper_rate_max_adjust_down_bufferbloat) ))
|
shaper_rate_adjust_down_bufferbloat=$(( 1000*shaper_rate_min_adjust_down_bufferbloat-shaper_rate_adjust_down_bufferbloat_factor*(shaper_rate_min_adjust_down_bufferbloat-shaper_rate_max_adjust_down_bufferbloat) ))
|
||||||
shaper_rate_kbps["${direction}"]=$(( (shaper_rate_kbps["${direction}"]*shaper_rate_adjust_down_bufferbloat)/1000000 ))
|
shaper_rate_kbps["${direction}"]=$(( (shaper_rate_kbps["${direction}"]*shaper_rate_adjust_down_bufferbloat)/1000000 ))
|
||||||
t_last_bufferbloat_us["${direction}"]="${EPOCHREALTIME/./}"
|
t_last_bufferbloat_us["${direction}"]="${EPOCHREALTIME/./}"
|
||||||
fi
|
fi
|
||||||
|
@ -602,10 +608,9 @@ parse_tsping()
|
||||||
do
|
do
|
||||||
unset command
|
unset command
|
||||||
read -r -u "${pinger_fds[pinger]}" -a command
|
read -r -u "${pinger_fds[pinger]}" -a command
|
||||||
if [[ "${command-}" ]]
|
[[ "${#command[@]}" -eq 0 ]] && continue
|
||||||
then
|
|
||||||
case "${command[0]}" in
|
|
||||||
|
|
||||||
|
case "${command[0]}" in
|
||||||
REFLECTOR_RESPONSE)
|
REFLECTOR_RESPONSE)
|
||||||
read -r timestamp reflector seq _ _ _ _ _ dl_owd_ms ul_owd_ms checksum <<< "${command[@]:1}"
|
read -r timestamp reflector seq _ _ _ _ _ dl_owd_ms ul_owd_ms checksum <<< "${command[@]:1}"
|
||||||
;;
|
;;
|
||||||
|
@ -617,7 +622,7 @@ parse_tsping()
|
||||||
printf "SET_PROC_PID proc_pids %s %s\n" "${parse_id}_preprocessor" "${parse_preprocessor_pid}" >&"${main_fd}"
|
printf "SET_PROC_PID proc_pids %s %s\n" "${parse_id}_preprocessor" "${parse_preprocessor_pid}" >&"${main_fd}"
|
||||||
# accommodate present tsping interval/sleep handling to prevent ping flood with only one pinger
|
# accommodate present tsping interval/sleep handling to prevent ping flood with only one pinger
|
||||||
tsping_sleep_time=$(( no_pingers == 1 ? ping_response_interval_ms : 0 ))
|
tsping_sleep_time=$(( no_pingers == 1 ? ping_response_interval_ms : 0 ))
|
||||||
${ping_prefix_string} tsping ${ping_extra_args} --print-timestamps --machine-readable=' ' --sleep-time "${tsping_sleep_time}" --target-spacing "${ping_response_interval_ms}" "${reflectors[@]:0:${no_pingers}}" 2>/dev/null >&"${parse_preprocessor_fd}" &
|
${ping_prefix_string} tsping ${ping_extra_args} --print-timestamps --machine-readable=, --sleep-time "${tsping_sleep_time}" --target-spacing "${ping_response_interval_ms}" "${reflectors[@]:0:${no_pingers}}" 2>/dev/null >&"${parse_preprocessor_fd}" &
|
||||||
pinger_pid="${!}"
|
pinger_pid="${!}"
|
||||||
printf "SET_PROC_PID proc_pids %s %s\n" "${parse_id}_pinger" "${pinger_pid}" >&"${main_fd}"
|
printf "SET_PROC_PID proc_pids %s %s\n" "${parse_id}_pinger" "${pinger_pid}" >&"${main_fd}"
|
||||||
continue
|
continue
|
||||||
|
@ -626,7 +631,7 @@ parse_tsping()
|
||||||
KILL_PINGER)
|
KILL_PINGER)
|
||||||
|
|
||||||
terminate "${pinger_pid}" "${parse_preprocessor_pid}"
|
terminate "${pinger_pid}" "${parse_preprocessor_pid}"
|
||||||
exec {parse_preprocessor_fd}>&-
|
exec {parse_preprocessor_fd}>/dev/null
|
||||||
continue
|
continue
|
||||||
;;
|
;;
|
||||||
|
|
||||||
|
@ -667,14 +672,13 @@ parse_tsping()
|
||||||
log_msg "DEBUG" "Terminating parse_tsping."
|
log_msg "DEBUG" "Terminating parse_tsping."
|
||||||
exit
|
exit
|
||||||
;;
|
;;
|
||||||
|
|
||||||
*)
|
*)
|
||||||
continue
|
continue
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ "${timestamp:-}" && "${reflector:-}" && "${seq:-}" && "${dl_owd_ms:-}" && "${ul_owd_ms:-}" && "${checksum:-}" ]]
|
[[ "${timestamp:-}" && "${reflector:-}" && "${seq:-}" && "${dl_owd_ms:-}" && "${ul_owd_ms:-}" && "${checksum:-}" ]] || continue
|
||||||
then
|
|
||||||
[[ "${checksum}" == "${timestamp}" ]] || continue
|
[[ "${checksum}" == "${timestamp}" ]] || continue
|
||||||
|
|
||||||
dl_owd_us="${dl_owd_ms}000"
|
dl_owd_us="${dl_owd_ms}000"
|
||||||
|
@ -736,7 +740,6 @@ parse_tsping()
|
||||||
printf "SET_ARRAY_ELEMENT ul_owd_delta_ewmas_us %s %s\n" "${reflector}" "${ul_owd_delta_ewmas_us[${reflector}]}" >&"${maintain_pingers_fd}"
|
printf "SET_ARRAY_ELEMENT ul_owd_delta_ewmas_us %s %s\n" "${reflector}" "${ul_owd_delta_ewmas_us[${reflector}]}" >&"${maintain_pingers_fd}"
|
||||||
|
|
||||||
printf "SET_ARRAY_ELEMENT last_timestamp_reflectors_us %s %s\n" "${reflector}" "${timestamp_us}" >&"${maintain_pingers_fd}"
|
printf "SET_ARRAY_ELEMENT last_timestamp_reflectors_us %s %s\n" "${reflector}" "${timestamp_us}" >&"${maintain_pingers_fd}"
|
||||||
fi
|
|
||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -774,8 +777,8 @@ parse_fping()
|
||||||
do
|
do
|
||||||
unset command
|
unset command
|
||||||
read -r -u "${pinger_fds[pinger]}" -a command
|
read -r -u "${pinger_fds[pinger]}" -a command
|
||||||
if [[ "${command-}" ]]
|
[[ "${#command[@]}" -eq 0 ]] && continue
|
||||||
then
|
|
||||||
case "${command[0]}" in
|
case "${command[0]}" in
|
||||||
|
|
||||||
REFLECTOR_RESPONSE)
|
REFLECTOR_RESPONSE)
|
||||||
|
@ -844,10 +847,8 @@ parse_fping()
|
||||||
continue
|
continue
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ "${timestamp:-}" && "${reflector:-}" && "${seq_rtt:-}" && "${checksum:-}" ]]
|
[[ "${timestamp:-}" && "${reflector:-}" && "${seq_rtt:-}" && "${checksum:-}" ]] || continue
|
||||||
then
|
|
||||||
[[ "${checksum}" == "${timestamp}" ]] || continue
|
[[ "${checksum}" == "${timestamp}" ]] || continue
|
||||||
|
|
||||||
[[ "${seq_rtt}" =~ \[([0-9]+)\].*[[:space:]]([0-9]+)\.?([0-9]+)?[[:space:]]ms ]] || continue
|
[[ "${seq_rtt}" =~ \[([0-9]+)\].*[[:space:]]([0-9]+)\.?([0-9]+)?[[:space:]]ms ]] || continue
|
||||||
|
@ -887,7 +888,7 @@ parse_fping()
|
||||||
printf "SET_ARRAY_ELEMENT ul_owd_delta_ewmas_us %s %s\n" "${reflector}" "${ul_owd_delta_ewmas_us[${reflector}]}" >&"${maintain_pingers_fd}"
|
printf "SET_ARRAY_ELEMENT ul_owd_delta_ewmas_us %s %s\n" "${reflector}" "${ul_owd_delta_ewmas_us[${reflector}]}" >&"${maintain_pingers_fd}"
|
||||||
|
|
||||||
printf "SET_ARRAY_ELEMENT last_timestamp_reflectors_us %s %s\n" "${reflector}" "${timestamp_us}" >&"${maintain_pingers_fd}"
|
printf "SET_ARRAY_ELEMENT last_timestamp_reflectors_us %s %s\n" "${reflector}" "${timestamp_us}" >&"${maintain_pingers_fd}"
|
||||||
fi
|
|
||||||
done
|
done
|
||||||
}
|
}
|
||||||
# IPUTILS-PING FUNCTIONS
|
# IPUTILS-PING FUNCTIONS
|
||||||
|
@ -921,8 +922,8 @@ parse_ping()
|
||||||
do
|
do
|
||||||
unset command
|
unset command
|
||||||
read -r -u "${pinger_fds[pinger]}" -a command
|
read -r -u "${pinger_fds[pinger]}" -a command
|
||||||
if [[ "${command-}" ]]
|
[[ "${#command[@]}" -eq 0 ]] && continue
|
||||||
then
|
|
||||||
case "${command[0]}" in
|
case "${command[0]}" in
|
||||||
|
|
||||||
REFLECTOR_RESPONSE)
|
REFLECTOR_RESPONSE)
|
||||||
|
@ -993,11 +994,10 @@ parse_ping()
|
||||||
;;
|
;;
|
||||||
|
|
||||||
esac
|
esac
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ "${timestamp:-}" && "${reflector:-}" && "${seq_rtt:-}" && "${checksum:-}" ]]
|
[[ "${timestamp:-}" && "${reflector:-}" && "${seq_rtt:-}" && "${checksum:-}" ]] || continue
|
||||||
then
|
[[ "${checksum}" == "${timestamp}" ]] || continue
|
||||||
[[ "${checksum}" == "${timestamp}" ]]
|
|
||||||
# If no match then skip onto the next one
|
# If no match then skip onto the next one
|
||||||
[[ "${seq_rtt}" =~ icmp_[s|r]eq=([0-9]+).*time=([0-9]+)\.?([0-9]+)?[[:space:]]ms ]] || continue
|
[[ "${seq_rtt}" =~ icmp_[s|r]eq=([0-9]+).*time=([0-9]+)\.?([0-9]+)?[[:space:]]ms ]] || continue
|
||||||
|
|
||||||
|
@ -1038,7 +1038,6 @@ parse_ping()
|
||||||
printf "SET_ARRAY_ELEMENT ul_owd_delta_ewmas_us %s %s\n" "${reflector}" "${ul_owd_delta_ewmas_us[${reflector}]}" >&"${maintain_pingers_fd}"
|
printf "SET_ARRAY_ELEMENT ul_owd_delta_ewmas_us %s %s\n" "${reflector}" "${ul_owd_delta_ewmas_us[${reflector}]}" >&"${maintain_pingers_fd}"
|
||||||
|
|
||||||
printf "SET_ARRAY_ELEMENT last_timestamp_reflectors_us %s %s\n" "${reflector}" "${timestamp_us}" >&"${maintain_pingers_fd}"
|
printf "SET_ARRAY_ELEMENT last_timestamp_reflectors_us %s %s\n" "${reflector}" "${timestamp_us}" >&"${maintain_pingers_fd}"
|
||||||
fi
|
|
||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1212,12 +1211,14 @@ kill_maintain_pingers()
|
||||||
tsping|fping)
|
tsping|fping)
|
||||||
printf "TERMINATE\n" >&"${pinger_fds[0]}"
|
printf "TERMINATE\n" >&"${pinger_fds[0]}"
|
||||||
;;
|
;;
|
||||||
|
|
||||||
ping)
|
ping)
|
||||||
for((pinger=0; pinger < no_pingers; pinger++))
|
for ((pinger=0; pinger < no_pingers; pinger++))
|
||||||
do
|
do
|
||||||
printf "TERMINATE\n" >&"${pinger_fds[pinger]}"
|
printf "TERMINATE\n" >&"${pinger_fds[pinger]}"
|
||||||
done
|
done
|
||||||
;;
|
;;
|
||||||
|
|
||||||
*)
|
*)
|
||||||
log_msg "ERROR" "Unknown pinger binary: ${pinger_binary}"
|
log_msg "ERROR" "Unknown pinger binary: ${pinger_binary}"
|
||||||
kill $$ 2>/dev/null
|
kill $$ 2>/dev/null
|
||||||
|
@ -1364,7 +1365,7 @@ maintain_pingers()
|
||||||
exit
|
exit
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
:
|
true
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
|
@ -1578,8 +1579,8 @@ verify_ifs_up()
|
||||||
|
|
||||||
while [[ ! -f ${rx_bytes_path} || ! -f ${tx_bytes_path} ]]
|
while [[ ! -f ${rx_bytes_path} || ! -f ${tx_bytes_path} ]]
|
||||||
do
|
do
|
||||||
[[ ! -f ${rx_bytes_path} ]] && log_msg "DEBUG" "Warning: The configured download interface: '${dl_if}' does not appear to be present. Waiting ${if_up_check_interval_s} seconds for the interface to come up."
|
[[ -f ${rx_bytes_path} ]] || log_msg "DEBUG" "Warning: The configured download interface: '${dl_if}' does not appear to be present. Waiting ${if_up_check_interval_s} seconds for the interface to come up."
|
||||||
[[ ! -f ${tx_bytes_path} ]] && log_msg "DEBUG" "Warning: The configured upload interface: '${ul_if}' does not appear to be present. Waiting ${if_up_check_interval_s} seconds for the interface to come up."
|
[[ -f ${tx_bytes_path} ]] || log_msg "DEBUG" "Warning: The configured upload interface: '${ul_if}' does not appear to be present. Waiting ${if_up_check_interval_s} seconds for the interface to come up."
|
||||||
sleep_s "${if_up_check_interval_s}"
|
sleep_s "${if_up_check_interval_s}"
|
||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
@ -1948,6 +1949,7 @@ printf -v ul_avg_owd_delta_thr_us %.0f "${ul_avg_owd_delta_thr_ms}e3"
|
||||||
printf -v alpha_baseline_increase %.0f "${alpha_baseline_increase}e6"
|
printf -v alpha_baseline_increase %.0f "${alpha_baseline_increase}e6"
|
||||||
printf -v alpha_baseline_decrease %.0f "${alpha_baseline_decrease}e6"
|
printf -v alpha_baseline_decrease %.0f "${alpha_baseline_decrease}e6"
|
||||||
printf -v alpha_delta_ewma %.0f "${alpha_delta_ewma}e6"
|
printf -v alpha_delta_ewma %.0f "${alpha_delta_ewma}e6"
|
||||||
|
printf -v shaper_rate_min_adjust_down_bufferbloat %.0f "${shaper_rate_min_adjust_down_bufferbloat}e3"
|
||||||
printf -v shaper_rate_max_adjust_down_bufferbloat %.0f "${shaper_rate_max_adjust_down_bufferbloat}e3"
|
printf -v shaper_rate_max_adjust_down_bufferbloat %.0f "${shaper_rate_max_adjust_down_bufferbloat}e3"
|
||||||
printf -v shaper_rate_adjust_up_load_high %.0f "${shaper_rate_adjust_up_load_high}e3"
|
printf -v shaper_rate_adjust_up_load_high %.0f "${shaper_rate_adjust_up_load_high}e3"
|
||||||
printf -v shaper_rate_adjust_down_load_low %.0f "${shaper_rate_adjust_down_load_low}e3"
|
printf -v shaper_rate_adjust_down_load_low %.0f "${shaper_rate_adjust_down_load_low}e3"
|
||||||
|
@ -2047,10 +2049,10 @@ t_last_decay_us[ul]="${t_start_us}"
|
||||||
t_sustained_connection_idle_us=0
|
t_sustained_connection_idle_us=0
|
||||||
reflectors_last_timestamp_us="${EPOCHREALTIME/./}"
|
reflectors_last_timestamp_us="${EPOCHREALTIME/./}"
|
||||||
|
|
||||||
mapfile -t dl_delays < <(for ((i=1; i <= bufferbloat_detection_window; i++)); do echo 0; done)
|
mapfile -t dl_delays < <(for ((i=0; i < bufferbloat_detection_window; i++)); do echo 0; done)
|
||||||
mapfile -t ul_delays < <(for ((i=1; i <= bufferbloat_detection_window; i++)); do echo 0; done)
|
mapfile -t ul_delays < <(for ((i=0; i < bufferbloat_detection_window; i++)); do echo 0; done)
|
||||||
mapfile -t dl_owd_deltas_us < <(for ((i=1; i <= bufferbloat_detection_window; i++)); do echo 0; done)
|
mapfile -t dl_owd_deltas_us < <(for ((i=0; i < bufferbloat_detection_window; i++)); do echo 0; done)
|
||||||
mapfile -t ul_owd_deltas_us < <(for ((i=1; i <= bufferbloat_detection_window; i++)); do echo 0; done)
|
mapfile -t ul_owd_deltas_us < <(for ((i=0; i < bufferbloat_detection_window; i++)); do echo 0; done)
|
||||||
|
|
||||||
delays_idx=0
|
delays_idx=0
|
||||||
sum_dl_delays=0
|
sum_dl_delays=0
|
||||||
|
@ -2116,9 +2118,7 @@ while true
|
||||||
do
|
do
|
||||||
unset command
|
unset command
|
||||||
read -r -u "${main_fd}" -a command
|
read -r -u "${main_fd}" -a command
|
||||||
|
[[ "${#command[@]}" -eq 0 ]] && continue
|
||||||
if [[ "${command-}" ]]
|
|
||||||
then
|
|
||||||
|
|
||||||
case "${command[0]}" in
|
case "${command[0]}" in
|
||||||
|
|
||||||
|
@ -2154,7 +2154,6 @@ do
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
fi
|
|
||||||
case "${main_state}" in
|
case "${main_state}" in
|
||||||
|
|
||||||
RUNNING)
|
RUNNING)
|
||||||
|
@ -2254,7 +2253,7 @@ do
|
||||||
|
|
||||||
log_msg "DEBUG" "Warning: no reflector response within: ${stall_detection_timeout_s} seconds. Checking loads."
|
log_msg "DEBUG" "Warning: no reflector response within: ${stall_detection_timeout_s} seconds. Checking loads."
|
||||||
|
|
||||||
#log_msg "DEBUG" "load check is: (( ${achieved_rate_kbps[dl]} kbps > ${connection_stall_thr_kbps} kbps for download && ${achieved_rate_kbps[ul]} kbps > ${connection_stall_thr_kbps} kbps for upload ))"
|
log_msg "DEBUG" "load check is: (( ${achieved_rate_kbps[dl]} kbps > ${connection_stall_thr_kbps} kbps for download && ${achieved_rate_kbps[ul]} kbps > ${connection_stall_thr_kbps} kbps for upload ))"
|
||||||
|
|
||||||
# non-zero load so despite no reflector response within stall interval, the connection not considered to have stalled
|
# non-zero load so despite no reflector response within stall interval, the connection not considered to have stalled
|
||||||
# and therefore resume normal operation
|
# and therefore resume normal operation
|
||||||
|
|
|
@ -169,7 +169,8 @@ alpha_delta_ewma=0.095
|
||||||
# shaper rate is adjusted by a maximum of shaper_rate_max_adjust_down_bufferbloat on detection of bufferbloat
|
# shaper rate is adjusted by a maximum of shaper_rate_max_adjust_down_bufferbloat on detection of bufferbloat
|
||||||
# and this is scaled by the average delta owd / average owd delta threshold
|
# and this is scaled by the average delta owd / average owd delta threshold
|
||||||
# otherwise shaper rate is adjusted up on load high, and down on load idle or low
|
# otherwise shaper rate is adjusted up on load high, and down on load idle or low
|
||||||
shaper_rate_max_adjust_down_bufferbloat=0.75 # how rapidly to reduce shaper rate upon detection of bufferbloat
|
shaper_rate_min_adjust_down_bufferbloat=0.99 # how rapidly to reduce shaper rate upon detection of bufferbloat (min reduction)
|
||||||
|
shaper_rate_max_adjust_down_bufferbloat=0.75 # how rapidly to reduce shaper rate upon detection of bufferbloat (max reduction)
|
||||||
shaper_rate_adjust_up_load_high=1.01 # how rapidly to increase shaper rate upon high load detected
|
shaper_rate_adjust_up_load_high=1.01 # how rapidly to increase shaper rate upon high load detected
|
||||||
shaper_rate_adjust_down_load_low=0.99 # how rapidly to return down to base shaper rate upon idle or low load detected
|
shaper_rate_adjust_down_load_low=0.99 # how rapidly to return down to base shaper rate upon idle or low load detected
|
||||||
shaper_rate_adjust_up_load_low=1.01 # how rapidly to return up to base shaper rate upon idle or low load detected
|
shaper_rate_adjust_up_load_low=1.01 # how rapidly to return up to base shaper rate upon idle or low load detected
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue