Kernel Newbies archive on
 help / color / Atom feed
From: Pintu Agarwal <>
To: Kernelnewbies <>,
	linux-mm <>
Subject: Estimating total memory usage in any Linux system
Date: Mon, 18 May 2020 23:27:34 +0530
Message-ID: <> (raw)


I was just trying to manually calculate the total memory available in
a system to match up the MemTotal shown in /proc/meminfo
I know "free -m" command will give the vary high level usage, but I
wanted to breakdown the MemTotal numbers to see usage in each

I am looking for a common formula that should match on almost all systems.
So, I came up with below fields from meminfo to closely match the total.
~Total = {MemFree + Active + Inactive + Shmem + Mapped + Slab +
KernelStack + PageTables + (init freed) + (Boot Diff) + (low

But I am not sure if these fields are correct at least for arm32 system.
In some boards I could able to match up these figures, but some not.

So I have some doubts:
* Is "Mapped" (NR_MAPPED_PAGES) already part of Active pages ?
* Is Kernel allocation (alloc_pages, etc.) accounted somewhere ? Is it
part of Anon pages ?
* What about vmalloc / ioremap pages ? Do we also need to consider VmallocUsed ?
==> In my opinion vmalloc internally used kmalloc and page tables, so
I guess it should be already part of Slab or PageTables ??

Below are some data taken from a small embedded arm32 device with 512MB RAM:

Kernel Boot Logs:
Memory: 99244K/254976K available (10720K kernel code, 1336K rwdata,
4792K rodata, 400K init, 1602K bss, 135252K reserved, 20480K
Total = 99244 + 400 (init) + 20480 (cma) =  120124
Boot Diff = 121204 - 120124 => 1080 kB

MemTotal: 121204 kB
MemFree: 2540 kB
MemAvailable: 51924 kB
Buffers: 0 kB
Cached: 47492 kB
SwapCached: 0 kB
Active: 42604 kB
Inactive: 24308 kB
Active(anon): 19476 kB
Inactive(anon): 92 kB
Active(file): 23128 kB
Inactive(file): 24216 kB
Unevictable: 0 kB
Mlocked: 0 kB
SwapTotal: 0 kB
SwapFree: 0 kB
Dirty: 8 kB
Writeback: 0 kB
AnonPages: 19452 kB
Mapped: 12644 kB
Shmem: 148 kB
Slab: 27560 kB
SReclaimable: 7224 kB
SUnreclaim: 20336 kB
KernelStack: 3104 kB
PageTables: 1896 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 60600 kB
Committed_AS: 1576740 kB
VmallocTotal: 777216 kB
VmallocUsed: 53696 kB
VmallocChunk: 689148 kB

These are my calculations from the above fields.
MemFree 2540
Active 42604
Inactive 24308
Mapped 12644
Slab 27560
KernelStack 3104
PageTables 1896
Shmem 148
init freed 400
Diff from boot total 1080
min_free_kbytes 1384
user_reserve_kbytes 3537
My Total ==> 121205  (add all the above)

As you can see "My Total" closely matches with the MemTotal from /proc/meminfo

But on some systems it does not match.
So, I wanted to understand if there is something wrong in my
calculation, or there is something wrong in the system itself (like
leaks etc,)

Note: I don't want to use any tools or utilize for these, but I wanted
to manually understand it.

I am also trying to explore every vm counter that populates these fields.

But if you have any other opinion about it please let me know.


Kernelnewbies mailing list

             reply index

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-05-18 17:57 Pintu Agarwal [this message]
2020-05-19 17:03 ` Pintu Agarwal
2020-05-20  4:01   ` Valdis Klētnieks
2020-05-20  4:56     ` Pintu Agarwal
2020-05-20  5:32       ` Valdis Klētnieks
2020-05-20  6:11         ` Pintu Agarwal

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='' \ \ \ \

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

Kernel Newbies archive on

Archives are clonable:
	git clone --mirror kernelnewbies/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 kernelnewbies kernelnewbies/ \
	public-inbox-index kernelnewbies

Example config snippet for mirrors

Newsgroup available over NNTP:

AGPL code for this site: git clone