欢迎光临散文网 会员登陆 & 注册

【知乎】X86架构与linux内核系列(六) UBOX and PCU

2023-12-03 06:53 作者:失传技术  | 我要投稿


X86架构与linux内核系列(六) UBOX and PCU


雪瀑牵裳


IT 老棒槌

关注他

21 人赞同了该文章

2020春节后开局第一篇技术文,动笔的这一刻居然有些懈怠的感觉。

就如同年轻时曾被安排和一个小姑娘见面,第一面的感觉说不上好也说不上不好。但之后恰好去波士顿培训了两周,回来以后,就是这种懈怠的感觉。那时偷懒,断了线就再也没有和那个妹子联系。——其实这样生活态度是不好不好的,不去努力争取,却将失败归结于缘分,也就年轻时能有这脸皮。唉,第一次见面就跟我说将来不用为买房操心、她家有两套房的妹子啊……
今夜济南终于下雪了,算是此冬第一场雪。坐在书房桌前,倒上一杯ALC 14.5%的 Grand Vin Selection,透着迷离的嫣红,看窗外雪花飘舞,挺好。
言归正传,接着聊技术,聊一下没有投入产出比的技术,哈哈。



从节前的上上上篇的内容: skyX CPU的内部结构,再温习一下这些部件。



如上图,在一个skyX CPU Socket 内部,各个部件的名称:
Cores
CHA
UBOX
PCU
IIO
IMC
——除了core以外,上图中所有部件都被intel 统称为 uncore modules。
此系列的第二篇里,我在粗略介绍PCIE的时候,曾将CPU比喻成中央朝廷,而将PCH比喻成安西都护府;那么在这里,我们将继续延伸之前的比喻(该比喻局限于单CPU系统):

1、CPU内:
程序 相当于皇帝的……想法;
数据 相当于皇帝实现想法所需要的……金钱;
在中央朝廷(CPU)里,有皇帝(Core);
包围在皇帝身边最近的,是司礼监掌印大太监(CHA and cache)。——洒家是皇帝铁杆的心腹,贴心老棉袄啊;
在朝廷里中最核心的打杂的是内阁首辅(UBOX),汇总处理皇帝与各地之间的消息和奏折(irq,MSI,event等等),并通知皇帝和官员;
朝廷里的吏部尚书(PCU),接到皇帝或上帝的旨意,负责让官员们嗝屁,关禁闭;给皇帝和上帝报告各位官员的死活状态。
朝廷里的工部尚书(IIO ),负责让下面的能吏(火箭一般的GPU,IB卡)快速赚钱(获取数据);
朝廷里的户部尚书(IMC),连接的内存代表国库,负责保存国家的金钱;

2、CPU外:
PCH 相当于安西都护府,管理被发配到边疆的庸吏(龟速硬盘,usb接口)。
BMC 相当于红衣主教,呃,代表上帝监督你们。你们这些官员若踩了红线,我要给你们亮红牌。
BIOS 相当于盘古大神,呃,混沌初开(服务器加电)时开天地(basic Input/output init),然后就躲在都护府边上的犄角旮旯修仙去了,只给世人留下一个背影,深藏功与名。

嗯,好滴好滴,节前我们已经捋完了Cores以及 CHA,那么今天我们将捋一下uncore 部分的 UBOX 和 PCU。



在上边的比喻中说过,在朝廷里中最核心的打杂的是内阁首辅(UBOX),汇总处理皇帝与各地之间的消息和奏折(int 中断),并通知皇帝和官员;
那么在intel的相关正式技术资料里是怎么描述ubox的呢?

1、Intel的说明:
UBOX 又叫configuration agent。
UBOX 负责 处理和分发CPU与CPU、CPU和设备之间的中断和事件:
不论什么IPI中断,还是传统INT中断,还是消息信号型中断,还是设备与cpu之间的event,都统统交由UBOX进行汇总处理——ubox简直就是一个消息桥。

UBOX 又给bios提供了一些寄存器 用于负责资源事务仲裁:
其实此处将bios换成UEFI更好。在UEFI初始化时,系统中的内存memory还没有初始化。而UEFI作为一个系统仍然是需要一些系统资源的。于是,在UEFI初期,cpu中的cache成了UEFI系统的运行内存,而UBOX中的某些寄存器也成了UEFI的信号量(Semaphore)系统资源。

