Re: [PATCH 2/4] mm, procfs: account for shmem swap in /proc/pid/smaps

From: Konstantin Khlebnikov
Date: Wed Mar 11 2015 - 12:31:13 EST


On 11.03.2015 18:26, Jerome Marchand wrote:
On 03/11/2015 04:03 PM, Konstantin Khlebnikov wrote:
On 11.03.2015 15:30, Konstantin Khlebnikov wrote:
On Thu, Feb 26, 2015 at 4:51 PM, Vlastimil Babka <vbabka@xxxxxxx> wrote:
Currently, /proc/pid/smaps will always show "Swap: 0 kB" for
shmem-backed
mappings, even if the mapped portion does contain pages that were
swapped out.
This is because unlike private anonymous mappings, shmem does not
change pte
to swap entry, but pte_none when swapping the page out. In the smaps
page
walk, such page thus looks like it was never faulted in.

Maybe just add count of swap entries allocated by mapped shmem into
swap usage of this vma? That's isn't exactly correct for partially
mapped shmem but this is something weird anyway.

Something like that (see patch in attachment)


-8<---

diff --git a/mm/shmem.c b/mm/shmem.c
index cf2d0ca010bc..492f78f51fc2 100644
--- a/mm/shmem.c
+++ b/mm/shmem.c
@@ -1363,6 +1363,13 @@ static struct mempolicy *shmem_get_policy(struct
vm_area_struct *vma,
}
#endif

+static unsigned long shmem_get_swap_usage(struct vm_area_struct *vma)
+{
+ struct inode *inode = file_inode(vma->vm_file);
+
+ return SHMEM_I(inode)->swapped;
+}
+
int shmem_lock(struct file *file, int lock, struct user_struct *user)
{
struct inode *inode = file_inode(file);

-8<---

That will not work for shared anonymous mapping since they all share the
same vm_file (/dev/zero).

Nope. They have different files and inodes.
They're just called "/dev/zero (deleted)".


Jerome



--
Konstantin
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/