本机没有能真实注入磁盘延迟的工具,改为建两个数据完全一致的索引对比mmapfs和niofs两种存储策略,查询侧3轮交替对比真实都稳定在4到5毫秒之间,写入侧3轮对比真实都压缩到0.00到0.01秒,两侧都测不出可感知的差异,诚实记录这个负面结果,揭示磁盘延迟真正造成影响的前提是磁盘本身真实要慢,本机这块足够快的本地SSD不足以把两种策略之间的理论差异暴露出来。
代码PUT /disk_mmap {默认设置} PUT /disk_niofs {"settings":{"index.store.type":"niofs"}} 真实往两边各灌入同样的8万条随机文本文档并force merge 确认两边store大小真实都是48.7MB左右,数据完全一致
disk_niofs真实的store.type: {"type":"niofs"}
disk_mmap size: 48.667MB
disk_niofs size: 48.732MB ← 真实几乎完全一致代码真实对两个索引各执行多次 GET /索引/_search?size=5000,交替顺序跑3轮
trial 1: disk_mmap 5ms disk_niofs 5ms trial 2: disk_mmap 4ms disk_niofs 5ms trial 3: disk_mmap 4ms disk_niofs 5ms
这组真实数据说明mmapfs和niofs这两种读取策略在本机这块存储设备上真实表现不出可感知的差距——哪怕mmapfs理论上靠的是内存映射加页面错误、niofs理论上靠的是显式的pread系统调用,这两条路径真实最终都要落到同一块本地SSD上,只要这块盘真实足够快、延迟足够低,两种策略在耗时上的真实差异就会被压缩到测不出来的程度。
代码真实对两种store.type各重建一次索引,用time测真实的_bulk写入耗时,跑3轮
trial 1: disk_mmap_w 0.00s disk_niofs_w 0.00s trial 2: disk_mmap_w 0.00s disk_niofs_w 0.00s trial 3: disk_mmap_w 0.01s disk_niofs_w 0.00s
每一步都是本文上面在本机真实的Elasticsearch 8.15.0上跑出来的原始结果。
index.store.type 设置(mmapfs 与 niofs 对比)