——所以应该好好体会UBOX这个名字的“U”,乃是Utility也。

写到这里,我发现虽然写这个Intel X86 架构已经够底层的了,但是在写作过程中仍然涉及到了更底层的知识,让我很纠结讲还是不讲:
A、什么是中断,什么是msi,以及APIC,XAPIC;——这个就不讲了,自己约度娘吧。
B、什么是uefi,uefi的启动过程以及六大阶段;——这个到了以后的专题讲intel error report机制时会讲;
C、什么是msr,什么是csr,什么是配置空间,什么是内存映射空间?——这个到了以后的专题讲intel 诊断体系的寄存器日志分析的时候会讲。
D、什么是信号量(Semaphore)?这个到下个系列(有点遥远了,呵呵) linux crash分析时再讲。

2、作者的补充:
既然UBOX负责汇总和分发中断。而当设备发生硬件错误时,设备往往会发硬件中断给UBOX。因此UBOX会记录硬件错误中断的信息。所以在X86 架构中,UBOX是RAS 的重要组成部分。
UBOX内的寄存器值与硬件故障的定位有最直接的联系。在intel 诊断体系中,UBOX是除了MSR寄存器之外,最重要的状态寄存器聚集地。UBOX的寄存器与硬件故障定位的关系,将在后续的内容中描述。

3、作者对intel文档的吐槽:

吐槽点1:
intel的文档中ubox示意图,如下图所示:


我们看:上面的图中蓝圈处,Ubox画在了PCIE2处;而上面截取的Intel eds 的文字描述,却又说UBOX和 PCIE1 module共用一个Mesh stop;——这图片和文字二者之间是矛盾的。
若依据文字描述,那么图中Ubox部分应该右移到 PCIE1 and DMI3 那个方块下才对。

吐槽点2:
另外即使是文字描述是正确的,但文字描述也是很模糊的。其实UBOX和PCIE1毛关系都没有,UBOX其实是和DMI3在一个路径上的。而DMI3和PICE1是共用一个Meshstop。所以我认为这句话应改成:“UBOX和 DMI3共用一个Meshstop”,应更好一些。



在上边的比喻中说过,朝廷里的吏部尚书(PCU),接到皇帝或上帝的旨意,负责让官员们关禁闭,或者嗝屁;给皇帝和上帝报告各位官员的死活状态。
为什么这么说呢?在intel的相关正式技术资料里又是怎么描述PCU的呢?
1、Intel的说明:
PCU,就是 power control unit;
PCU,负责CPU的供电和温度控制:
哇,这个信息量好大,这么说,PCU将会和Cstate Pstate,ACPI等概念都会有联系?对的,intel的资料也是这么说的:PCU负责管理Cstate、Pstate的 ACPI需求。
PCU,还负责向外提供Cpu的电压和温度数据(就是所谓的DTS数据),从而实现CPU风扇转速调节等一系列功能;
除了通常管理Digital Thermal Sensor 以外,这个,intel文档里还说了灰常灰常重要的一点,PCU直接控制带外PECI功能接口。
而这个PECI功能,太太太重要了,将贯穿整个intel X86的诊断体系结构。这里先介绍一下,等intel X86的诊断体系结构的时候再详细的讲。

2、什么是PECI:
在很久很久以前,PECI 是由Intel 提供的一种接口,只需要使用一根线就可以实现自身时钟与数据的传输,不需要任何其他的控制信号线。
PECI 最早主要是为获取处理器的温度而设计的,PECI 通过处理器中的数字温度传感器(digital thermal sensor,DTS)获取处理器的核心温度。然后把温度信息传递出去,所以那时在CPU和BMC之间设计了一条实实在在的连线,也叫PECI线。
再后来,PECI接口发展了,PECI接口不仅仅能获取到温度信息,还能获取到Intel 处理器和芯片组的内部寄存器信息。
——这点很重要奥,也就是说,此时,我们已经可以通过bmc的ipmitool指令,主动去获取cpu内的寄存器信息了。
再后来,PECI又发展了,不仅仅是个物理接口,还成了一个数字接口;也就是说PECI功能此时有两条路径往外发送信息:
第一条还是传统的CPU直接到BMC的PECI连线,这叫带外PECI;
第二条是复用从CPU通过DMI接口到PCH再到BIOS再到BMC的路径,这叫带内PECI;
PS:Intel提供了一个强大的寄存器收集和分析工具。这个工具既可以通过ctag连线连接到cpu内部去获取寄存器。也可以通过bmc通过ipmitool命令来获取寄存器。其中该工具若通过bmc的ipmitool命令连接cpu时,又分带内方式和带外方式,此处的带内带外就是指的PECI带内带外。
——可惜,在我司的服务器设备上,这个工具我试了好久,可惜无论哪种方式我都连接不上啊……

