|
|
@@ -441,6 +441,7 @@ struct mem_size_stats {
|
|
|
unsigned long private_dirty;
|
|
|
unsigned long referenced;
|
|
|
unsigned long anonymous;
|
|
|
+ unsigned long lazyfree;
|
|
|
unsigned long anonymous_thp;
|
|
|
unsigned long shmem_thp;
|
|
|
unsigned long swap;
|
|
|
@@ -457,8 +458,11 @@ static void smaps_account(struct mem_size_stats *mss, struct page *page,
|
|
|
int i, nr = compound ? 1 << compound_order(page) : 1;
|
|
|
unsigned long size = nr * PAGE_SIZE;
|
|
|
|
|
|
- if (PageAnon(page))
|
|
|
+ if (PageAnon(page)) {
|
|
|
mss->anonymous += size;
|
|
|
+ if (!PageSwapBacked(page) && !dirty && !PageDirty(page))
|
|
|
+ mss->lazyfree += size;
|
|
|
+ }
|
|
|
|
|
|
mss->resident += size;
|
|
|
/* Accumulate the size in pages that have been accessed. */
|
|
|
@@ -771,6 +775,7 @@ static int show_smap(struct seq_file *m, void *v, int is_pid)
|
|
|
"Private_Dirty: %8lu kB\n"
|
|
|
"Referenced: %8lu kB\n"
|
|
|
"Anonymous: %8lu kB\n"
|
|
|
+ "LazyFree: %8lu kB\n"
|
|
|
"AnonHugePages: %8lu kB\n"
|
|
|
"ShmemPmdMapped: %8lu kB\n"
|
|
|
"Shared_Hugetlb: %8lu kB\n"
|
|
|
@@ -789,6 +794,7 @@ static int show_smap(struct seq_file *m, void *v, int is_pid)
|
|
|
mss.private_dirty >> 10,
|
|
|
mss.referenced >> 10,
|
|
|
mss.anonymous >> 10,
|
|
|
+ mss.lazyfree >> 10,
|
|
|
mss.anonymous_thp >> 10,
|
|
|
mss.shmem_thp >> 10,
|
|
|
mss.shared_hugetlb >> 10,
|