编译spdk前要编dpdk吗
‘壹’ SPDK QOS机制解析
本文深入解析了Intel SPDK的QoS机制,其主要面向块设备(bdev)层,不涉及面向客户端的QoS机制。SPDK支持四种QoS:IOPS、BPS、BPS-R和BPS-W,这些均被整合到spdk_bdev_qos->rate_limits数组中。新增QoS类型仅需在数组内添加,随后在qos接口中进行相应逻辑更新。
SPDK采用了多核访问同一bdev的QoS需求,通过io任务委托提交的方式向bdev层提交io。在多个核中选取一个用于执行bdev_io提交,其余核在使用bdev_io_submit提交时,通过spdk_thread_send_msg向提交核发送消息,提交核收到消息后执行_bdev_io_submit。当需要QoS时,调用bdev_qos_io_submit向QoS提交bdev_io,完成限速后通过bdev_io_do_submit向bdev驱动提交请求。
当同时配置多种QoS时,生效策略为所有条件都满足才生效。任何一种QoS要求不满足都会导致排队,不向驱动提交。bdev_io向驱动提交前及从驱动返回后,每种配置的QoS均需更改配额。
SPDK QoS执行方式有两种:新io触发时主动检查并提交QoS队列中的io;定时poll在无新io下发的情况下,原QoS队列中的io在poll机制下进行提交,每次poll任务的默认间隔时间为1ms。
SPDK支持动态调整bdev QoS参数,使用bdev_set_qos_limit命令,设置为0取消相关限制。实验验证显示,QoS设置正确生效,能够限制IOPS和带宽,从而影响业务性能。解除限制后,性能恢复至初始状态。
SPDK QoS机制便于本地盘云主机使用场景,但多个SPDK进程协作的QoS实现受限于进程间bdev的不可共享性。这限制了SPDK作为客户端时使用分布式存储的能力,需要额外的QoS方案。
本文摘自“天翼云开发者社区”,为读者提供SPDK相关学习资源,包括SPDK与DPDK的关系、NVMe、JSON-RPC等技术概念、DPDK高级工程师学习公开课等。
‘贰’ DPDK/SPDK UIO,大页内存,CPU亲和性,NUMA机制等
在Linux环境中,UIO(用户空间I/O)是一种机制,DPDK(Data Plane Development Kit)通过它实现了网卡驱动在用户态下的高效运行,利用轮询和零拷贝技术接收和发送数据包,显着提升数据传输性能。
UIO区别于常规驱动,它将驱动的某些部分保留在内核空间,而大部分功能在用户空间实现,这样可以避免因内核更新而频繁更新驱动的问题。例如,对于Intel Core i3-2310M这种双核处理器,每个物理核心可能有多个逻辑处理器,通过SIBLING值可以判断是否启用超线程技术。
理解CPU亲和性(affinity)很重要,它是指进程倾向于在一个指定的CPU上执行,避免频繁迁移,提高缓存命中率和性能。在多核系统中,NUMA(Non-Uniform Memory Access)机制会根据物理内存分布,将CPU和内存划分为多个节点,不同节点间的内存访问速度会有所差异。
查看系统是否支持NUMA,通常会检查输出结果和系统详细信息,以了解每个节点的内存分配。在DPDK/SPDK的开发中,配置NUMA模式有助于优化内存访问速度,减少远程访问带来的性能损失。
对于想要深入学习DPDK/SPDK、网络协议栈、存储、网关开发、网络安全、虚拟化等领域,可以关注相关公开课和资料,如0vS、TRex等。学习资源和交流群(973961276)免费分享,对这方面感兴趣的朋友可以加入获取更多信息。