如何用命令linux 获取cpu主频核数和主频等信息

博客访问: 941287
博文数量: 247
博客积分: 5909
博客等级: 大校
技术积分: 2675
注册时间:
IT168企业级官微
微信号:IT168qiye
系统架构师大会
微信号:SACC2013
分类: Oracle
cat /proc/cpuinfo中的信息processor&&&&&& 逻辑处理器的id。
physical id&&& 物理封装的处理器的id。
core id&&&&&&& 每个核心的id。
cpu cores&&&&& 位于相同物理封装的处理器中的内核数量。
siblings&&&&&& 位于相同物理封装的处理器中的逻辑处理器的数量。
& 1 查看物理CPU的个数
#cat /proc/cpuinfo |grep "physical id"|sort |uniq|wc –l
2、& &查看逻辑CPU的个数
#cat /proc/cpuinfo |grep "processor"|wc –l
3、& 查看CPU是几核
#cat /proc/cpuinfo |grep "cores"|uniq
4、& 查看CPU的主频
#cat /proc/cpuinfo |grep MHz|uniq&
5、& #&uname -a
6、& Linux euis1 2.6.9-55.ELsmp #1 SMP Fri Apr
20 17:03:35 EDT
i686 i386 GNU/Linux
& (查看当前操作系统内核信息)
7、& #&cat /etc/issue | grep
8、& Red Hat Enterprise Linux AS release 4
(Nahant Update 5(查看当前操作系统发行版信息)
9、& #&cat /proc/cpuinfo |
grep name | cut -f2 -d: | uniq -c
&&&& 8& Intel(R)
Xeon(R) CPU&&
E5410&& @ 2.33GHz
(看到有8个逻辑CPU, 也知道了CPU型号)
&&&& 9&& #&cat
/proc/cpuinfo | grep physical | uniq -c
&&&& 4&& physical
&&&& 4&physical
(说明实际上是两颗4核的CPU)
& 10、#&getconf
(说明当前CPU运行在32bit模式下, 但不代表CPU不支持64bit)
11、#&cat /proc/cpuinfo | grep flags | grep '
lm ' | wc –l
8(结果大于0, 说明支持64bit计算. lm指long mode, 支持lm则是64bit)
12、如何获得CPU的详细信息:
& linux命令:cat /proc/cpuinfo
13、用命令判断几个物理CPU,几个核等:
& 逻辑CPU个数:
&& # cat /proc/cpuinfo | grep
"processor" | wc -l
& 物理CPU个数:
&& # cat /proc/cpuinfo | grep
"physical id" | sort | uniq | wc -l
& 14、每个物理CPU中Core的个数:
&& # cat /proc/cpuinfo | grep
"cpu cores" | wc -l
& 15、是否为超线程?如果有两个逻辑CPU具有相同的”core
id”,那么超线程是打开的。每个物理CPU中逻辑CPU(可能是core, threads或both)的个数:
# cat /proc/cpuinfo | grep "siblings"
& 1.查看CPU信息命令
& cat /proc/cpuinfo
& 2.查看内存信息命令
& cat /proc/meminfo
& 3.查看硬盘信息命令
& fdisk -l查看CPU信息(型号)# cat
/proc/cpuinfo | grep name | cut -f2 -d: | uniq -c& && &8& Intel(R)
Xeon(R) CPU& && && && &E5410& &@ 2.33GHz(看到有8个逻辑CPU, 也知道了CPU型号)# cat /proc/cpuinfo | grep physical | uniq -c& && &4 physical id&
&& &: 0& && &4 physical id& && &: 1(说明实际上是两颗4核的CPU)PS:Jay added on 10th, May, 2011# 其实是可能有超线程HT技术,不一定是有4核,也可能是2核4线程;当时还理解不清楚#
getconf LONG_BIT&& 32(说明当前CPU运行在32bit模式下, 但不代表CPU不支持64bit)# cat /proc/cpuinfo | grep flags | grep ' lm ' | wc -l&& 8(结果大于0, 说明支持64bit计算. lm指long mode, 支持lm则是64bit)再完整看cpu详细信息,
不过大部分我们都不关心而已.# dmidecode | grep 'Processor Information'查看内
存信息# cat /proc/meminfo# uname -a euis1
2.6.9-55.ELsmp #1 SMP Fri Apr 20 17:03:35 EDT
GNU/Linux(查看当前内核信息)# cat /etc/issue | grep LinuxRed Hat Enterprise Linux AS release 4 (Nahant Update 5)(查看当前操作系统发行版信息)查看机器型号# dmidecode | grep "Product
Name"&&查看# dmesg | grep -i eth
阅读(121861) | 评论(0) | 转发(7) |
相关热门文章
给主人留下些什么吧!~~
请登录后评论。windows系统如何查看物理cpu核数,内存型号等
首先,我们需要打开命令行模式,利用win+r键打开运行,输入cmd回车即会出现
然后在命令行界面输入wmic进入命令行系统管理执行脚本界面
然后我们通过cpu get
*可以查看cpu的具体情况(注意空格),拖动滚动条找到numberofcores和numberoflogicalprocessors两列。
由numberofcores可以得知cpu为双核,有numberoflogicalprocessors/numberofcores得知为双线程即超线程,则此cpu为双核超线程。
那么如何查看内存型号呢,我们可以通过命令memorychip进行查看
由图可以看出,有两条内存,分别为2G,PN号也可以看出
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。Device Year Class&的主要功能是根据&CPU核数、时钟频率&以及&内存大小&对设备进行分级。代码很简单,只包含两个类:DeviceInfo&-& 获取设备参数,YearClass&-& 根据参数进行分级。下表是 Facebook 公司提供的分级标准,其中&Year&栏表示分级结果。YearCoresClockRAM20081528MHz192MB2009n/a600MHz290MB2010n/a1.0GHz512MB201121.2GHz1GB201241.5GHz1.5GB2013n/a2.0GHz2GB2014n/a&2GHz&2GB关于输出年份的计算方法可以参考源码,本文只把一些比较常用的功能抽取出来做一个简要介绍。获取 CPU 核数我们都知道,Linux 中的设备都是以文件的形式存在,CPU 也不例外,因此 CPU 的文件个数就等价与核数。Android 的 CPU 设备文件位于&/sys/devices/system/cpu/&目录,文件名的的格式为&cpu/d+。_x86_64:/sys/devices/system/cpu # lscpu0cpufreqcpuidlekernel_maxmodaliasofflineonlinepossiblepowerpresentuevent统计一下文件个数便可以获得 CPU 核数。public static int getNumberOfCPUCores() {
if (Build.VERSION.SDK_INT &= Build.VERSION_CODES.GINGERBREAD_MR1) {
1234567891011121314151617181920212223242526272829303132333435获取时钟频率获取时钟频率需要读取系统文件 -&/sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq&或者/proc/cpuinfo。我的 Android 模拟器中并没有&cpuinfo_max_freq&文件,因此只能读取&/proc/cpuinfo。/proc/cpuinfo&包含了很多 cpu 数据。processor
: 0vendor_id
: GenuineIntelcpu family
: 70model name
: Intel(R) Core(TM) i7-4770HQ CPU @ 2.20GHzstepping
: 1cpu MHz
: 0.000cache size
: 1024 KBfdiv_bug
: nohlt_bug
: nof00f_bug
: nocoma_bug
: yesfpu_exception
: yescpuid level : 4wp
: yes代码如下:public static int getCPUMaxFreqKHz() {
int maxFreq = DEVICEINFO_UNKNOWN;
for (int i = 0; i & getNumberOfCPUCores(); i++) {
String filename =
"/sys/devices/system/cpu/cpu" + i + "/cpufreq/cpuinfo_max_freq";
File cpuInfoMaxFreqFile = new File(filename);
if (cpuInfoMaxFreqFile.exists()) {
byte[] buffer = new byte[128];
FileInputStream stream = new FileInputStream(cpuInfoMaxFreqFile);
stream.read(buffer);
int endIndex = 0;
1234567891011121314151617181920212223242526272829303132333435363738394041获取内存大小如果 SDK 版本大于等于&JELLY_BEAN&,可以通过&ActivityManager&来获取内从大小。ActivityManager.MemoryInfo memInfo = new ActivityManager.MemoryInfo();ActivityManager am = (ActivityManager) c.getSystemService(Context.ACTIVITY_SERVICE);am.getMemoryInfo(memInfo);123如果版本低于&JELLY_BEAN&,则只能读取系统文件了。FileInputStream stream = new FileInputStream("/proc/meminfo");totalMem = parseFileForValue("MemTotal", stream);12完整代码如下:@TargetApi(Build.VERSION_CODES.JELLY_BEAN)public static long getTotalMemory(Context c) {
123456789101112131415161718192021222324252627全能程序员交流QQ群,群内程序员都是来自,百度、阿里、京东、小米、去哪儿、饿了吗、蓝港等高级程序员 ,拥有丰富的经验。加入我们,直线沟通技术大牛,最佳的学习环境,了解业内的一手的资讯。如果你想结实大牛,那 就加入进来,让大牛带你超神!
最新教程周点击榜
微信扫一扫c++获取cpu信息 - c_dragon - 博客园
随笔 - 140, 文章 - 0, 评论 - 53, 引用 - 0
原文地址:http://blog.csdn.net/jamesliulyc/article/details/2028958
1、什么是cpuid指令
&&& CPUID指令是intel IA32架构下获得CPU信息的汇编指令,可以得到CPU类型,型号,制造商信息,商标信息,序列号,缓存等一系列CPU相关的东西。
2、cpuid指令的使用
&&& cpuid使用eax作为输入参数,eax,ebx,ecx,edx作为输出参数,举个例子:
&__asm&{&&mov eax, 1&&cpuid&&...&}
&&& 以上代码以1为输入参数,执行cpuid后,所有寄存器的值都被返回值填充。针对不同的输入参数eax的值,输出参数的意义都不相同。&&&
为了更好的在C++中使用cpuid指令,可以使用类对指令进行封装,在类中定义一个专门的函数负责cpuid的执行,他需要一个输入参数。还需要定义四
个成员变量存储cpuid执行以后返回来的值。由于这四个寄存器都是32位长的,可以使用unsinged long 类型变量存储。
&typedef unsigned long DWORD
&class CPUID&{&public:&&...&private:&&void Executecpuid(DWORD eax);&// 用来实现cpuid
&&DWORD m_&&&// 存储返回的eax&&DWORD m_&&&// 存储返回的ebx&&DWORD m_&&&// 存储返回的ecx&&DWORD m_&&&// 存储返回的edx
&void CPUID::Executecpuid(DWORD veax)&{&&// 因为嵌入式的汇编代码不能识别 类成员变量&&// 所以定义四个临时变量作为过渡&&DWORD&&DWORD&&DWORD&&DWORD
&&__asm&&{&&&mov eax, veax&;将输入参数移入eax&&&cpuid&&;执行cpuid&&&mov deax, eax&;以下四行代码把寄存器中的变量存入临时变量&&&mov debx, ebx&&&mov decx, ecx&&&mov dedx, edx&&}
&&m_eax =&// 把临时变量中的内容放入类成员变量&&m_ebx =&&m_ecx =&&m_edx =&}
&&& 这样就可以通过直接调用Executecupid()函数的方式来执行cpuid指令了,返回值存在类成员变量m_eax, m_ebx, m_ecx和m_edx中。
3、获得CPU的制造商信息(Vender ID String)
&&& 把eax = 0作为输入参数,可以得到CPU的制造商信息。&&& cpuid指令执行以后,会返回一个12字符的制造商信息,前四个字符的ASC码按低位到高位放在ebx,中间四个放在edx,最后四个字符放在ecx。比如说,对于intel的cpu,会返回一个&GenuineIntel&的字符串,返回值的存储格式为:
&&&&&&&&&& 31&&&&& 23&&&&& 15&&&&& 07&&&&& 00&&&&&&& EBX| u (75)| n (6E)| e (65)| G (47)&&&&&&& EDX| I (49)| e (65)| n (6E)| i (69)&&&&&&& ECX| l (6C)| e (65)| t (74)| n (6E)
&&& 因此可以这样实现他:
&string CPUID::GetVID()&{&&char cVID[13];&&&// 字符串,用来存储制造商信息&&memset(cVID, 0, 13);&&// 把数组清0&&Executecpuid(0);&&// 执行cpuid指令,使用输入参数 eax = 0&&memcpy(cVID, &m_ebx, 4);&// 复制前四个字符到数组&&memcpy(cVID+4, &m_edx, 4);&// 复制中间四个字符到数组&&memcpy(cVID+8, &m_ecx, 4);&// 复制最后四个字符到数组
&&return string(cVID);&&// 以string的形式返回&}
4、获得CPU商标信息(Brand String)
在我的电脑上点击右键,选择属性,可以在窗口的下面看到一条CPU的信息,这就是CPU的商标字符串。CPU的商标字符串也是通过cpuid得到的。由于
商标的字符串很长(48个字符),所以不能在一次cpuid指令执行时全部得到,所以intel把它分成了3个操作,eax的输入参数分别是
0xxx,每次返回的16个字符,按照从低位到高位的顺序依次放在eax, ebx,
ecx, edx。因此,可以用循环的方式,每次执行完以后保存结果,然后执行下一次cpuid。
&string CPUID::GetBrand()&{&&const DWORD BRANDID = 0x;&&// 从0x开始,到0x结束&&char cBrand[49];&&&&// 用来存储商标字符串,48个字符&&memset(cBrand, 0, 49);&&&&// 初始化为0
&&for (DWORD i = 0; i & 3; i++)&&&// 依次执行3个指令&&{&&&Executecpuid(BRANDID + i);&&&&&&memcpy(cBrand + i*16, &m_eax, 16);&// 每次执行结束后,保存四个寄存器里的asc码到数组&&}&&&&&&// 由于在内存中,m_eax, m_ebx, m_ecx, m_edx是连续排列&&&&&&&&// 所以可以直接以内存copy的方式进行保存&&return string(cBrand);&&// 以string的形式返回&}
5、检测CPU特性(CPU feature)
&&& 我98年初买第一台电脑的时候,CPU能支持MMX就很了不起了。现在的intel
CPU,台式机的好点的都支持Hyper-Threading了,移动的要支持Speed
Sted。这些都是CPU的特性。CPU的特性可以通过cpuid获得,参数是eax =
1,返回值放在edx和ecx,通过验证edx或者ecx的某一个bit,可以获得CPU的一个特性是否被支持。比如说,edx的bit
32代表是否支持MMX,edx的bit 28代表是否支持Hyper-Threading,ecx的bit 7代表是否支持speed
sted。下面就是获得CPU特性的例子:
&bool CPUID::IsHyperThreading()&&// 判断是否支持hyper-threading&{&&Executecpuid(1);&&// 执行cpuid指令,使用输入参数 eax = 1
&&return m_edx & (1&&28);&&// 返回edx的bit 28&}
&bool CPUID::IsEST()&&&// 判断是否支持speed step&{&&Executecpuid(1);&&// 执行cpuid指令,使用输入参数 eax = 1
&&return m_ecx & (1&&7);&&// 返回ecx的bit 7&}
&bool CPUID::IsMMX()&&&// 判断是否支持MMX&{&&Executecpuid(1);&&// 执行cpuid指令,使用输入参数 eax = 1
&&return m_edx & (1&&23);&&// 返回edx的bit 23&}
&&& CPU的特性还有很多,这只是平时我们听到比较多的三个,更多的特性请参考intel的资料。
6、获得CPU的缓存(cache)&&& &&& 缓存,就是CACHE,已经成为判断CPU性能的一项大指标。缓存信息包括:第几级缓存(level),缓存大小(size),通道数(way),吞吐量(line size)。因此可以使用一个结构体来存储缓存信息。
&struct CacheInfo&{&&&&&&// 第几级缓存&&&&&&// 缓存大小,单位KB&&&&&&// 通道数&&&&&&// 吞吐量
&&CacheInfo()&&&&// 构造函数&&{&&&level = 0;&&&size = 0;&&&way = 0;&&&linesize = 0;&&}
&&CacheInfo(int clevel, int csize, int cway, int clinesize) &// 构造函数&&{&&&level =&&&size =&&&way =&&&linesize =&&}&};&&& &&&
缓存信息可以通过eax = 2的cpuid来得到(得到的不光有cache信息,还有其他的一些信息),返回值在eax(高24位), ebx,
ecx和edx,总共15个BYTE的信息,每个BYTE的值不同,代表的意义也不同,所以需要用一个哈希表存储各种不同BYTE的定义,可以定义一个
map类型的类成员存储这些资料。我把资料上和缓存有关的信息存储如下:
&m_cache[0x06] =& CacheInfo(1, 8, 4, 32);&m_cache[0x08] =& CacheInfo(1, 16, 4, 32);&m_cache[0x0a] =& CacheInfo(1, 8, 2, 32);&m_cache[0x0c] =& CacheInfo(1, 16, 4, 32);&m_cache[0x2c] =& CacheInfo(1, 32, 8, 64);&m_cache[0x30] =& CacheInfo(1, 32, 8, 64);&m_cache[0x60] =& CacheInfo(1, 16, 8, 64);&m_cache[0x66] =& CacheInfo(1, 8, 4, 64);&m_cache[0x67] =& CacheInfo(1, 16, 4, 64);&m_cache[0x68] =& CacheInfo(1, 32, 4, 64);
&m_cache[0x39] =& CacheInfo(2, 128, 4, 64);&m_cache[0x3b] =& CacheInfo(2, 128, 2, 64);&m_cache[0x3c] =& CacheInfo(2, 256, 4, 64);&m_cache[0x41] =& CacheInfo(2, 128, 4, 32);&m_cache[0x42] =& CacheInfo(2, 256, 4, 32);&m_cache[0x43] =& CacheInfo(2, 512, 4, 32);&m_cache[0x44] =& CacheInfo(2, );&m_cache[0x45] =& CacheInfo(2, );&m_cache[0x79] =& CacheInfo(2, 128, 8, 64);&m_cache[0x7a] =& CacheInfo(2, 256, 8, 64);&m_cache[0x7b] =& CacheInfo(2, 512, 8, 64);&m_cache[0x7c] =& CacheInfo(2, );&m_cache[0x82] =& CacheInfo(2, 256, 8, 32);&m_cache[0x83] =& CacheInfo(2, 512, 8, 32);&m_cache[0x84] =& CacheInfo(2, );&m_cache[0x85] =& CacheInfo(2, );&m_cache[0x86] =& CacheInfo(2, 512, 4, 64);&m_cache[0x87] =& CacheInfo(2, );
&m_cache[0x22] =& CacheInfo(3, 512, 4, 64);&m_cache[0x23] =& CacheInfo(3, );&m_cache[0x25] =& CacheInfo(3, );&m_cache[0x29] =& CacheInfo(3, );
&&& m_cache是类成员,定义如下:
&map&int, CacheInfo& m_&// Cache information table
&&& 在得到返回值以后,只需要遍历每一个BYTE的值,找到在m_cache中存在的元素,就可以得到cache信息了。代码如下:
&typedef unsigned char BYTE;
&DWORD CPUID::GetCacheInfo(CacheInfo& L1, CacheInfo& L2, CacheInfo& L3)&{&&BYTE cValues[16];&&&&&&// 存储返回的16个byte值&&DWORD result = 0;&&&&&&// 记录发现的缓存数量&&Executecpuid(2);&&&&&&// 执行cpuid,参数为eax = 2&&memcpy(cValues, &m_eax, 16);&&&&&// 把m_eax, m_ebx, m_ecx和m_edx存储到cValue
&&for (int i = 1; i & 16; i++)&&&&&// 开始遍历,注意eax的第一个byte没有意义,需要跳过&&{&&&if (m_cache.find(cValues[i]) != m_cache.end())&&// 从表中查找此信息是否代表缓存&&&{&&&&switch (m_cache[cValues[i]].level)&&// 对号入座,保存缓存信息&&&&{&&&&case 1:&&// L1 cache&&&&&L1 = m_cache[cValues[i]];&&&&&&&&&case 2:&&// L2 cache&&&&&L2 = m_cache[cValues[i]];&&&&&&&&&case 3:&&// L3 cache&&&&&L3 = m_cache[cValues[i]];&&&&&&&&&default:&&&&&&&&&}&&&&result++;&&&}&&&&}
&&& 7、获得CPU的序列号
&&& 序列号无处不在!!CPU的序列号用一个96bit的串表示,格式是连续的6个WORD值:XXXX-XXXX-XXXX-XXX-XXXX-XXXX。WORD是16个bit长的数据,可以用unsigned short模拟:
&typedef unsigned short WORD;
&&& 获得序列号需要两个步骤,首先用eax = 1做参数,返回的eax中存储序列号的高两个WORD。用eax = 3做参数,返回ecx和edx按从低位到高位的顺序存储前4个WORD。实现如下:
&bool CPUID::GetSerialNumber(SerialNumber& serial)&{&&Executecpuid(1);&// 执行cpuid,参数为 eax = 1&&bool isSupport = m_edx & (1&&18);&// edx是否为1代表CPU是否存在序列号&&if (false == isSupport)&// 不支持,返回false&&{&&&&&}&&memcpy(&serial.nibble[4], &m_eax, 4);&// eax为最高位的两个WORD
&&Executecpuid(3);&// 执行cpuid,参数为 eax = 3&&memcpy(&serial.nibble[0], &m_ecx, 8);&// ecx 和 edx为低位的4个WORD
CPUID还能获得很多信息,以上实现的都是最常见的。完整的代码和有关cpuid的资料我会用附件的形式附在文章结尾。昨天代码写完后拿给朋友看,朋友
骂我使用了太多的memcpy()函数进行赤裸裸的内存操作...其实我这么做的目的是提高程序的性能,减少代码量,但是可读性就降了下来,不喜欢这种风
格的朋友可以自己改一下。还有,因为CPUID类只是提供了很多的接口,没有存储数据的功能,所以类以Singleton的方式设计,使用方法可以参考我
代码中的test2.cpp文件
cpuid的资料

我要回帖

更多关于 主频最高的cpu 的文章

 

随机推荐