美文网首页收藏
【计算机】主流的CPU架构

【计算机】主流的CPU架构

作者: Bogon | 来源:发表于2023-07-07 00:41 被阅读0次

    一个CPU处理器中一般有多个运行核心,我们把一个运行核心称为一个物理核,每个物理核都可以运行应用程序。
    每个物理核都拥有私有的一级缓存(Level 1 cache,简称L1 cache),包括一级指令缓存和一级数据缓存,以及私有的二级缓存(Level 2 cache,简称L2 cache)。

    这里提到了一个概念,就是物理核的私有缓存。它其实是指缓存空间只能被当前的这个物理核使用,其他的物理核无法对这个核的缓存空间进行数据存取。

    我们来看一下CPU物理核的架构。


    d74f8805aa80edafdbc0ffe36fdb6b90_c2d620c012a82e825570df631a7fbc3a.jpg

    因为L1和L2缓存是每个物理核私有的,所以,当数据或指令保存在L1、L2缓存时,物理核访问它们的延迟不超过10纳秒,速度非常快。那么,如果Redis把要运行的指令或存取的数据保存在L1和L2缓存的话,就能高速地访问这些指令和数据。

    但是,这些L1和L2缓存的大小受限于处理器的制造技术,一般只有KB级别,存不下太多的数据。如果L1、L2缓存中没有所需的数据,应用程序就需要访问内存来获取数据。而应用程序的访存延迟一般在百纳秒级别,是访问L1、L2缓存的延迟的近10倍,不可避免地会对性能造成影响。

    所以,不同的物理核还会共享一个共同的三级缓存(Level 3 cache,简称为L3 cache)。L3缓存能够使用的存储资源比较多,所以一般比较大,能达到几MB到几十MB,这就能让应用程序缓存更多的数据。当L1、L2缓存中没有数据缓存时,可以访问L3,尽可能避免访问内存。

    另外,现在主流的CPU处理器中,每个物理核通常都会运行两个超线程,也叫作逻辑核。同一个物理核的逻辑核会共享使用L1、L2缓存。

    为了方便你理解,我用一张图展示一下物理核和逻辑核,以及一级、二级缓存的关系。

    1b901c425984c93f520cc45695b81df2_d9689a38cbe67c3008d8ba99663c2f09.jpg

    在主流的服务器上,一个CPU处理器会有10到20多个物理核。同时,为了提升服务器的处理能力,服务器上通常还会有多个CPU处理器(也称为多CPU Socket),每个处理器有自己的物理核(包括L1、L2缓存),L3缓存,以及连接的内存,同时,不同处理器间通过总线连接。

    下图显示的就是多CPU Socket的架构,图中有两个Socket,每个Socket有两个物理核。

    7a3a56efe314ff3af4281359ee5d78e6_5ceb2ab6f61c064284c8f8811431bc3d.jpg

    在多CPU架构上,应用程序可以在不同的处理器上运行。
    如在刚才的图中,Redis可以先在Socket 1上运行一段时间,然后再被调度到Socket 2上运行。

    但是,有个地方需要你注意一下:如果应用程序先在一个Socket上运行,并且把数据保存到了内存,然后被调度到另一个Socket上运行,此时,应用程序再进行内存访问时,就需要访问之前Socket上连接的内存,这种访问属于远端内存访问。和访问Socket直接连接的内存相比,远端内存访问会增加应用程序的延迟。

    在多CPU架构下,一个应用程序访问所在Socket的本地内存和访问远端内存的延迟并不一致,所以,我们也把这个架构称为非统一内存访问架构(Non-Uniform Memory Access,NUMA架构)。

    到这里,我们就知道了主流的CPU多核架构和多CPU架构,我们来简单总结下CPU架构对应用程序运行的影响。

    • L1、L2缓存中的指令和数据的访问速度很快,所以,充分利用L1、L2缓存,可以有效缩短应用程序的执行时间;
    • 在NUMA架构下,如果应用程序从一个Socket上调度到另一个Socket上,就可能会出现远端内存访问的情况,这会直接增加应用程序的执行时间。
    $ lscpu
    Architecture:            x86_64
      CPU op-mode(s):        32-bit, 64-bit
      Address sizes:         42 bits physical, 48 bits virtual
      Byte Order:            Little Endian
    CPU(s):                  8
      On-line CPU(s) list:   0-7
    Vendor ID:               GenuineIntel
      Model name:            Intel(R) Xeon(R) Gold 6278C CPU @ 2.60GHz
        CPU family:          6
        Model:               85
        Thread(s) per core:  2
        Core(s) per socket:  4
        Socket(s):           1
        Stepping:            7
        BogoMIPS:            5200.00
        Flags:               fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc rep_good nopl xtopology nonstop_tsc cpuid tsc_known_freq pni pclmu
                             lqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch invpcid_single ssbd ibrs ibpb stibp ibrs_enhanced fsgsbase tsc_adjust b
                             mi1 hle avx2 smep bmi2 erms invpcid rtm mpx avx512f avx512dq rdseed adx smap clflushopt clwb avx512cd avx512bw avx512vl xsaveopt xsavec xgetbv1 arat avx512_vnni md_clear flush_l1d arch_capabilities
    Virtualization features:
      Hypervisor vendor:     KVM
      Virtualization type:   full
    Caches (sum of all):
      L1d:                   128 KiB (4 instances)
      L1i:                   128 KiB (4 instances)
      L2:                    4 MiB (4 instances)
      L3:                    35.8 MiB (1 instance)
    NUMA:
      NUMA node(s):          1
      NUMA node0 CPU(s):     0-7
    Vulnerabilities:
      Itlb multihit:         KVM: Mitigation: VMX unsupported
      L1tf:                  Not affected
      Mds:                   Not affected
      Meltdown:              Not affected
      Spec store bypass:     Mitigation; Speculative Store Bypass disabled via prctl and seccomp
      Spectre v1:            Mitigation; usercopy/swapgs barriers and __user pointer sanitization
      Spectre v2:            Mitigation; Enhanced IBRS, IBPB conditional, RSB filling
      Srbds:                 Not affected
      Tsx async abort:       Vulnerable: Clear CPU buffers attempted, no microcode; SMT Host state unknown
    
    

    该输出提供了有关Linux系统上的CPU架构和配置的详细信息,包括:

    
    - Architecture: x86_64:系统架构是x86_64,这意味着它是64位系统。
    - CPU op-mode(s): 32-bit, 64-bit:处理器支持32位和64位操作模式。
    - Address sizes: 42 bits physical, 48 bits virtual:物理地址大小是42位,虚拟地址大小是48位。
    - Byte Order: Little Endian:系统的字节顺序是小端序。
    - CPU(s): 8:系统有8个CPU核心可用。
    - On-line CPU(s) list: 0-7:所有8个CPU核心都在线并可用。
    - Vendor ID: GenuineIntel:CPU制造商是英特尔。
    - Model name: Intel(R) Xeon(R) Gold 6278C CPU @ 2.60GHz:CPU型号是Intel Xeon Gold 6278C,时钟频率是2.60GHz。
    - CPU family: 6:CPU家族是6。
    - Model: 85:CPU型号是85。
    - Thread(s) per core: 2:每个CPU核心支持2个线程。
    - Core(s) per socket: 4:每个CPU插槽支持4个核心。
    - Socket(s): 1:系统只有一个CPU插槽。
    - Stepping: 7:CPU步进是7。
    - BogoMIPS: 5200.00:BogoMIPS是一个基准测试指标,该系统的BogoMIPS值为5200.00。
    - Flags: 系统支持的CPU特性和指令集,包括FPU、SSE、AVX等。
    - Virtualization features: 系统支持的虚拟化特性,包括Hypervisor vendor和Virtualization type。
    - Caches: 系统的缓存配置,包括L1d、L1i、L2、L3缓存的大小和实例数。
    - NUMA: 系统的NUMA配置,包括NUMA节点数和每个节点的CPU核心范围。
    - Vulnerabilities: 系统的漏洞和安全性特性,包括Itlb multihit、L1tf、Mds、Meltdown、Spec store bypass、Spectre v1、Spectre v2、Srbds和Tsx async abort。输出还提供了有关如何缓解这些漏洞的信息。
    
    

    相关文章

      网友评论

        本文标题:【计算机】主流的CPU架构

        本文链接:https://www.haomeiwen.com/subject/twvusdtx.html