分类:
2010-02-02 19:48:35
最开始我想到的是/proc/meminfo的内如,于是cat /proc/meminfo,结果只在最后发现一个Hugepagesize的值,是4096K,整整大了1024倍。看了一下这个参数,和我要的page_size不是一码事。
[separate]
然后sysctl -a
,sysctl -A,
均没有发现对我有用的东西。于是googling,找到一篇文章,提到了time
命令,说用time -v就可以显示pagesize。窃喜,赶紧测试了一下
[root@mlsx tmp]# time -v pwd
bash: -v: command not found
方法不对?man一把,没有发现-v选项,但是看到了这个
%Z (Not in tcsh.) System’s page size, in bytes.
This is a per-system constant, but varies between systems.
以为搞定,马上测试,结果得到这样的一些结果:
[root@mlsx tmp]# time "%Z" pwd
bash: fg: %Z: no such job
[root@mlsx tmp]# time +%Z pwd
bash: +%Z: command not found
[root@mlsx tmp]# time --format %Z pwd
bash: --format: command not found
[root@mlsx tmp]# time -o %Z pwd
bash: -o: command not found
.......
差点崩溃
strings time一把,有%Z,就是不知道如何用。
再次进入/proc目录,搜刮了一番,没有发现什么东西。
有点绝望了,ping(xplore行业术语,用户和人打招呼
)了一下
,问问他知道不。搞研发的就是搞研发的,查了两个命令没有后,就丢一句,看源代码吧。我说我不看,我要以管理员
的身份来解决这个问题。被逼无奈,继续寻找中,
甚至lspci/lshal/dmidecode都看了,还是没有新进展,我一直觉得这是一特简单的事情,我们怎么就找了这么久,还没有结果呢?
于是我要找一个局外人,ping了一下
,问问她这个问题如何解决。结果她大智若愚的回答我,“我不知道内存分页是什么意思”,难道是我描述本身就有问题?算了,她忙于做经理要做的事情--协调资源。所以还是我和wf来搞这个事情好了。
wf过了不多久,丢来一个信息
man -k getpagesize
getpagesize (2) - get memory page size
我知道,他要写代码的瘾又上来了,果不其然,我还没有看完man,就来了这个信息:
$ ~/code/ccode/test/get_mem_pagesize
memory page size is 4096
这家伙,手脚也太灵活了吧,这代码就出来了。
我仍然倔强的说,不行,我不要写代码。我要从系统里揪出这个值,肯定有。
于是又开始大海捞针了。
许久未果,我和wf得到一个结论--我们还是看内核源代码吧,那里总能找到(开源的好处又被利用了一次)。
无奈,两人对内核源代码结构都不熟悉,就像两个瞎子(sorry to wf)进入了浩大的迷宫,幸好我们还有一个最后的救命稻草。
牺牲了一些PU资源后,wf最终找到了这个page_size的定义。
#grep "PAGE_SIZE" -B3 -A2 page.h
/* PAGE_SHIFT determines the page size */
#define PAGE_SHIFT 12
#define PAGE_SIZE (1UL << PAGE_SHIFT)
#define PAGE_MASK (~(PAGE_SIZE-1))
#define LARGE_PAGE_MASK (~(LARGE_PAGE_SIZE-1))
#define LARGE_PAGE_SIZE (1UL << PMD_SHIFT)
#pwd
/usr/src/linux-2.6.18-1.2798.fc6/include/asm-i386
似乎寻找PAGE_SIZE到这里结束了。wf的担心是,大部分情况下安装了内核源代码吗?
而我的说法却是:命令之所以不出来,是因为用户
和管理员
需要知道参数吗?而如果程序员
需要知道这个值,那他当然会去看源代码或者写程序来校验。
这估计把wf气坏了,心想,那你丫到底想怎么样呀?
呵呵,不想怎么样,只是想找找。
/usr/bin/time -f %Z true
只是不要用bash内置的time。
我给忘记了我用的是bash里的time,我还用which查了一下路径。
汗颜呀!