介绍:
Pmon docker :运行多个守护进程,定期监控硬件组件的信息,同时在发现硬件异常时发出告警。
SONIC platform API : 由于每个白盒交换机上的外围硬件配置和驱动具有独特性,而在pmon docker 中希望通过统一的方式管理这些外围器件(例如风扇、LED、电源供应单元、SFP收发器、热传感器等)。故在二者中间增加了platform API,一个面向对象的API,可以清晰反映网络设备的物理组成,统一外围硬件的监控指标,同时简化了白盒开发。开发者是需要增加platform API中方法接口的实现,即可完成对外围器件的监控。
相关仓库
涉及两个主要仓库 sonic-platform-daemons 和 sonic-platform-common :
- sonic-platform-daemons ,提供pmon docker 中运行的各守护进程。
pcied, psud, syseepromd, thermalctld, xcvrd各个守护进程负责对应器件的信息收集,分别对应PCIE, 电源, 设备FRU, 温感&风扇, 收发模块。收集器件的信息,并保存到STATE_DB中。两个典型的例子为 固定的硬件信息syseeprom 和 变化的硬件信息psu。
固定的硬件信息 syseepromd:
守护进程syseeprom将在pmon容器的启动阶段启动,收集syseeprom信息并写入STATE DB。周期性监视syseeprom表的状态DB,如果表被删除,它将再次收集信息重新写入。
有了这个守护进程,show syseeprom CLI将能够从状态数据库获取数据,而不是访问硬件或缓存。
变化的硬件信息 电源psud:
首先电源个数psu_num 将存储在“chassis_info”表中,它只会在系统启动或重新加载时调用一次。key是 chassis_name,filed是“psu_num”,value来自 get_psu_num()。
需要实时监控的信息,psu_status 和 psu_presence 将存储在“psu_info”表中,它将每 3 秒更新一次。key是 psu_name,filed是“存在”和“状态”,value来自 get_psu_presence() 和 get_psu_status()
- sonic-platform-common 提供各类外设器件的python 抽象基类。
需要白盒的硬件供应商 继承基类,并添加方法的具体实现代码。方法通过sysfs 文件,访问外设器件的驱动,获取信息或下发配置。
红框中的文件,一般为必须要适配的文件,以保证pmon 的正常运行。在编译阶段将对应的py文件打包为whl形式,命名为sonic_platform-1.0-py3-none-any.whl 并复制到相应的device/<VENDOR_NAME>/<ONIE_PLATFORM_STRING>/目录中。设备启动时,根据设备当前的硬件信息,安装对应的wheel文件。
工作原理:
pmon docker 中每个守护进程负责收集信息保存到STATE_DB,每个进程大概的工作流程如下图:
首先,获取各个外设的常量信息,比如风扇插槽个数 电源插槽个数等。
然后,周期性收集可变数据,将信息保存到STATE_DB中。
测试&验证方法:
sonic-utilities 提供了show platform的命令行,查看各外设信息,这些命令从STATE_DB 中读取数据,进行展示。适配完成后,可以通过以下命令行来测试和验证 功能的正确性。
show platform syseeprom
show platform firmware status
show platform psustatus
show platform fan
show platform temperature
show platform pcieinfo
show interfaces transceiver