作者:王翔,架构师、经济学博士,专注业务创新、企业架构、信息安全和贸易经济。 声明:原创投稿,未经许可,禁止任何形式的转载 近日,BBC一篇《Microsoft releases Linux database software》的报道令数据库业界为之热议,一直以来作为微软核心产品的SQL Server始终“深耕”在自己的核心操作系统Windows上,但微软突然宣布将于2017年年中发布Linux版本SQL Server软件的消息确实出乎意料。不过,回顾微软CEO Satya Nadella上任以来
虽然我们在区分Linux进程类别, 但是我还是想说Linux下只有一种类型的进程,那就是task_struct,当然我也想说linux其实也没有线程的概念, 只是将那些与其他进程共享资源的进程称之为线程。
线程同步可以说在日常开发中是用的很多,但对于其内部如何实现的,一般人可能知道的并不多。本篇文章将从如何实现简单的锁开始,介绍linux中的锁实现futex的优点及原理。
坐稳了,可能你要被吓一跳! 微软已经基于Linux开发了一款操作系统!这款系统叫作Azure Cloud Switch (ACS),用来确保微软数据中心交换机等网络设备的正常运行。 根据微软官方博客帖
1991年10月5日,Linus Benedict Torvalds宣布开发了类似UNIX的小操作系统,称为Linux,受到Minix启发。0.01版本不实用,仅在FTP站点提供源代码。0.02版能运行bash和gcc。随后发布了0.03版和0.10版,最终达到0.95版。1994年正式发布了1.0版本,包含多处理器支持、虚拟内存和TCP/IP网络支持等新特性,标志着Linux成为成熟的操作系统并得到广泛应用。
背景 国外安全研究员champtar[1]在日常使用中发现Kubernetes tmpfs挂载存在逃逸现象,研究后发现runC存在条件竞争漏洞,可以导致挂载逃逸[2]。 关于条件竞争TOCTOU和一些linux文件基础知识可见这篇文章《初探文件路径条件竞争 - TOCTOU&CVE-2019-18276》[3]。 CVE-2021-30465在Redteam的研究者视角中比较鸡肋,因为需要K8S批量创建POD的权限。但在产品安全的视角恰恰相反,针对Caas(Container as a service)类
研究人员发现,去年发现的脏牛漏洞(CVE-2016–5195)尚未被完全修复。 脏牛漏洞由竞争条件引发——Linux内核内存子系统在处理COW时存在问题。这个漏洞由Phil Oester发现,它会导致攻击者在目标系统内提权。 Linux内核的内存子系统在处理写入时复制(copy-on-write, COW)时产生了竞争条件(race condition)。恶意用户可利用此漏洞,来获取高权限,对只读内存映射进行写访问。 竞争条件,指的是任务执行顺序异常,可导致应用崩溃,或令攻击者有机可乘,进一步执行其他代
大家好,又见面了,我是你们的朋友全栈君。 引子 在编译2.6内核的时候,你会在编译选项中看到[*] Enable futex support这一项,上网查,有的资料会告诉你”不选这个内核不一定能正确的运行使用glibc的程序”,那futex是什么?和glibc又有什么关系呢? 1. 什么是Futex Futex 是Fast Userspace muTexes的缩写,由Hubertus Franke, Matthew Kirkwood, Ingo Molnar and Rusty Russell共同设计完成。几位都是linux领域的专家,其中可能Ingo Molnar大家更熟悉一些,毕竟是O(1)调度器和CFS的实现者。 Futex按英文翻译过来就是快速用户空间互斥体。其设计思想其实 不难理解,在传统的Unix系统中,System V IPC(inter process communication),如 semaphores, msgqueues, sockets还有文件锁机制(flock())等进程间同步机制都是对一个内核对象操作来完成的,这个内核对象对要同步的进程都是可见的,其提供了共享 的状态信息和原子操作。当进程间要同步的时候必须要通过系统调用(如semop())在内核中完成。可是经研究发现,很多同步是无竞争的,即某个进程进入 互斥区,到再从某个互斥区出来这段时间,常常是没有进程也要进这个互斥区或者请求同一同步变量的。但是在这种情况下,这个进程也要陷入内核去看看有没有人 和它竞争,退出的时侯还要陷入内核去看看有没有进程等待在同一同步变量上。这些不必要的系统调用(或者说内核陷入)造成了大量的性能开销。为了解决这个问 题,Futex就应运而生,Futex是一种用户态和内核态混合的同步机制。首先,同步的进程间通过mmap共享一段内存,futex变量就位于这段共享 的内存中且操作是原子的,当进程尝试进入互斥区或者退出互斥区的时候,先去查看共享内存中的futex变量,如果没有竞争发生,则只修改futex,而不 用再执行系统调用了。当通过访问futex变量告诉进程有竞争发生,则还是得执行系统调用去完成相应的处理(wait 或者 wake up)。简单的说,futex就是通过在用户态的检查,(motivation)如果了解到没有竞争就不用陷入内核了,大大提高了low-contention时候的效率。 Linux从2.5.7开始支持Futex。 2. Futex系统调用 Futex是一种用户态和内核态混合机制,所以需要两个部分合作完成,linux上提供了sys_futex系统调用,对进程竞争情况下的同步处理提供支持。 其原型和系统调用号为 #include <linux/futex.h> #include <sys/time.h> int futex (int *uaddr, int op, int val, const struct timespec *timeout,int *uaddr2, int val3); #define __NR_futex 240 虽然参数有点长,其实常用的就是前面三个,后面的timeout大家都能理解,其他的也常被ignore。 uaddr就是用户态下共享内存的地址,里面存放的是一个对齐的整型计数器。 op存放着操作类型。定义的有5中,这里我简单的介绍一下两种,剩下的感兴趣的自己去man futex FUTEX_WAIT: 原子性的检查uaddr中计数器的值是否为val,如果是则让进程休眠,直到FUTEX_WAKE或者超时(time-out)。也就是把进程挂到uaddr相对应的等待队列上去。 FUTEX_WAKE: 最多唤醒val个等待在uaddr上进程。 可见FUTEX_WAIT和FUTEX_WAKE只是用来挂起或者唤醒进程,当然这部分工作也只能在内核态下完成。有些人尝试着直接使用futex系统调 用来实现进程同步,并寄希望获得futex的性能优势,这是有问题的。应该区分futex同步机制和futex系统调用。futex同步机制还包括用户态 下的操作,我们将在下节提到。 3. Futex同步机制 所有的futex同步操作都应该从用户空间开始,首先创建一个futex同步变量,也就是位于共享内存的一个整型计数器。 当 进程尝试持有锁或者要进入互斥区的时候,对futex执行”down”操作,即原子性的给futex同步变量减1。如果同步变量变为0,则没有竞争发生, 进程照常执行。如果同步变量是个负数,则意味着有竞争发生,需要调用futex系统调用的futex_wait操作休眠当前进程。 当进程释放锁或 者要离开互斥区的时候,对futex进行”up”操作,
本文探讨了Linux运维工程师必须掌握的关键技能,以满足不断增长的技术需求。涵盖了操作系统管理、网络配置、安全性、脚本编程等方面的技能要求,旨在为Linux运维工程师提供指导,并帮助他们在竞争激烈的IT行业中脱颖而出。
进程优先级是操作系统中的一个重要概念,它直接影响着进程的调度顺序和执行权。了解进程优先级对于理解和优化系统的性能至关重要。那么话不多说,开启我们今天的话题!
线程同步可以说在日常开发中是用的很多, 但对于其内部如何实现的,一般人可能知道的并不多。 本篇文章将从如何实现简单的锁开始,介绍linux中的锁实现futex的优点及原理,最后分析java中同步机制如wait/notify, synchronized, ReentrantLock。
近日,Linux git中发布一个commit补丁,该补丁对应的漏洞是一个本地提权漏洞CVE-2019-8912,漏洞影响范围较广。根据git中的commit信息可知,该漏洞出现在内核’crypto/af_alg.c’中的af_alg_release函数中,可以通过sockfs_setattr函数触发,漏洞类型是use after free,可以导致本地代码执行进行权限提升。
又一个古老的Linux内核漏洞被曝光!这次的漏洞可以追溯到2009年,影响的linux发行版包括Red Hat、Debian、Fedora、OpenSUSE和Ubuntu。 这个Linux漏洞编号为CVE-2017-2636,根据CVSS v3标准漏洞评分为7.8分。漏洞在Linux内核已经存在7年了,它能够让本地无权限的用户获取root权限,或者发动DoS让系统崩溃。 Positive Technologies的研究员Alexander Popov发现了存在于N_HLDC linux内核驱动的竞争条件
Redis 首席执行官嘲笑该分支,称其为云提供商为避免支付许可费而采取的卑鄙策略。
由于思科现在在多个市场都存在竞争关系,因此筛选出思科的竞争对手绝非易事。在这种情况下,我们试图选择那些成立时间较长,或者开发了能够直接影响思科的关键技术的公司。思科目前正在大力推进软件和安全,这一举措也将迎来无数新的竞争对手。 📷 1 Arista 总部:Santa Clara,California 员工人数:850(2014) 与思科的竞争:多层网络交换机/软件定义网络/EOS路由和交换 自从2004年由Andy Bechtolsheim,David Cheriton和Ken
本专栏,用于记录我对Linux内核源码的学习,就像STL源码的那个专栏一样,我知道阅读源码对我的意义。 愿者上钩咯,共同进步。
2015年服务器操作系统收入排名 Garnter在2016年5月20日发布了服务器操作系统收入分析报告。里面包括Linux、UNIX和Windows三大类操作系统。 我们先来看一下按照OS提供商进行的排名。在所有操作系统提供商里,微软、IBM、红帽位列前三甲。 从销售收入看,微软第一的优势十分明显,而红帽和IBM的差距在迅速缩小; 从增长率看,微软增长缓慢,个位数增长;IBM两位数衰退;红帽实现两位数增长; 如果按照操作系统类型进行区分,前三甲排名分别是:Windows、Linux、IBM Syst
在销量连续6年下滑、市值蒸发近1/4之后,Red Hat成了IBM在云计算领域的“救命稻草”。近日,IBM宣布,将斥资334亿美元收购Linux软件制造商Red Hat。这是这家科技巨头有史以来最大的一次收购,欲通过收购全球最大的开源云平台,扩张云业务,从而改变现有的“游戏规则”。
引子 在编译2.6内核的时候,你会在编译选项中看到[*] Enable futex support这一项,上网查,有的资料会告诉你"不选这个内核不一定能正确的运行使用glibc的程序",那futex是什么?和glibc又有什么关系呢? 1. 什么是Futex Futex 是Fast Userspace muTexes的缩写,由Hubertus Franke, Matthew Kirkwood, Ingo Molnar and Rusty Russell共同设计完成。几位都是linux领域的专家,其中可能Ingo Molnar大家更熟悉一些,毕竟是O(1)调度器和CFS的实现者。 Futex按英文翻译过来就是快速用户空间互斥体。其设计思想其实 不难理解,在传统的Unix系统中,System V IPC(inter process communication),如 semaphores, msgqueues, sockets还有文件锁机制(flock())等进程间同步机制都是对一个内核对象操作来完成的,这个内核对象对要同步的进程都是可见的,其提供了共享 的状态信息和原子操作。当进程间要同步的时候必须要通过系统调用(如semop())在内核中完成。可是经研究发现,很多同步是无竞争的,即某个进程进入 互斥区,到再从某个互斥区出来这段时间,常常是没有进程也要进这个互斥区或者请求同一同步变量的。但是在这种情况下,这个进程也要陷入内核去看看有没有人 和它竞争,退出的时侯还要陷入内核去看看有没有进程等待在同一同步变量上。这些不必要的系统调用(或者说内核陷入)造成了大量的性能开销。为了解决这个问 题,Futex就应运而生,Futex是一种用户态和内核态混合的同步机制。首先,同步的进程间通过mmap共享一段内存,futex变量就位于这段共享 的内存中且操作是原子的,当进程尝试进入互斥区或者退出互斥区的时候,先去查看共享内存中的futex变量,如果没有竞争发生,则只修改futex,而不 用再执行系统调用了。当通过访问futex变量告诉进程有竞争发生,则还是得执行系统调用去完成相应的处理(wait 或者 wake up)。简单的说,futex就是通过在用户态的检查,(motivation)如果了解到没有竞争就不用陷入内核了,大大提高了low-contention时候的效率。 Linux从2.5.7开始支持Futex。 2. Futex系统调用 Futex是一种用户态和内核态混合机制,所以需要两个部分合作完成,linux上提供了sys_futex系统调用,对进程竞争情况下的同步处理提供支持。 其原型和系统调用号为 #include <linux/futex.h> #include <sys/time.h> int futex (int *uaddr, int op, int val, const struct timespec *timeout,int *uaddr2, int val3); #define __NR_futex 240 虽然参数有点长,其实常用的就是前面三个,后面的timeout大家都能理解,其他的也常被ignore。 uaddr就是用户态下共享内存的地址,里面存放的是一个对齐的整型计数器。 op存放着操作类型。定义的有5中,这里我简单的介绍一下两种,剩下的感兴趣的自己去man futex FUTEX_WAIT: 原子性的检查uaddr中计数器的值是否为val,如果是则让进程休眠,直到FUTEX_WAKE或者超时(time-out)。也就是把进程挂到uaddr相对应的等待队列上去。 FUTEX_WAKE: 最多唤醒val个等待在uaddr上进程。 可见FUTEX_WAIT和FUTEX_WAKE只是用来挂起或者唤醒进程,当然这部分工作也只能在内核态下完成。有些人尝试着直接使用futex系统调 用来实现进程同步,并寄希望获得futex的性能优势,这是有问题的。应该区分futex同步机制和futex系统调用。futex同步机制还包括用户态 下的操作,我们将在下节提到。 3. Futex同步机制 所有的futex同步操作都应该从用户空间开始,首先创建一个futex同步变量,也就是位于共享内存的一个整型计数器。 当 进程尝试持有锁或者要进入互斥区的时候,对futex执行"down"操作,即原子性的给futex同步变量减1。如果同步变量变为0,则没有竞争发生, 进程照常执行。如果同步变量是个负数,则意味着有竞争发生,需要调用futex系统调用的futex_wait操作休眠当前进程。 当进程释放锁或 者要离开互斥区的时候,对futex进行"up"操作,即原子性的给futex同步变量加1。如果同步变量由0变成1,则没有竞争发生,进程照常执
Linux服务器是构建现代互联网基础设施的关键组成部分。它们提供了稳健的性能、高度的可定制性和卓越的安全性,为网站托管、应用程序部署和数据存储等任务提供了理想的平台。本文将深入探讨Linux服务器的重要性、基本操作、安全性和性能优化,以帮助您更好地管理和利用这一关键资源。
这个名叫Dirty COW,也就是脏牛的漏洞,存在Linux内核中已经有长达9年的时间,也就说2007年发布的Linux内核版本中就已经存在此漏洞。Linux kernel团队已经对此进行了修复。据说Linus本人也参与了修复。:P 00x1 漏洞编号: CVE-2016-5195 00x2 漏洞危害: 低权限用户利用该漏洞可以在众多Linux系统上实现本地提权 00x3影响范围: Linux kernel >=2.6.22(2007年发行,到今年10月18日才修复) 00x4
上周,研究人员Phil Oester发现 “脏牛”漏洞,影响范围甚广,波及到2007年发布的Linux内核,一时间名声大噪。 脏牛漏洞,编号为CVE-2016-5195,是Linux内核运行时出现的竞争条件,允许攻击者实现本地提权。简而言之,攻击者利用脏牛可获得Linux设备的root权限。(详情请参考此前漏洞盒子发布的漏洞预警) 影响所有Android版本 脏牛刚被发现时,我们不清楚基于Linux内核的Android操作系统是否也受到了影响。发现脏牛的Phil Oester并没有检测Android系统上有
技术领域的小伙伴们近期有传闻说google有可能回归,作为Linux运维工程师的小编,更是充满了期待。面对google回归之说,突如其来的是某度李总的豪言,“有信心再赢一次”;瞬间承包了百万IT从业人员的笑点。
openSUSE Leap 和 openSUSE Tumbleweed 是 openSUSE 项目的两个主要发行版。它们的主要区别在于发布模式、更新速度和稳定性。以下是它们之间的一些区别:
1024是程序员的狂欢节。基于二进制的原理,程序员通常会把1024当做一个整数而不是1000。程序员这个行业处理“bit”,当然这个行业“苦逼”,这也让我轻松地记住了一个单词——bitter。bitter的意思就是“苦的”,bit后面加er后缀,是人,这里只是会意记单词。
linux下的 pthread 是一个整形,而 id 是一个自定义类型, get_id 即打印线程id
脏牛(Dirty COW,编号:CVE-2016-5195)是2016年10月18日被曝出的存在于Linux内核中的一款0day漏洞。因为此漏洞是在Linux内核的内存子系统在处理写时拷贝(Copy-on-Write)时发生的,而又给Linux内核的使用带来烦恼,所以将其命名为“Dirty COW”。
"鹅厂网事"由深圳市腾讯计算机系统有限公司技术工程事业群网络平台部运营,我们希望与业界各位志同道合的伙伴交流切磋最新的网络、服务器行业动态信息,同时分享腾讯在网络与服务器领域,规划、运营、研发、服务等层面的实战干货,期待与您的共同成长。 大家好, 今天下午很高兴能够站在这里与大家分享ODL。坦率的讲今天如此多的与会者让我印象很深刻,这不光是因为大家的积极参与,更重要的是这反映了我们社区是如此的多元化,才能让不同背景的人聚到一起,促成这次峰会的成功举办。 在我开始我的演讲之前,我想首先感谢本次峰会的赞助商
Red Hat成立于1993年,是开源系统Linux的最大分销商,也是将开源软件商业化的先驱之一。
网络犯罪分子正在利用一个在2018年12月被发现和已修补的ThinkPHP漏洞传播Yowai(Mirai变种)和Hakai(Gafgyt变种)两种僵尸网络病毒。
Linux培训已经成为入门Linux的一个重要途径,它的优势在于学习知识的系统性、快速性和实用性。Linux培训毕业的学员大多数拥有较强的实战动手能力,能够较快上手,更符合企业需求。
Linux,一般指GNU/Linux(单独的Linux内核并不可直接使用,一般搭配GNU套件,故得此称呼),是一种免费使用和自由传播的类UNIX操作系统,其内核由林纳斯·本纳第克特·托瓦兹(Linus Benedict Torvalds)于1991年10月5日首次发布,它主要受到Minix和Unix思想的启发,是一个基于POSIX的多用户、多任务、支持多线程和多CPU的操作系统。它支持32位和64位硬件,能运行主要的Unix工具软件、应用程序和网络协议。 Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。Linux有上百种不同的发行版,如基于社区开发的debian、archlinux,和基于商业开发的Red Hat Enterprise Linux、SUSE、Oracle Linux等。
Linux是一种自由和开放源代码的类UNIX操作系统,该操作系统的内核由林纳斯托瓦兹在1991年首次发布,之后,在加上用户空间的应用程序之后,就成为了Linux操作系统。严格来讲,Linux只是操作系统内核本身,但通常采用“Linux内核”来表达该意思。而Linux则常用来指基于Linux内核的完整操作系统,它包括GUI组件和许多其他实用工具。
作者 | 丁广辉 责编 | 张红月 出品 | CSDN(ID:CSDNnews) 都说同行是冤家,无论是哪个行业内都存在竞争关系,手机行业,汽车行业,甚至是浏览器行业都无可避免。其中 Chrome 和 Firefox 这两家浏览器激烈竞争多年,虽然都想压倒对方,但始终是保持平稳,各有胜负。Linux桌面作为浏览器行业的一个重要市场,也就成为了这两家浏览器的战场之一。在 2021 年末到 2022 年初,Chrome 97 和 Firefox 95 相继发布,而外国科技媒体 Phoronix 也在
在 Linux 系统中,文件锁定是一种对文件进行保护的方法,可以防止多个进程同时访问同一个文件,从而导致数据损坏或者冲突。文件锁定命令是一组用于在 Linux 系统中实现文件锁定操作的命令,它们可以用于对文件进行加锁或解锁,控制文件的访问权限,保证系统的稳定性和安全性。在本文中,我们将详细介绍 Linux 中的文件锁定命令,包括锁定的类型、命令的使用方法、常见问题及解决方法等内容。
workerman使用pcntl_fork()来实现master/worker的多进程模型,每个worker进程通过使用stream_socket_server()函数来创建socket,由于fork创建的worker进程具备亲缘关系,所以不同的worker进程可以对相同的端口监听;不同worker进程监听相同的socket,在该socket存在事件时,所有监听该socket的worker进程会被唤醒,所有worker进程对socket资源进行抢占式处理,但最终只有一个worker进程可以对socket进行accept;在这个过程中就存在n-1个worker进程是无效调度的,仅仅只是被唤起了然后抢占失败并再次入眠。
近年来,Linux 系统的 init 进程经历了两次重大的演进,传统的 sysvinit 已经逐渐淡出历史舞台,新的 UpStart 和 systemd 各有特点,越来越多的 Linux 发行版采纳了 systemd。本文简要介绍了这三种 init 系统的使用和原理,每个 Linux 系统管理员和系统软件开发者都应该了解它们,以便更好地管理系统和开发应用。 浅析 Linux 初始化 init 系统,第 1 部分: sysvinit 浅析 Linux 初始化 init 系统,第 2 部分: UpStart 浅
当编程语言的战场硝烟弥漫,C#以其卓越的性能和广泛的应用范围,成为了开发者心中的全能王。今天,就让我们一起揭开C#的神秘面纱,探索它如何在众多编程语言中脱颖而出,成为开发者的不二选择。
学习Linux系统编程,你可能要问Linux从哪里来?它是怎么发展的?在这里简要介绍Linux的发展史。要说 Linux,还得从UNIX说起。
作者 | 龙蜥社区 审校 | 凌敏 操作系统是计算机的灵魂所在,更是现代社会数字经济转型的关键。随着国内科技力量的壮大,当出现如 CentOS 停服等机遇时,会进一步助推国内操作系统发展。如今国内开源操作系统遍地开花,我们到底有没有角力国际舞台的实力呢?在 2022 开放原子全球开源峰会上,多位专家共同参与讨论了“中国操作系统到底有没有角力世界舞台的实力”这一话题,本文为圆桌对话内容实录。 王兴宇(主持人):Linux 中国开源社区创始人 杨勇:龙蜥社区技术委员会主席、阿里云操作系统技术总监
Oracle 18c 已至,目前已经可以从Oracle Edelivery 网站下载。 该网站的网址是:https://edelivery.oracle.com 。 搜索 Oracle Databas
在多年前,linux还没有支持对称多处理器SMP的时候,避免并发数据访问相对简单。
很久没有写技术文章了,做码农难,做养娃的码农更难,趁着娃看动画片的机会,受着王菲童鞋《我和我的祖国》歌唱精神的鼓舞,我要来说几句。
虚拟化技术已经发展了很久,经过了很多次的迭代,虚拟化技术可以将单个物理服务器分解为多个较小的虚拟专用服务器(VPS)。
微软公司的操作系统版本的在早期更迭非常迅速,从最早的Dos系统到现在win10也折射出科技发展的历程,虽然大家对于微软的垄断不以为然,但是在桌面系统微软还是绝对意义上的霸主,虽然现在linux系统在设备数量上已经超过windows系统但主要分布在移动终端或者服务器端,对于桌面版影响极其微小,而且linux桌面系统使用人员主要还是技术相关人员,相当于在未来很长时间内微软还会继续统治桌面版的操作系统。
Linux是自由软件和开放源代码软件发展中最著名的例子。只要遵循GNU通用公共许可证,任何个人和机构都可以自由地使用Linux的所有底层源代码,也可以自由地修改和再发布。随着Linux操作系统飞速发展,各种集成在Linux上的开源软件和实用工具也得到了应用和普及,因此,Linux也成为了开源软件的代名词
首先是 Terraform,现在又是 Vault:HashiCorp 留下的更多开源代码正在找到潜在竞争对手的新归宿。这一次,IBM 正在探寻这些战利品。
首先,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周期左右一个包。
"鹅厂网事"由深圳市腾讯计算机系统有限公司技术工程事业群网络平台部运营,我们希望与业界各位志同道合的伙伴交流切磋最新的网络、服务器行业动态信息,同时分享腾讯在网络与服务器领域,规划、运营、研发、服务等层面的实战干货,期待与您的共同成长。 大家好,我是Jim Zemlin,Linux基金会执行董事。大部分人都听说过Linux基金会,更多的人使用过Linux。 今天,我所演讲的内容是从Linux基金会的角度来看,2016年将是网络开源项目起飞的一年。 开源软件的开发方式已经发生了根本性的转变。开源软件已经是
领取专属 10元无门槛券
手把手带您无忧上云