性能分析基础知识(1):CPU

2019-07-19 09:29发布

"\u003Cdiv\u003E\u003Cblockquote\u003E\u003Cp\u003E小编从事分布式文件系统相关的工作。经常需要进行性能测试。性能测试并不是简单的执行几个脚本,还需要掌握一些基础知识,否则,可能导致最终得出的测试结果毫无及价值。\u003C\u002Fp\u003E\u003C\u002Fblockquote\u003E\u003Cdiv class=\"pgc-img\"\u003E\u003Cimg src=\"http:\u002F\u002Fp1.pstatp.com\u002Flarge\u002Fpgc-image\u002F7d3fc304f7854523a9ed1ba260aa9dd2\" img_width=\"656\" img_height=\"621\" alt=\"性能分析基础知识(1):CPU\" inline=\"0\"\u003E\u003Cp class=\"pgc-img-caption\"\u003E\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cp\u003E小编将从如上6个方面来介绍文件系统测试过程中涉及到的基础知识。知识点包括并不限于上图。本文先介绍CPU相关的知识。\u003C\u002Fp\u003E\u003Ch1\u003E\u003Cstrong\u003ECPU架构介绍\u003C\u002Fstrong\u003E\u003C\u002Fh1\u003E\u003Cp\u003E\u003Cstrong\u003E多CPU\u003C\u002Fstrong\u003E\u003C\u002Fp\u003E\u003Cp\u003E多个物理CPU,CPU通过总线进行通信,效率比较低,如下:\u003C\u002Fp\u003E\u003Cdiv class=\"pgc-img\"\u003E\u003Cimg src=\"http:\u002F\u002Fp1.pstatp.com\u002Flarge\u002Fpgc-image\u002F06deff5db72c4600bd89219931c723fc\" img_width=\"418\" img_height=\"345\" alt=\"性能分析基础知识(1):CPU\" inline=\"0\"\u003E\u003Cp class=\"pgc-img-caption\"\u003E多个物理CPU\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cp\u003E\u003Cstrong\u003E多核\u003C\u002Fstrong\u003E\u003C\u002Fp\u003E\u003Cp\u003E多核CPU,不同的核通过L2 cache进行通信,存储和外设通过总线与CPU通信,如下:\u003C\u002Fp\u003E\u003Cdiv class=\"pgc-img\"\u003E\u003Cimg src=\"http:\u002F\u002Fp3.pstatp.com\u002Flarge\u002Fpgc-image\u002F0466f82f77db45d9b4d535cc440cf20d\" img_width=\"316\" img_height=\"315\" alt=\"性能分析基础知识(1):CPU\" inline=\"0\"\u003E\u003Cp class=\"pgc-img-caption\"\u003E多核CPU\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cp class=\"ql-align-center\"\u003E\u003Cstrong\u003E多核超线程\u003C\u002Fstrong\u003E\u003C\u002Fp\u003E\u003Cp\u003E每个CPU拥有多个核,每个核资源使用不会冲突,各个核有独立的L1 Cache,共享L2 Cache,加速核与核之间的访问,Cache、存储器、外设通过CPU内部总线进行。如下:(最新的CPU已经是三级缓存的架构,下文中会提及)\u003C\u002Fp\u003E\u003Cp class=\"ql-align-center\"\u003E\u003Cbr\u003E\u003C\u002Fp\u003E\u003Cdiv class=\"pgc-img\"\u003E\u003Cimg src=\"http:\u002F\u002Fp1.pstatp.com\u002Flarge\u002Fpgc-image\u002Fc06604ccc18747e5a7f7ea5e56af0b17\" img_width=\"558\" img_height=\"383\" alt=\"性能分析基础知识(1):CPU\" inline=\"0\"\u003E\u003Cp class=\"pgc-img-caption\"\u003E多核超线程CPU\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cp class=\"ql-align-center\"\u003E\u003Cstrong\u003ECPU信息的查看方法\u003C\u002Fstrong\u003E\u003C\u002Fp\u003E\u003Cp\u003E我们通常关心的是逻辑CPU数,使用top命令显示的cpu数就是逻辑cpu:\u003C\u002Fp\u003E\u003Cp\u003E逻辑CPU数 = 物理CPU个数 * 每颗物理CPU的核数 * 超线程数\u003C\u002Fp\u003E\u003Cpre\u003E 1查看CPU信息(型号)\u003Cbr\u003E 2[root@AAA ~]# cat \u002Fproc\u002Fcpuinfo | grep name | cut -f2 -d: | uniq -c\u003Cbr\u003E 3 Intel(R) Xeon(R) CPU E5-2630 0 @ 2.30GHz\u003Cbr\u003E 4\u003Cbr\u003E 5# 查看物理CPU个数\u003Cbr\u003E 6[root@AAA ~]# cat \u002Fproc\u002Fcpuinfo| grep \"physical id\"| sort| uniq| wc -l\u003Cbr\u003E 7\u003Cbr\u003E 8# 查看每个物理CPU中core的个数(即核数)\u003Cbr\u003E 9[root@AAA ~]# cat \u002Fproc\u002Fcpuinfo| grep \"cpu cores\"| uniq\u003Cbr\u003E10cpu cores : 6\u003Cbr\u003E11\u003Cbr\u003E12# 查看逻辑CPU的个数\u003Cbr\u003E13[root@AAA ~]# cat \u002Fproc\u002Fcpuinfo| grep \"processor\"| wc -l\u003Cbr\u003E1424\u003Cbr\u003E\u003C\u002Fpre\u003E\u003Cp class=\"ql-align-justify\"\u003E从上面的结果可以看出,小编的服务器有2个物理cpu,每个cpu有6核,每核有2个超线程,因此有24个逻辑cpu。\u003C\u002Fp\u003E\u003Ch1\u003E\u003Cstrong\u003ECPU高速缓存\u003C\u002Fstrong\u003E\u003C\u002Fh1\u003E\u003Cp\u003E目前的CPU有三级高速缓存,如下:\u003C\u002Fp\u003E\u003Cdiv class=\"pgc-img\"\u003E\u003Cimg src=\"http:\u002F\u002Fp3.pstatp.com\u002Flarge\u002Fpgc-image\u002F5f500d41015b4efe8c4b3879ab43f768\" img_width=\"480\" img_height=\"250\" alt=\"性能分析基础知识(1):CPU\" inline=\"0\"\u003E\u003Cp class=\"pgc-img-caption\"\u003E\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cp\u003ECPU高速缓存的作用:\u003C\u002Fp\u003E\u003Cul\u003E\u003Cli class=\"ql-align-justify\"\u003E更高的缓存命中率\u003C\u002Fli\u003E\u003Cli class=\"ql-align-justify\"\u003E减少BUS通信\u003C\u002Fli\u003E\u003Cli class=\"ql-align-justify\"\u003E不存在Memory的竞争,每个核拥有更大的缓存带宽\u003C\u002Fli\u003E\u003Cli class=\"ql-align-justify\"\u003E更低的数据延迟\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Ch1\u003E\u003Cstrong\u003E智能内存访问\u003C\u002Fstrong\u003E\u003C\u002Fh1\u003E\u003Cp\u003E\u003Cstrong\u003E内存消歧\u003C\u002Fstrong\u003E\u003C\u002Fp\u003E\u003Cp\u003E加载数据和存储数据解耦,分析内存读取顺序,智能预测和装载下一条指令所需要的数据,减少内存读取的延迟\u003C\u002Fp\u003E\u003Cdiv class=\"pgc-img\"\u003E\u003Cimg src=\"http:\u002F\u002Fp1.pstatp.com\u002Flarge\u002Fpgc-image\u002Fee550fae66a348f6b100f2665e198e90\" img_width=\"711\" img_height=\"456\" alt=\"性能分析基础知识(1):CPU\" inline=\"0\"\u003E\u003Cp class=\"pgc-img-caption\"\u003E\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cp\u003E如上图,指令自下而上执行,其中Load4指令需要读取磁盘,左侧没有内存消歧,指令按顺序执行,当执行到Load4时,需要等待加载数据。右侧经过内存消歧,提前加载Load4需要的数据,加载数据过程中执行其他指令,减少了内存读取的延迟。Store1和Load2之间读写同一块内存,需要保证先后顺序,因此并未将Load2的数据加载提前进行。\u003C\u002Fp\u003E\u003Cp\u003E\u003Cstrong\u003E内存预取\u003C\u002Fstrong\u003E\u003C\u002Fp\u003E\u003Cp\u003E预取器负责“预取”内存内容,并将其放入高速缓存中\u003C\u002Fp\u003E\u003Cp\u003E增加高速缓存的装载量,从高速缓存而非内存读取数据将缩短内存延迟并提高性能\u003C\u002Fp\u003E\u003Cdiv class=\"pgc-img\"\u003E\u003Cimg src=\"http:\u002F\u002Fp1.pstatp.com\u002Flarge\u002Fpgc-image\u002Fb642e421956d4580801ccd22bfe74620\" img_width=\"703\" img_height=\"463\" alt=\"性能分析基础知识(1):CPU\" inline=\"0\"\u003E\u003Cp class=\"pgc-img-caption\"\u003E\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cp\u003E每两个核心有8个预取器,其中每个核心有2个数据预取器和1个指令预取器,L2高速缓存配置2个预取器\u003C\u002Fp\u003E\u003Ch1\u003E\u003Cstrong\u003ECPU的工艺演进\u003C\u002Fstrong\u003E\u003C\u002Fh1\u003E\u003Cdiv class=\"pgc-img\"\u003E\u003Cimg src=\"http:\u002F\u002Fp1.pstatp.com\u002Flarge\u002Fpgc-image\u002F7e9a0e6ef5544c2493bb99cd062a6e44\" img_width=\"738\" img_height=\"374\" alt=\"性能分析基础知识(1):CPU\" inline=\"0\"\u003E\u003Cp class=\"pgc-img-caption\"\u003E\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cp class=\"ql-align-center\"\u003ECPU的代号、工艺及年代\u003C\u002Fp\u003E\u003Cp\u003E对于CPU的主频、高速缓存大小,不同型号的芯片之间各不相同,在此不再赘述。\u003C\u002Fp\u003E\u003Ch1\u003E\u003Cstrong\u003ECPU性能影响分析\u003C\u002Fstrong\u003E\u003C\u002Fh1\u003E\u003Cdiv class=\"pgc-img\"\u003E\u003Cimg src=\"http:\u002F\u002Fp1.pstatp.com\u002Flarge\u002Fpgc-image\u002F4e99be8f516644f381d70d9c09af0f8f\" img_width=\"603\" img_height=\"301\" alt=\"性能分析基础知识(1):CPU\" inline=\"0\"\u003E\u003Cp class=\"pgc-img-caption\"\u003E\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cp class=\"ql-align-center\"\u003ECPU性能主次排序\u003C\u002Fp\u003E\u003Ch1\u003E\u003Cstrong\u003E总结\u003C\u002Fstrong\u003E\u003C\u002Fh1\u003E\u003Cp\u003E以上知识,除了辅助我们对服务器选型外,还提醒我们,在并发要求高的情况下,后台开发绑定CPU时应注意以下三点:\u003C\u002Fp\u003E\u003Cul\u003E\u003Cli class=\"ql-align-justify\"\u003ECPU密集型线程不要绑定在处于同一个核的两个超线程上\u003C\u002Fli\u003E\u003Cli class=\"ql-align-justify\"\u003E同一组线程尽量绑定到同一个物理CPU\u003C\u002Fli\u003E\u003Cli class=\"ql-align-justify\"\u003E根据线程占用CPU分配逻辑CPU,尽量保证均衡并发使用所有逻辑CPU\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cp\u003E欢迎关注我们的\u003Cstrong\u003E同名微信公众号“麻辣软硬件”\u003C\u002Fstrong\u003E,与我们一起交流技术话题!\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E"
文章来源: https://www.toutiao.com/group/6704114568370586125/