Date: Tue, 24 Jan 2006 21:58:17 +0100 From: Gary Jennejohn <garyj@jennejohn.org> To: FreeBSD Ports <ports@FreeBSD.ORG> Subject: Re: porting an app that checks /proc/meminfo Message-ID: <200601242058.k0OKwH2i016170@peedub.jennejohn.org> In-Reply-To: Message from Fernan Aguero <fernan@iib.unsam.edu.ar> of "Tue, 24 Jan 2006 14:23:17 -0300." <20060124172317.GF72149@iib.unsam.edu.ar>
next in thread | previous in thread | raw e-mail | index | archive | help
Fernan Aguero writes: > I've got a port ready for muscle > > WWW: http://www.drive5.com/muscle/ > Port: http://genoma.unsam.edu.ar/~fernan/freebsd/muscle.shar > > The program builds fine, but because it uses /proc/meminfo > to check for available memory, when you run it, it will > complain about the lack of /proc/meminfo and won't let you > do anything. > > The author, has suggested a hack (see globalslinux.cpp > and patch-globalslinux.cpp in the port) that disables the > function that returns the amount of memory used by muscle > and the amount of RAM available in the computer. With this > patch muscle runs fine but i) the progress messages will > give incorrect values for current memory use & fraction of > available RAM and ii) muscle may fail to fail gracefully > when it runs out of memory, it may just crash. > > I'm not a C programmer, and the author is not familiar with > BSD internals ... I'm trying to help by pointing him in the > right direction. So my question can be summarized as: > > How does one gets the values of i) memory used by the > program/process and ii) amount of RAM available in the > computer without using /proc/meminfo in FreeBSD? > > Suggestion of places to look (man pages) and/or examples in > C are welcomed. The functions that need to be modified are > GetMemUseMB and GetRAMSizeMB in globalslinux.cpp. > > OTOH, I know we have linprocfs ... but AFAIK it will mount under > /compat/linux/proc ... and given that the muscle executable > is FreeBSD native it will not check there ... am I right? > A good place to look at is /usr/src/usr.bin/top/machine.c. This is FreeBSD specific and grabs the memory and process information from the kernel. top uses sysctlbyname(3) to get the memory info and kvm_getprocs(3) to get the process-specific stuff. There seem to be 3 sysctl's of interest: hw.physmem, hw.usermem and hw.realmem. Here's output on my machine: hw.physmem: 2138202112 hw.usermem: 1953370112 hw.realmem: 2147155968 realmem > physmem > usermem. --- Gary Jennejohn / garyjATjennejohnDOTorg gjATfreebsdDOTorg garyjATdenxDOTde
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200601242058.k0OKwH2i016170>