Skip to main content

Command Palette

Search for a command to run...

关于The Impact of Thread-Per-Core Architecture on Application Tail Latency读后总结

Updated
1 min read

这个paper主要是讲了Thread-Per-Core架构对应用层的长尾延迟的影响;根据最后的总结是在配置合理的情况下会有一个比较好的效果的;Thread-Per-Core这个系统架构一开始我接触的时候出现在Scylladb,它还有对应的一个framework叫做seastar,是一个C++的框架,用来支持这种模型的;

1 这个架构的好处

随着单core的整个摩尔瓶颈的到来,目前现代的硬件设备都是用多core来提升性能的,但是平时我们使用的multicore的编程方式随着线程的变多会导致整体的内核切换的消耗就变得突出的,而且多核编程会涉及到thread-safe的问题,就会加入很多所谓的同步的机制,也从一定程度上导致core对性能提升比较缓慢;paper从几个方面进行了分析:

  1. CPU affinity: 中文叫做亲和性,linux内核的调度算法不保证一个线程前一个时刻在A cpu执行,下一个时刻可能跑到了CPU B上运行,这个会带来的问题其实还挺多的。主要在于cache的实效从而带来的性能的损耗,这个损耗还是很明确的;

  2. Thread synchronization: 本质上是因为存在相互都要访问的公共资源,为了保证thread-safe,就必须进行同步机制的;但是这个会带来所谓的损耗;尤其是lock机制的加入会将本身是并行的操作在某一个环节变成串行的,公共资源越多,本质上core的增加未必能提升所谓的性能,可能还有反向作用;redis的整个架构就是单线程+异步的方式,基于的理论估计是减少竞争和内存操作本身就很快;

  3. OS interfaces: 一方面提到了Linux的async机制做的一般,不过iouring加入之后估计可以提升不少;其他的主要是说的是用户态和内核态的context切换的消耗和内存copy用户态的内存的消耗等;目前iouring我感觉应该是解决了一大部分的问题吧;

关于这个架构,paper author提出了三个架构:

a. shared-everything

b. shared-nothing

c. shared-something

分别说一下各自的确定;a这种的话解决了cpu的亲和性的问题,但是解决不了thread-synchronization的问题;而b这种架构的问题在于1. 负载均衡的问题 2. core与core之间有状态了,请求与请求之间就有了状态; 一个请求访问了A cpu,下次连接断掉之后可能会访问B,但是B的内存没有它的数据,这就产生了问题;所以才会有c,大部分不分享,一些信息进行分享的;

c架构+NUMA的架构,尽可能将控制在同一个a NUMA domain;

paper还提到了关于NIC和软中断的问题;通常情况下网络package过来通过softirq来进行通知application,而当package很多的时候会通过thread主动的loop来获得package的;paper提出专门指定cpu去负责网络package,并且获得package也是对应的业务thread的数据,通过这种方式让业务cpu能全力做事情,而不会被各种软中断打断处理网络请求;

2 最终的测试

几个变量:

  1. 硬件的不同,一个是现代的高级硬件,一个是传统的硬件

  2. IRQ的亲和性是否绑定

  3. 是否关闭IRQ的balance

  4. memcache和sphinxd

结果:

  1. 从read 延迟来看,几种模式其实都差不多的,在相同的硬件上sphinxd会稍微好一些的;C中可以看到,当IRQ亲和性开启+关闭balance的话,并且随着连接数变多的时候效果会好不少,C中的第一张图;

  2. 从update latency来看,整体的提升了67%或者47%的效果;

从结果来说是有效果的,看样子能减少50%的长尾延迟。

3 后面的研究

  1. 请求的路由;其实这个架构有点类似于基于core的分布式架构,每个core只做自己想管的工作,那么关于请求的路由就很重要的;目前用的是message-pass,如果请求错误量很大的话,就会导致整体的请求转移消耗就变大的;

  2. 负载均衡,结合上一个问题,需要客户端去感知当前的core建立的连接是错误的连接,需要切换一些的,但是需要client的配合

  3. os interfaces: 这个方面的思考就是kernel-bypass,但是这其实很麻烦的,需要application思考更多的东西,现在有一个叫做Demikernel在重新设计os接口,可以让应用层可以无感知,高度抽象的是用户spdk、dbdk等等类似的工具;

  4. 将负载卸载到硬件上去,比如用fpga来做一部分的计算什么的,但是这样就变复杂的了;

  5. 应用层的创新;

