曾几何时,一切都是那样简单。网卡很慢,仅有一个队列。当数据包到达时,网卡经过DMA复制数据包并发送中断,Linux内核收集这些数据包并完成中断处理。随着网卡越来越快,基于中断的模型可能会因海量传入数据包而引起 IRQ 风暴。这将消耗大部分 CPU 功率并冻结系统。
为认识决这个问题,NAPI(中断+轮询)被提议。当内核收到来自网卡的中断时,它起始查找设备并尽快收集队列中的数据包。NAPI 能够很好地与此刻平常的 1 Gbps 网卡协同运用。然则,针对10Gbps、20Gbps乃至40Gbps的网卡,NAPI可能还不足。倘若咱们仍然运用一个 CPU 和一个队列来接收数据包,这些卡将需要更快的 CPU。幸运的是,此刻多核 CPU 很流行,那样为何不并行处理数据包呢?
1、在优化性能的时候,首要要判断性能的瓶颈在以上的哪个地区。而后对症下药,根据下面的办法来优化
1、加强CPU性能的办法
并发。利用多线程、进程。老的线程库效率太低,需要升级用nptl 。进(线)程数不要大于cpu个数 小心用锁。改善架构,尽可能不消锁。
慎用字符串操作,例如sprintf,snprintf,由于%d %s等等都需要CPU资源去做词法分析,数量多的话,亦是不菲的开销,减少系统调用,例如time,重点消耗在用户态和内核态之间的切换。减少遍历操作。把握真实需要,简化实现方法优化架构,字符串协议解包很耗cpu,思虑单独一个线程,一个好的架构,服务器的CPU总消耗总是平均的分布在各个cpu上,CPU的消耗在70%上下
2、加强网络IO的办法:运用epoll代替select,运用非阻塞的模式来研发
3、加强磁盘IO的办法
Linux能够利用空闲内存作文件系统拜访的cache,因此呢系统内存越大存储系统的性能亦越好,利用次序写,减少寻道次数Cache策略,充分利用cpu和内存的资源来缓解磁盘读写压力
2、怎样来寻找系统的瓶颈呢?能够利用下面的工具:
1、top
能够查看系统中运行的进程的情况,CPU运用情况,系统负载,内存运用等。它是检测系统进程运行情况最方便的工具了,它默认表示部分活动的进程,并且根据进程运用CPU的多少排序。它能够表示所有CPU的运用情况,亦能够表示每一个进程都运行在那个CPU上面。
重点能够用top来看那些进程或那类进程占用CPU和内存资源最多,以此快速定位存在性能问题的进程,以及运行反常的进程
2、free
free命令表示系统内存的运用情况(理学内存和交换内存)经过这个命令咱们能够看到系统进程实质运用的物理内存,buffer和cache运用的理学内存
3、vmstat
vmstat是一个很全面的性能分析工具,能够观察到系统的进程状态、内存运用、虚拟内存运用、磁盘的IO、中断、上下问切换、CPU运用等。
4、Strace
能够用来查看一个进程在执行过程中的系统调用和所接收的信号。
5、tcpdump
linux下的抓包工具。能够把抓下来的信息重定向到文件里。而后在windows下用ethereal来分析。很强大
6、gprof
程序中每一个函数的CPU运用时间。每一个函数的调用次数。并供给简单调用关系图。
运用过程:用gcc或g++编译程序时,运用-pg参数→执行编译得到的运行程序,会产生一个gmon.out文件→使用gprof命令。查看结果信息。(gprof -b proc_name gmon.out | less)TG:li9047
|