2005-02-20 02:59:40

by Scott Bronson

[permalink] [raw]
Subject: Getting the page size of currently running kernel

Is there any way to get a running kernel to tell you the size of its pages?

Why: I'm writing a quick Perl hack to monitor the memory usage of the TCP
stack over time. Easy enough: /proc/net/sockstat gives the current value of
tcp_memory_allocated. But how do I convert this into bytes? I don't want to
hard code PAGE_SIZE into my Perl script, complete with a lookup table for 4K
vs. 8K architectures! Am I missing something obvious here?

Thanks,

- Scott


2005-02-20 03:23:41

by Jan Knutar

[permalink] [raw]
Subject: Re: Getting the page size of currently running kernel

On Sunday 20 February 2005 05:01, Scott Bronson wrote:
> Is there any way to get a running kernel to tell you the size of its pages?
>
> Why: I'm writing a quick Perl hack to monitor the memory usage of the TCP
> stack over time. Easy enough: /proc/net/sockstat gives the current value of
> tcp_memory_allocated. But how do I convert this into bytes? I don't want to
> hard code PAGE_SIZE into my Perl script, complete with a lookup table for 4K
> vs. 8K architectures! Am I missing something obvious here?

Can you call functions in glibc through perl?
If so, then getpagesize(2) is what you're looking for.
Can you do raw syscalls in perl, if so, you could get the same info that way.

2005-02-20 03:28:43

by Roland Dreier

[permalink] [raw]
Subject: Re: Getting the page size of currently running kernel

Scott> Is there any way to get a running kernel to tell you the
Scott> size of its pages? Why: I'm writing a quick Perl hack to
Scott> monitor the memory usage of the TCP stack over time. Easy
Scott> enough: /proc/net/sockstat gives the current value of
Scott> tcp_memory_allocated. But how do I convert this into
Scott> bytes? I don't want to hard code PAGE_SIZE into my Perl
Scott> script, complete with a lookup table for 4K vs. 8K
Scott> architectures! Am I missing something obvious here?

I'm not sure exactly how to call it from perl, but from C one can use
sysconf(3) like:

page_size = sysconf(_SC_PAGESIZE);

(one can also use getpagesize(2) to do exactly the same thing)

- R.

2005-02-20 04:37:22

by Scott Bronson

[permalink] [raw]
Subject: Re: Getting the page size of currently running kernel

On Saturday 19 February 2005 19:28, Roland Dreier wrote:
> I'm not sure exactly how to call it from perl, but from C one can use
> sysconf(3) like:
>
> page_size = sysconf(_SC_PAGESIZE);
>
> (one can also use getpagesize(2) to do exactly the same thing)

And I was going nuts looking all over /proc and /sys for it. :) _SC_PAGESIZE
is a part of Perl's POSIX module. Thanks Roland and Jan.

- Scott