免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 7616 | 回复: 16
打印 上一主题 下一主题

[内存管理] 请教mem_cache_alloc引起的oops-熟悉内存管理的同学指点一下 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-12-12 17:48 |只看该作者 |倒序浏览
在我的系统(linux 32bit 2.6.38.8 + e1000e 82574L)上,出现好几次oops,看起来,都是驱动申请分配skb引起的。怀疑是驱动bug,换了几个版本的e1000e驱动,故障依旧。今天试了一下另外一个系统liniux 64bit 3.2.28 + e1000e 82574L,不同的机器,不同的环境,又出现类似的错误。这两个系统相同之处在于基本相同的内核配置和其它一些我自己写的程序。所以我估计问题应该不是出在驱动在,而多半出在我自己身上,但是是有哪些情况会导致类似这样的slub分配出错呢??请各位指点一二。

附oops信息:
  1. # [ 6400.452544] general protection fault: 0000 [#1] SMP
  2. [ 6400.456241] CPU 2
  3. [ 6400.456241] Modules linked in:  ixgbe(O) igb(O) e1000e(O) r8168(O)
  4. [ 6400.456241]
  5. [ 6400.456241] Pid: 0, comm: swapper/2 Tainted: G           O 3.2.28 #74 To Be F
  6. illed By O.E.M. To Be Filled By O.E.M./To be filled by O.E.M.
  7. [ 6400.456241] RIP: 0010:[<ffffffff810fce90>]  [<ffffffff810fce90>] kmem_cache_a
  8. lloc+0x40/0x110
  9. [ 6400.456241] RSP: 0018:ffff88007f303c20  EFLAGS: 00010286
  10. [ 6400.456241] RAX: 0000000000000000 RBX: ffff880002c58000 RCX: 4be350e100000000

  11. [ 6400.456241] RDX: 4be350e0ffffffff RSI: 0000000000014a40 RDI: ffffffff815f9a31

  12. [ 6400.456241] RBP: ffff88007f303c70 R08: ffffffffffffffff R09: 0000000000000000

  13. [ 6400.456241] R10: ffff880002cb0600 R11: 0000000000000000 R12: 8354c740ffff8800

  14. [ 6400.456241] R13: ffff88007c8026c0 R14: ffff88007c8026c0 R15: 0000000000000632

  15. [ 6400.456241] FS:  0000000000000000(0000) GS:ffff88007f300000(0000) knlGS:00000
  16. 00000000000
  17. [ 6400.456241] CS:  0010 DS: 0000 ES: 0000 CR0: 000000008005003b
  18. [ 6400.456241] CR2: 00007f26c3171f16 CR3: 0000000002efc000 CR4: 00000000000006e0

  19. [ 6400.456241] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000

  20. [ 6400.456241] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400

  21. [ 6400.456241] Process swapper/2 (pid: 0, threadinfo ffff88007c8cc000, task ffff
  22. 88007c8bda40)
  23. [ 6400.456241] Stack:
  24. [ 6400.456241]  0000000000000000 ffffffff81ca8680 ffff880002c58000 0000002081ca8
  25. 6c0
  26. [ 6400.456241]  ffff88007f303ca0 ffff880002c58000 0000000000000000 0000000000000
  27. 020
  28. [ 6400.456241]  ffff88007c8026c0 0000000000000632 ffff88007f303cb0 ffffffff815f9
  29. a31
  30. [ 6400.456241] Call Trace:
  31. [ 6400.456241]  <IRQ>
  32. [ 6400.456241]  [<ffffffff815f9a31>] __alloc_skb+0x41/0x230
  33. [ 6400.456241]  [<ffffffff815fa08f>] __netdev_alloc_skb+0x1f/0x40
  34. [ 6400.456241]  [<ffffffffa0041b0f>] e1000_alloc_rx_buffers+0x1cf/0x2d0 [e1000e]

  35. [ 6400.456241]  [<ffffffff81009270>] ? nommu_map_sg+0xe0/0xe0
  36. [ 6400.456241]  [<ffffffffa0040b67>] e1000_clean_rx_irq+0x2c7/0x3b0 [e1000e]
  37. [ 6400.456241]  [<ffffffffa0044af7>] e1000e_poll+0x77/0x400 [e1000e]
  38. [ 6400.456241]  [<ffffffff81606822>] net_rx_action+0x92/0x1e0
  39. [ 6400.456241]  [<ffffffff81049ff9>] __do_softirq+0x99/0x210
  40. [ 6400.456241]  [<ffffffff817855ec>] call_softirq+0x1c/0x26
  41. [ 6400.456241]  [<ffffffff8100453d>] do_softirq+0x4d/0x80
  42. [ 6400.456241]  [<ffffffff8104a3ce>] irq_exit+0x8e/0xb0
  43. [ 6400.456241]  [<ffffffff8100411e>] do_IRQ+0x5e/0xd0
  44. [ 6400.456241]  [<ffffffff8178306b>] common_interrupt+0x6b/0x6b
  45. [ 6400.456241]  <EOI>
  46. [ 6400.456241]  [<ffffffff8100ae92>] ? mwait_idle+0xa2/0x200
  47. [ 6400.456241]  [<ffffffff81001186>] cpu_idle+0xc6/0x110
  48. [ 6400.456241]  [<ffffffff81770aa4>] start_secondary+0x1e7/0x1ee
  49. [ 6400.456241] Code: 8b 7d 08 89 75 cc 49 8b 4d 00 65 48 03 0c 25 68 cb 00 00 48
  50. 8b 51 08 4c 8b 21 4d 85 e4 74 6d 49 63 45 20 49 8b 75 00 48 8d 4a 01 <49> 8b 1c
  51. 04 4c 89 e0 65 48 0f c7 0e 0f 94 c0 84 c0 74 c8 4d 85
复制代码

论坛徽章:
0
2 [报告]
发表于 2012-12-13 09:49 |只看该作者
这个问题一看上去就很难搞啊。
会不会是内存访问越界了,破坏了 slab的信息。
不知道把崩溃时的内存dump下来,检查一下slab的各个结构的内容有没有帮助。
以前碰到过 crash工具读不出dump文件的slab信息的情况,有高人说可能slab被破坏了。
不知道什么情况比较容易导致这些内存污染的情况

论坛徽章:
16
2015亚冠之吉达阿赫利
日期:2015-08-17 11:21:462015年迎新春徽章
日期:2015-03-04 09:58:11酉鸡
日期:2014-12-07 09:06:19水瓶座
日期:2014-11-04 14:23:29天秤座
日期:2014-03-02 08:57:52双鱼座
日期:2014-02-22 13:07:56午马
日期:2014-02-14 11:08:18双鱼座
日期:2014-02-13 11:09:37卯兔
日期:2014-02-06 15:10:34子鼠
日期:2014-01-20 14:48:19戌狗
日期:2013-12-19 09:37:46射手座
日期:2013-12-19 09:33:47
3 [报告]
发表于 2012-12-13 11:12 |只看该作者
楼主上次那个《请教系统内存泄露》帖子,怎么处理的没有分享出来啊。以后时间长了,就没人帮你分析问题啦。

论坛徽章:
0
4 [报告]
发表于 2012-12-13 16:35 |只看该作者
对slub不太熟,但是这种general protection fault一般都是你的code 内存访问越界,破坏了slub数据结构,导致它访问了一些illegal的memory area,比如去写page 0...

可以加slub_debug加到kernel command line,这样就会打开slub debug option, slub会帮你检查有没有memory越界。

论坛徽章:
0
5 [报告]
发表于 2012-12-15 10:46 |只看该作者
embeddedlwp 发表于 2012-12-13 11:12
楼主上次那个《请教系统内存泄露》帖子,怎么处理的没有分享出来啊。以后时间长了,就没人帮你分析问题啦。 ...


回楼上,因没这个问题一直没有解决到——开始以为找到原因了,不过后来又被推翻了。现在还在跟进中。
  1. 这个问题一看上去就很难搞啊。
  2. 会不会是内存访问越界了,破坏了 slab的信息。
  3. 不知道把崩溃时的内存dump下来,检查一下slab的各个结构的内容有没有帮助。
  4. 以前碰到过 crash工具读不出dump文件的slab信息的情况,有高人说可能slab被破坏了。
  5. 不知道什么情况比较容易导致这些内存污染的情况
复制代码
我现在就是按这个思路来检查代码,不过就是清楚哪些情况会导致这种问题,所以上来希望得到大家的指点。

论坛徽章:
10
戌狗
日期:2013-10-17 09:43:0215-16赛季CBA联赛之广东
日期:2018-02-05 11:22:1215-16赛季CBA联赛之八一
日期:2016-07-04 12:26:1815-16赛季CBA联赛之青岛
日期:2016-06-08 11:15:4115-16赛季CBA联赛之辽宁
日期:2016-04-05 10:10:1415-16赛季CBA联赛之辽宁
日期:2016-03-11 11:11:48酉鸡
日期:2014-12-18 14:35:48狮子座
日期:2014-02-20 10:14:07寅虎
日期:2013-12-02 13:48:2915-16赛季CBA联赛之广夏
日期:2018-03-21 08:51:10
6 [报告]
发表于 2012-12-18 12:04 |只看该作者
也遇到过类似的问题,友情帮顶!

论坛徽章:
0
7 [报告]
发表于 2012-12-18 12:21 来自手机 |只看该作者
内存污染问题很难办的

论坛徽章:
0
8 [报告]
发表于 2012-12-18 12:25 来自手机 |只看该作者
利用 内核 命令行,学习了

论坛徽章:
0
9 [报告]
发表于 2012-12-19 11:21 |只看该作者
eexplorer 发表于 2012-12-13 16:35
对slub不太熟,但是这种general protection fault一般都是你的code 内存访问越界,破坏了slub数据结构,导致 ...


谢谢,现在就是这样做的,期待可以得到有用的信息。

论坛徽章:
0
10 [报告]
发表于 2012-12-19 14:09 |只看该作者
根据这个:
# [ 6400.456241] Call Trace:
# [ 6400.456241]  <IRQ>
# [ 6400.456241]  [<ffffffff815f9a31>] __alloc_skb+0x41/0x230
# [ 6400.456241]  [<ffffffff815fa08f>] __netdev_alloc_skb+0x1f/0x40
# [ 6400.456241]  [<ffffffffa0041b0f>] e1000_alloc_rx_buffers+0x1cf/0x2d0 [e1000e]
找到__alloc_skb这个模块,应该是*.o的格式吧,然后objdump 反汇编看对应在源码的哪里

这个oops可以随心所欲的让他出来吗?如果可以的话可以使用jprobe和kprobe查看一下调用__alloc_skb时的参数,看看有没有帮助?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP