我有一块大容量、慢速的 HDD 和一块小容量、快速的 SSD。这关乎读取操作,而非RAID。我的电脑在 SSD 上加载(重新/卸载)了超过 12 GiB 的 Linux 内核构建树和总共 39 GiB 的不同 LLM 文件后,切换回 Firefox 或查看手册页时,桌面几乎卡死,而我的内存只有 31 GiB:
$ free -h
total used free shared buff/cache available
Mem: 31Gi 10Gi 2.4Gi 1.0Gi 19Gi 20Gi
Swap: 0B 0B 0B
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 1.8T 0 disk
├─sda1 8:1 0 512M 0 part /boot/efi
├─sda2 8:2 0 1.7G 0 part /boot
└─sda3 8:3 0 1.8T 0 part
└─sda3_crypt 254:0 0 1.8T 0 crypt
├─vgubuntu-root 254:1 0 1.8T 0 lvm /
└─vgubuntu-swap_1 254:2 0 1.9G 0 lvm
nvme0n1 259:0 0 953.9G 0 disk
└─nvme0n1p1 259:1 0 100G 0 part
└─luks-... 254:3 0 100G 0 crypt /media/...
$ sysctl vm.swappiness
vm.swappiness = 60
SSD 速度很快,所以我宁愿 Linux 先清除 SSD 的页面缓存文件。反正它的非缓存读取时间也得几秒。应该停止的是清除/usr
或下的任何文件/home
。我的man bash
和dpkg -S bin/bash
会立即从页面缓存中返回,但如果没有缓存,它们在退出 LLM 后需要半分钟才能返回。更严重的是,Firefox 需要我的~/.mozilla
文件夹来保存历史记录和缓存;如果没有缓存,等待地址栏显示需要几分钟。
我正在寻找一个配置选项。systemd-run
可以设置 MemoryMax 为ktorrent
,但我经常重启llama-server
以在大约 6 GiB 的 LLM 之间切换,而且我不希望使用单独的守护进程来保持 cgroup 处于活动状态。一旦我解决了担忧,将我的 迁移到 SSD 后,man
和 的dpkg
问题将得到解决;与此同时,会导致可用内存不足,并且过于复杂。LLM 工作负载可以(但不应该)重新挂载 SSD 作为解决方法。这使得d 内核构建工作负载仍然会清除我的 Web 浏览器缓存。/
fscrypt
/usr
tmpfs
overlayfs
nice
我查看了相关/sys/block
配置,但没找到合适的。Cgroups v2有针对每个设备的选项,但仅适用于并行写入工作负载(io.max
),而无法控制顺序工作负载如何影响缓存。2011年的补丁和2023 年的问题都没有找到任何用户空间接口。哪个设置可以强制 SSD 的页面缓存先于 HDD 的页面缓存被清除?
运行程序
nocache
可能会有所帮助。它并不适用于所有程序(因为必须连接到glibc内部),但对某些程序有帮助。或者,
vmtouch
在 llama-server 退出后,在加载新模型文件之前,手动删除之前的模型文件。