#!/usr/bin/env bash # UKRRS day/night resource profile (REPORT.md section 5.5). # Runtime-only changes (set-property --runtime + sysctl): a reboot always # lands safely in day mode (slice unit files carry the day defaults). set -euo pipefail mode=${1:?usage: ukrrs-daynight.sh day|night} CONF=/etc/ukrrs/daynight.conf [ -r "$CONF" ] && . "$CONF" : "${DATA2_DEV:=/dev/sdb}" : "${BATCH_WEIGHT_DAY:=25}"; : "${BATCH_WEIGHT_NIGHT:=400}" : "${BATCH_CPUS_DAY:=0-5}"; : "${BATCH_CPUS_NIGHT:=0-6}" : "${BATCH_HIGH_DAY:=12G}"; : "${BATCH_HIGH_NIGHT:=30G}" : "${GW_WEIGHT_DAY:=900}"; : "${GW_WEIGHT_NIGHT:=500}" : "${DATA2_RA_DAY:=256}"; : "${DATA2_RA_NIGHT:=2048}" : "${DIRTY_DAY:=1073741824}"; : "${DIRTY_NIGHT:=2147483648}" : "${DIRTY_BG_DAY:=268435456}"; : "${DIRTY_BG_NIGHT:=536870912}" log() { echo "[ukrrs-daynight] $*"; } setprop() { systemctl set-property --runtime "$@"; } setra() { blockdev --setra "$1" "$2" 2>/dev/null || log "readahead skip: $2"; } case "$mode" in night) setprop ukrrs-batch.slice \ CPUWeight="$BATCH_WEIGHT_NIGHT" \ AllowedCPUs="$BATCH_CPUS_NIGHT" \ MemoryHigh="$BATCH_HIGH_NIGHT" setprop ukrrs-gateway.slice CPUWeight="$GW_WEIGHT_NIGHT" setra "$DATA2_RA_NIGHT" "$DATA2_DEV"; setra "$DATA2_RA_NIGHT" "${DATA2_DEV}1" sysctl -q -w vm.dirty_bytes="$DIRTY_NIGHT" vm.dirty_background_bytes="$DIRTY_BG_NIGHT" ;; day) setprop ukrrs-batch.slice \ CPUWeight="$BATCH_WEIGHT_DAY" \ AllowedCPUs="$BATCH_CPUS_DAY" \ MemoryHigh="$BATCH_HIGH_DAY" setprop ukrrs-gateway.slice CPUWeight="$GW_WEIGHT_DAY" setra "$DATA2_RA_DAY" "$DATA2_DEV"; setra "$DATA2_RA_DAY" "${DATA2_DEV}1" sysctl -q -w vm.dirty_bytes="$DIRTY_DAY" vm.dirty_background_bytes="$DIRTY_BG_DAY" ;; *) echo "unknown mode: $mode" >&2; exit 2 ;; esac log "profile $mode applied $(date -Is)"