免费注册 查看新帖 |

Chinaunix

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

[内核模块] 如何在module中使用mem_map数组 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-04-10 03:13 |只看该作者 |倒序浏览
本帖最后由 xiongweixie 于 2013-04-10 04:42 编辑

先在想遍历mem_map数组的内容。
有两个问题想请教大家,
1. 我在module中使用mem_map,   写了extern struct page* mem_map.  但是insmod 时 出现问题。提示mem_map 无法识别的符号。
    检查了 system.map 里面的mem_map 不在了。难道是因为装了xen的缘故?
    如何知道mem_map 的大小?
2. 如果不通过mem_map  还有什么其他办法 遍历 所有的page么?

论坛徽章:
6
金牛座
日期:2013-10-08 10:19:10技术图书徽章
日期:2013-10-14 16:24:09CU十二周年纪念徽章
日期:2013-10-24 15:41:34狮子座
日期:2013-11-24 19:26:19未羊
日期:2014-01-23 15:50:002015年亚洲杯之阿联酋
日期:2015-05-09 14:36:15
2 [报告]
发表于 2013-04-10 08:13 |只看该作者
回复 1# xiongweixie
1. 我在module中使用mem_map,   写了extern struct page* mem_map.  但是insmod 时 出现问题。提示mem_map 无法识别的符号


mem_map符号是否导出与 CONFIG_NEED_MULTIPLE_NODES选项有关系,多个内存节点的numa需要配置该选项。
如果配置了【Y】,那么mem_map将不导出;如果配置为【N】,那么mem_map将会导出。
   

论坛徽章:
0
3 [报告]
发表于 2013-04-10 08:36 |只看该作者
回复 2# 瀚海书香


    请问怎么配置呢? 谢谢

   现在看 system.map 的 mem_map  可以看到有  mem_map_next.part.18  mem_map_next.part.31  等。

   装xen 之前 mem_map 还在的。装完xen 就没了。

论坛徽章:
6
金牛座
日期:2013-10-08 10:19:10技术图书徽章
日期:2013-10-14 16:24:09CU十二周年纪念徽章
日期:2013-10-24 15:41:34狮子座
日期:2013-11-24 19:26:19未羊
日期:2014-01-23 15:50:002015年亚洲杯之阿联酋
日期:2015-05-09 14:36:15
4 [报告]
发表于 2013-04-10 13:16 |只看该作者
回复 3# xiongweixie
请问怎么配置呢? 谢谢

   现在看 system.map 的 mem_map  可以看到有  mem_map_next.part.18  mem_map_next.part.31  等。

   装xen 之前 mem_map 还在的。装完xen 就没了。


(1)如果你的内核不会用在NUMA架构上的话,就关掉相应的配置项,重新编译内核。(不要告诉我你不会修改内核配置项 ,自己google吧)
(2)如果你的内核可能会用在NUMA的架构上,那么获取内存的代码大体上类似如下:
  1. #include <linux/module.h>
  2. #include <asm/pgtable.h>
  3. #include <linux/version.h>
  4. #include <asm/page.h>
  5. #include <linux/gfp.h>
  6. #include <linux/page-flags.h>
  7. #include <linux/sched.h>//find_task_by_vpid
  8. #include <linux/mm.h>//find_vma
  9. #include <linux/mmzone.h>
  10. MODULE_LICENSE("GPL");
  11. MODULE_AUTHOR("<tingw.liu@gmail.com>");
  12. MODULE_DESCRIPTION("List all node mem_map");
  13. void show_zone_mem(struct zone *zone, int nodeid)
  14. {
  15.         printk(KERN_ALERT "node %d zone %8s: pages free %llu\n", nodeid,
  16.                         zone->name, zone_page_state(zone, NR_FREE_PAGES));
  17. }
  18. static int list_pgd_init(void)
  19. {
  20.         int nid;
  21.         struct zone *zone;
  22.         struct zone *node_zones;
  23.         unsigned long flags;
  24.         for_each_online_node(nid) {
  25.                 pg_data_t *pgdat = NODE_DATA(nid);
  26.                 node_zones = pgdat->node_zones;
  27.                 for (zone = node_zones; zone - node_zones < MAX_NR_ZONES;
  28.                                 ++zone) {
  29.                         if (!populated_zone(zone)) {
  30.                                 continue;
  31.                         }
  32.                         spin_lock_irqsave(&zone->lock, flags);
  33.                         show_zone_mem(zone, nid);
  34.                         spin_unlock_irqrestore(&zone->lock, flags);
  35.                 }

  36.         }
  37.         return 0;
  38. }
  39. static void list_pgd_exit(void)
  40. {
  41.         printk(KERN_ALERT "Goodbey.\n");
  42. }
  43. module_init(list_pgd_init);
  44. module_exit(list_pgd_exit);
复制代码

论坛徽章:
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
5 [报告]
发表于 2013-04-10 13:55 |只看该作者
回复 4# 瀚海书香


No.

zone_page_state don't need that  precise, it's too expensive to hold &zone->lock in this case.

论坛徽章:
6
金牛座
日期:2013-10-08 10:19:10技术图书徽章
日期:2013-10-14 16:24:09CU十二周年纪念徽章
日期:2013-10-24 15:41:34狮子座
日期:2013-11-24 19:26:19未羊
日期:2014-01-23 15:50:002015年亚洲杯之阿联酋
日期:2015-05-09 14:36:15
6 [报告]
发表于 2013-04-10 18:41 |只看该作者
回复 5# embeddedlwp
zone_page_state don't need that  precise, it's too expensive to hold &zone->lock in this case.

LZ是想获取所有页的的信息,我这里只是列举了其中的一个情形,LZ可以在show_zone_mem函数中,获取想要的信息,绝不只是获取空闲页的数量。

   

论坛徽章:
0
7 [报告]
发表于 2013-04-13 00:22 |只看该作者
回复 4# 瀚海书香


    谢谢你

    问题解决了     
  
    是64位系统默认会使用numa?

论坛徽章:
0
8 [报告]
发表于 2013-04-13 00:34 |只看该作者
回复 6# 瀚海书香


    在请教一下  从哪里可以获取到 mem_map 的大小呢? 或者知道边界就行~ 非常感谢~

论坛徽章:
6
金牛座
日期:2013-10-08 10:19:10技术图书徽章
日期:2013-10-14 16:24:09CU十二周年纪念徽章
日期:2013-10-24 15:41:34狮子座
日期:2013-11-24 19:26:19未羊
日期:2014-01-23 15:50:002015年亚洲杯之阿联酋
日期:2015-05-09 14:36:15
9 [报告]
发表于 2013-04-13 09:02 |只看该作者
回复 7# xiongweixie
是64位系统默认会使用numa?

主要是现在大部分的服务器都是numa的了,所以很多发型版的内核就默认选择numa选项。
   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP