DPDK本属于网络技术范畴,但是SPDK在DPDK基础上开发,到处都能看到它的影子。要想对SPDK有深入了解,就必须对DPDK有一定的认识。鉴于我们要讲的是SPDK,本文对DPDK中的网络部分不做解读。
DPDK从2010年开源至今,生态系统已经初具规模。无论是上游的设备厂商(Mellanox等推出了DPDK驱动),还是中间系统提供商(VMware,RedHat对DPDK的支持),再到下游的应用集成(Vrouter,Vswitch等)都做出了积极配合。
DPDK有完整的框架,简洁的编程接口,丰富详细的文档,这些无疑降低了外界学习的难度。DPDK的内容较多,大部分都是针对网络设备(如驱动模型,Ring队列,数据包转发等),与NVMe存储设备相关度不大,下面就介绍SPDK可能用到的一些知识。
DPDK支持多线程编程,以lcore表示一个CPU。DPDK启动时,会自动检测系统中的CPU信息,并根据用户指定的-c参数(以hex值表示cpu mask信息)运行线程。为了方便线程间的通信和管理,DPDK将这些线程分为一个Master线程和其他Slave线程。Master线程是用户运行程序的主进程,Slave线程用来运行用户自定义的程序。通过这个方式,省去了用户自己创建和管理线程的步骤。下图是SPDK用这个模型跑的一个例子(见examples/perf)。
如上图右侧,在