论文部分内容阅读
新型快速存储设备NVMeSSD(Non-volatile Memory Express SSD)以其高性能,低延迟的特点,逐渐替代传统硬件设备成为构建大规模高性能存储系统的首选。硬件设备变更推动了I/O软件栈的变革,为了降低I/O路径的软件开销以及充分发挥硬件性能,NVMe精简软件栈逐渐成为NVMeSSD等高性能存储设备的标配。然而无论内核NVMe软件栈还是用户态NVMe软件栈均以减少I/O请求处理过程中的软件开销为主要目标,并未考虑到底层设备组件状态和应用场景需求。
当前主流高性能存储系统,其核心目标之一为向用户提供极低延迟I/O访问。由于NVMe软件栈设计中并未考虑底层设备组件状态,如I/O请求在NVMeSSD设备处理中可能出现CMT缺失(Cached Mapping Table Miss),从而导致后续I/O请求的排队等待延迟增加。因此结合SPDK(Storage Performance Development Kit)用户态NVMe软件栈,提出一种多队列映射感知的I/O调度策略,即在主机端模拟底层设备CMT信息,用于预判I/O请求是否命中,并根据预判信息将请求分发至不同优先级队列进行服务,从而减少CMT命中请求在队列中的排队等待延迟。测试结果表明,对比当前NVMe软件栈中主流None调度策略以及Read/WriteQueue策略,该方案可降低7%~24%延迟。
高性能存储系统的另一核心目标是向用户提供可保证的存储服务。由于NVMe精简软件栈并未考虑底层存储设备的I/O流资源争用,同一NVMeSSD上来自不同用户的多个I/O流争用设备资源时,低强度I/O流性能降级严重,使得构建其上的高性能存储系统服务质量无法保障。针对此问题,提出一种基于队列流控的多队列软件栈性能保障方案,通过实现Chunk绑定以及基于性能反馈的令牌桶算法,为上层应用提供必要的性能指标保障。基于SPDK多队列软件栈设计,该方案具有较高的性能保障准确度,其平均误差为2%,最大误差不超过5%。
当前主流高性能存储系统,其核心目标之一为向用户提供极低延迟I/O访问。由于NVMe软件栈设计中并未考虑底层设备组件状态,如I/O请求在NVMeSSD设备处理中可能出现CMT缺失(Cached Mapping Table Miss),从而导致后续I/O请求的排队等待延迟增加。因此结合SPDK(Storage Performance Development Kit)用户态NVMe软件栈,提出一种多队列映射感知的I/O调度策略,即在主机端模拟底层设备CMT信息,用于预判I/O请求是否命中,并根据预判信息将请求分发至不同优先级队列进行服务,从而减少CMT命中请求在队列中的排队等待延迟。测试结果表明,对比当前NVMe软件栈中主流None调度策略以及Read/WriteQueue策略,该方案可降低7%~24%延迟。
高性能存储系统的另一核心目标是向用户提供可保证的存储服务。由于NVMe精简软件栈并未考虑底层存储设备的I/O流资源争用,同一NVMeSSD上来自不同用户的多个I/O流争用设备资源时,低强度I/O流性能降级严重,使得构建其上的高性能存储系统服务质量无法保障。针对此问题,提出一种基于队列流控的多队列软件栈性能保障方案,通过实现Chunk绑定以及基于性能反馈的令牌桶算法,为上层应用提供必要的性能指标保障。基于SPDK多队列软件栈设计,该方案具有较高的性能保障准确度,其平均误差为2%,最大误差不超过5%。