distinguish between Maxmem, realmem, physmem
Andrew Boyer
aboyer at averesystems.com
Thu Jun 28 15:18:52 UTC 2012
On Jun 28, 2012, at 10:46 AM, Steve Rikli wrote:
> On Thu, Jun 28, 2012 at 09:58:13AM -0400, John Baldwin wrote:
>> On Tuesday, June 26, 2012 3:41:10 pm Ping Chen wrote:
>>>
>>> I am a bit confused with all these variables defined in
>>> freebsd(especially in freebsd 6.1): Which one of this represents the
>>> real memory of a system? Say we bought a system with 4G ram, which one
>>> tells me the RAM is 4G?
>>>
>>> Accordign to source code:
>>> Maxmem ==> the highest page of phisycal address page : if I understand
>>> correctly, this is the highest page number of physical memory that is
>>> usable?
>>>
>>> realMem --> somehow get assigned by realmem = Maxmem: this is confuing, if
>>> they are the same, why bother a realmem variables
>>
>> I think realMem is legacy.
>>
>>> physmem --> the number of usage pages : this seems the right one extract
>>> the memory info, however, it seems system allocate portion of memory to
>>> messge buffer which makes this physmem < 4G (assume RAM is 4G)
>>
>> Correct. Note that the firmware can also take up part of RAM as well (e.g.
>> to hold ACPI tables).
>
> Given that, are the values for real & avail memory from 'dmesg' presented
> anywhere like sysctl? E.g. one of my small servers has these from dmesg:
>
> real memory = 1073741824 (1024 MB)
> avail memory = 1023852544 (976 MB)
>
> but the presumably equivalent sysctl values are different:
>
> hw.realmem: 1065287680
> hw.physmem: 1047953408
>
> For system hardware inventory purposes (I assume OP is asking for reasons
> along those lines, as am I) I'd want the value which reflects 1024MB of
> RAM in this case, understanding that it may not be precisely the amount
> available for system/user/etc. usage.
>
> Is dmesg the (only?) place to get that number?
>
> Cheers,
> sr.
Here I use hw.physmem and round up to the nearest 1GB.
You can also check the output of 'dmidecode -t 17' and total up the listed size of each DIMM. It gets its info from the BIOS, which probed the SPD on each EEPROM at boot time. dmidecode is in ports/sysutils/dmidecode.
Sometimes a flaky motherboard won't find all of the memory, so it's useful to make sure they match.
-Andrew
--------------------------------------------------
Andrew Boyer aboyer at averesystems.com
More information about the freebsd-hackers
mailing list