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模式是加快访问速度的方法而已。
UIO,大页内存,CPU亲和性,NUMA机制等的更多相关文章
- OpenStack 高性能虚拟机之大页内存
目录 文章目录 目录 前文列表 虚拟存储器系统 页式虚拟存储器 大页内存 Linux 的大页内存 大页的实现原理 大页内存配置 透明巨型页 THP 大页面对内存的影响 Nova 虚拟机的大页内存设置 ...
- [development][dpdk][hugepage] 为不同的结点分配不同大小的大页内存
这个事来自dpdk, 所以, 先参考. http://dpdk.org/doc/guides/linux_gsg/sys_reqs.html 当前, 假设你已经读过上边内容, 知道大页内存时候, dp ...
- 大页内存(HugePages)在通用程序优化中的应用
今天给大家介绍一种比较新奇的程序性能优化方法-大页内存(HugePages),简单来说就是通过增大操作系统页的大小来减小页表,从而避免快表缺失.这方面的资料比较贫乏,而且网上绝大多数资料都是介绍它在O ...
- 大页内存(HugePages)
原文转载自:http://blog.csdn.net/yutianzuijin/article/details/41912871 今天给大家介绍一种比较新奇的程序性能优化方法—大页内存(HugePag ...
- [development][dpdk][hugepage] 大页内存的挂载
参考: [development][dpdk][hugepage] 为不同的结点分配不同大小的大页内存 完成了以上内容之后, 下一步需要做的是挂载, 大页内存只有被挂载了之后,才能被应用程序使用. 挂 ...
- Linux 之 hugepage 大页内存理论
HugePages是通过使用大页内存来取代传统的4kb内存页面,使得管理虚拟地址数变少,加快了从虚拟地址到物理地址的映射以及通过摒弃内存页面的换入换出以提高内存的整体性能.尤其是对于8GB以上的内存以 ...
- Linux大页内存管理等---菜鸟初学
1. 查看linux的内存情况: free -m 2. 查看是否开启大页的方法: cat /proc/meminfo |grep -i HugePage AnonHugePages: 276480 k ...
- Linux内存大页设置
实际环境中,遇到3次由于内存大页设置参数不合理或者错误,导致系统内存不足,或者数据库内存不足的问题. 按照如下方式,推荐设置大页参考下发设置! 参考HugePages on Oracle Linux ...
- Thermostat:双层存储结构的透明巨页内存管理机制
这是一篇由密歇根大学的Neha Agarwal 和 Thomas F. Wenisch,发表在计算机系统顶会ASLOS的论文,Thermostat: Application-transparent P ...
随机推荐
- HTML5中的Canvas详解
什么是Canvas HTML5 <canvas> 元素用于图形的绘制,通过脚本 (通常是JavaScript)来完成.<canvas> 标签只是图形容器,您必须使用脚本来绘制图 ...
- docker中使用的镜像加速器可以自己生成
只要你到该网址https://cr.console.aliyun.com/cn-hangzhou/mirrors登录(我使用的是支付宝帐号),然后你如下图操作,就能够看见你的加速器地址了,只要你登录就 ...
- leetcode709—To Lower Case
Implement function ToLowerCase() that has a string parameter str, and returns the same string in low ...
- day06--元组、字典、集合与关系运算
今日内容: 1.元组 2.字典 3.集合与关系运算 元组: 用途:记录多个值,当多个值没有改的需求,此时用元组更适合. 定义方式:在()内用逗号分隔开多个任意类型的值. 变量名=tuple('') 切 ...
- 【webstorm】免费使用
http://idea.imsxm.com/ 测试过ok 后期追加(20180316更新为) http://idea.codebeta.cn/ 后期追加(20180502更新为) http ...
- Delphi 10.3 Rio + iOS 12.1 SDK 编译错误 "libcharset.1.dylib"
环境版本: Delphi 10.3 Rio iOS 12.1 SDK Xcode 10.1 (10B61) 错误讯息:[DCC Error] E2597 ld: file not found: /us ...
- IDEA插件——lombok的简单使用
一.介绍 lombok是一个可以通过注解来简化许多繁琐的get.set以及构造函数等的工具.它可以让我们在代码编写的时候省去代码,而在编译生成的字节码中生成相应的字节码! 官网:https://pro ...
- Java基础—线程
推荐阅读:http://www.iteye.com/topic/806990 一.起手式——基本概念 1.什么叫线程 进程:进行中的程序:作为资源分配的单位. 线程:轻量级的进程:程序里的顺序控制流, ...
- Exp5:MSF基础应用
Exp5:MSF基础应用 一.基础问题回答 (1)用自己的话解释什么是 exploit , payload , encode. exploit: 设相当于利用漏洞偷偷打开的管道,将做好的木马病毒等顺利 ...
- 20155233 《网络对抗》Exp7 网络欺诈技术防范
应用SET工具建立冒名网站 1.要让冒名网站在别的主机上也能看到,需要开启本机的Apache服务,并且要将Apache服务的默认端口改为80,先在kali中使用netstat -tupln |grep ...