腾讯云黄炳琪:腾讯云如何通过F-Stack项目解决内核拥堵

2017-04-13 10:03:25 热度:
2017年4月12-13日,2017亚太CDN峰会在北京隆重召开。在13日上午的视频云论坛上,腾讯云研发总监黄炳琪作了题为《腾讯云CDN全用户态Server实践》主题报告。
 

图为:腾讯云研发总监黄炳琪
 
“长胖的Linux”:腾讯云操作短板
 
演讲开头,黄炳琪总监向我们普及了一个“J型曲线”的概念。他认为尽管最近几年带宽、流量型业务的翻番式的增长和如影随形、愈演愈烈的DDOS攻击和CC攻击对CDN的技术体系提出来越来越多的挑战,但是面对这些挑战,腾讯云手里也有不少重武器来应对,比如网卡和交换机容量的不断提升、CPU核心数也水涨船高、NVMe和NVDIMM的应用也越来越广。
 
从硬件层面来看,黄炳琪认为腾讯云有足够的装备来打赢这场战争,截至目前,腾讯云的网卡容量从25GbE升级到40GbE再到100GbE;CPU核数也从24Core升级到48Core,直至56Core。腾讯云还拥有“NVDIMM NVMe”。不过在实操过程中腾讯云发现现有的体系中有一个特别大的短板,黄炳琪将这个短板(Linux太臃肿)生动的形容为“Linux太胖了”,任何一个数据包从网络上过来到达用户层,都会经过上下文切换,内存分配和拷贝,锁,局部性失效的问题。黄炳琪认为,其实这些机制本身并没有错,这是几十年来软件工程领域的精华,只不过是linux是通用操作系统。他说“一个通用操作遇到这么特定的、极端的业务要求,的确是老干部遇到了新问题。”
 
问题是什么呢?黄炳琪说是“内核拥堵”。一个数据从包网络上过来,通过硬中断、软中断或是NAPI把数据收到内核里,然后经历内存cp、各种各样的锁、线程唤醒、内核通知链,然后到用户空间线程来读取,这个时候的线程还指不定在哪个CPU上跑。一套机制如若很复杂,做内核开发的时候常常拿其中内核锁一项就问倒一大片面试者。因为这个问题的存在,业界逐渐出现了业务数据绕过内核的呼声,就是所谓的kernel bypass。
 
业界解决内核拥堵:kernel bypass
 
黄炳琪从四个方面解释了kernel bypass:
 
其一:kernel bypass重新定义的内核空间和用户空间的分工。内核主要做高优先级,高权限的控制信令的操作。而用户空间主要关注于大流量,高并发的数据流收发。在实践上,一般kernel bypass是一个网卡队列对应一个用户空间进程,对应一个绑定的CPU,形成一个逻辑单元。所有的数据和计算都在这个单元里面闭环,每个逻辑单元之间不共享任何数据。
 
其二:这个架构如何解决4个问题。由于全部是用户空间,自然不存在硬中断,软中断,用户态和内核态的切换,由于线程绑定在特定的CPU上,全异步执行,所以没有进程的上下文切换。从设备DMA出来的内存一直可以用到死,不需要内核空间和用户空间拷来拷去。
 
内核中大量锁的出现,是因为linux作为抢占式的内核,会在代码不受控制的情况下在多个上下文中来回串,还会共享很多数据。比如说同一个端口号,google也出了一个补丁muti port来降低端口锁的影响,DNS端口分发。
 
其三:kernel bypass的难度。业界要一直大规模的用起来,主要在二层、三层做网关路由转发等工作,最多玩玩简单的UDP协议。因为本来沉淀在操作系统内的功能和机制已经发展了几十年,外围的软件生态也是围绕其建设的。要重新在用户空间复制一套的难度和工作量其实都不是一般得大。
 
其四:为什么要投入kernel bypass。黄炳琪解释,业务的压力其实并不是一天两天的事情了,从web2.0开始,互联网的爆发式增长,迫使业界必须从这条路上趟一趟。所以从几年前腾讯云在从简到易的实践by kernel的方案,时至今日,已经形成完整的、成熟的、易用的一个开发工具栈。
 
F-Stack项目——腾讯云如何解决内核拥堵
 
F-Stack是基于kernel bypass的理念的完整的、成熟的、易用的、高性能server技术栈。现代的操作系统和软件架构是几十年来人类智慧的结晶,腾讯云的实现理念是:把这个星球最优秀的软件和代码粘合起来。在此之前,腾讯云也走过弯路,开发了一个能用的TCP/IP协议栈,发现走不通以后就放弃了。
 
F-Stack的特点:1、全用户态。用户态开发简单、安全;拒绝四个上下文切换;拒绝内存拷贝;拒绝中断和中断风暴。2、网卡队列每CPU每进程。线性能力扩展;拒绝调度;拒绝锁;拒绝破坏局部性。黄炳琪解释道:由于全部是用户空间,自然不存在硬中断,软中断,用户态和内核态的切换,由于线程绑定在特定的CPU上,全异步执行,所以没有进程 的上下文切换。从设备DMA出来的内存一直可以用到死,不需要内核空间和用户空间考来考去。
 
F-Stack在腾讯云CDN的应用:1、直播异常不断流;2、CDN安全防攻击;3、CDN TCP协议加速;4、CDN性能提升。
 
演讲最后一部分,黄炳琪向我们展示了F-Stack性能测试,由于他的团队做了大量的努力大量的优化,F-Stack的性能测试从短连接测试到长连接测试再到混合连接测试,F-Stack都表现完美。

责任编辑:方珍