现在的位置: 首页 > 自动控制 > 工业·编程 > 正文

BMC工作回顾及面试准备

2020-04-05 16:26 工业·编程 ⁄ 共 5536字 ⁄ 字号 暂无评论

我工作9年,会服务器管理,电源管理,IPMI规范,redfish规范不太熟。系统集成测试涉及的不多,不过跟集成化测试团队打过很多交道。会bash和python编程,但不是专家级别,可以认为熟练 。C是专家级别,C++比较菜。

导引:自我介绍至关重要,引出下面所有你想详细讨论的问题。

论点一:我熟悉BMC业务并且了解背后的客户需求。

论点二:我经常会去思考各模块设计的短板和缺陷,并重构代码,提高代码质量。

论点三:熟悉BMC架构

论点四:通过严格的代码审查,以及持续优化开发流程,努力提高产品质量

论点五:快速定位、调试并解决bug的能力比较强

 

论点一:我熟悉BMC业务并且了解背后的客户需求。

通过做A项目熟悉的功能模块(业务面)

A项目

PSU

HSBP

SDR

FSC

1

Cold redundancy

HSBP update

Auto Configure

Shared fan

2

redundancy

HSBP discovery

FCT SDR

Error boost

3

Share resource management

Shared resource management

Online Update

Profile

4

PSU firmware update

 

Default SDR

Domain

1

Load balance

Remote update

HW Changes

Error tolerant

2

Redundancy and error resilient

Modular design

Factory test

Acoustic

3

Information synchronization

HDD management

Remote update

Performance

4

Remote update

 

basic need of customer

 

通过做B项目优化的功能模块

B项目

EMP

PDB

Power consumption

PDB firmware

Secure boot

1

Layer 2 switch

PIC32 firmware

 

Boot loader

Redundancy

2

 

Chassis fans

 

Firmware update

Two stage-boot

3

 

 

 

 

Safe mode

4

 

 

 

 

Security version

1

Easy routing

Modular design

 

Error resilient

Redundancy

2

-TOR

 

 

Remote upd

Two stage-boot

3

 

 

 

 

Safe mode

4

 

 

 

 

Security version

论点二:我经常会去思考各模块设计的短板和缺陷,并重构代码,提高代码质量。

EMP Management Solution (各版本之间迭代优化的逻辑)

Item

论点

论点

深入了解项目的实际需求,在实践中快速迭代学习,不断回溯,思考项目需求。从系统的级别思考问题。1. 有效沟通可以充分了解项目需求2. 站在更高的层次解决问题,比如系统级别,可以更好的解决问题,规避风险。

结构及使用方法

2 网口,up / down,状态指示灯,复位按钮;在EMP模块和计算节点上各有一颗二层交换机芯片;EMP模块中的交换芯片将所有计算节点都连在了一起;同时有一条i2c接到了各个计算节点的BMC上。将任何一个网口接到交换机上,机箱里面的四个计算节点BMC就可以都拿到IP;也可以将多台服务器串一起,那么所有计算节点就都可以拿到管理IP。

需要BMC 实现的管理功能

设计实现功能:1. 初始化EMP模块的交换芯片2. 获取EMP模块的网线连接状态为了实现上述功能,必须要解决的问题:1. 多节点同时访问造成了初始化时序的中断,时常会导致EMP不工作;为了解决这个问题,必须依赖于多节点之间的仲裁机制,在仲裁出主节点后才能初始化EMP模块,这样就带来另一个问题:1. EMP初始化比较晚,客户插上网线但是要等到计算节点启动以后EMP模块才能工作2. 如果机箱没有插入计算节点,EMP模块始终不工作3. 这样会使得在多个机箱级联的时候,下游机箱内的BMC拿不到IP在这时候,我们将需求回溯了下,发现为什么不能直接eeprom初始化emp模块呢?这样,1. 机箱的初始化不依赖于计算节点在与不在2. BMC无需去初始化EMP,避免了可能的bug3. EEPROM 初始化EMP更加稳定可靠

PDB firmware 设计上的考量及最终交付的质量

Item

Content

功能

PDB即电源分布板,板载一颗PIC32单片机,负责控制机箱上的风扇,并且要求具备远程固件升级的能力。

设计

1. 由于风扇控制依赖的参数是通过OEM SDR加载到BMC里面的,PIC32是在机箱上的,所以PIC32只能作为从设备

参考

1. 参考内核时钟管理策略,引入时钟节拍和jiffies2. 定义一个统一的给BMC访问的寄存器接口3. 在固件升级的流程引入握手机制,是整个更新流程,更具有弹性和容错能力。

 

 

Power Consumption CCB 设计上的考量及最终交付的质量

Soft License 设计上的考量

HSBP 模块的优化的起因及效果,以及HSBP模块编码上的缺陷

