本地部署模型加载慢:块大小差 12.7 倍,mmap 其实只读了 0.08%

性能 · 13 档块大小 · 3 块 NVMeL0整理于 2026-10-28 有效期 180d

加载慢先别换盘。本机对同一 9.4 GiB GGUF 做无缓冲直读(FILE_FLAG_NO_BUFFERING),块大小从 4KB 到 16MB 共 13 档:4KB 只有 243.9 MiB/s,16MB 到 3090.7 MiB/s,差 12.7 倍;曲线不单调,512KB 是最低点 503.1 MiB/s。更关键的是 llama.cpp 默认 mmap 走惰性映射:进程级 ReadTransferCount 只有 8,011,776 B = 文件的 0.08%,而 -lm dio 真读 10,075,410,432 B = 100.04%,两者墙钟都是 5 秒左右。

本地部署模型加载硬盘SSD选型llama.cppmmapGGUF

这条适用于

版本指纹

llama.cpp b11901-5320c87ff; Windows 10.0.26200

具体做法

先给结论:本机这块 1.79TB 企业级 NVMe 在 4MB 顺序读这一档,比同机 931GB 消费级慢 1.66 倍。企业级的钱花在掉电保护、DWPD 耐久、稳态一致性上,不在「读得快」。你一个人跑模型看重读,这笔溢价就用不上。

测量口径:CreateFileW + FILE_FLAG_NO_BUFFERING | FILE_FLAG_SEQUENTIAL_SCAN 绕过页缓存,ReadFile 循环,perf_counter 计时;进程级读量用 GetProcessIoCounters 的 ReadTransferCount。文件 Nanbeige4.3-33B-IQ2_XXS.gguf = 10,071,403,648 B。
三块盘对照(全部协商 PCIe 4.0 x4,CurrentLinkSpeed=4 / CurrentLinkWidth=4):
· WD_BLACK SN850X 1.86TB 消费级:4MB 4263–4954 MiB/s
· Intel SSDPF2KX019T1M 1.79TB 企业级:4KB 243.9 / 4MB 1562.8(碎片)至 2703.6(连续)/ 16MB 3037.2 MiB/s
· 致态 Ti600 931GB 消费级:4KB 177.1 / 4MB 4476.8 / 16MB 5640.0 MiB/s

复现性:4KB 243.9/244.1/249.4;256KB 609.2/608.7/609.4;512KB 503.1/503.0/502.6;16MB 3037.2/3037.4/3038.9 —— 极差均小于 3%,不是测量噪声。

失效边界
未测项如实标:① GPU 侧没测,本机 5090D 当时被后台任务占满(利用率 100%、已占 20.9GB),llama-cli --list-devices 返回 (none),全部数字是 CPU 后端 + 磁盘 I/O 口径;② 没做出文件碎片区段计数,FSCTL_GET_RETRIEVAL_POINTERS 调 DeviceIoControl 一直报 errno 87,所以「1.73 倍来自碎片」是同盘复制对照推出的强相关,不是直接数出来的 extents 数。
← CPU 跑 14B 只到 9.5 token/s:核数翻 6 倍只快 1.88 倍,卡的是内存带宽CPU 跑本地大模型,线程数配错会让 80 核输给 8 核 →

← 返回全部排错方案