zoukankan      html  css  js  c++  java
  • UIO,大页内存,CPU亲和性,NUMA机制等

    Linux环境下的UIO(Userspace I/O)


    UIO 用户空间下驱动程序的支持机制。DPDK使用UIO机制使网卡驱动程序运行在用户态,并采用轮询和零拷贝方式从网卡收取报文,提高收发报文的性能。

    Linux系统中一般的驱动设备都是运行在内核空间,而在用户空间用应用程序调用即可,而UIO则是将驱动的很少一部分运行在内核空间,而在用户空间实现驱动的绝大多数功能。使用UIO可以避免设备的驱动程序需要随着内核的更新而更新的问题

    编译UIO

    sudo /sbin/modprobe uio
    

    CPU的物理核,逻辑核概念


    一个物理封装的CPU(通过physical id区分判断)可以有多个核(通过core id区分判断)。而每个核可以有多个逻辑cpu(通过processor区分判断)。一个核通过多个逻辑cpu实现这个核自己的超线程技术

    • 可以通过以下的命令来查看:
    cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l
    
    • 查看CPU型号:
    cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c
    

    处理器核心数

    processor cores,即俗称的“CPU核心数”,也就是每个物理CPU中core的个数
    例如“Intel Core i3-2310M”是双核处理器,它有2个“处理器核心数”。

    • 可以通过以下的命令来查看:
    cat /proc/cpuinfo| grep "cpu cores"| uniq
    
    • 具有相同core id的CPU是同一个core的超线程

    逻辑处理器数

    逻辑处理器数英文名是logical processors,即俗称的“逻辑CPU数”,

    • 逻辑核心处理器,就是虚拟物理核心处理器的一个超线程技术
    • 例如“Intel Core i3-2310M”支持超线程,一个物理核心能模拟为两个逻辑处理器,即一块“Intel Core i3-2310M”有4个“逻辑处理器数”。
    • 可以通过以下的命令来查看:
    cat /proc/cpuinfo| grep "processor"| wc -l
    
    • SIBLING:SIBLING是内核认为的单个物理处理器所有的超线程个数,也就是一个物理封装中的逻辑核的个数。如果SIBLING等于实际物理核数的话,就说明没有启动超线程,反之启用超线程。

    超线程

    采用超线程即是可在同一时间里,应用程序可以使用芯片的不同部分。虽然单线程芯片每秒钟能够处理成千上万条指令,但是在任一时刻只能够对一条指令进行操作。而超线程技术可以使芯片同时进行多线程处理,使芯片性能得到提升。

    虽然采用超线程技术能同时执行两个线程,但它并不象两个真正的CPU那样,每个CPU都具有独立的资源。当两个线程都同时需要某一个资源时,其中一个要暂时停止,并让出资源,直到这些资源闲置后才能继续。因此超线程的性能并不等于两颗CPU的性能。

    如果有两个逻辑CPU具有相同的”core id”,那么超线程是打开的。

    CPU亲和性


    CPU的亲和性也就是cpu affinity机制,指的是进程要在指定的 CPU 上尽量长时间地运行而不被迁移到其他处理器, 通过处理器关联可以将虚拟处理器映射到一个物理处理器上 ,也就是说把一个程序绑定到一个物理CPU上。

    而且在多核运行的机器上,每个CPU本身自己会有缓存,缓存着进程使用的信息,而进程可能会被OS调度到其他CPU上,如此,CPU cache命中率就低了。当一个进程或线程绑定CPU后,程序就会一直在指定的cpu跑,不会由操作系统调度到其他CPU上,减少了cache miss,提高性能和效率。

    NUMA机制


    查看系统是否支持NUMA机制:

    grep -i numa /var/log/dmesg
    

    查看输出结果:

    • 如果输出结果为:
      No NUMA configuration found
      说明numa为disable
    • 如果不是上面的内容说明numa为enable

    查看系统NUMA详细信息:

    numactl --hardware
    

    一个物理cpu对应一个node,系统还会为每个node分配一定的大小的内存。也就是说如果服务器只有一个物理cpu,那么就只有一个node0,领取系统全部的内存和cpu。个人的PC好像也只有一个CPU,所以只有node0。但是在大型的服务器上会有多个node,这时每个node都会被分配到一定的内存。

    NUMA的基本原理

    CPU访问自身直接attach内存(就是系统给每个node分配的内存)对应的物理地址时,才会有较短的响应时间,俗称Local Access,如图标识的”fast”,如果需要访问其他cpu attach的内存的数据时,就需要通过inter-connect通道来访问,相比之前的访问速度要慢一些,俗称Remote Access ,如图标识的”slow”,那么在dpdk的使用过程中,配置NUMA模式和NoNUMA模式是加快访问速度的方法而已。

  • 相关阅读:
    C语言函数手册—函数分类列表
    HTTP协议详解(一直在用可是这篇太好了转一下)
    Substance风格实例大全javaswing皮肤风格大全(原)
    Component creation must be done on Event Dispatch Thread错误解决方法
    用开源Look&Feel (Substance)写 漂亮的Swing应用程序
    Swift翻译之-关于Swift
    Swift翻译之-Swift语法入门 Swift语法介绍
    Swift语言简介+快速上手
    JDK各个版本的新特性jdk1.5-jdk8
    5个常用Java代码混淆器 助你保护你的代码
  • 原文地址:https://www.cnblogs.com/031602523liu/p/10537694.html
Copyright © 2011-2022 走看看