#!/usr/bin/env bash # Written by Draco (tytydraco @ GitHub) # Log in red err() { echo -e " \e[91m*\e[39m $*" } # Log in orange warn() { echo -e " \e[93m*\e[39m $*" } # Log in white and continue (unnecessary) dbg() { echo -e " \e[92m*\e[39m $*" } # Safely write value to file _write() { # Bail out if file does not exist [[ ! -f "$1" ]] && return 1 # Fetch the current key value local curval curval="$(cat "$1" 2> /dev/null)" # Bail out if value is already set if [[ "$curval" == "$2" ]] then warn "Skipping write $1: $curval → $2" return 0 fi # Write the new value if ! echo "$2" > "$1" 2> /dev/null then err "Failed to write $1: $curval → $2" return 1 fi dbg "Successfully wrote $1: $curval → $2" } # Background fork write function write() { if [[ "$SYNC" -eq 1 ]] then _write "$@" else _write "$@" & fi } usage() { echo -n "Usage: $(basename "$0") [OPTIONS] Options: -s Synchronous mode -h Show usage " } # Check for root permissions if [[ "$(id -u)" -ne 0 ]] then err "No root permissions. Exiting." exit 1 fi while getopts ":sh" opt; do case $opt in s) SYNC=1 ;; h) usage exit 0 ;; *) usage exit 1 ;; esac done shift $((OPTIND - 1)) # Kernel write /proc/sys/kernel/perf_cpu_time_max_percent 5 write /proc/sys/kernel/sched_autogroup_enabled 0 write /proc/sys/kernel/sched_child_runs_first 1 write /proc/sys/kernel/sched_tunable_scaling 0 write /proc/sys/kernel/sched_latency_ns 1000000 write /proc/sys/kernel/sched_min_granularity_ns 100000 write /proc/sys/kernel/sched_wakeup_granularity_ns 100000 write /proc/sys/kernel/sched_migration_cost_ns 5000000 write /proc/sys/kernel/sched_min_task_util_for_colocation 0 write /proc/sys/kernel/sched_nr_migrate 8 write /proc/sys/kernel/sched_schedstats 0 # VM write /proc/sys/vm/dirty_background_ratio 10 write /proc/sys/vm/dirty_ratio 30 write /proc/sys/vm/dirty_expire_centisecs 3000 write /proc/sys/vm/dirty_writeback_centisecs 3000 write /proc/sys/vm/page-cluster 0 write /proc/sys/vm/reap_mem_on_sigkill 1 write /proc/sys/vm/stat_interval 10 write /proc/sys/vm/swappiness 100 write /proc/sys/vm/vfs_cache_pressure 60 # Scheduler features if [[ -f "/sys/kernel/debug/sched_features" ]] then write /sys/kernel/debug/sched_features NEXT_BUDDY write /sys/kernel/debug/sched_features TTWU_QUEUE write /sys/kernel/debug/sched_features HRTICK fi # CPU for cpu in /sys/devices/system/cpu/cpu*/cpufreq/ do avail_govs="$(cat "${cpu}scaling_available_governors")" if [[ "$avail_govs" == *"schedutil"* ]] then _write "${cpu}scaling_governor" schedutil write "${cpu}schedutil/up_rate_limit_us" 5000 write "${cpu}schedutil/down_rate_limit_us" 5000 write "${cpu}schedutil/rate_limit_us" 5000 write "${cpu}schedutil/hispeed_load" 90 write "${cpu}schedutil/hispeed_freq" "$(cat "${cpu}cpuinfo_max_freq")" elif [[ "$avail_govs" == *"interactive"* ]] then _write "${cpu}scaling_governor" interactive write "${cpu}interactive/min_sample_time" 5000 write "${cpu}interactive/go_hispeed_load" 90 write "${cpu}interactive/hispeed_freq" "$(cat "${cpu}cpuinfo_max_freq")" fi done # I/O for queue in /sys/block/*/queue/ do avail_scheds="$(cat "${queue}scheduler")" for sched in cfq noop kyber bfq mq-deadline none do if [[ "$avail_scheds" == *"$sched"* ]] then _write "${queue}scheduler" "$sched" break fi done write "${queue}iostats" 0 write "${queue}read_ahead_kb" 64 write "${queue}nr_requests" 64 done exit 0