Linux内核是高并发服务的关键组件之一。以下是一些可用于优化Linux内核的配置。
现在很多人都在诟病Linux内核协议栈收包效率低,不管他们是真的懂还是一点都不懂只是听别人说的,反正就是在一味地怼Linux内核协议栈,他们的武器貌似只有DPDK。
Linux内核对网络驱动程序使用统一的接口,并且对于网络设备采用面向对象的思想设计。
Linux内核分为CPU调度、内存管理、网络和存储四大子系统,针对硬件的驱动成百上千。代码的数量更是大的惊人。
Linux内核主要由 进程管理、内存管理、设备驱动、文件系统、网络协议栈 外加一个 系统调用。
Netfilter是Linux内核中的一个数据包处理模块,它可以提供数据包的过滤、转发、地址转换NAT功能。Iptables是一个工具,可以用来在Netfilter中增加、修改、删除数据包处理规则。
腾讯云网络自研路由平台—FCR 云网络厂商在用户接入侧一般采用传统网络设备如路由器、交换机,传统网络设备虽然功能稳定,但是开发周期较长,支持功能无法快速匹配互联网厂商日新月异的应用场景。为了解决上述问题,腾讯云网络在接入时使用了FCR(Fast Cloud Router)作为自己的路由控制平台。 FCR自研路由平台不仅支持BGP、静态路由、BFD等各类路由相关协议,同时还可以提供丰富的路由策略以及百万级的路由管理功能。 平台开放:完全基于开源组件构建,打破了传统设备厂商封闭的产品生
本章节介绍的是一款面向四层网关(如四层负载均衡,L4-LB)的高性能的压测工具dperf。该工具目前已经在github上开源,是一款高性能的压测工具:
数据平面开发套件(DPDK [1] ,Data Plane Development Kit)是由6WIND,Intel等多家公司开发,主要基于Linux系统运行,用于快速数据包处理的函数库与驱动集合,可以极大提高数据处理性能和吞吐量,提高数据平面应用程序的工作效率。
RED方法:监控服务的请求数(Rate)、错误数(Errors)、响应时间(Duration)。Weave Cloud在监控微服务性能时提出的思路。
首先,DPDK和内核网络协议栈不是对等的概念。 DPDK只是单纯的从驱动拿数据,然后组织成数据块给人用,跑在用户态。功能相当于linux的设备无关接口层,处于socket之下,驱动之上。只不过linux协议栈的这部分在核心态。 你说的包处理器,很多时候是不用linux内核协议栈的,而是用专用包处理程序,类似于DPDK加上层应用处理。通常会有些硬件加速器,包处理效率更高些。缺点是一旦用不上某些功能,那些加速器就白费了。而纯软件处理就非常灵活,不过代价就是功耗和性能。 纯DPDK性能非常高,intel自己给出的数据是,处理一个包80时钟周期。一个3.6Ghz的单核双线程至强,64字节小包,纯转发能力超过90Mpps,也就是每秒9千万包。 不知你有没有看出来,80周期是一个非常惊人的数字?正常情况下,处理器访问一下ddr3内存都需要200个周期,而包处理程序所需要操作的数据,是从pcie设备送到ddr内存的,然后再由处理器读出来,也就是说,通常至少需要200周期。为啥现在80周期就能完成所有处理?我查了下文档,发现原因是使用了stashing或者叫direct cache access技术,对于PCIe网卡发过来的包,会存在一个特殊字段。x86的pcie控制器看到这个字段后,会把包头自动塞到处理器的缓存,无序处理器来干预。由于包头肯定是会被读取的,这样相当于提前预测,访问的时间大大缩短。 如果加上linux socket协议栈,比如跑个纯http包反弹,那么根据我的测量,会掉到3000-4000周期处理一个包,单核双线程在2.4Mpps,每秒两百四十万包,性能差40倍。 性能高在哪?关键一点,DPDK并没有做socket层的协议处理,当然快。其他的,主要是使用轮询替代中断,还有避免核心态到用户态拷贝,并绑定核,避免线程切换开销,还有避免进入系统调用的开销,使用巨页等。 还有很关键的一点,当线程数大于12的时候,使用linux协议栈会遇到互斥的瓶颈,用性能工具看的话,你会发现大部分的时间消耗在spin_lock上。解决方法之一是如github上面的fastsocket,改写内核协议栈,使包始终在一个核上处理,避免竞争等。缺点是需要经常自己改协议栈,且应用程序兼容性不够。 另外一个方法是使用虚拟机,每个特征流只在一个核处理,并用虚拟机隔绝竞争,底层用dpdk做转发,上层用虚拟机做包处理,这样保证了原生的linux协议栈被调用,做到完全兼容应用程序。不过这种方法好像还没有人做成开源的,最近似的是dpdk+虚拟交换机ovs的一个项目。 如果你只想要dpdk的高性能加tcp/ip/udp的处理,不考虑兼容性,那么还可以去买商业代码,我看了下供应商的网站介绍,纯转发性能大概在500-1000周期左右一个包。
“如何在激烈的移动社交市场竞争中脱颖而出?”这是当前移动社交应用领域众多开发者们所面临的现实问题。在产品功能特性同质化越来越严重的形势下,动用最小的研发资源实现“附近的人”,进而将更多的团队资源投入到产品创新,是大家的深层诉求。 据了解腾讯云分析(mta.qq.com)近日推出的“社交LBS”SDK服务,其覆盖Android和iOS两大主流平台,所有功能免费。开发者只需花10分钟集成SDK之后,便可无视各项复杂的技术挑战,轻松实现“附近的人”。 腾讯社交LBS提供何种服务? 首先,社交LBS服务主要围绕
原文地址:牛客网论坛最具争议的Linux内核成神笔记,GitHub已下载量已过百万
“如何在激烈的移动社交市场竞争中脱颖而出?”这是当前移动社交应用领域众多开发者们所面临的现实问题。在产品功能特性同质化越来越严重的形势下,动用最小的研发资源实现“附近的人”,进而将更多的团队资源投入到产品创新,是大家的深层诉求。 据了解腾讯云分析(mta.qq.com)近日推出的“社交LBS”SDK服务,其覆盖Android和iOS两大主流平台,所有功能免费。开发者只需花10分钟集成SDK之后,便可无视各项复杂的技术挑战,轻松实现“附近的人”。 腾讯社交LBS提供何种服务? 首先,社交LBS服务主要
忽然想起的回忆,那是2007上周五在冬季,我看我的老湿调试Linux堆IP层,只看到他改变路由查找的逻辑,然后直接make install上的立竿见影的效果有点,我只知道,,这种逻辑必须再次更改编译内核。再一次,他没有编译,就像刚才编译的文件…时又无聊的工作阻碍了我对Linux内核的探索进度,直到今天,我依旧对编译内核有相当的恐惧,不怕出错,而是怕磁盘空间不够,initrd的组装拆解之类,太繁琐了。我之所以知道2007年的那天是周五,是由于第二天我要加班。没有谁逼我。我自愿的,由于我想知道师父是怎么做到不又一次编译内核就能改变非模块的内核代码处理逻辑的。第二天的收获非常多,不但知道了他使用了“镜像协议栈”。还额外赚了一天的加班费。我还记得周六加完班我和老婆去吃了一家叫做石工坊的羊排火锅。人家赠送了一仅仅绿色的兔子玩偶。
因为要对百万、千万、甚至是过亿的用户提供各种网络服务,所以在一线互联网企业里面试和晋升后端开发同学的其中一个重点要求就是要能支撑高并发,要理解性能开销,会进行性能优化。而很多时候,如果你对Linux底层的理解不深的话,遇到很多线上性能瓶颈你会觉得狗拿刺猬,无从下手。
Netfilter/iptables是Linux内核内置的报文过滤框架,程序可以通过该框架完成报文过滤、地址转换(NAT)以及连接跟踪等功能。
原文链接:https://blog.csdn.net/dog250/article/details/46666029
在使用Linux的过程中,很多人和我一样经常接触iptables,但却只知道它是用来设置Linux防火墙的工具,不知道它具体是怎么工作的。今天,我们就从零开始认识一下Linux下iptables的具体工作原理。
因为要对百万、千万、甚至是过亿的用户提供各种网络服务,所以在一线互联网企业里面试和晋升后端开发同学的其中一个重点要求就是要能支撑高并发,要理解性能开销,会进行性能优化。而很多时候,如果你对网络底层的理解不深的话,遇到很多线上性能瓶颈你会觉得狗拿刺猬,无从下手。
1、信鸽的挑战 应用的用户的生命周期来说分5个阶段,即用户的获取、激活、留存、传播和收入,信鸽的消息推送是触达用户,提升留存的重要途径。 信鸽平台现已服务于数万的App开发者,日推送消息数
自基于Netfilter的iptables取代ipchains之后,Linux防火墙技术貌似一直停留在iptables,虽然近年来nftables被宣称有取代iptables之势,但事实上并无起色。
本文从OSI每一层缓存介绍、常见开源中间件缓存举例、TCP/IP协议栈中的缓存机制、操作系统中的缓存、访问缓存数据的时间范围统计等方面对计算机中的缓存进行详细介绍。希望对您有所帮助!
最近因工作原因开始了解Service Mesh与Envoy,为系统性梳理所学内容,因此沉淀了此文档,但由于所知有限,如文档中有描述不当之处,希望不吝赐教。
过去几十年互联网呈爆发式的增长,内容的丰富以及层出不穷的DDoS攻击等,对网络性能提出了极大的挑战,也同样促进了网络基础设施的快速发展。运营商的带宽越来越大,CPU/网卡等硬件的性能也会越来越强。但在很长时间内,软件的性能提升落后于硬件的性能提升,并严重限制了应用程序的性能,大部分时间不得不依靠堆机器来应对,造成了大量的资源浪费和成本提高。 随着软件的不断发展,在新世纪的第一个10年时,通过多线程和事件驱动(kqueue/epoll等)解决了C10K的问题。但是在第二个10年却不堪重负,亟需新的解
今天分享一篇经典Linux协议栈文章,主要讲解Linux网络子系统,看完相信大家对协议栈又会加深不少,不光可以了解协议栈处理流程,方便定位问题,还可以学习一下怎么去设计一个可扩展的子系统,屏蔽不同层次的差异。
关于对 Socket 的认识,大致分为下面几个主题,Socket 是什么,Socket 是如何创建的,Socket 是如何连接并收发数据的,Socket 套接字的删除等。
这是TCP/IP协议栈系列的第二篇文章,之前的一篇理解TCP/IP协议栈之HTTP2.0感兴趣可以看下,今天一起来学习下一个热点问题。
过去几十年互联网呈爆发式的增长,内容的丰富以及层出不穷的DDoS攻击等,对网络性能提出了极大的挑战,也同样促进了网络基础设施的快速发展。运营商的带宽越来越大,CPU/网卡等硬件的性能也会越来越强。但在很长时间内,软件的性能提升落后于硬件的性能提升,并严重限制了应用程序的性能,大部分时间不得不依靠堆机器来应对,造成了大量的资源浪费和成本提高。
参考链接:https://blog.csdn.net/dog250/article/details/6896949
Linux内核net/socket.c定义了一套socket的操作api。图1展示了socket层所处与TCP/IP协议栈之上和应用层之下。
传统的Linux内核网络协议栈由于更加注重通用性,其网络处理存在着固有的性能瓶颈,随着10G、25G、40G、100G甚至更高速率的网卡出现,这种性能瓶颈变得更加突出,传统内核网络协议栈已经难以满足高性能网络处理的要求。
Docker的技术依赖于Linux内核的虚拟化技术的发展,Docker使用到的网络技术有Network Namespace、Veth设备对、Iptables/Netfilter、网桥、路由等。接下来,我将以Docker容器网络实现的基础技术来分别阐述,在到真正的容器篇章节之前,能形成一个稳固的基础知识网。
F-Stack是一个全用户态(kernel bypass)的高性能的网络接入开发包,基于DPDK、FreeBSD协议栈、微线程接口等,适用于各种需要网络接入的业务,用户只需要关注业务逻辑,简单的接入F-Stack即可实现高性能的网络服务器。 本文介绍F-Stack的详细架构及如何解决内核协议栈面临的问题。 传统内核协议栈的性能瓶颈 在传统的内核协议栈中,网络包处理存在诸多瓶颈,严重影响网络包的收发性能。性能瓶颈主要包括以下几个方面 局部性失效 - 一个数据包的处理可能跨多个CPU核心、缓存失效、NUM
所谓连接,指的是各种各样的终端设备,都能够通过某种网络技术,连接到一个统一的网络上。任何终端之间都可以相互访问。下一代的基础通信网络,包括未来的5G,通信网络架构重构等,为物联网提供泛连接网络是核心目标。目前也已经有很多厂商推出解决方案,比如Google的thread/wave,华为的Hi-Link,以及NB-IoT等。
iptables是一个配置Linux内核防火墙的命令行工具,它基于内核的netfilter机制。新版本的内核(3.13+)也提供了nftables,用于取代iptables
有多火?目前在这个领域的玩家或者潜在玩家有Broadcom、Intel、英伟达、Netronome、Pensando、Fungible和Xilinx,还包括云供应商三大巨头,国内也有很多玩家。
在上篇《IPv6技术详解:基本概念、应用现状、技术实践(上篇)》,我们讲解了IPV6的基本概念。
这里深度理解一下在Linux下网络包的接收过程,为了简单起见,我们用udp来举例,如下:
本文首先从宏观上概述了数据包发送的流程,接着分析了协议层注册进内核以及被socket的过程,最后介绍了通过 socket 发送网络数据的过程。
作者Liam,海外老码农,对应用密码学、CPU微架构、高速网络通信等领域都有所涉猎。
这是一篇干货满满、如假包换的文章 读完大约要10分钟 要说现在市面上最火爆的手游,莫非拥有两亿注册用户的王者荣耀了。据悉,王者荣耀的渗透率高达22.3%,这意味着每7个中国人中就有一位是王者荣耀注册用户。众所周知,手游App对推送实时性和稳定性要求非常高,而王者荣耀这种日活跃千万级的应用对推送的要求就更高了,下面我们来看看王者荣耀背后的信鸽推送是怎么应对挑战,做到海量、实时和精准推送的。 2017年7月7日-8日,ArchSummit全球架构师峰会在深圳召开。ArchSummit全球架构师峰会是InfoQ
基于「丢包反馈」的协议是一种 被动式 的拥塞控制机制,其依据网络中的 丢包事件 来做网络拥塞判断。即便网络中的负载很高时,只要没有产生拥塞丢包,协议就不会主动降低自己的发送速度。
原文链接:https://blog.csdn.net/dog250/article/details/103301816
在上一篇文章中我们概括了k8s集群网络大致包含哪些方面,包括服务在网络中的负载均衡方式(iptable和ipvs),以及underlay和overlay的组网。在这里我们介绍宿主内的容器网络,当然我们还是以docker环境为例,介绍docker宿主环境中的容器网络。
领取专属 10元无门槛券
手把手带您无忧上云