Você pode obter esse tipo de informação do arquivo /proc/<pid>/smaps
para cada processo na forma da entrada Pss
(abreviação de "Tamanho de compartilhamento proporcional").
No exemplo acima com 200MB "compartilhados" entre dois processos, cada processo mostraria 100MB na entrada PSS para esse mapeamento, ou seja, a memória é distribuída uniformemente entre os processos que a compartilham (até ser copiada e não-compartilhada por processo).
Aqui está um extrato da execução de algo parecido com o que você postou:
$ top
...
30986 me 20 0 790m 769m 2200 S 0 4.8 0:00.48 python3.2
30987 me 20 0 790m 767m 224 S 0 4.8 0:00.00 python3.2
$ cat /proc/30986/smaps
...
0119a000-015b7000 rw-p 00000000 00:00 0 [heap]
Size: 4212 kB
Rss: 3924 kB
Pss: 1992 kB
...
7fa06b020000-7fa09ab11000 rw-p 00000000 00:00 0
Size: 781252 kB
Rss: 781252 kB
Pss: 390626 kB
...
7fff8e45a000-7fff8e489000 rw-p 00000000 00:00 0 [stack]
Size: 192 kB
Rss: 160 kB
Pss: 82 kB
...
(Há um lote de coisas nesses arquivos, incluindo mapeamentos para bibliotecas compartilhadas que são potencialmente compartilhadas entre muitos processos e, portanto, cada processo recebe apenas uma pequena parte contabilizada em sua entrada PSS para eles. )
Aqui está um bom artigo sobre isso: ELC: Quanta memória as aplicações estão realmente usando?
Não conheço uma ferramenta semelhante a um top comum para exibir essas informações, e não acho que ps
tenha opções para mostrar isso, infelizmente. O artigo aponta para um repositório com scripts python chamado pagemap
de Matt Mackall que você poderia usar ou adaptar.
Plug sem vergonha: você encontrará algumas postagens em Unix & Linux sobre o PSS e o arquivo smaps
se você estiver interessado nisso.