testsAndMisc/linux_configuration/i3-configuration/i3blocks/config

97 lines
1.3 KiB
Plaintext
Raw Normal View History

2024-11-15 14:06:42 +01:00
[cpu_monitor]
command=~/.config/i3blocks/cpu_monitor.sh
interval=5
markup=pango
[gpu_monitor]
2024-11-15 14:06:42 +01:00
command=~/.config/i3blocks/gpu_monitor.sh
i3blocks: eliminate fork-storm with persist mode + zero-fork sysfs reads Resource-usage report showed ~29 cores of average load coming from i3blocks helper scripts forking awk/tr/grep/bc/sensors/nvidia-smi every tick. Rewrite all five hot-path scripts to eliminate forks: - volume.sh: persist mode, blocks on 'pactl subscribe' event stream. No polling, no sleep, no fork per tick. - gpu_monitor.sh: persist mode, single long-lived 'nvidia-smi --loop=5' feeds a bash 'while read' loop. Falls back to /sys for amdgpu. - battery_status.sh: reads /sys/class/power_supply/BAT*/ directly. Zero forks; replaces 'acpi | awk' pipeline. - cpu_monitor.sh: reads /proc/loadavg and k10temp/coretemp /sys/class/hwmon. Zero forks; replaces 'sensors | awk | tr' + bc arithmetic. - motherboard_temp.sh: reads nct*/it*/f71* Super-I/O hwmon node directly. Zero forks. Configure volume + gpu_monitor with interval=persist so i3blocks keeps one long-lived producer each instead of forking per tick. Also add: - kill_stale_recorders.sh -- kill stray ffmpeg x11grab / dotnet-trace / dotnet-monitor processes left running after sessions. - monitors.slice -- resource-capped user slice (CPUQuota=50%, MemoryMax=512M, MemorySwapMax=0 for zram safety, TasksMax=256) to bound future monitoring regressions. - efficient-polling-scripts SKILL -- rules for writing status-bar and polling scripts without forks; fork-pipeline to bash-builtin translation table; verification checklist. Verified live: strace -c on cpu_monitor.sh shows 1 execve / 0 clones; persist producers (pactl subscribe, nvidia-smi --loop) show 0 CPU ticks over a 3s idle sample. Per-invocation timing 1.6-1.9 ms (was 30-80 ms).
2026-04-20 21:54:11 +02:00
interval=persist
2024-11-15 11:49:36 +01:00
markup=pango
2024-11-15 11:49:36 +01:00
[motherboard_temperature]
command=~/.config/i3blocks/motherboard_temp.sh
interval=5
markup=pango
2024-11-15 11:49:36 +01:00
2024-11-15 11:49:36 +01:00
[memory]
command=~/.config/i3blocks/memory.sh
interval=5
2024-11-15 11:49:36 +01:00
color=#50FA7B
2024-11-15 11:49:36 +01:00
[disk]
command=~/.config/i3blocks/disk.sh
interval=60
2024-11-15 11:49:36 +01:00
color=#50FA7B
2024-11-15 11:59:05 +01:00
[volume]
command=~/.config/i3blocks/volume.sh
i3blocks: eliminate fork-storm with persist mode + zero-fork sysfs reads Resource-usage report showed ~29 cores of average load coming from i3blocks helper scripts forking awk/tr/grep/bc/sensors/nvidia-smi every tick. Rewrite all five hot-path scripts to eliminate forks: - volume.sh: persist mode, blocks on 'pactl subscribe' event stream. No polling, no sleep, no fork per tick. - gpu_monitor.sh: persist mode, single long-lived 'nvidia-smi --loop=5' feeds a bash 'while read' loop. Falls back to /sys for amdgpu. - battery_status.sh: reads /sys/class/power_supply/BAT*/ directly. Zero forks; replaces 'acpi | awk' pipeline. - cpu_monitor.sh: reads /proc/loadavg and k10temp/coretemp /sys/class/hwmon. Zero forks; replaces 'sensors | awk | tr' + bc arithmetic. - motherboard_temp.sh: reads nct*/it*/f71* Super-I/O hwmon node directly. Zero forks. Configure volume + gpu_monitor with interval=persist so i3blocks keeps one long-lived producer each instead of forking per tick. Also add: - kill_stale_recorders.sh -- kill stray ffmpeg x11grab / dotnet-trace / dotnet-monitor processes left running after sessions. - monitors.slice -- resource-capped user slice (CPUQuota=50%, MemoryMax=512M, MemorySwapMax=0 for zram safety, TasksMax=256) to bound future monitoring regressions. - efficient-polling-scripts SKILL -- rules for writing status-bar and polling scripts without forks; fork-pipeline to bash-builtin translation table; verification checklist. Verified live: strace -c on cpu_monitor.sh shows 1 execve / 0 clones; persist producers (pactl subscribe, nvidia-smi --loop) show 0 CPU ticks over a 3s idle sample. Per-invocation timing 1.6-1.9 ms (was 30-80 ms).
2026-04-20 21:54:11 +02:00
interval=persist
markup=pango
2024-11-15 11:59:05 +01:00
2024-11-15 11:59:05 +01:00
[bluetooth]
command=~/.config/i3blocks/bluetooth.sh
interval=5
color=#FFFFFF
2024-11-15 11:59:05 +01:00
2024-11-15 13:13:49 +01:00
[battery]
command=~/.config/i3blocks/battery_status.sh
interval=5
markup=pango
2024-11-15 11:59:05 +01:00
2024-11-15 11:49:36 +01:00
[ethernet]
command=~/.config/i3blocks/ethernet.sh
2024-11-15 11:49:36 +01:00
interval=10
color=#FFFFFF
2024-11-15 11:49:36 +01:00
[wifi]
command=~/.config/i3blocks/wifi_monitor.sh
interval=10
color=#FFFFFF
#[network_monitor]
#command=~/.config/i3blocks/network_monitor.sh
#interval=1
#color=#FFFFFF
2024-11-15 11:49:36 +01:00
[warp]
command=~/.config/i3blocks/warp_status.sh
interval=60
[activitywatch]
command=~/.config/i3blocks/activitywatch_status.sh
interval=10
color=#FFFFFF
2025-07-07 12:45:54 +02:00
[pc_startup]
command=~/.config/i3blocks/pc_startup_status.sh
interval=30
color=#FFFFFF
[shutdown_countdown]
command=~/.config/i3blocks/shutdown_countdown.sh
interval=60
markup=pango
2024-11-15 11:49:36 +01:00
[time]
command=~/.config/i3blocks/time.sh
interval=persist
2024-11-15 11:49:36 +01:00
color=#50FA7B