Existe alguma maneira de classificar processos por uso de memória não compartilhada (privada) em ps ou top?

Existe alguma maneira de classificar processos por uso de memória não compartilhada (privada) em ps ou top?

Consegui calcular o uso de memória não compartilhada somando mapeamentos anônimos e de pilha, por pmap -xexemplo

sudo pmap -x $THE_PID |egrep 'anon|stack' | awk '{print $2}' | paste -sd+ | bc

mas não consigo encontrar nenhuma maneira de obter informações semelhantes ps. topmostra uma SHRcoluna, mas não parece oferecer uma maneira de classificar por memória não compartilhada. A classificação por RSS não é útil, pois o RSS contém páginas compartilhadas, mas apenas AFAICS as páginas compartilhadas que o processo tocou.

Portanto, se você tiver dois processos, ambos usando o mesmo espaço de endereço compartilhado de 16 GB, eles serão classificados com base em qual deles tocou mais na memória compartilhada. Não por qual alocou mais memória privada (não compartilhada), a menos que ambos tenham tocado a mesma quantidade de shmem ou próximo a ela.

Problemas semelhantes surgem com mapeamentos de leitura/gravação de bibliotecas compartilhadas e com processos forked-but-not- exec'd que compartilham páginas copy-on-write de seu ancestral.

Isso é... inútil.

Procurei maneiras de classificar topa saída por expressões. Mas se ele suporta sua sintaxe de classificação, não consigo descobrir.

Isso parece algo tão óbvio, mas o ps nem sequer expõe as informações compartilhadas!

Por favor, me diga que estou faltando alguma coisa.

informação relacionada