存档

‘多核优化’ 分类的存档

VPP安装

2016年11月19日 没有评论 7,970 次浏览

Cisco VPP,全称Vector Packet Processing,是Cisco... [阅读更多]

Linux上应用程序进行系统调用陷入内核后执行的cpu会发生变化吗?

2016年10月29日 没有评论 3,821 次浏览

题目没有把问题完全描述清楚,举个栗子:假设在一个多核机器上(当然是Linux操作系统),有进程A当前运行于CPU 0上,当它进行系统调用陷入内核后,执行对应内核代码的也是CPU... [阅读更多]

Kernel 3.12里对引用计数器的优化

2013年10月19日 没有评论 3,788 次浏览

Linux Kernel... [阅读更多]

*nux平台上的C10M问题

2013年7月7日 没有评论 5,243 次浏览

对于做大量并发服务器端(比如Web服务器Nginx、Apache等)开发的童鞋,肯定知道有一个名为C10K的问题。当然,这是一个比较古老的问题了,从03年(非准确值)提及到现在已经有10余年之久。而随着整个网络相关技术的高速发展,包括CPU、网卡、操作系统等,人们对业务需求所追求的并发连接性能也从10K提升到10M级别,即所谓的C10M问题。这个问题的初次提及到现在应该还没多久,大概也就是2013年上半年的事情,本文就来具体看看其相关内容。 相比以前,现在的硬件很便宜,1200美元可以买一台8核CPU、64GB和带有固态硬盘以及10G万兆网卡的通用电脑。这种通用电脑的性能很高,足够充当各种网络服务设备,因此很多看似贴有服务器专用标签的网络设备,揭开标签纸之后,就是一台普普通通的个人通用电脑。 硬件不是10M问题的性能瓶颈所在处,真正的问题出在软件上,尤其是*nux操作系统。这里有几点: 首先,最初的设计是让Unix成为一个电话网络的控制系统,而不是成为一个服务器操作系统。对于控制系统而言,针对的主要目标是用户和任务,而并没有针对作为协助功能的数据处理做特别设计,也就是既没有所谓的快速路径、慢速路径,也没有各种数据服务处理的优先级差别。 其次,传统的CPU,因为只有一个核,操作系统代码以多线程或多任务的形式来提升整体性能。而现在,4核、8核、32核、64核和100核,都已经是真实存在的CPU芯片,如何提高多核的性能可扩展性,是一个必须面对的问题。比如让同一任务分割在多个核心上执行,以避免CPU的空闲浪费,当然,这里面要解决的技术点有任务分割、任务同步和异步等。 再次,核心缓存大小与内存速度是一个关键问题。现在,内存已经变得非常的便宜,随便一台普通的笔记本电脑,内存至少也就是4G以上,高端服务器的内存上24G那是相当的平常。但是,内存的访问速度仍然很慢,CPU访问一次内存需要约60~100纳秒,相比很久以前的内存访问速度,这基本没有增长多少。对于在一个带有1GHZ主频CPU的电脑硬件里,如果要实现10M性能,那么平均每一个包只有100纳秒,如果存在两次CPU访问内存,那么10M性能就达不到了。核心缓存,也就是CPU... [阅读更多]

cmpxchgl

2012年11月17日 1 条评论 5,577 次浏览

白天在公司看DPDK的代码,一个使用cmpxchgl指令实现的支持多生产者-多消费者的内存池,挺有意思的,里面有一处关键代码为rte_atomic32_cmp_set()(好像是这个名字?),其实现在Nginx代码内也有,现在家里电脑上没有DPDK的代码,所以就直接来看看Nginx内的具体实现: static... [阅读更多]

read/write数据读写传输方式

2012年8月9日 1 条评论 2,678 次浏览

利用系统调用函数read()/write()是我们平常用得最多的一种数据读写方式,大多数情况下我们并没有考虑这种数据读写方式的执行效率,因为在很多并不以数据频繁读写为性能瓶颈的应用程序中函数read()/write()消耗的执行时间可以忽略,但是它们内在具体实现和执行效率到底如何呢?下面我们就来进行详细的分析。 函数read()/write()定义在头文件unistd.h内,原型如下: #include... [阅读更多]

Linux 2.6.36正式加入的RPS RFS特性介绍

2012年5月9日 1 条评论 4,636 次浏览

之前写在CU的博客上的文章,今天又看了看,转过来。 Linux 2.6.35于2010年8月1号发布,新增特性比较多,而其中最引我注意的为第一点:Transparent spreading of incoming network traffic load across... [阅读更多]

oProfile的安装与使用

2012年3月26日 6 条评论 9,455 次浏览

0.引言 基于DPDK的发包工具的性能今天已经达到双向1900Wpps了,比昨天又高了200Wpps,正是得益于oProfile检测与调优的结果,而且今天还只是很简单的用了一下(类似于下面的示例),跟踪出对几个结构体字段的访问比较缓慢,于是对结构体字段进行了仔细的顺序调整与Cache对齐(之前急于功能实现,没顾及这些字段的排布),结果性能马上飙升了200Wpps,开心死我了。后天(明天外出办理其它事情)到公司再利用oProfile细细跟踪一下,特别是cache命中、... [阅读更多]

cpu affinity

2012年3月11日 3 条评论 6,025 次浏览

cpu affinity,即cpu亲和性,简单点说就是让某一段代码/数据尽量在同一个或几个cpu核心上长时间运行/计算的机制。为什么需要这样的机制?之前说过,最直观的好处就是能够大大提高cpu... [阅读更多]