pin-cache.sh 1.04 KB
#!/bin/bash
# 把 H3 权重的页缓存钉住:告诉内核 user.slice 下的 40 G 不许回收。
# 不钉的话,别的程序一申请大块内存,权重缓存就被丢掉,
# 之后每次前向都要回机械盘 /dev/sdb 读 34.4 G,单条耗时会成倍涨。
#
# 重跑安全。撤销:sudo rm /etc/systemd/system/user-.slice.d/h3-cache.conf && sudo systemctl daemon-reload
set -e

echo "需要 admin 密码(sudo 用的是你自己的密码,不是 root 的)"

sudo mkdir -p /etc/systemd/system/user-.slice.d
printf '[Slice]\nMemoryMin=40G\n' | sudo tee /etc/systemd/system/user-.slice.d/h3-cache.conf > /dev/null
sudo systemctl daemon-reload
sudo systemctl set-property user.slice MemoryMin=40G
sudo systemctl set-property "user-$(id -u).slice" MemoryMin=40G

echo
echo "=== 生效情况(两行都应该是 42949672960,即 40 G)"
grep -H . /sys/fs/cgroup/user.slice/memory.min
grep -H . "/sys/fs/cgroup/user.slice/user-$(id -u).slice/memory.min"

echo
echo "=== 当前被保护的量"
grep -H . /sys/fs/cgroup/user.slice/memory.current