问题
随着技术的发展,事务处理有两个突出的趋势:网络带宽显著提高,使得来自网络的事务请求激增;现代服务器配备了大量CPU核心,为事务处理提供了丰富的计算能力[1-4]。从而提出了一个关键问题:如何将每个单独的事务请求调度到最合适的CPU核心?通过事务处理调度可以减少大量事务间争用,减少事务中止/阻塞,从而提高系统吞吐量。
挑战
实现高效事务调度方面存在两个挑战。
-
很难收集到必要的信息用于考虑成本效率的调度。因为事务系统很复杂:每个请求都包含具有多个记录的写/读集,不同的记录具有不同的热度[5-7]和相关性,热度和相关性是动态的。
-
事务调度会产生相当大的计算开销。对于传入的请求,为了计算它在哪个CPU核上执行的争用最少,调度器必须消耗与CPU核的数量和请求的写/读集大小成比例的计算周期。
新兴的SmartNIC为低开销的事务调度提供了机会。
-
每个事务请求/响应都流经NIC,可以自然的收集有关调度的信息。
-
事务调度需要大量的计算,而SmartNIC配备了专门的可编程硬件(例如FPGA),该硬件擅长细粒度并行。
本文方法
本文提出了AlNiCo,基于SmartNIC的请求调度的事务处理系统。核心是SmartNIC加速的争用感知调度器,将传入的事务请求调度到不同的CPU核心,以低延迟最大限度地减少事务之间的争用。AlNiCo以SmartNIC可以有效处理的方式根据系统状态描述争用,并共同设计硬件和软件以实现灵活和自适应的调度。
为了以硬件友好的方式描述事务间争用,将系统运行时状态分为三种类型:1)请求状态,即请求访问的记录集和相关的访问模式(读和写);2) 工作状态,即由工作线程在每个CPU核上执行的一组请求;3) 全局状态,即热点等工作负载特性。将上述三种类型的状态编码为紧凑向量,在SmartNIC上将争用计算转换为快速向量计算。对于传入的请求,为了计算其对不同CPU核心的争用,调度器将请求状态和每个工作进程的工作进程状态进行比较,并将全局状态作为权重。
为了实现时变应用程序的自适应调度,AlNiCo采用了从上层事务软件到SmartNIC的反馈机制。软件定期对全局状态进行采样,并通过灵活的硬件/软件接口更新NIC上的调度器。通过这种方式,AlNiCo可以处理热点随时间变化的动态工作负载。此外,通过广义反馈机制,AlNiCo可以支持各种并发控制协议。
使用配备FPGA的Innova-2 SmartNIC实现了AlNiCo,评估表明,AlNiCo将吞吐量提高了1.30×~2.68×,并将延迟降低了48.8%。
实验
实验环境:每台机器配备两个12核Xeon E5-2650 v4 2.20GHz CPU插槽、PCIe 3.0接口、128GB内存。数据库服务器配备了一个双端口25Gbps Innova-2 SmartNIC。每个客户端都配备了一个100Gbps Mellanox ConnectX-5 NIC。通过100Gbps Mellanox交换机连接。
数据集:TPC-C[6]、YCSB-T、YCSB-HOT
实验对比:吞吐量、延迟
实验参数:数据集、工作线程数、请求大小、
总结
针对事务处理中大量请求如何调度到多核CPU。本文提出了AlNiCo,基于SmartNIC的请求调度的事务处理系统。采用软硬件结合的方式:(1)以硬件友好的方式描述争用,将系统状态分为三种类型,在SmartNIC上通过向量计算调度目标CPU。(2)软件反馈,软件定期采样全局状态,并更新NIC上的调度器,从而处理热点变化负载。