另外,根据实验现象,我总怀疑我司的服务器,没有带外peci连线,这个等以后再验证吧。

3、吐槽:

槽点1:intel的示意图不是太严格


同样的,上面这个图蓝圈处,pcu的位置是随便放的,和ubox一样其位置没有特定含义,只是绘图人员画了个方块,扔到CPU里,表示CPU有PCU而已。

槽点2:关于 UBOX和PCU中相同命名的寄存器
某些PCU中寄存器和 UBOX中的寄存器名字是一模一样的。若按照我们行内的逻辑,之所以在两个不同位置放置相同名称的寄存器,其目的是为了提高性能。所以一般来讲,两个不同位置放置的相同名称的寄存器,其值应该是一样的。但是在Skylake 平台上,Ubox的某个寄存器 和 PCU上的相同名称的寄存器,二者的值是不一样的。PCU上的该寄存器的值比Ubox的该寄存器的值,每个字节值都齐刷刷的小了1。
——我猜,瞎猜,intel研发cpu的时候也是分成各个子模块的。也许intel的ubox子项目组和PCU子项目组没协调好数据字典吧,哈哈哈哈。当然也许intel有其他的考量也未必可知。
这个寄存器的名称我就不多说了,倒霉的下游厂家,若是不求甚解,闭着眼使用了PCU的该寄存器值,肯定要出错的。




如果我们把CPU中 的IIO,内存,cache认为是支撑数据流的重要设备,那么UBOX和PCU就是支撑控制流的最重要的两个部分。UBOX和PCU中的状态寄存器们,是诊断CPU、mem、以及chipset的重要判断依据。
——记住最上面我对各个部件的比喻,将来讲服务器调优时,我还会依据这个比喻来讲。
此篇结束,下篇将讲BIOS以及OS能看得到摸得着的东西:IIO和IMC。


嗯,红酒不错,谢了哥们。
趁着还未散去的酒香,以一篇我在青岛红树林酒店的海滩,面对着灵山岛写过的诗文,回赠送我红酒的哥们:



旅行季
travel


是谁,遗忘了房门钥匙,
迷失在了红树林?
六点,
清晨。
海浪扬起白纱,
安静的,没了欣赏的人。
阳光依然轻柔,
踮着脚步,
渔船,灯塔,摇曳着波光粼粼。
海那的灵山,
雾中忽隐忽现,
山中的仙子,
吮着手指,
羡煞遥望的凡尘。
草地上一声咏叹,
悠扬婉转着,
和风长吟。
暧昧如红酒,
浇入花的心。
于是花醉了,
花香成了毒药,
麻醉了不能了无牵挂的魂。
咦?
是谁,遗忘了房门钥匙,
使我情迷红树林。
——红树林

另外,更多未更新的知识内容,请关注公众号:雪瀑牵裳的树屋,那里有intel x86 cpu架构,有linux内核,还会有openstack,openshift等云计算方面的内容。


编辑于 2020-05-31 17:04

「真诚赞赏,手留余香」

赞赏

还没有人赞赏,快来当第一个赞赏的人吧!

x86


Linux 内核


操作系统内核


发布一条带图评论吧


1 条评论

默认

最新

不愿透露姓名的人

感觉像是在最近很火的某潮工作或者工作过

2021-11-26


【知乎】X86架构与linux内核系列(六) UBOX and PCU的评论 (共 条)

分享到微博请遵守国家法律