Re: [问题] CPE出现 page allocation failure(求助)

楼主: xb1015 (Marco)   2013-05-04 23:20:06
先感谢各位大大的建议
经过一些测试建议, 目前还无法解决此问题
以下是后续测试
小弟还有一些疑问在这边提出
小弟额外拿了一块Ralink公版进行后续测试的比对
RAM 为 32M
在测试 LTE high traffic, 大约过 5~10分钟就会出现此问题(use LTE usb module, vendor 提供的driver)
此LTE usb module 已经跟Linux PC 测试过, 长时间测试OK(driver 为相同)(linux 2.6.35)
PC 内存 很大, 似乎不是很好的参考依据
因此额外有测试 Lantiq platform, 128 M RAM, 长时间测试, ok(linux 2.6.32)
[Mon Apr 08 21:46:23.093 2013] # kswapd0: page allocation failure. order:2, mode:0x4020
[Mon Apr 08 21:46:23.890 2013] Normal: 8*4kB 4*8kB 0*16kB 0*32kB 1*64kB 1*128kB 1*256kB 1*512kB 0*1024kB 1*2048kB 0*4096kB = 3072kB
虽然可以看到 16kB page number 数量为0, 但是为何不会从 64kB size 去 allocation 16kB, 是很不解的地方
出现 "page allocation failure" 问题, 乍看为 内存 要不到的情况
实际上在使用free 指令看 内存还有 8M free
因此在想什么原因造成kernel 内存要不到
已咨询过 module chip vendor, 得到回复只有 在其他产品上没有问题
因此 这问题 需要我们自己去解决
(看来需要找一些tool看是否能观察到哪个driver 使用过多的内存,
但是只知道process 可以用ps观察, kernel 方面不知有无方式check driver memory 使用状况 )
此处已参考过大大建议的文章
http://blog.richliu.com/2009/12/11/822/
echo 8192 > /proc/sys/vm/min_free_kbytes
但是问题还是依然发生
使用 free -m 指令, 似乎也是看到整体memory使用, 而无法看到哪个driver使用过多
memory
详细 log 如下link
https://sites.google.com/site/xb10151983/rt6855
LTE driver 如下
https://sites.google.com/site/xb10151983/ue_cdc
※ 引述《xb1015 (Marco)》之铭言:
: 各位Linux 大大
: 目前在工作中遇到一个对我而言非常棘手问题 "page allocation failure"
: 目前完全没方向
: 状况遇到如下:
: AR9341 CPE + Altair LTE module 整合产品, 测试出现问题
: 其 RAM 为 64M
: LTE module 搭在 CPE 进行throughput 整机测试(iperf DL 74M / UL 17M)
: 出现 page allocation failure(在另一个平台(Lantiq ) 没有遇到类似问题)
: 已咨询过 module chip vendor, 得到回复只有 在其他产品上没有问题
: 因此 这问题 需要我们自己去解决(看来需要找一些tool看是否能观察到哪个
: driver 使用过多的内存, 但是只知道process 可以用ps观察, kernel 方面不知有无
: 方式check driver memory 使用状况 )
: 详细 log 如下link
: https://sites.google.com/site/xb10151983/dni_1
: 请大大协助, 感激不尽 ~~
: THX~
作者: askacis (ASKA)   2013-05-05 00:12:00
可以用vmalloc换掉kmalloc,只是效能可能会掉~~或是你就干脆要32K~~好像都是一些馊主意XD
作者: i386 (i386 cpu)   2013-05-06 10:07:00
目前有问题的似乎都是ram不到128M的环境.可以先确定看看没问题的环境下,到底会用到多少内存.对照每个环境用的memory allocator(slab/slob/slub)?
作者: yuskeb (我想做一个好人)   2013-05-07 21:30:00
echo "3" > /proc/sys/vm/drop_caches 或者while (( 1 ));doecho "3" > /proc/sys/vm/drop_caches; sleep 2;done然后一并开始原来的测试 看看会不会再发生

Links booklink

Contact Us: admin [ a t ] ucptt.com