More from this blog

Ai时代的工具链

本周是black Friday,我订阅了几个AI服务,还是蛮贵的...不过这样基本上构成我目前整体的知识阅读的过程,随着Ai的不断发展,工具链的替换可能是很重要的一个过程的。我主要订购了以下几个工具: Memo: 这个工具的主要作用是将视频/audio转srt,并且带有ai翻译的工具;当然我觉得它做的非常好的是,它把整个链路做的非常好的,并且可以用本地的资源做audio->text;而且它自带了很多的ai功能,比如对字幕进行进一步的AI的处理,提问,summarize和思维导图等等;目前我主要...

Nov 30, 20251 min read

做了一个噩梦

今天凌晨4点多起来看了一眼丈母娘的发烧是否ok...就导致我有点睡不着的,刷了一会推特之后又开始睡觉了,于是就开始做了一个很可怕的梦。 噩梦 那天,我不知道是在哪里..我带着女儿和我弟出去玩的,貌似是一个风景山区。于是我就带着女儿和弟弟出去玩的;我们走啊走, 沿着一条路一直走..突然看到一个小道有一家饭店的,这个饭店是比较特殊,有很多海鲜的;我看上了一只大龙虾,我问多少钱的,他说大概就70rmb就可以的。。。我觉得很划算的,我心想:我买下来,到时候把老婆叫过来一起吃的,并且告诉她这个才70rmb...

Nov 24, 20251 min read

子女教育-2

下面我分享一个推特上的一个关于子女教育的推 哈哈哈哈,李诞这个视频我看过 我给你分享几个我和我女儿之间的小故事 第一个故事 我经常给小朋友说:你们现在上学的成绩不重要,你们现在数学考试都是语文脑筋急转弯,语文考试都是历史背诵,一点用都没有,你出了社会就知道,社会根本没有选择题,社会要有选择题就好了,最难的是你遇到困难,你连门都找不到。我第一次这样讲的时候是女儿小学4年级,那时候我女儿听的一愣一愣的,她不明白,但是觉得我的理论和学校的不一样,很狂妄,但是她很喜欢,哈哈哈哈。 她什么时候真正明...

Nov 13, 20251 min read

被诈骗-马来西亚

最近我在国内,我老婆在马来;最近在计划搬家的,找的那个房子不包含一些必要的家具,于是我老婆就必须要买点家具的,主要是沙发和餐桌..我们本来计划是说去ikea去买,但是我老婆觉得ikea的家具不便宜,并且款式一般的,最终问了中介找了一个二手平台找找看不错的家具。 我老婆挑了两个家具的,我看了一下价格也不算便宜的,但是我老婆喜欢的,于是我就说你觉得ok那就购买吧。我还顺便问了一下,这个家具能不能线下看一下货的,但是我老婆说这货在很远的地方的,大概是300公里的一个城市的。那我就说这个包邮吗,我老婆说...

Nov 13, 20251 min read

当下和最近想做的事情

1. Current 当下 最近依然还在中国,已经回来快一个月了. 最近一直在忙着带丈母娘看病和住院的。索性一切都还在可控范围内的,丈母娘由于糖尿病控制的很差导致本身的冠心病也复发. 这次去浙江省人民医院去做了造影检查和支架植入的手术的,不过这一切都比我预估的要顺利,我就怕她由于长时间没吃药和高血糖的持续的时间太长了,会带来严重的问题,不过好在没有发生最坏的事情的。 因为做了手术,所以这段时间我和我老婆的姐姐每人轮换的陪床,不过陪床真的好累的,因为睡得很不好的,特别的累。不过好在都结束了,而且丈...

Nov 9, 20251 min read

Keep Move - 永不止步

39 posts