|
|
|
#!/usr/bin/env bash
|
|
|
|
# Written by Draco (tytydraco @ GitHub)
|
|
|
|
|
|
|
|
# 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)"
|
|
|
|
|
|
|
|
# Make file writable
|
|
|
|
chmod +w "$1" 2> /dev/null
|
|
|
|
|
|
|
|
# Write the new value
|
|
|
|
if ! echo "$2" > "$1" 2> /dev/null
|
|
|
|
then
|
|
|
|
echo "Failed: $1: $curval → $2"
|
|
|
|
return 1
|
|
|
|
fi
|
|
|
|
|
|
|
|
echo "$1: $curval → $2"
|
|
|
|
}
|
|
|
|
|
|
|
|
# Check for root permissions
|
|
|
|
if [[ "$(id -u)" -ne 0 ]]
|
|
|
|
then
|
|
|
|
echo "No root permissions. Exiting."
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
|
|
# Log the date and time
|
|
|
|
echo "Time of execution: $(date)"
|
|
|
|
|
|
|
|
# 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 2000000
|
|
|
|
write /proc/sys/kernel/sched_min_granularity_ns 200000
|
|
|
|
write /proc/sys/kernel/sched_wakeup_granularity_ns 200000
|
|
|
|
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
|
|
|
|
|
|
|
|
# Schedtune boost
|
|
|
|
if [[ -d "/dev/stune/" ]]
|
|
|
|
then
|
|
|
|
write /dev/stune/top-app/schedtune.boost 10
|
|
|
|
write /dev/stune/top-app/schedtune.prefer_idle 1
|
|
|
|
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/timer_rate" 5000
|
|
|
|
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
|