Mac电脑的Gentoo Linux CPU idle

我在 在MacBook Pro上安装Gentoo Linux 之后(实际在 MacBook Air 13” Mid 2013 实践),似乎遇到一个问题:

  • 操作系统运行时,合上笔记本屏幕,内核日志显示 dmesg -T 存在 Call Trace 报错:

mac笔记本合上屏幕时系统日志出现Call Trace
[Mon Dec 25 17:59:24 2023] irq 0: nobody cared (try booting with the "irqpoll" option)
[Mon Dec 25 17:59:24 2023] CPU: 2 PID: 0 Comm: swapper/2 Tainted: P           O       6.1.67-gentoo-dist #1
[Mon Dec 25 17:59:24 2023] Hardware name: Apple Inc. MacBookAir6,2/Mac-7DF21CB3ED6977E5, BIOS 478.0.0.0.0 01/13/2023
[Mon Dec 25 17:59:24 2023] Call Trace:
[Mon Dec 25 17:59:24 2023]  <IRQ>
[Mon Dec 25 17:59:24 2023]  dump_stack_lvl+0x44/0x5c
[Mon Dec 25 17:59:24 2023]  __report_bad_irq+0x38/0xad
[Mon Dec 25 17:59:24 2023]  note_interrupt.cold+0xa/0x65
[Mon Dec 25 17:59:24 2023]  handle_irq_event+0x7a/0x80
[Mon Dec 25 17:59:24 2023]  handle_edge_irq+0x9c/0x290
[Mon Dec 25 17:59:24 2023]  __common_interrupt+0x42/0xa0
[Mon Dec 25 17:59:24 2023]  common_interrupt+0x7d/0xa0
[Mon Dec 25 17:59:24 2023]  </IRQ>
[Mon Dec 25 17:59:24 2023]  <TASK>
[Mon Dec 25 17:59:24 2023]  asm_common_interrupt+0x22/0x40
[Mon Dec 25 17:59:24 2023] RIP: 0010:cpuidle_enter_state+0xde/0x420
[Mon Dec 25 17:59:24 2023] Code: 00 00 31 ff e8 83 d6 5c ff 45 84 ff 74 16 9c 58 0f 1f 40 00 f6 c4 02 0f 85 25 03 00 00 31 ff e8 28 d2 62 ff fb 0f 1f 44 00 00 <45> 85 f6 0f 88 85 01 00 00 49 63 d6 48 8d 04 52 48 8d 04 82 49 8d
[Mon Dec 25 17:59:24 2023] RSP: 0018:ffffa93e400cbea0 EFLAGS: 00000246
[Mon Dec 25 17:59:24 2023] RAX: ffff95a967332b40 RBX: ffffc93e3fd00538 RCX: 0000000000000000
[Mon Dec 25 17:59:24 2023] RDX: 0000000000000002 RSI: fffffffea9bc14fd RDI: 0000000000000000
[Mon Dec 25 17:59:24 2023] RBP: 0000000000000006 R08: 0000000000000002 R09: 0000000040000219
[Mon Dec 25 17:59:24 2023] R10: ffff95a9673315c4 R11: 00000000000005da R12: ffffffffaec1a340
[Mon Dec 25 17:59:24 2023] R13: 000000061e2481c6 R14: 0000000000000006 R15: 0000000000000000
[Mon Dec 25 17:59:24 2023]  cpuidle_enter+0x29/0x40
[Mon Dec 25 17:59:24 2023]  do_idle+0x1c9/0x240
[Mon Dec 25 17:59:24 2023]  cpu_startup_entry+0x26/0x30
[Mon Dec 25 17:59:24 2023]  start_secondary+0x117/0x140
[Mon Dec 25 17:59:24 2023]  secondary_startup_64_no_verify+0xe5/0xeb
[Mon Dec 25 17:59:24 2023]  </TASK>
[Mon Dec 25 17:59:24 2023] handlers:
[Mon Dec 25 17:59:24 2023] [<000000009d829982>] dw_dma_interrupt
[Mon Dec 25 17:59:24 2023] Disabling IRQ #0

此后,就发现操作系统运行非常卡顿,甚至ssh登陆后终端输入命令都非常慢

排查

我是使用网线直连笔记本电脑和 HPE ProLiant DL360 Gen9服务器 ( zcloud )的一个网络接口,通过 zcloud 提供共享网络(IP masquerade)上网。由于两个电脑之间使用网线直连,所以首先排查两个电脑之间的网络: ping 192.168.6.200 (也就是 zcloud 上网络地址,这是 bcloud ( MacBook Air 13” Mid 2013 笔记本)的默认网关:

直接ping网关发现丢包率极高
...
--- 192.168.6.200 ping statistics ---
49 packets transmitted, 34 received, 30.6122% packet loss, time 48639ms
rtt min/avg/max/mdev = 0.505/0.571/0.734/0.041 ms

直连网线丢包率都高达30%,难怪终端ssh操作这么卡顿

这里 网线直连 使用了一块USB接口的网卡,我怀疑是笔记本屏幕合上屏幕进入 cpuidle 失败导致了USB接口网卡的异常:

  • USB网卡通过 sudo lsusb 可以看到,是 RTL8153 Realtek的芯片:

执行 sudo lsusb 可以看到 RTL8153 Realtek网卡芯片
Bus 002 Device 006: ID 0bda:8153 Realtek Semiconductor Corp. RTL8153 Gigabit Ethernet Adapter

执行 sudo lsusb -vvv 可以看到更为详细的信息

  • work around 的方法很土: 重新插拔一次USB网卡,重新激活网卡后就能正常通讯了

待解决

看起来 Mac 笔记本的休眠功能需要研究解决,目前存在的问题有:

  • 合上笔记本屏幕会触发 cpuidle 的Call Track报错,网卡休眠唤起异常

  • 操作系统关机以后,一旦笔记本电脑连接外接电源,自动触发power on,有点尴尬

总之,看来还需要折腾折腾休眠功能,以便在linux上实现类似 macOS 一样的持续运行(合上笔记本屏幕即休眠,打开屏幕即工作)

参考