当前位置: 首页 > news >正文

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

[base]

name=CentOS-$releasever - Base - mirrors.tuna.tsinghua.edu.cn

baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos-vault/6.10/os/$basearch/

gpgcheck=1

gpgkey=https://mirrors.tuna.tsinghua.edu.cn/centos-vault/RPM-GPG-KEY-CentOS-6

[updates]

name=CentOS-$releasever - Updates - mirrors.tuna.tsinghua.edu.cn

baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos-vault/6.10/updates/$basearch/

gpgcheck=1

gpgkey=https://mirrors.tuna.tsinghua.edu.cn/centos-vault/RPM-GPG-KEY-CentOS-6

[extras]

name=CentOS-$releasever - Extras - mirrors.tuna.tsinghua.edu.cn

baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos-vault/6.10/extras/$basearch/

gpgcheck=1

gpgkey=https://mirrors.tuna.tsinghua.edu.cn/centos-vault/RPM-GPG-KEY-CentOS-6

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 ),依次启用以下选项

Device Drivers  --->

    Graphics support  --->

        <*> Support for frame buffer devices  --->

            <*>   VESA VGA graphics support         # 通用VESA驱动

            <*>   EFI-based Framebuffer Support     # 如果使用UEFI启动

            [*]   Enable Video Mode Handling Helpers

            [*]   Enable Tile Blitting Support

VESA VGA graphics support 是最常用的通用帧缓冲驱动,适用于大多数PC显卡。

如果你使用的是特定显卡(如Intel、NVIDIA、AMD),可以选择对应的驱动。

2.3.2启用帧缓冲控制台(Framebuffer Console)

Device Drivers  --->

    Graphics support  --->

        Console display driver support  --->

            <*> Framebuffer Console support

            [*]   Select compiled-in fonts

            [*]   VGA 8x16 font (或 8x8,根据分辨率选择)

以上是Linux在图形模式下显示控制台文本的基础。

2.3.3启用启动Logo(显示企鹅)

Device Drivers  --->

    Graphics support  --->

        [*] Bootup logo  --->

            <*>   Standard 224-color Linux logo

2.3.4每只企鹅代表一个 CPU 核心

确保系统有多个核心,并在内核配置中启用 SMP 支持:

Processor type and features  --->

    [*] Symmetric multi-processing support

修改配置后,选择  < Exit > ,系统会提示:

然后保存为.config(这是个隐藏的文件)

可以用编辑器打开.config确保启用的选项存在,例如

CONFIG_LOGO_LINUX=y

CONFIG_FRAMEBUFFER_CONSOLE=y

CONFIG_FB=y

这里:建议先备份你的  .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

grub-install /dev/sda  # 安装GRUB到磁盘

cat /boot/grub/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把,

下图显示:~。~,~。~

http://www.dtcms.com/a/395943.html

相关文章:

  • windows1122h2怎么升级24h2
  • ansible-playbook的使用
  • Zabbix7 监控USG6300E 并发IPv4会话数
  • Qt中使用多线程的范式
  • c语言10:指针加减指针的那些事儿
  • 数据库成为突破口:勒索软件攻击始于暴露的Oracle服务器
  • PT100铂电阻高精度原理图设计,已量产(温度传感器)
  • 推荐 6 个本周 yyds 的 GitHub 项目。
  • 内存释放机制以及栈和堆(c++)
  • PCL基础:点云体积计算,若需更精确的体积估算,可采用 Alpha Shape 或 Marching Cubes 等方法重建表面后再进行积分计算。
  • OSPF实验-20250922
  • Python控制流概述
  • 【LLM学习】【Ollama】四、MCP
  • 5G RedCap模组:轻量化5G技术的商业化实现
  • 深入探索卷积神经网络:从基础到高级架构(二)
  • 什么是DeepSeek-V3.1-Terminus版本?
  • 【C语言代码】堵车问题
  • A Survey of Zero-Shot Learning: Settings, Methods, and Applications
  • Windows连接Linux做开发的安装和配置
  • 【C++】lambda表达式类型相关问题
  • HTML应用指南:利用GET请求获取全国大疆限飞区域shp图层信息
  • Nginx进阶(二)
  • VSCode+WSL+cpolar:打造跨平台的随身Linux开发舱
  • Redis高可用方案:主从复制、哨兵与集群
  • STM32_03_库函数
  • SGP30气体传感器详解 (STM32)
  • stm32 BootLoader之检查栈顶地址是否合法(否则无法跳转到APP程序)
  • PyTorch 神经网络工具箱学习总结
  • 容器化 Spring Boot 应用程序
  • python 打包单个文件