zoukankan      html  css  js  c++  java
  • 性能案例分析 | CPU基础知识

    文章转自微信公众号“麻辣软硬件”https://www.toutiao.com/i6704114568370586125/

    小编从事分布式文件系统相关的工作。经常需要进行性能测试。性能测试并不是简单的执行几个脚本,还需要掌握一些基础知识,否则,可能导致最终得出的测试结果毫无及价值。

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

    小编将从如上6个方面来介绍文件系统测试过程中涉及到的基础知识。知识点包括并不限于上图。本文先介绍CPU相关的知识。

    CPU架构介绍

    多CPU

    多个物理CPU,CPU通过总线进行通信,效率比较低,如下:

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

    多个物理CPU

    多核

    多核CPU,不同的核通过L2 cache进行通信,存储和外设通过总线与CPU通信,如下:

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

    多核CPU

    多核超线程

    每个CPU拥有多个核,每个核资源使用不会冲突,各个核有独立的L1 Cache,共享L2 Cache,加速核与核之间的访问,Cache、存储器、外设通过CPU内部总线进行。如下:(最新的CPU已经是三级缓存的架构,下文中会提及)


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

    多核超线程CPU

    CPU信息的查看方法

    我们通常关心的是逻辑CPU数,使用top命令显示的cpu数就是逻辑cpu:

    逻辑CPU数 = 物理CPU个数 * 每颗物理CPU的核数 * 超线程数

     1查看CPU信息(型号)
    2[root@AAA ~]# cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c
    3 Intel(R) Xeon(R) CPU E5-2630 0 @ 2.30GHz
    4
    5# 查看物理CPU个数
    6[root@AAA ~]# cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l
    7
    8# 查看每个物理CPU中core的个数(即核数)
    9[root@AAA ~]# cat /proc/cpuinfo| grep "cpu cores"| uniq
    10cpu cores : 6
    11
    12# 查看逻辑CPU的个数
    13[root@AAA ~]# cat /proc/cpuinfo| grep "processor"| wc -l
    1424

    从上面的结果可以看出,小编的服务器有2个物理cpu,每个cpu有6核,每核有2个超线程,因此有24个逻辑cpu。

    CPU高速缓存

    目前的CPU有三级高速缓存,如下:

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

    CPU高速缓存的作用:

    • 更高的缓存命中率
    • 减少BUS通信
    • 不存在Memory的竞争,每个核拥有更大的缓存带宽
    • 更低的数据延迟

    智能内存访问

    内存消歧

    加载数据和存储数据解耦,分析内存读取顺序,智能预测和装载下一条指令所需要的数据,减少内存读取的延迟

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

    如上图,指令自下而上执行,其中Load4指令需要读取磁盘,左侧没有内存消歧,指令按顺序执行,当执行到Load4时,需要等待加载数据。右侧经过内存消歧,提前加载Load4需要的数据,加载数据过程中执行其他指令,减少了内存读取的延迟。Store1和Load2之间读写同一块内存,需要保证先后顺序,因此并未将Load2的数据加载提前进行。

    内存预取

    预取器负责“预取”内存内容,并将其放入高速缓存中

    增加高速缓存的装载量,从高速缓存而非内存读取数据将缩短内存延迟并提高性能

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

    每两个核心有8个预取器,其中每个核心有2个数据预取器和1个指令预取器,L2高速缓存配置2个预取器

    CPU的工艺演进

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

    CPU的代号、工艺及年代

    对于CPU的主频、高速缓存大小,不同型号的芯片之间各不相同,在此不再赘述。

    CPU性能影响分析

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

    CPU性能主次排序

    总结

    以上知识,除了辅助我们对服务器选型外,还提醒我们,在并发要求高的情况下,后台开发绑定CPU时应注意以下三点:

    • CPU密集型线程不要绑定在处于同一个核的两个超线程上
    • 同一组线程尽量绑定到同一个物理CPU
    • 根据线程占用CPU分配逻辑CPU,尽量保证均衡并发使用所有逻辑CPU

    欢迎关注我们的同名微信公众号“麻辣软硬件”,与我们一起交流技术话题!

  • 相关阅读:
    python学习===从一个数中分解出每个数字
    python学习===复制list
    Jmeter===测试案例参考
    Jmeter==HTTP信息头管理器的作用
    python实战===使用随机的163账号发送邮件
    python实战===实现读取txt每一行的操作,账号密码
    python实战===生成随机数
    python实战===输入密码以******的形式在cmd中展示
    python实战===使用smtp发送邮件的源代码,解决554错误码的问题,更新版!
    python实战===使用smtp发送邮件的源代码,解决554错误码的问题
  • 原文地址:https://www.cnblogs.com/wyf0518/p/12105866.html
Copyright © 2011-2022 走看看