作者xb1015 (Marco)
看板LinuxDev
标题Re: [问题] CPE出现 page allocation failure(求助)
时间Sat May 4 23:20:06 2013
先感谢各位大大的建议
经过一些测试建议, 目前还无法解决此问题
以下是後续测试
小弟还有一些疑问在这边提出
小弟额外拿了一块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~
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 203.217.116.193
1F:推 askacis:可以用vmalloc换掉kmalloc,只是效能可能会掉~~ 05/05 00:12
2F:推 askacis:或是你就乾脆要32K~~好像都是一些馊主意XD 05/05 00:15
3F:→ i386:目前有问题的似乎都是ram不到128M的环境. 05/06 10:07
4F:→ i386:可以先确定看看没问题的环境下,到底会用到多少记忆体. 05/06 10:07
5F:→ i386:对照每个环境用的memory allocator(slab/slob/slub)? 05/06 10:09
6F:推 yuskeb:echo "3" > /proc/sys/vm/drop_caches 或者 05/07 21:30
7F:→ yuskeb:while (( 1 )); 05/07 21:30
8F:→ yuskeb:do 05/07 21:32
9F:→ yuskeb: echo "3" > /proc/sys/vm/drop_caches; sleep 2; 05/07 21:32
10F:→ yuskeb:done 05/07 21:33
11F:→ yuskeb:然後一并开始原来的测试 看看会不会再发生 05/07 21:35