如何调试 NVMe 驱动器上的 IO 延迟?

如何调试 NVMe 驱动器上的 IO 延迟?

一直在调试各种服务器上的一些与延迟相关的问题,最终将其追溯到我认为是 NVMe 电源状态 (APST) 的问题。但是,我仍然看到一些我无法弄清楚如何解决的问题。

在全新安装的 Debian 12 上,iopingNVMe 驱动器上的延迟会报告约 10ms。添加nvme_core.default_ps_max_latency_us=0到我的启动配置并重新启动后,它显然不会进入超低功耗模式,现在报告延迟约 300us ioping

但是,它仍然应该更低。通过反复试验,运行ioping -i0.07驱动器时延迟约为 300us。但是,将其降低到可将ioping -i0.06延迟降低至约 50us(这是我对驱动器的期望)。

因此显然仍有某些东西使驱动器进入睡眠状态,或者某些东西使驱动器进入较慢的模式(不一定是在驱动器本身,而是在内核的某个地方?)。

关于如何让驱动器始终处于全速模式,有什么建议吗?我希望它始终以 50us 的速度响应,而不是降到 300us 版本。

root@dowest:/home/debian# ioping -i 0.06 /tmp
4 KiB <<< /tmp (ext4 /dev/nvme0n1p2 467.9 GiB): request=1 time=56.4 us (warmup)
4 KiB <<< /tmp (ext4 /dev/nvme0n1p2 467.9 GiB): request=2 time=50.6 us
4 KiB <<< /tmp (ext4 /dev/nvme0n1p2 467.9 GiB): request=3 time=49.6 us
4 KiB <<< /tmp (ext4 /dev/nvme0n1p2 467.9 GiB): request=4 time=49.7 us
4 KiB <<< /tmp (ext4 /dev/nvme0n1p2 467.9 GiB): request=5 time=50.0 us
4 KiB <<< /tmp (ext4 /dev/nvme0n1p2 467.9 GiB): request=6 time=48.9 us
4 KiB <<< /tmp (ext4 /dev/nvme0n1p2 467.9 GiB): request=7 time=49.8 us
4 KiB <<< /tmp (ext4 /dev/nvme0n1p2 467.9 GiB): request=8 time=49.8 us
4 KiB <<< /tmp (ext4 /dev/nvme0n1p2 467.9 GiB): request=9 time=49.0 us
root@dowest:/home/debian# ioping -i 0.07 /tmp
4 KiB <<< /tmp (ext4 /dev/nvme0n1p2 467.9 GiB): request=1 time=54.4 us (warmup)
4 KiB <<< /tmp (ext4 /dev/nvme0n1p2 467.9 GiB): request=2 time=324.5 us
4 KiB <<< /tmp (ext4 /dev/nvme0n1p2 467.9 GiB): request=3 time=321.2 us
4 KiB <<< /tmp (ext4 /dev/nvme0n1p2 467.9 GiB): request=4 time=320.1 us
4 KiB <<< /tmp (ext4 /dev/nvme0n1p2 467.9 GiB): request=5 time=320.2 us
4 KiB <<< /tmp (ext4 /dev/nvme0n1p2 467.9 GiB): request=6 time=322.0 us
4 KiB <<< /tmp (ext4 /dev/nvme0n1p2 467.9 GiB): request=7 time=319.3 us
4 KiB <<< /tmp (ext4 /dev/nvme0n1p2 467.9 GiB): request=8 time=318.7 us
4 KiB <<< /tmp (ext4 /dev/nvme0n1p2 467.9 GiB): request=9 time=321.4 us

相关内容