UIO 用户空间下驱动程序的支持机制。DPDK使用UIO机制使网卡驱动程序运行在用户态,并采用轮询和零拷贝方式从网卡收取报文,提升收发报文的性能。node
Linux系统中通常的驱动设备都是运行在内核空间,而在用户空间用应用程序调用便可,而UIO则是将驱动的不多一部分运行在内核空间,而在用户空间实现驱动的绝大多数功能。使用UIO能够避免设备的驱动程序须要随着内核的更新而更新的问题。linux
编译UIO缓存
sudo /sbin/modprobe uio
一个物理封装的CPU(经过physical id区分判断)能够有多个核(经过core id区分判断)。而每一个核能够有多个逻辑cpu(经过processor区分判断)。一个核经过多个逻辑cpu实现这个核本身的超线程技术。服务器
cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l
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
逻辑处理器数英文名是logical processors,即俗称的“逻辑CPU数”,性能
cat /proc/cpuinfo| grep "processor"| wc -l
采用超线程便是可在同一时间里,应用程序可使用芯片的不一样部分。虽然单线程芯片每秒钟可以处理成千上万条指令,可是在任一时刻只可以对一条指令进行操做。而超线程技术可使芯片同时进行多线程处理,使芯片性能获得提高。ui
虽然采用超线程技术能同时执行两个线程,但它并不象两个真正的CPU那样,每一个CPU都具备独立的资源。当两个线程都同时须要某一个资源时,其中一个要暂时中止,并让出资源,直到这些资源闲置后才能继续。所以超线程的性能并不等于两颗CPU的性能。spa
若是有两个逻辑CPU具备相同的”core id”,那么超线程是打开的。操作系统
CPU的亲和性也就是cpu affinity机制,指的是进程要在指定的 CPU 上尽可能长时间地运行而不被迁移到其余处理器, 经过处理器关联能够将虚拟处理器映射到一个物理处理器上 ,也就是说把一个程序绑定到一个物理CPU上。线程
并且在多核运行的机器上,每一个CPU自己本身会有缓存,缓存着进程使用的信息,而进程可能会被OS调度到其余CPU上,如此,CPU cache命中率就低了。当一个进程或线程绑定CPU后,程序就会一直在指定的cpu跑,不会由操做系统调度到其余CPU上,减小了cache miss,提升性能和效率。
查看系统是否支持NUMA机制:
grep -i numa /var/log/dmesg
查看输出结果:
查看系统NUMA详细信息:
numactl --hardware
一个物理cpu对应一个node,系统还会为每一个node分配必定的大小的内存。也就是说若是服务器只有一个物理cpu,那么就只有一个node0,领取系统所有的内存和cpu。我的的PC好像也只有一个CPU,因此只有node0。可是在大型的服务器上会有多个node,这时每一个node都会被分配到必定的内存。
CPU访问自身直接attach内存(就是系统给每一个node分配的内存)对应的物理地址时,才会有较短的响应时间,俗称Local Access,如图标识的”fast”,若是须要访问其余cpu attach的内存的数据时,就须要经过inter-connect通道来访问,相比以前的访问速度要慢一些,俗称Remote Access ,如图标识的”slow”,那么在dpdk的使用过程当中,配置NUMA模式和NoNUMA模式是加快访问速度的方法而已。