知识卡片

shadow doorbell减少虚拟化下的特权切换

专业/工作 · 552.n

内容

虚拟机里的NVMe驱动每提交一个命令都要写PCI配置空间寄存器(doorbell)通知控制器,而客户机对PCI空间的写操作是特权指令,会触发VM_EXIT把控制权交还给宿主机处理,这类切换在虚拟化环境里代价很高。NVMe 1.3引入shadow doorbell机制:如果控制器告诉客户机自己是被模拟的,客户机就会额外维护一份内存中的”影子”doorbell,命令提交时先更新这份内存副本,是否真的要触发昂贵的PCI doorbell写入,交由后端的模拟设备自己判断决定,从而把原本每次必然发生的特权切换变成了按需触发。发散:这是”用一层可以被软件低成本读写的内存缓冲,去代理原本必须触发硬件事件的操作”的思路,本质和延迟写入、批量提交是同源的——只要能把”发生”和”通知”这两件事拆开,就有机会把通知的频率降下来。

参考来源

《Linux开源存储全栈详解从Ceph到容器存储》第4章《存储加速》