Item

Content

功能

1. 动态侦测HSBP背板的数量及类型2. 获取背板及硬盘信息3.

设计

 

 

 

 

 

论点三:熟悉BMC架构

掌握 BMC 各接口及其实现的主要功能

 

1

2

3

4

 

KCS

 

 

 

 

 

LAN

WEB

RED FISH

IPMI over LAN

 

 

PCIe

Super IO

Post LED

KVM

 

 

USB

OOB Update

Virtual Medium

 

 

 

I2C

IPMB

PMBus

SMBus

FRU

Sensor

SGPIO

Platform related signal

 

 

 

 

掌握 HSBP、电源、网卡、制冷、固件升级、插卡常见管理方式

具体功能

1

2

3

HSBP管理

SGPIO+PSOC

 

 

固件升级

Push

Pull

Legacy

风扇控制

Shared fans

Dedicated fans

 

 

 

 

 

 

 

 

 

论点四:通过严格的代码审查,以及持续优化开发流程,努力提高产品质量

严格follow安全编码规范,大大提高代码质量。

1. 使用安全的C 字符串函数,比如safe string 库,在该库中所有API都增加了源缓存区与目标缓存区的大小,并且在出错时候返回错误码,而不是像strcpy直接返回。这样的话能够有效避免缓存区溢出造成的返回地址被篡改或者bash injection。由于每个栈帧是向上生长的,如果一个缓存区是20个字节,但是拷贝进入了40个字节,则有可能造成缓存区前面声明的变量被篡改,从而造成执行流程地异常;或者更严重,由于编译时候允许在栈上执行代码,并且该缓存区接受的数据是由用户控制的,那么黑客就可以将一段提前计算好的hex写入栈上,并且篡改返回地址,当函数返回时跳转到提前注入的代码中,导致恶意代码被运行,后果不堪设想。

2. free后将指针设置成空,能够有效避免野指针。而野指针是极其难以调试的一种bug。如果指针访问了代码段,访问了不存在的内存地址,访问了不可访问的内存空间,比如内核空间,函数递归调用导致栈溢出,如果能够捕捉到段错误其实是很幸运的,但是如果形成了野指针可能会造成极其难以复现的问题。

3. 使用安全的内存拷贝函数,情况类似于第一条。

4. 在编译是禁掉不安全的系统API,比如system系统调用。System会创建子进程执行命令,而如果用户能够控制传入的字符串,在某种情况下,或许可以传入一些意料之外的命令,比如将重要文件比如私钥通过scp传输到其他地方,启动一个shell终端,这样恶意用户获取可以获得系统完整的控制权。

5. 添加增强的编译器选项,比如将优化级别设置成0,禁止在栈上运行代码,启动栈保护机制,启动随机地址分布。通过这些方式可以有效提高程序的安全性和稳健性。

6. 使用Java strict mode

7. 定义明确的编码规范,定义明确的圈复杂度要求。

持续优化开发流程

1. 集成klocwork,避免了潜在的很多问题,比如内存泄漏,空指针,野指针,资源泄露,数组越界, double free等问题。

2. 集成BDBA,及时更新BMC中开源函数库,及时堵住漏洞,避免已知漏洞造成安全隐患。

论点五:快速调试并解决bug

论点六:不断学习与成长

c和c++安全编码》

缺陷

原因

现象

防护

C风格的字符串

无界字符串复制

源字符串长度未知,有可能超出目标缓存区,导致缓存区溢出

1. 正确使用安全字符串库2. -fstack-protector-strong

无结尾符错误

1. 由于缺少结尾符号,程序一直拷贝内容到新的缓存区,导致缓存区溢出2. 由于缺少结尾符,printf会一直打印栈上内容,造成信息泄露;

 

 

c风格的动态内存分配

初始化错误

假设分配到的内存全部为0;1. 可能会造成程序执行异常2. 导致敏感信息泄露

1. 将静态代码扫描加入到开发流程2.

多次释放内存

会破坏内存的数据管理结构

 

 

使用已经释放的内存指针

野指针或者段错误

 

 

整数

整型溢出

FSC bug的例子

 

有符号数和无符号数之间的比较

 

 

 

整数的回绕

 

 

 

Linux内核设计与实现》

中断

时间管理

进程调度

调试

内核同步机制

 

1. 中断上下文与进程上下文的区别(2)2. 中断下半部处理机制(3)3. 中断的控制(2)

 

1. 进程分类2. 进程状态可中断的睡眠不可中断的睡眠运行中Stopped僵尸进程3. 进程调度策略分类4. 调度器(CFS )

1. kernel object2. Printk3. Dmesg4.

1. 信号量2. 原子量3. 自旋锁4. 互斥量

 

