I'll try - but memory management is such a can of worms.
Have a read of
this from one of the kernel devs. Take note of the general comments rather than the specific patches being discussed - this is pretty old, but still valid even though most of the patches have been merged by now.
There are also plenty of threads discussing this here on LQ.
Short answer - use the solutions offered to get the largest consumers, but don't try to reverse map it back to the "system used". Just too hard, even for the kernel devs.
Edit: forgot to mention; have a look at /proc/meminfo to see how many "types" of memory allocation there are. Not all relevant in this discussion admittedly.