上回说到要想在NUMA架构提升块设备层性能,就得减少跨CPU的内存访问。当然你可以绑定CPU,唐杰在他之前SSD测试的文章中讲过这些技巧,比如SSD插在CPU 0上,那么就只通过CPU 0发命令,中断也只发到CPU 0上。但这些都是块设备层的公公婆婆、儿子儿媳干的活,不是它能够操心的事。从块设备层角度,开发了多队列机制来解决这个问题。
使命
我们做一件事,先要给出个目标。多队列设计的目标有如下几点:
- 公平。访问同一个SSD,所有的核都是公平的,不能歧视谁。
- 跟设备无关。不管是一个还是多个设备,接口都是一样的。
- 有个缓冲层。命令先发到缓冲层,让程序员搞搞排序算法,同时设备那边命令[……]