HTTPS权威指南》

网络安全工程师教学视频

XXXXX MEM

面试问题准备:

可能会问到的问题:

1. 离职动机

(1) 由于中美关系的恶化,长远来看,美企或许不是最好的选择,所以想看看其他机会;

(2) XXXXXX团队慢慢的正在挤出核心开发的角色,由原来20人左右的团队缩水到现在10人多一点的团队,并且包括前任老板在内共10名资深开发人员换组,我慢慢也意识到这个问题的严重性;

(3) 并且目前这10人多一点的团队还被割裂成了两部分,隶属于两个事业部,少数资深的保留在了原有事业部;而我们几个资质较浅的被划分到了另一个事业部;

(4) 由于大部分资历比我还浅,很大一部分较核心开发工作已经外包出去了,技术上升的空间已经非常有限;

1. SPI 的四个时序

(1) 从设备选择

(2) 时钟

(3) 主设备发送,从设备接收

(4) 主设备接手,从设备发送

2. I2C 的相关知识点

(1) 两条信号线,SCL 和 SDA

(2) Sda下降沿,scl高电平为开始信号;sda上升沿,scl高电平为终止信号;

(3) 有7位地址模式和10位地址模式,我们目前使用的都是7位地址模式;全0代表广播地址;

(4) 速度有标准模式,快速模式,高速模式。

(5) 依赖于i2c,有smbus 和 pmbus,并且IPMI协议中定义了IPMB协议。

(6) 在英特尔的服务器中,主要有3条IPMB,两条是用于多节点服务器,节点之间通信的;还有一条是BMC与ME之间沟通的通道。有一条PMBus,机箱内所有的BMC/ME都通过这条PMBus与PSU相连,这样设计带来了一个问题就是这条PMBus过于繁忙,有时候会导致读写PSU FRU出错,所以PSU的FRU一般是只读的。BMC有多条smbus与各种设备通信,比如背板,温度传感器,FRU,各种卫星控制器

(7) Busybox 中有相关i2c的调试工具集合

(8) i2c的调试可以使用beagle,结合dmesg进行调试,常见的i2c问题主要是多主机的问题,多主机情况下,从设备有可能被误写。举个例子比如PSU和ME与BMC之间的通信会导致PSU FRU被写坏。

(9) i2c的内核驱动

3. 如何实现非标准的SEL

(1) 格式定义

① 标准SEL有16个字节,内容包括了记录者信息、时间戳、传感器信息、传感器的异常读值、以及几个解释事件的字节。

② 可以再扩展8个字节,将更加详细的事件信息记录进去,那么每条SEL有24个字节,可以将事件的严重程度以及更多的信息记录进去。

③ 这样做的好处是符合IPMI 2.0规范

(2) 存储

① 文件存储, ,

② 数据库存储

③ Binary 存储到flash的一个特定分区

4. 项目B中担任的角色和完成的事情

(1) 开发前期作为PDB固件以及风扇控制算法的负责人,开发后期作为BMC 固件的负责人

(2) 前期开发PDB固件及风扇控制算法

① 基于PIC32 MCU 独自完成整个固件开发,实现风扇控制、固件升级、实现SMbus寄存器接口功能;

② 实现PIC32 BMC固件升级功能

③ 基于原有代码,添加全新基于PIC32风扇控制逻辑;

(3) 开发后期完成的事情

① 分发并领导解决bug,审查解决方案,确保解决方案完整、无副作用、符合设计文档;

② 与系统集成测试和工厂测试团队合作,解决所有阻碍生产线的问题;

③ 在市场、架构以及测试团队帮助下,制定了管理EMP的方案;

④ 在已有代码基础上,完成自义定FRU字段的解析功能;

⑤ 领导机箱关键部件功耗实时显示的功能

5. 硬件架构

(1) CPU与CPU互联

(2) Pch挂在CPU下面,BMC通过PCIe、USB、LPC挂在PCH下面,

(3) Host的网络控制器挂在PCH下面,专用的管理网络控制器挂在BMC下面

(4) 从CPU或者南桥下面出来很多PCIe,用来接扩展卡或者是存储控制器;SAS / sata直接接到

(5) 内存通过DDR总线直接挂在CPU下面

6. 软件架构

7. HR 谈话准备,关于薪资

Q:您的期望薪资是多少?

A:年薪50W, 无论贵公司的薪资结构如何,不包含不可预测性收入,比如股票或者期权。

Q:如果给不到呢?

A:那贵公司的薪资结构是怎么样的?
Q:

8. HR谈话准备,关于跨组合作,展示积极性

9. HR谈话准备,关于离职原因,跨组合作受限。

10. HR谈话准备,关于我的工作职责以及组织关系

 作者:魔都狗蛋儿

给我留言

留言无头像?