故障管理#

日志记录#

Aerial 遵循 Kubernetes 的最佳实践 (https://kubernetes.ac.cn/docs/concepts/cluster-administration/logging/) 来实现日志记录。

cuphycontroller 应用程序输出日志消息,其中日志级别小于或等于 nvlog.console_log_level cuphycontroller YAML 配置文件参数,使用节点级别日志记录模式直接输出到 stdout

../../../_images/image11.png

对于高性能日志,Aerial 使用共享内存记录器从实时线程卸载 I/O 瓶颈。日志消息(级别小于或等于 nvlog.shm_log_level cuphycontroller YAML 配置文件参数)将输出到共享内存记录器。可以使用流式 Sidecar 模式(日志直接写入本地磁盘)检索共享内存记录器输出

../../../_images/image12.png

或者使用带有日志记录代理的 Sidecar 模式直接流式传输到外部日志记录后端

../../../_images/image13.png

nvlog 消息格式#

每个 nvlog 消息都是 “[软件组件名称] 消息” 形式的字符串,并带有以下空格分隔的可选字段前缀

  • 日期

  • 时间戳

  • 主或辅助 nvlog 进程

  • 日志级别

  • 日志事件代码 ID

  • 日志事件代码字符串

  • 调用线程正在其上运行的 CPU 核心号

  • 64 位序列号

  • 线程 ID

  • 线程名称

这些字段在 nvlog_config.yaml 中启用。

一个 nvlog 消息示例是

20:58:09.036299 C [NVLOG.CPP] nvlog_create: name=phy shm_level=1
console_level=1 max_file_size=0x10000000 shm_cache_size=0x200000
log_buf_size=1024 prefix_opts=0x09

上面的消息启用了以下前缀

  • 时间戳

  • 日志级别

以下是另外三个 nvlog 消息示例,其中启用了所有前缀字段,取自 cuphycontroller 进程执行开始时

2021-09-15 21:29:22.926521 P C 0 SUCESS 1 0 140699056300032
cuphycontroller [NVLOG.CPP] nvlog_create: name=phy shm_level=1
console_level=1 max_file_size=0x10000000 shm_cache_size=0x200000
log_buf_size=1024 prefix_opts=0xFF

2021-09-15 21:29:22.926560 P C 0 SUCCESS 1 1 140699056300032
cuphycontroller [CTL.SCF] Config file:
/cuBB_21-3/cuPHY-CP/cuphycontroller/config/cuphycontroller_V08.yaml

2021-09-15 21:29:23.130882 P C 0 SUCCESS 22 2 140699056300032
cuphycontroller [CTL.YAML] Standalone mode: No

以下是故障级别且事件代码为 AERIAL_MEMORY_EVENT 的 nvlog 消息示例

20:58:09.036299 F MEMORY_EVENT Unable to allocate memory for FH buffers

上面的消息启用了以下前缀

  • 时间戳

  • 日志级别

  • 日志事件代码字符串

本文档进一步描述了这些字段

日期为 YYYY-MM-DD 格式,例如 1970-01-01

时间戳为 HH:MM:SS.us,例如 20:58:09.036299

主进程为 P,辅助进程为 S。

日志级别为

  • F - 致命

  • E - 错误

  • C - 控制台

  • W - 警告

  • I - 信息

  • D - 调试

  • V - 详细

日志事件代码字符串或日志事件代码 ID 是一个字符串(或数字 ID),指示已发生事件的类别。

nvlog 组件#

Aerial 实现了以下默认日志记录组件标签

nvlog 组件

  • 10: “NVLOG”

  • 11: “NVLOG.TEST”

  • 12: “NVLOG.ITAG”

nvipc 组件

  • 30: “NVIPC”

cuPHY-CP 控制器组件

  • 100: “CTL”

  • 101: “CTL.SCF”

  • 102: “CTL.ALTRAN”

  • 103: “CTL.DRV”

  • 104: “CTL.YAML”

cuPHY-CP 驱动程序组件

  • 200: “DRV”

  • 201: “DRV.SA”

  • 202: “DRV.TIME”

  • 203: “DRV.CTX”

  • 204: “DRV.API”

  • 205: “DRV.FH”

  • 206: “DRV.GEN_CUDA”

  • 207: “DRV.GPUDEV”

  • 208: “DRV.PHYCH”

  • 209: “DRV.TASK”

  • 210: “DRV.WORKER”

  • 211: “DRV.DLBUF”

  • 212: “DRV.CSIRS”

  • 213: “DRV.PBCH”

  • 214: “DRV.PDCCH_DL”

  • 215: “DRV.PDSCH”

  • 216: “DRV.MAP_DL”

  • 217: “DRV.FUNC_DL”

  • 218: “DRV.HARQ_POOL”

  • 219: “DRV.ORDER_CUDA”

  • 220: “DRV.ORDER_ENTITY”

  • 221: “DRV.PRACH”

  • 222: “DRV.PUCCH”

  • 223: “DRV.PUSCH”

  • 224: “DRV.MAP_UL”

  • 225: “DRV.FUNC_UL”

  • 226: “DRV.ULBUF”

  • 227: “DRV.MPS”

  • 228: “DRV.METRICS”

  • 229: “DRV.MEMFOOT”

  • 230: “DRV.CELL”

cuPHY-CP cuphyl2adapter 组件

  • 300: “L2A”

  • 301: “L2A.MAC”

  • 302: “L2A.MACFACT”

  • 303: “L2A.PROXY”

  • 304: “L2A.EPOLL”

  • 305: “L2A.TRANSPORT”

  • 306: “L2A.MODULE”

  • 307: “L2A.TICK”

  • 308: “L2A.UEMD”

cuPHY-CP scfl2adapter 组件

  • 330: “SCF”

  • 331: “SCF.MAC”

  • 332: “SCF.DISPATCH”

  • 333: “SCF.PHY”

  • 334: “SCF.SLOTCMD”

  • 335: “SCF.L2SA”

  • 336: “SCF.DUMMYMAC”

cuPHY-CP testMAC 组件

  • 400: “MAC”

  • 401: “MAC.LP”

  • 402: “MAC.FAPI”

  • 403: “MAC.UTILS”

  • 404: “MAC.SCF”

  • 405: “MAC.ALTRAN”

  • 406: “MAC.CFG”

  • 407: “MAC.PROC”

cuPHY-CP ru-emulator 组件

  • 500: “RU”

  • 501: “RU.EMULATOR”

  • 502: “RU.PARSER”

cuPHY-CP aerial-fh-driver 组件

  • 600: “FH”

  • 601: “FH.FLOW”

  • 602: “FH.FH”

  • 603: “FH.GPU_MP”

  • 604: “FH.LIB”

  • 605: “FH.MEMREG”

  • 606: “FH.METRICS”

  • 607: “FH.NIC”

  • 608: “FH.PDUMP”

  • 609: “FH.PEER”

  • 610: “FH.QUEUE”

  • 611: “FH.RING”

  • 612: “FH.TIME”

cuPHY-CP compression_decompression 组件

  • 700: “COMP”

cuPHY-CP cuphyoam 组件

  • 800: “OAM”

cuPHY 组件

  • 900: “CUPHY”

注意

这些字符串可以使用 nvlog_config.yaml 进行更改。

事件代码#

以下是事件代码列表(请参阅 aerial_event_code.h)。事件字符串与事件代码名称匹配,减去 AERIAL_

| AERIAL_SUCCESS             = 0,
| AERIAL_INVALID_PARAM_EVENT = 1,
| AERIAL_INTERNAL_EVENT      = 2,
| AERIAL_CUDA_API_EVENT      = 3,
| AERIAL_DPDK_API_EVENT      = 4,
| AERIAL_THREAD_API_EVENT    = 5,
| AERIAL_CLOCK_API_EVENT     = 6,
| AERIAL_NVIPC_API_EVENT     = 7,
| AERIAL_ORAN_FH_EVENT       = 8,
| AERIAL_CUPHYDRV_API_EVENT  = 9,
| AERIAL_INPUT_OUTPUT_EVENT  = 10,
| AERIAL_MEMORY_EVENT        = 11,
| AERIAL_YAML_PARSER_EVENT   = 12,
| AERIAL_NVLOG_EVENT         = 13,
| AERIAL_CONFIG_EVENT        = 14,
| AERIAL_FAPI_EVENT          = 15,
| AERIAL_NO_SUPPORT_EVENT    = 16,
| AERIAL_SYSTEM_API_EVENT    = 17,
| AERIAL_L2ADAPTER_EVENT     = 18,
| AERIAL_RU_EMULATOR_EVENT   = 19,