how many penguins in ur linux你有几只企鹅呢?
0:前言
讲课说到CPU的Thread时候,又给自己OS上课了,顺便做了个实验:
展示:计算机系统是如何显示CPU的逻辑处理器(Threads)的?
索性搞个linux下如何看cpu逻辑处理器的?^v^不是单纯lscpu来查看的,而是通过企鹅来查看的哦。花了大半天的实验,终于搞定。给童鞋们写来看看。
实现原理:通过裁剪编译内核让linux启动的时候跳出企业数(线程数)。 Uname -a 因为这是我读书毕业那会学嵌入式linux时候的记忆,所以就用了2.6.x的内核,查了资料后面更高版本的取消了这个功能——内核数=企鹅数的对应,不过这个也可以通过内核裁剪配置显示功能的。 事先的环境:win10专业版本、vmware workstation17.6、centos 。 以2.6.x的kernel为例,为了编译更顺畅, 需在相同版本的内核的操作系统上,这里我使用了centos6.10(2011年停更) 然后安装好vmtools,便于共享和操作。(这些操作需要熟练的同学自己动手啦) 1.准备工具:1.1先更新yum源(变为清华源)ping mirrorlist.centos.org 出问题,就索性修改了 cd /etc/ ls cd yum.repos.d/ cat CentOS-Base.repo ls vi CentOS-Base.repo cp CentOS-Base.repo repo.bak gedit CentOS-Base.repo
yum clean all yum makecache 保证清空缓存生效。 1.2然后安装工具:yum install gcc make ncurses-devel openssl-devel elfutils-libelf-devel 按步骤安装提示即可。如果需要其他依赖必须安装。 2.源码编译2.1下载源码如图,按照官方路径找到对应的tar.gz的源码包下载。 2.2解压源码mv linux-2.6.32.tar.gz /opt/ cd /opt/ chmod +x linux-2.6.32.tar.gz tar xzvf linux-2.6.32.tar.gz ls cd linux-2.6.32 2.3裁减把系统默认的内核编译配置文件copy过来,文件名为: /boot/config-$(uname -r) 这里我的是: cp config-2.6.32-754.el6.x86_64 /opt/linux-2.6.32 cp config-2.6.32-754.el6.x86_64 .config Ls -lt make menuconfig … 2.3.1启用帧缓冲支持(Framebuffer)进入内核配置界面( make menuconfig ),依次启用以下选项
2.3.2启用帧缓冲控制台(Framebuffer Console)
2.3.3启用启动Logo(显示企鹅)
2.3.4每只企鹅代表一个 CPU 核心确保系统有多个核心,并在内核配置中启用 SMP 支持:
修改配置后,选择 < Exit > ,系统会提示: 然后保存为.config(这是个隐藏的文件) 可以用编辑器打开.config确保启用的选项存在,例如
这里:建议先备份你的 .config 注意:不要运行以下命令,它们会覆盖你的配置: make defconfig (恢复默认配置) make oldconfig (可能覆盖未定义选项) make distclean (会删除 .config ) 然后确保编译使用的是你保存的 .config ,确认配置一致性 在执行: make oldconfig # 安全地同步配置(不会覆盖已设置项) 它会提示你确认新选项。这样就生成你需要的.config文件了。至此就可以编译内核了。 // 以下非必须 ls /dev/fb* 查看是否支持,# 如果有输出,说明帧缓冲设备已启用 以上非必须// 2.4编译内核、模块并安装makeclean &&makemrproper //清理之前的编译结果(首次编译可省略) 开始编译:(2.6.x的使用以下命令,也可以make -j$(nproc)命令) make bzImage make modules make modules_install Make install //会把bzImage复制到/boot下,同时会生成对应的initramfs文件 2.5使用新内核这里需要通过修改grub的配置文件使用新的bzImage的kernel文件以及ramfs文件。 gedit grub.conf 或者: gedit /boot/grub/menu.lst //有一些对应的语法,grub-legacy 0.97的版本,命令也不一样 这里不可以使用update-grub和grub-mkconfig等命令。所以可以手动编辑, 修改/boot/grub/grub.conf文件,手动添加内核条目。典型配置需包含title、root、kernel和initrd参数。但是这里注意手动修改必须要有对应的文件系统, 否则启动会失败。 grub-install /dev/sda cat grub.conf
reboot 看看效果。。。 | ||||||||
看之前先了解下我的宿主机的配置: | ||||||||
这里以我的主机为例: CPU为 Xeon E3-1231 v3,(即线程Xeon E3-1231 v3 的官方规格中,“Threads” 参数明确为 8,对应系统识别的 8 个逻辑处理器。 3、查看效果3.1 一只企鹅 | My pc Host Cpu configs 4core 8个 | |||||||
显示了一只企鹅。^.^ 那是因为我刚开始就配置了一个core的processors | Uname -a lscpu Echo $(nproc) | |||||||
| Vmware Centos 6.10 Mm:2gb Proc:1 Hd:20gb | |||||||
3.2 两只企鹅 | ||||||||
然后我修改processors core个数为2. | ||||||||
看到了显示如上,两只企鹅。^..^ | ||||||||
| 同上。 | |||||||
这里我比较好奇vmware的机制,所以我修改Nuber of processors为1,Nuber of cores per processor为1,所以total processor core还是2,显示也是两只企鹅。 | ||||||||
3.3 不是三只企鹅是四只企鹅 | ||||||||
第三次,我修改为4个cores,显示如下。这里是四只企鹅。^….^ | ||||||||
这是我也通过lscpu查看os的信息,如下: [root@localhost Desktop]# lscpu Architecture: x86_64 CPU op-mode(s): 32-bit, 64-bit Byte Order: Little Endian CPU(s): 4 On-line CPU(s) list: 0-3 Thread(s) per core: 1 Core(s) per socket: 2 Socket(s): 2 NUMA node(s): 1 Vendor ID: GenuineIntel CPU family: 6 Model: 60 Model name: Intel(R) Xeon(R) CPU E3-1231 v3 @ 3.40GHz Stepping: 3 CPU MHz: 3399.014 BogoMIPS: 6788.84 Hypervisor vendor: VMware Virtualization type: full L1d cache: 32K L1i cache: 32K L2 cache: 256K L3 cache: 8192K NUMA node0 CPU(s): 0-3 [root@localhost Desktop]# 3.4 八只企鹅(怎么只有七?)配置了8processor core, | ||||||||
再来个2*4 如上图,我试了2*4和4*2的8processor core,就显示了七只企鹅,哈哈 你知道为什么吗?(^…….^,少了一只哦) | 4*2 | |||||||
3.5 能不能超生几只企鹅? | ||||||||
最后为试了下是否能“超频下”,vmware就提示不行了。 | ||||||||
|
4、启动视频我把启动过程录了屏: <<ev_20250918_7只企鹅.mp4>> ev_20250918_7只企鹅 |
5、后记好了,最后让有兴趣的童鞋也可以自己去折腾下,疑问可以留言。给大家留一张,膜拜下我的CPU把, 下图显示:~。~,~。~ |
|