mlock 与 mmap——内存锁定和缓存映射怎么选
mlock:内存锁定
mlock(memory lock)告诉操作系统:不要把这个模型文件的任何部分换出到磁盘。模型加载后,所有内容固定在物理内存中,不会被系统的虚拟内存机制换出去。
开 mlock 的好处:
- 模型加载后不会被内存换出机制挤到磁盘,长对话更稳定
- 内存访问速度恒定,不会突然变慢
开 mlock 的代价:
- 物理内存被持续占用,系统可用内存减少——其他应用更容易被后台杀掉
- 如果手机内存本来就紧张,开 mlock 可能导致模型直接加载失败
推荐:12 GB+ 内存的手机可以开。6~8 GB 的建议先关掉,确保能正常加载再考虑。
mmap:内存映射
mmap(memory map)让模型文件直接以文件形式映射到内存,而不是全部加载复制进 RAM。这样做的好处是:
- 省 RAM:只有当前实际使用的部分会占用物理内存,其余保留在闪存里
- 加载更快:不需要先复制整个文件到 RAM
但代价是:读取速度受手机闪存 I/O 限制——如果模型比较大,某些层被换出到闪存后访问会有延迟。Local AI 默认开启 mmap,对大多数用户是更好的选择。
两个参数的典型组合
| 组合 | mlock | mmap | 适合场景 |
|---|---|---|---|
| 省内存组合 | 关 | 开(默认) | 6~12 GB 内存,日常使用 |
| 稳定优先 | 开 | 开 | 12 GB+ 内存,长对话或后台运行 |
| 最快速度 | 开 | 关 | 16 GB+ 内存,追求极致响应速度 |
实操建议
Local AI 默认是 mmap 开、mlock 关——对绝大多数用户这就是最优配置。建议你先保持默认,在以下情况出现时再调整:
- 模型加载后经常被系统杀掉 → 试试开 mlock 并关 mmap(如果内存够)
- 6 GB 内存手机加载模型失败 → 保持 mmap 开、mlock 关,同时清后台应用
- 长对话中途明显变慢 → 开 mlock(如果内存允许)
不要两个参数同时反复来回调——每调一次都要重载模型。定好组合后稳定使用即可。