概要
本文是一個簡單的信息記錄。記錄的是當服務器網卡的光模塊插入后內核的日志打印。通過這種日志打印,可以在定位分析問題的時候,知道進行過一次模塊插拔。
日志
截圖版:
文字版:
[32704.121294] mlx5_core 0000:01:00.0: Port module event: module 0, Cable plugged
[32707.399693] mlx5_core 0000:01:00.1: Port module event: module 1, Cable plugged
[32710.060490] mlx5_core 0000:01:00.0 enp1s0f0: Link up
[32710.060509] IPv6: ADDRCONF(NETDEV_CHANGE): enp1s0f0: link becomes ready
[32710.060809] mlx5_core 0000:01:00.1 enp1s0f1: Link up
[32710.061629] IPv6: ADDRCONF(NETDEV_CHANGE): enp1s0f1: link becomes ready
簡要信息:
- 光模塊插拔處理是在mlx5_core中出現的
- 在打印的信息中有module x表示第幾個port
- 成功后會打印Link up。
- 插拔后會通知IPv6,并且顯示link becomes ready
- 插拔后驅動會產生事件觸發到對應模塊比如IPv6 比如bond
代碼
收到MLX5_EVENT_TYPE_PORT_MODULE_EVENT的事件。
觸發機制:
事件注冊的地方:
可看到是注冊到eq上面的mlx5_eq_notifier_register
最后會放到eq的table表里面
初始化的時候會將這個eq與中斷綁定:
然后創建3種eq:
這個setup_async_eq比較深,最終會下發cmd到網卡NIC上,下發方式是通過create_eq_in
的方式 用MLX5_SET(create_eq_in, in, opcode, MLX5_CMD_OP_CREATE_EQ);
于是當網卡NIC上有事件發生會通過eq上報。更多參考:Mellanox OFED驅動中eq的event與中斷關系?通過什么機制調用不同event處理?注冊的2種形式?
綜述
本文記錄往下插拔的關鍵日志以及通知機制,可以看到是網卡固件通過中斷,在msi中斷中用eq上報事件,并通過內核的notifier block機制通知到注冊回調函數。最終在port_module的回調函數中(屬于mlx5_core模塊)進行打印,從而看到了上面的日志。
另外就是看到Cable plue就說明有一次插拔。這里的插拔不一定是網卡插拔,可能是光模塊異常,可能是交換機異常。但是抓住本質和網卡機制,對于分析此類問題比較方便。