On Wed, 15 Jun 2022 09:12:52 +0200 Vincent Whitchurch <vincent.whitchurch@xxxxxxxx> wrote: > Pss is the sum of the sizes of clean and dirty private pages, and the > proportional sizes of clean and dirty shared pages: > > Private = Private_Dirty + Private_Clean > Shared_Proportional = Shared_Dirty_Proportional + Shared_Clean_Proportional > Pss = Private + Shared_Proportional > > The Shared*Proportional fields are not present in smaps, so it is not > possible to determine how much of the Pss is from dirty pages and how > much is from clean pages. This information can be useful for measuring > memory usage for the purpose of optimisation, since clean pages can > usually be discarded by the kernel immediately while dirty pages cannot. > > The smaps routines in the kernel already have access to this data, so > add a Pss_Dirty to show it to userspace. Pss_Clean is not added since > it can be calculated from Pss and Pss_Dirty. > > ... > > --- a/fs/proc/task_mmu.c > +++ b/fs/proc/task_mmu.c > @@ -406,6 +406,7 @@ struct mem_size_stats { > u64 pss_anon; > u64 pss_file; > u64 pss_shmem; > + u64 pss_dirty; > u64 pss_locked; > u64 swap_pss; > }; > @@ -427,6 +428,7 @@ static void smaps_page_accumulate(struct mem_size_stats *mss, > mss->pss_locked += pss; > > if (dirty || PageDirty(page)) { > + mss->pss_dirty += pss; > if (private) > mss->private_dirty += size; > else > @@ -820,6 +822,7 @@ static void __show_smap(struct seq_file *m, const struct mem_size_stats *mss, > SEQ_PUT_DEC(" kB\nPss_Shmem: ", > mss->pss_shmem >> PSS_SHIFT); > } > + SEQ_PUT_DEC(" kB\nPss_Dirty: ", mss->pss_dirty >> PSS_SHIFT); > SEQ_PUT_DEC(" kB\nShared_Clean: ", mss->shared_clean); > SEQ_PUT_DEC(" kB\nShared_Dirty: ", mss->shared_dirty); > SEQ_PUT_DEC(" kB\nPrivate_Clean: ", mss->private_clean); Well it's certainly simple. Can you please update Documentation/ABI/testing/procfs-smaps_rollup and Documentation/filesystems/proc.rst, resend?