知识卡片
Virtio环表设计为何比双指针更灵活
内容
传统网卡用一对前端/后端指针标记描述符处理进度(即[[DMA环形队列的Head-Tail协作]]中的Head/Tail模型),要求描述符必须严格顺序处理——前一个没处理完,后一个只能干等。Virtio虚拟队列换了设计:生产者(前端驱动)把描述符放进可用环表,消费者(后端驱动)用完后放进已用环表,两张表各自独立维护进度。即使某个描述符被后端占用较久,也不会卡住后面其他描述符的回收复用——本质是用两张独立环形表替代一对严格顺序的指针,把”处理顺序”和”回收顺序”解耦,换取更高调度灵活性。
参考来源
《深入浅出DPDK》第11章《半虚拟化Virtio》