System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技术实现步骤摘要】
本专利技术涉及数据中心性能优化领域,尤其涉及一种支持有状态连接的ebpf内存数据库加速方法。
技术介绍
1、memcached是一种高性能的内存内键值存储,广泛用于各种大型web服务提供商缓存高频用户请求,以减轻后端数据库的压力,更快地响应用户请求;memcached从一开始就使用各种技术进行了优化,以提供高性能;最近发展的ebpf技术可用于构建额外的内核内缓存层,并在内核网络堆栈之前处理请求(即堆栈前处理),以估计开销;具体来说,查询请求在进入堆栈之前进行解析,如果请求的密钥命中缓存,则直接返回响应,并丢弃请求;基于这种范式,最新的工作构建了一个支持udp协议的memcached加速系统;它在三个方面实现了吞吐量的提高,同时避免了内核旁路问题;首先,ebpf代码是在内核的内置验证器检查后加载的,这确保了安全性;其次,它嵌入在现有的协议栈中,而不是专门占用cpu;第三,该方案可以实现应用程序无感知,避免了重新设计应用程序的额外工作。
2、然而memcached,其性能仍然受到内核网络堆栈的限制,因为l i nux网络堆栈旨在为各种应用程序提供标准统一的接口;且tcp也受到内核网络堆栈性能瓶颈的影响,并被内存中的键值存储(如memcached、red i s)广泛使用;当使用tcp连接处理查询请求时,memcached在网络相关的系统调用上花费了超过50%的cpu时间;更重要的是,拥有89.2%市场份额的red i s只支持tcp协议;不幸的是,现有的工作无法支持有状态协议tcp,因为预堆栈处理会在客户端和服务器之间产
3、针对上述的技术缺陷,现提出一种解决方案。
技术实现思路
1、本专利技术的目的设计一种支持有状态连接的ebpf内存数据库加速方法,能够使用“累加修正”的方法对报文序列号进行修改维护,从而实现对tcp连接的加速支持。
2、本专利技术的目的可以通过以下技术方案实现:一种支持有状态连接的ebpf内存数据库加速方法,包括步骤一:网卡收到的数据包将触发xdp程序挂载点中的入口ma i n的执行,并通过该入口过滤前往memcached的数据包,并将数据传至步骤二;
3、步骤二:memcached应用程序生成的响应数据包,将触发位于流量控制tc挂载点的out_ma i n模块的执行,并将数据传至步骤三;
4、步骤三:使用接收端缩放技术,将同一条连接的状态处理始终映射到同一个cpu上,避免了对状态表中相同条目的潜在并发访问,网卡收到的数据包将触发一个程序挂载点中的入口mai n的执行,该入口将过滤前往memcached的数据包。
5、优选的,所述步骤一的具体内容为:当接收到的数据包对应于新连接,则连接状态计数器将在此处初始化,在使用连接状态计数器的值纠正seq和ack序列号状态修复并重新计算校验和更新csum后,将加速程序接收和发出的数据长度累加记录,累加记录遵循数学中加法逻辑运算,在收到数据包之后和发出数据包之前,由状态修正模块根据累加计数对网络包的序列号进行修正,其具体计算过程如下:
6、设某时刻某连接接收到的数据包的序号为seqin,ackin,待发送数据包的序号为seqout,ackout,接收数据包的长度为lengthin,待发送数据包的长度为lengthout,此时加速程序累计处理的数据包长度为lin,lout;
7、若缓存未命中则接收方向序号应修正为seqin-lin,ackin-lout,将请求交给上层应用处理,之后在发送方向将序列号修改为seqout+lout,ackout+lin,发给客户端:
8、若缓存命中则接收和发送方向的序号不做修改,将请求交给加速程序处理,将数据包累加计数更新为lin+lengthin,lout+lengthout;
9、当上层应用生成的应答数包在进入网卡发送队列前同样会被处理程序按照对其序列号进行加减运算,使其最终被客户端正确接收,命中缓存的get数据包会交换数据包头中的准备数据包,并填充响应内容,在更新校验和后发送到客户端,并在写回复中,传入请求和传出响应的长度会累积在连接状态计数器中,进行计数器更新。
10、优选的,所述步骤二的具体内容为:数据包的seq和ack序列号根据连接状态计数器中的值,通过状态修正的算法进行更正,响应中包含的键值,即数据库的存储内容,并在ebpf缓存中更新,将数据包在计算校验后进行发送。
11、优选的,所述步骤三的具体内容为:使用bpf map type lru hash类型的映射存储来保存连接状态,其中键为一个结构体,包含用于识别连接的连接ip和端口,值为一个包含输入输出长度计数器以及连接正在建立和关闭的标志;当多个进程尝试同时处理相同用户请求时,通过引入锁争用开销来实现对状态表的安全访问,为了避免额外的开销,使用接收端缩放rss技术将同一条连接的状态处理始终映射到同一个cpu上,避免了对状态表中相同条目的潜在并发访问,进而避免加锁解锁开销。
12、本专利技术的有益效果如下:
13、本专利技术吞吐测试结果如图4所示,对于应用了我们方法的memcache,请求一部分由memcached处理,另一部分由mi dd l ecache处理;当cpu核数从1个增加到4个时,随着cpu核数的增加,m idd l ecache的请求处理能力有明显的提升,期间服务器对应核的cpu占用率为100%,这表明mi dd l ecache具有更好的性能扩展性;对于单核cpu来说,应用方法的memcached每秒可处理大约105万个请求,这是原始吞吐量的3.8倍;对于4个核心来说,每秒可处理3m请求,其中2.8m由m idd l ecache处理,其余由memcached处理,这是原始性能的3.3倍。
14、请求处理时延的测试结果如图5所示,对10000请求的处理时延测量表明:应用方法的memcached的请求处理时延中位数为7.9μs,原始memcached再缓存命中和未命中时的请求处理时延中位数分别为17.8μs和17.4μs;这表明可以将单个请求的处理时间减少56%。
15、通过进一步测试了缓存大小对加速性能的影响,测试了不同缓存大小配置下memcached程序处理请求的总吞吐量,实验结果如图6所示;发现在所有分配比例下,支持有状态连接的ebpf内存数据库加速方法的memcached都比原始版本具有更高的吞吐量;并且只需1%额外缓存就可以实现比其原始版本更好的性能;从图中还可以得出,随着分配给midd l ecache的缓存逐渐增加,整体吞吐量也逐渐提高;缓存百分比大于25%后性能没有提高的原因是memcached未命中的百分比不断增加,大多数可以处理的请求已经被mi dd lecache处理,通过增加缓存总量,整体性能将得到进一步提高。
本文档来自技高网...【技术保护点】
1.一种支持有状态连接的eBPF内存数据库加速方法,其特征在于,包括以下步骤:
2.根据权利要求1所述的一种支持有状态连接的eBPF内存数据库加速方法,其特征在于,所述步骤一的具体内容为:
3.根据权利要求1所述的一种支持有状态连接的eBPF内存数据库加速方法,其特征在于,所述步骤二的具体内容为:
4.根据权利要求1所述的一种支持有状态连接的eBPF内存数据库加速方法,其特征在于,所述步骤三的具体内容为:
【技术特征摘要】
1.一种支持有状态连接的ebpf内存数据库加速方法,其特征在于,包括以下步骤:
2.根据权利要求1所述的一种支持有状态连接的ebpf内存数据库加速方法,其特征在于,所述步骤一的具体内容为:
3.根据...
【专利技术属性】
技术研发人员:李文信,庞义人,
申请(专利权)人:天津大学合肥创新发展研究院,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。