![暂停/恢复时出现严重的 DMA/do_IRQ 错误,偶尔会冻结](https://linux22.com/image/820183/%E6%9A%82%E5%81%9C%2F%E6%81%A2%E5%A4%8D%E6%97%B6%E5%87%BA%E7%8E%B0%E4%B8%A5%E9%87%8D%E7%9A%84%20DMA%2Fdo_IRQ%20%E9%94%99%E8%AF%AF%EF%BC%8C%E5%81%B6%E5%B0%94%E4%BC%9A%E5%86%BB%E7%BB%93.png)
每次我暂停或恢复我的笔记本电脑(Dell Latitude E6520,今年购买)时,我都会在关机/启动之前收到控制台上显示的 2 条消息:
[ 407.107610] ehci_hcd 0000:00:1d.0: dma_pool_free buffer-128, f6f18000/36f18000 (bad dma)
有时,我会收到如下形式的消息:
[ 3753.979066] do_IRQ: 0.177 No irq handler for vector (irq -1)
有时,我的机器在挂起时会死机,Caps Lock 按钮闪烁,之后我需要进行硬关机。在消息开始出现之前(不久前),这种情况从未发生过,而且我认为在出现 do_IRQ 消息的情况下,这种情况从未发生过(尽管我对此不确定)。[用户手册中没有关于 Caps Lock 按钮闪烁的任何说明;如果滚动锁也闪烁,则显然可能是内核崩溃,但笔记本电脑没有滚动锁指示灯,控制台上也没有显示内核崩溃的消息。]
这些坏的 DMA/do IRQ 消息是否严重?我该怎么做才能调查/排除它们故障并解决冻结问题?
编辑:我现在也收到过以下错误信息几次:
[246943.023908] JBD: I/O error detected when updating journal superblock for sdb1.
[246943.023958] Buffer I/O error on device sdb1, logical block 0
[246943.023996] EXT3-fs (sdb1): I/O error while writing superblock
编辑: dmesg 的输出为http://pastebin.com/ra7MTQEj;/var/log/kern.log 的内容位于http://pastebin.com/i6jf0Md9
编辑:一些 smartctl (-a、-x、--log=error、--log=xerror) 指令的输出可在以下位置找到http://paste.ubuntu.com/1088488/。
编辑(2012 年 8 月 31 日):输出dmesg|grep -i ehci
可用http://paste.ubuntu.com/1177246/。
编辑:(2012 年 3 月 9 日):lshw 的输出位于http://paste.ubuntu.com/1183032
答案1
1.“糟糕的 DMA”
让我们首先处理“坏 dma”错误,因为它们是日志中反映的唯一一致的错误。
- 这些以及任何暂停/恢复问题都是由您的内部USB3G调制解调器,从MAC地址来看是爱立信F3507g。
- 是的,你没看错。并非所有 USB 设备都必须是外置的或插入可见的 USB 端口之一。现代笔记本电脑将从内部 USB“集线器”运行大量内部外围设备,如无线/3G 卡、蓝牙、网络摄像头等。
请注意这个明显的序列,每次发生“坏 dma”错误时它都会重复:
[171783.085166] USB2-1.6:USB断开,设备编号10 [171783.086623]ehci_hcd 0000:00:1d.0:dma_pool_free 缓冲区-128,eafaa000/2afaa000(坏 dma) [171783.087046]cdc_ncm 2-1.6:1.6: usb0:取消注册‘cdc_ncm’usb-0000:00:1d.0-1.6,疾病预防控制中心 NCM [171783.092382] 完成。 [171783.129959] ehci_hcd 0000:00:1d.0: dma_pool_free buffer-128, eb1aa000/2b1aa000 (坏 dma)
- 该
cdc_ncm
模块受到牵连;这是一个低级 USB 接口连接高速蜂窝调制解调器 - 这漏洞表示 F3507g WWAN 卡之前在 Ubuntu/Linux 上出现过类似的问题,并且内核更新已修复该问题。
- 该错误只会影响暂停/恢复/冻结,不会影响 3G 卡的正常运行。
- 但我建议您尝试其中一个主线内核(或 Quantal 3.5 内核),看看是否有任何区别。
- 另一个极端当然,另一种方法是在 BIOS 中禁用您的 3G 卡,或者如果您正在使用它,请考虑将其替换为其他品牌/型号。
2.“do_IRQ”和“sdb1”
如果没有上下文(如上所示,这可能是关键),则很难调试这些孤立的警告。因此,我们只能进行猜测,直到您可以提供kern.log
包含其中一个或两个错误的警告。
- “do_IRQ” 似乎最常源于 PCI-Express 总线问题,包括显卡,并且 VIA 芯片组也经常受到牵连。
- 否则,您可以安全地忽略该消息。
鉴于您的 SMART 日志看起来正常,“sdb1”错误可能来自外部驱动器的更多 USB 通信问题。
- 如果您发现这些周围有更多 USB 错误,我会将其归结为偶尔的 USB 不兼容,不用担心;但如果它们只单独出现,则可能表示驱动器存在问题。更完整的日志会有所帮助 :)
再次,我建议尝试 Quantal 3.5 内核之一并观察是否有变化,尤其是“do_IRQ”。
3. 尝试 3.5 系列 Quantal Kernel(或主线版本)
- 一旦 Ubuntu 12.10 发布,其内核将作为“反向移植”提供给 12.04(13.04 和 13.10 也是如此)。
- 现在,你可以从Ubuntu-X 团队 PPA
- 但此 PPA 还包含许多您无需升级的额外软件包。
- 因此,我仅提供了反向移植的内核另一个 PPA
安装:
sudo apt-add-repository ppa:auanswers/lts-backported-kernels-prerelease sudo apt-get 更新 sudo apt-get 安装所有 linux-generic-lts-quantal
重新启动,您应该会启动到新内核(使用 进行检查
uname -a
)。Nvidia/AMD 显卡和 Broadcom 无线网卡可能会出现问题。您可以始终选择旧的 3.2 系列内核,方法是在启动时按住 Shift 直到显示 Grub 菜单,然后进入“以前的 Linux 版本”如果想要更先进的内核,你可以尝试其中一个主线版本。请参阅此问题和答案以获取更多信息:
答案2
您在编辑中添加的错误似乎是指磁盘扇区损坏。
您是否尝试过运行 fsck 或 badblocks?
我建议您在 Live CD 环境中执行以下所有操作
- 启动实时 Ubuntu CD(或任何其他发行版)
使用 fdisk 扫描磁盘和分区
sudo fdisk -l
一旦你确定了正确的磁盘标签(例如
/dev/sda1
),请尝试运行这两个命令。-c
该命令的参数fsck
尝试识别和隔离坏块sudo e2fsck -cv /dev/sda1 sudo badblocks -sv /dev/sda
答案3
对于“无向量中断”问题,请尝试将“pci=nomsi”添加到内核启动选项中。