* [PACTH v3 0/3] Implement /proc/<pid>/totmaps @ 2016-08-16 17:34 robert.foss 2016-08-16 17:34 ` [PACTH v3 1/3] mm, proc: " robert.foss ` (2 more replies) 0 siblings, 3 replies; 9+ messages in thread From: robert.foss @ 2016-08-16 17:34 UTC (permalink / raw) To: corbet, akpm, vbabka, mhocko, koct9i, hughd, robert.foss, n-horiguchi, john.stultz, minchan, ross.zwisler, jmarchan, hannes, mingo, keescook, viro, gorcunov, sonnyrao, plaguedbypenguins, eric.engestrom, rientjes, jdanis, calvinowens, adobriyan, jann, kirill.shutemov, ldufour, linux-doc, linux-kernel, Ben Zhang, Bryan Freed, Filipe Brandenburger, Mateusz Guzik, Michal Hocko, linux-api From: Robert Foss <robert.foss@collabora.com> This series provides the /proc/PID/totmaps feature, which summarizes the information provided by /proc/PID/smaps for improved performance and usability reasons. A use case is to speed up monitoring of memory consumption in environments where RSS isn't precise. For example Chrome tends to many processes which have hundreds of VMAs with a substantial amount of shared memory, and the error of using RSS rather than PSS tends to be very large when looking at overall memory consumption. PSS isn't kept as a single number that's exported like RSS, so to calculate PSS means having to parse a very large smaps file. This process is slow and has to be repeated for many processes, and we found that the just act of doing the parsing was taking up a significant amount of CPU time, so this patch is an attempt to make that process cheaper. /proc/PID/totmaps provides roughly a 2x speedup compared to parsing /proc/PID/smaps with awk. $ /usr/bin/time -v -p zsh -c "(repeat 25 {cat /proc/5025/totmaps})" [...] Command being timed: "zsh -c (repeat 25 {cat /proc/5025/totmaps})" User time (seconds): 0.00 System time (seconds): 0.40 Percent of CPU this job got: 90% Elapsed (wall clock) time (h:mm:ss or m:ss): 0:00.45 $ /usr/bin/time -v -p zsh -c "repeat 25 { awk '/^Rss/{rss+=\$2} /^Pss/{pss+=\$2} END {printf \"rss:%d pss:%d\n\", rss, pss}\' /proc/5025/smaps}" [...] Command being timed: "zsh -c repeat 25 { awk '/^Rss/{rss+=$2} /^Pss/{pss+=$2} END {printf "rss:%d pss:%d\n", rss, pss}\' /proc/5025/smaps }" User time (seconds): 0.37 System time (seconds): 0.45 Percent of CPU this job got: 92% Elapsed (wall clock) time (h:mm:ss or m:ss): 0:00.89 Robert Foss (3): mm, proc: Implement /proc/<pid>/totmaps Documentation/filesystems: Fixed typo Documentation/filesystems: Added /proc/PID/totmaps documentation Documentation/filesystems/proc.txt | 23 ++++++- fs/proc/base.c | 1 + fs/proc/internal.h | 2 + fs/proc/task_mmu.c | 129 +++++++++++++++++++++++++++++++++++++ 4 files changed, 154 insertions(+), 1 deletion(-) -- 2.7.4 ^ permalink raw reply [flat|nested] 9+ messages in thread
* [PACTH v3 1/3] mm, proc: Implement /proc/<pid>/totmaps 2016-08-16 17:34 [PACTH v3 0/3] Implement /proc/<pid>/totmaps robert.foss @ 2016-08-16 17:34 ` robert.foss 2016-08-16 18:18 ` Jann Horn 2016-08-16 17:34 ` [PACTH v3 2/3] Documentation/filesystems: Fixed typo robert.foss 2016-08-16 17:34 ` [PACTH v3 3/3] Documentation/filesystems: Added /proc/PID/totmaps documentation robert.foss 2 siblings, 1 reply; 9+ messages in thread From: robert.foss @ 2016-08-16 17:34 UTC (permalink / raw) To: corbet, akpm, vbabka, mhocko, koct9i, hughd, robert.foss, n-horiguchi, john.stultz, minchan, ross.zwisler, jmarchan, hannes, mingo, keescook, viro, gorcunov, sonnyrao, plaguedbypenguins, eric.engestrom, rientjes, jdanis, calvinowens, adobriyan, jann, kirill.shutemov, ldufour, linux-doc, linux-kernel, Ben Zhang, Bryan Freed, Filipe Brandenburger, Mateusz Guzik, Michal Hocko, linux-api From: Robert Foss <robert.foss@collabora.com> This is based on earlier work by Thiago Goncales. It implements a new per process proc file which summarizes the contents of the smaps file but doesn't display any addresses. It gives more detailed information than statm like the PSS (proprotional set size). It differs from the original implementation in that it doesn't use the full blown set of seq operations, uses a different termination condition, and doesn't displayed "Locked" as that was broken on the original implemenation. This new proc file provides information faster than parsing the potentially huge smaps file. Tested-by: Robert Foss <robert.foss@collabora.com> Signed-off-by: Robert Foss <robert.foss@collabora.com> Signed-off-by: Sonny Rao <sonnyrao@chromium.org> --- fs/proc/base.c | 1 + fs/proc/internal.h | 2 + fs/proc/task_mmu.c | 129 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 132 insertions(+) diff --git a/fs/proc/base.c b/fs/proc/base.c index a11eb71..de3acdf 100644 --- a/fs/proc/base.c +++ b/fs/proc/base.c @@ -2855,6 +2855,7 @@ static const struct pid_entry tgid_base_stuff[] = { REG("clear_refs", S_IWUSR, proc_clear_refs_operations), REG("smaps", S_IRUGO, proc_pid_smaps_operations), REG("pagemap", S_IRUSR, proc_pagemap_operations), + REG("totmaps", S_IRUGO, proc_totmaps_operations), #endif #ifdef CONFIG_SECURITY DIR("attr", S_IRUGO|S_IXUGO, proc_attr_dir_inode_operations, proc_attr_dir_operations), diff --git a/fs/proc/internal.h b/fs/proc/internal.h index aa27810..99f97d7 100644 --- a/fs/proc/internal.h +++ b/fs/proc/internal.h @@ -297,6 +297,8 @@ extern const struct file_operations proc_pid_smaps_operations; extern const struct file_operations proc_tid_smaps_operations; extern const struct file_operations proc_clear_refs_operations; extern const struct file_operations proc_pagemap_operations; +extern const struct file_operations proc_totmaps_operations; + extern unsigned long task_vsize(struct mm_struct *); extern unsigned long task_statm(struct mm_struct *, diff --git a/fs/proc/task_mmu.c b/fs/proc/task_mmu.c index 4648c7f..fe692cb 100644 --- a/fs/proc/task_mmu.c +++ b/fs/proc/task_mmu.c @@ -802,6 +802,75 @@ static int show_smap(struct seq_file *m, void *v, int is_pid) return 0; } +static void add_smaps_sum(struct mem_size_stats *mss, + struct mem_size_stats *mss_sum) +{ + mss_sum->resident += mss->resident; + mss_sum->pss += mss->pss; + mss_sum->shared_clean += mss->shared_clean; + mss_sum->shared_dirty += mss->shared_dirty; + mss_sum->private_clean += mss->private_clean; + mss_sum->private_dirty += mss->private_dirty; + mss_sum->referenced += mss->referenced; + mss_sum->anonymous += mss->anonymous; + mss_sum->anonymous_thp += mss->anonymous_thp; + mss_sum->swap += mss->swap; +} + +static int totmaps_proc_show(struct seq_file *m, void *data) +{ + struct proc_maps_private *priv = m->private; + struct mm_struct *mm = priv->mm; + struct vm_area_struct *vma; + struct mem_size_stats mss_sum; + + memset(&mss_sum, 0, sizeof(mss_sum)); + down_read(&mm->mmap_sem); + hold_task_mempolicy(priv); + + for (vma = mm->mmap; vma != priv->tail_vma; vma = vma->vm_next) { + struct mem_size_stats mss; + struct mm_walk smaps_walk = { + .pmd_entry = smaps_pte_range, + .mm = vma->vm_mm, + .private = &mss, + }; + + if (vma->vm_mm && !is_vm_hugetlb_page(vma)) { + memset(&mss, 0, sizeof(mss)); + walk_page_vma(vma, &smaps_walk); + add_smaps_sum(&mss, &mss_sum); + } + } + + release_task_mempolicy(priv); + up_read(&mm->mmap_sem); + + seq_printf(m, + "Rss: %8lu kB\n" + "Pss: %8lu kB\n" + "Shared_Clean: %8lu kB\n" + "Shared_Dirty: %8lu kB\n" + "Private_Clean: %8lu kB\n" + "Private_Dirty: %8lu kB\n" + "Referenced: %8lu kB\n" + "Anonymous: %8lu kB\n" + "AnonHugePages: %8lu kB\n" + "Swap: %8lu kB\n", + mss_sum.resident >> 10, + (unsigned long)(mss_sum.pss >> (10 + PSS_SHIFT)), + mss_sum.shared_clean >> 10, + mss_sum.shared_dirty >> 10, + mss_sum.private_clean >> 10, + mss_sum.private_dirty >> 10, + mss_sum.referenced >> 10, + mss_sum.anonymous >> 10, + mss_sum.anonymous_thp >> 10, + mss_sum.swap >> 10); + + return 0; +} + static int show_pid_smap(struct seq_file *m, void *v) { return show_smap(m, v, 1); @@ -812,6 +881,28 @@ static int show_tid_smap(struct seq_file *m, void *v) return show_smap(m, v, 0); } +static void *m_totmaps_start(struct seq_file *p, loff_t *pos) +{ + return NULL + (*pos == 0); +} + +static void *m_totmaps_next(struct seq_file *p, void *v, loff_t *pos) +{ + ++*pos; + return NULL; +} + +static void m_totmaps_stop(struct seq_file *p, void *v) +{ +} + +static const struct seq_operations proc_totmaps_op = { + .start = m_totmaps_start, + .next = m_totmaps_next, + .stop = m_totmaps_stop, + .show = totmaps_proc_show +}; + static const struct seq_operations proc_pid_smaps_op = { .start = m_start, .next = m_next, @@ -836,6 +927,37 @@ static int tid_smaps_open(struct inode *inode, struct file *file) return do_maps_open(inode, file, &proc_tid_smaps_op); } +static int totmaps_open(struct inode *inode, struct file *file) +{ + struct proc_maps_private *priv = NULL; + struct seq_file *seq; + int ret; + + ret = do_maps_open(inode, file, &proc_totmaps_op); + if (ret) + goto error; + + /* + * We need to grab references to the task_struct + * at open time, because there's a potential information + * leak where the totmaps file is opened and held open + * while the underlying pid to task mapping changes + * underneath it + */ + seq = file->private_data; + priv = seq->private; + priv->task = get_proc_task(inode); + if (!priv->task) { + ret = -ESRCH; + goto error; + } + + return 0; + +error: + return ret; +} + const struct file_operations proc_pid_smaps_operations = { .open = pid_smaps_open, .read = seq_read, @@ -850,6 +972,13 @@ const struct file_operations proc_tid_smaps_operations = { .release = proc_map_release, }; +const struct file_operations proc_totmaps_operations = { + .open = totmaps_open, + .read = seq_read, + .llseek = seq_lseek, + .release = proc_map_release, +}; + enum clear_refs_types { CLEAR_REFS_ALL = 1, CLEAR_REFS_ANON, -- 2.7.4 ^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PACTH v3 1/3] mm, proc: Implement /proc/<pid>/totmaps 2016-08-16 17:34 ` [PACTH v3 1/3] mm, proc: " robert.foss @ 2016-08-16 18:18 ` Jann Horn [not found] ` <20160816181840.GB7298-J1fxOzX/cBvk1uMJSBkQmQ@public.gmane.org> 0 siblings, 1 reply; 9+ messages in thread From: Jann Horn @ 2016-08-16 18:18 UTC (permalink / raw) To: robert.foss Cc: corbet, akpm, vbabka, mhocko, koct9i, hughd, n-horiguchi, john.stultz, minchan, ross.zwisler, jmarchan, hannes, mingo, keescook, viro, gorcunov, sonnyrao, plaguedbypenguins, eric.engestrom, rientjes, jdanis, calvinowens, adobriyan, kirill.shutemov, ldufour, linux-doc, linux-kernel, Ben Zhang, Bryan Freed, Filipe Brandenburger, Mateusz Guzik, Michal Hocko, linux-api [-- Attachment #1: Type: text/plain, Size: 2740 bytes --] On Tue, Aug 16, 2016 at 01:34:14PM -0400, robert.foss@collabora.com wrote: > From: Robert Foss <robert.foss@collabora.com> > > This is based on earlier work by Thiago Goncales. It implements a new > per process proc file which summarizes the contents of the smaps file > but doesn't display any addresses. It gives more detailed information > than statm like the PSS (proprotional set size). It differs from the > original implementation in that it doesn't use the full blown set of > seq operations, uses a different termination condition, and doesn't > displayed "Locked" as that was broken on the original implemenation. > > This new proc file provides information faster than parsing the potentially > huge smaps file. > > Tested-by: Robert Foss <robert.foss@collabora.com> > Signed-off-by: Robert Foss <robert.foss@collabora.com> > > Signed-off-by: Sonny Rao <sonnyrao@chromium.org> > --- [...] > +static int totmaps_open(struct inode *inode, struct file *file) > +{ > + struct proc_maps_private *priv = NULL; > + struct seq_file *seq; > + int ret; > + > + ret = do_maps_open(inode, file, &proc_totmaps_op); > + if (ret) > + goto error; > + > + /* > + * We need to grab references to the task_struct > + * at open time, because there's a potential information > + * leak where the totmaps file is opened and held open > + * while the underlying pid to task mapping changes > + * underneath it > + */ > + seq = file->private_data; > + priv = seq->private; > + priv->task = get_proc_task(inode); > + if (!priv->task) { > + ret = -ESRCH; > + goto error; I see that you removed the proc_map_release() call for the upper error case as I recommended. However, for the second error case, you do have to call it because do_maps_open() succeeded. You could fix this by turning the first "goto error;" into "return;" and adding the proc_map_release() call back in after the "error:" label. This would be fine - if an error branch just needs to return an error code, it's okay to do so directly without jumping to an error label. Alternatively, you could add a second label in front of the existing "error:" label, jump to the new label for the second error case, and call proc_map_release() between the new label and the old one. > + } > + > + return 0; > + > +error: > + return ret; > +} > + [...] > +const struct file_operations proc_totmaps_operations = { > + .open = totmaps_open, > + .read = seq_read, > + .llseek = seq_lseek, > + .release = proc_map_release, > +}; As I said regarding v2 already: This won't release priv->task, causing a memory leak (exploitable through a reference counter overflow of the task_struct usage counter). [-- Attachment #2: Digital signature --] [-- Type: application/pgp-signature, Size: 819 bytes --] ^ permalink raw reply [flat|nested] 9+ messages in thread
[parent not found: <20160816181840.GB7298-J1fxOzX/cBvk1uMJSBkQmQ@public.gmane.org>]
* Re: [PACTH v3 1/3] mm, proc: Implement /proc/<pid>/totmaps [not found] ` <20160816181840.GB7298-J1fxOzX/cBvk1uMJSBkQmQ@public.gmane.org> @ 2016-08-16 18:34 ` Robert Foss 2016-08-16 18:47 ` Jann Horn 0 siblings, 1 reply; 9+ messages in thread From: Robert Foss @ 2016-08-16 18:34 UTC (permalink / raw) To: Jann Horn Cc: corbet-T1hC0tSOHrs, akpm-de/tnXTf+JLsfHDXvbKv3WD2FQJk+8+b, vbabka-AlSwsSmVLrQ, mhocko-IBi9RG/b67k, koct9i-Re5JQEeQqe8AvxtiuMwx3w, hughd-hpIqsD4AKlfQT0dZR+AlfA, n-horiguchi-PaJj6Psr51x8UrSeD/g0lQ, john.stultz-QSEj5FYQhm4dnm+yROfE0A, minchan-DgEjT+Ai2ygdnm+yROfE0A, ross.zwisler-VuQAYsv1563Yd54FQh9/CA, jmarchan-H+wXaHxf7aLQT0dZR+AlfA, hannes-druUgvl0LCNAfugRpC6u6w, mingo-DgEjT+Ai2ygdnm+yROfE0A, keescook-F7+t8E8rja9g9hUCZPvPmw, viro-RmSDqhL/yNMiFSDQTTA3OLVCufUGDwFn, gorcunov-GEFAQzZX7r8dnm+yROfE0A, sonnyrao-F7+t8E8rja9g9hUCZPvPmw, plaguedbypenguins-Re5JQEeQqe8AvxtiuMwx3w, eric.engestrom-1AXoQHu6uovQT0dZR+AlfA, rientjes-hpIqsD4AKlfQT0dZR+AlfA, jdanis-hpIqsD4AKlfQT0dZR+AlfA, calvinowens-b10kYP2dOMg, adobriyan-Re5JQEeQqe8AvxtiuMwx3w, kirill.shutemov-VuQAYsv1563Yd54FQh9/CA, ldufour-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8, linux-doc-u79uwXL29TY76Z2rM5mHXA, linux-kernel-u79uwXL29TY76Z2rM5mHXA, Ben Zhang, Bryan Freed, Filipe Brandenburger, Mateusz Guzik, Michal Hocko, linux-api-u79uwXL29TY76Z2rM5mHXA On 2016-08-16 02:18 PM, Jann Horn wrote: > On Tue, Aug 16, 2016 at 01:34:14PM -0400, robert.foss-ZGY8ohtN/8qB+jHODAdFcQ@public.gmane.org wrote: >> From: Robert Foss <robert.foss-ZGY8ohtN/8qB+jHODAdFcQ@public.gmane.org> >> >> This is based on earlier work by Thiago Goncales. It implements a new >> per process proc file which summarizes the contents of the smaps file >> but doesn't display any addresses. It gives more detailed information >> than statm like the PSS (proprotional set size). It differs from the >> original implementation in that it doesn't use the full blown set of >> seq operations, uses a different termination condition, and doesn't >> displayed "Locked" as that was broken on the original implemenation. >> >> This new proc file provides information faster than parsing the potentially >> huge smaps file. >> >> Tested-by: Robert Foss <robert.foss-ZGY8ohtN/8qB+jHODAdFcQ@public.gmane.org> >> Signed-off-by: Robert Foss <robert.foss-ZGY8ohtN/8qB+jHODAdFcQ@public.gmane.org> >> >> Signed-off-by: Sonny Rao <sonnyrao-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org> >> --- > [...] >> +static int totmaps_open(struct inode *inode, struct file *file) >> +{ >> + struct proc_maps_private *priv = NULL; >> + struct seq_file *seq; >> + int ret; >> + >> + ret = do_maps_open(inode, file, &proc_totmaps_op); >> + if (ret) >> + goto error; >> + >> + /* >> + * We need to grab references to the task_struct >> + * at open time, because there's a potential information >> + * leak where the totmaps file is opened and held open >> + * while the underlying pid to task mapping changes >> + * underneath it >> + */ >> + seq = file->private_data; >> + priv = seq->private; >> + priv->task = get_proc_task(inode); >> + if (!priv->task) { >> + ret = -ESRCH; >> + goto error; > > I see that you removed the proc_map_release() call for the upper > error case as I recommended. However, for the second error case, > you do have to call it because do_maps_open() succeeded. > > You could fix this by turning the first "goto error;" into > "return;" and adding the proc_map_release() call back in after > the "error:" label. This would be fine - if an error branch just > needs to return an error code, it's okay to do so directly > without jumping to an error label. > > Alternatively, you could add a second label > in front of the existing "error:" label, jump to the new label > for the second error case, and call proc_map_release() between > the new label and the old one. Ah, naturally. Thanks for the patience and advice! > > >> + } >> + >> + return 0; >> + >> +error: >> + return ret; >> +} >> + > [...] >> +const struct file_operations proc_totmaps_operations = { >> + .open = totmaps_open, >> + .read = seq_read, >> + .llseek = seq_lseek, >> + .release = proc_map_release, >> +}; > > As I said regarding v2 already: > This won't release priv->task, causing a memory leak (exploitable > through a reference counter overflow of the task_struct usage > counter). > Sorry about dropping the ball on that one, what's correct way to release priv->task? ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PACTH v3 1/3] mm, proc: Implement /proc/<pid>/totmaps 2016-08-16 18:34 ` Robert Foss @ 2016-08-16 18:47 ` Jann Horn 0 siblings, 0 replies; 9+ messages in thread From: Jann Horn @ 2016-08-16 18:47 UTC (permalink / raw) To: Robert Foss Cc: corbet, akpm, vbabka, mhocko, koct9i, hughd, n-horiguchi, john.stultz, minchan, ross.zwisler, jmarchan, hannes, mingo, keescook, viro, gorcunov, sonnyrao, plaguedbypenguins, eric.engestrom, rientjes, jdanis, calvinowens, adobriyan, kirill.shutemov, ldufour, linux-doc, linux-kernel, Ben Zhang, Bryan Freed, Filipe Brandenburger, Mateusz Guzik, Michal Hocko, linux-api [-- Attachment #1: Type: text/plain, Size: 1061 bytes --] On Tue, Aug 16, 2016 at 02:34:15PM -0400, Robert Foss wrote: > On 2016-08-16 02:18 PM, Jann Horn wrote: > >On Tue, Aug 16, 2016 at 01:34:14PM -0400, robert.foss@collabora.com wrote: > >>+ } > >>+ > >>+ return 0; > >>+ > >>+error: > >>+ return ret; > >>+} > >>+ > >[...] > >>+const struct file_operations proc_totmaps_operations = { > >>+ .open = totmaps_open, > >>+ .read = seq_read, > >>+ .llseek = seq_lseek, > >>+ .release = proc_map_release, > >>+}; > > > >As I said regarding v2 already: > >This won't release priv->task, causing a memory leak (exploitable > >through a reference counter overflow of the task_struct usage > >counter). > > Sorry about dropping the ball on that one, what's correct way to release > priv->task? get_proc_task() does get_pid_task(), which does get_task_struct(), which increments the ->usage field of the task. You want the inverse operation - something that decrements ->usage and checks for zero. This is done via put_task_struct(), which is defined a few lines below get_task_struct(). [-- Attachment #2: Digital signature --] [-- Type: application/pgp-signature, Size: 819 bytes --] ^ permalink raw reply [flat|nested] 9+ messages in thread
* [PACTH v3 2/3] Documentation/filesystems: Fixed typo 2016-08-16 17:34 [PACTH v3 0/3] Implement /proc/<pid>/totmaps robert.foss 2016-08-16 17:34 ` [PACTH v3 1/3] mm, proc: " robert.foss @ 2016-08-16 17:34 ` robert.foss 2016-08-16 17:34 ` [PACTH v3 3/3] Documentation/filesystems: Added /proc/PID/totmaps documentation robert.foss 2 siblings, 0 replies; 9+ messages in thread From: robert.foss @ 2016-08-16 17:34 UTC (permalink / raw) To: corbet, akpm, vbabka, mhocko, koct9i, hughd, robert.foss, n-horiguchi, john.stultz, minchan, ross.zwisler, jmarchan, hannes, mingo, keescook, viro, gorcunov, sonnyrao, plaguedbypenguins, eric.engestrom, rientjes, jdanis, calvinowens, adobriyan, jann, kirill.shutemov, ldufour, linux-doc, linux-kernel, Ben Zhang, Bryan Freed, Filipe Brandenburger, Mateusz Guzik, Michal Hocko, linux-api From: Robert Foss <robert.foss@collabora.com> Fixed a -> an typo. Signed-off-by: Robert Foss <robert.foss@collabora.com> --- Documentation/filesystems/proc.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Documentation/filesystems/proc.txt b/Documentation/filesystems/proc.txt index e8d0075..7d001be 100644 --- a/Documentation/filesystems/proc.txt +++ b/Documentation/filesystems/proc.txt @@ -145,7 +145,7 @@ Table 1-1: Process specific entries in /proc symbol the task is blocked in - or "0" if not blocked. pagemap Page table stack Report full stack trace, enable via CONFIG_STACKTRACE - smaps a extension based on maps, showing the memory consumption of + smaps an extension based on maps, showing the memory consumption of each mapping and flags associated with it numa_maps an extension based on maps, showing the memory locality and binding policy as well as mem usage (in pages) of each mapping. -- 2.7.4 ^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PACTH v3 3/3] Documentation/filesystems: Added /proc/PID/totmaps documentation 2016-08-16 17:34 [PACTH v3 0/3] Implement /proc/<pid>/totmaps robert.foss 2016-08-16 17:34 ` [PACTH v3 1/3] mm, proc: " robert.foss 2016-08-16 17:34 ` [PACTH v3 2/3] Documentation/filesystems: Fixed typo robert.foss @ 2016-08-16 17:34 ` robert.foss 2016-08-16 18:01 ` Jann Horn 2 siblings, 1 reply; 9+ messages in thread From: robert.foss @ 2016-08-16 17:34 UTC (permalink / raw) To: corbet, akpm, vbabka, mhocko, koct9i, hughd, robert.foss, n-horiguchi, john.stultz, minchan, ross.zwisler, jmarchan, hannes, mingo, keescook, viro, gorcunov, sonnyrao, plaguedbypenguins, eric.engestrom, rientjes, jdanis, calvinowens, adobriyan, jann, kirill.shutemov, ldufour, linux-doc, linux-kernel, Ben Zhang, Bryan Freed, Filipe Brandenburger, Mateusz Guzik, Michal Hocko, linux-api From: Robert Foss <robert.foss@collabora.com> Added documentation covering /proc/PID/totmaps. Signed-off-by: Robert Foss <robert.foss@collabora.com> --- Documentation/filesystems/proc.txt | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/Documentation/filesystems/proc.txt b/Documentation/filesystems/proc.txt index 7d001be..c06ff33 100644 --- a/Documentation/filesystems/proc.txt +++ b/Documentation/filesystems/proc.txt @@ -11,6 +11,7 @@ Version 1.3 Kernel version 2.2.12 Kernel version 2.4.0-test11-pre4 ------------------------------------------------------------------------------ fixes/update part 1.1 Stefani Seibold <stefani@seibold.net> June 9 2009 +add totmaps Robert Foss <robert.foss@collabora.com> August 12 2016 Table of Contents ----------------- @@ -147,6 +148,8 @@ Table 1-1: Process specific entries in /proc stack Report full stack trace, enable via CONFIG_STACKTRACE smaps an extension based on maps, showing the memory consumption of each mapping and flags associated with it + totmaps an extenssion based on maps, showing the total memory + consumption of all mappings numa_maps an extension based on maps, showing the memory locality and binding policy as well as mem usage (in pages) of each mapping. .............................................................................. @@ -512,6 +515,24 @@ be vanished or the reverse -- new added. This file is only present if the CONFIG_MMU kernel configuration option is enabled. +The /proc/PID/totmaps is an extension based on maps, showing the memory +consumption totals for all of the process's mappings. It lists the sums of the +same statistics as /proc/PID/smaps. + +The process' mappings will be summarized as a series of lines like the +following: + +Rss: 4256 kB +Pss: 1170 kB +Shared_Clean: 2720 kB +Shared_Dirty: 1136 kB +Private_Clean: 0 kB +Private_Dirty: 400 kB +Referenced: 4256 kB +Anonymous: 1536 kB +AnonHugePages: 0 kB +Swap: 0 kB + The /proc/PID/clear_refs is used to reset the PG_Referenced and ACCESSED/YOUNG bits on both physical and virtual pages associated with a process, and the soft-dirty bit on pte (see Documentation/vm/soft-dirty.txt for details). -- 2.7.4 ^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PACTH v3 3/3] Documentation/filesystems: Added /proc/PID/totmaps documentation 2016-08-16 17:34 ` [PACTH v3 3/3] Documentation/filesystems: Added /proc/PID/totmaps documentation robert.foss @ 2016-08-16 18:01 ` Jann Horn 2016-08-16 18:26 ` Robert Foss 0 siblings, 1 reply; 9+ messages in thread From: Jann Horn @ 2016-08-16 18:01 UTC (permalink / raw) To: robert.foss Cc: corbet, akpm, vbabka, mhocko, koct9i, hughd, n-horiguchi, john.stultz, minchan, ross.zwisler, jmarchan, hannes, mingo, keescook, viro, gorcunov, sonnyrao, plaguedbypenguins, eric.engestrom, rientjes, jdanis, calvinowens, adobriyan, kirill.shutemov, ldufour, linux-doc, linux-kernel, Ben Zhang, Bryan Freed, Filipe Brandenburger, Mateusz Guzik, Michal Hocko, linux-api [-- Attachment #1: Type: text/plain, Size: 225 bytes --] On Tue, Aug 16, 2016 at 01:34:16PM -0400, robert.foss@collabora.com wrote: > + totmaps an extenssion based on maps, showing the total memory > + consumption of all mappings nit: s/extenssion/extension/ [-- Attachment #2: Digital signature --] [-- Type: application/pgp-signature, Size: 819 bytes --] ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PACTH v3 3/3] Documentation/filesystems: Added /proc/PID/totmaps documentation 2016-08-16 18:01 ` Jann Horn @ 2016-08-16 18:26 ` Robert Foss 0 siblings, 0 replies; 9+ messages in thread From: Robert Foss @ 2016-08-16 18:26 UTC (permalink / raw) To: Jann Horn Cc: corbet, akpm, vbabka, mhocko, koct9i, hughd, n-horiguchi, john.stultz, minchan, ross.zwisler, jmarchan, hannes, mingo, keescook, viro, gorcunov, sonnyrao, plaguedbypenguins, eric.engestrom, rientjes, jdanis, calvinowens, adobriyan, kirill.shutemov, ldufour, linux-doc, linux-kernel, Ben Zhang, Bryan Freed, Filipe Brandenburger, Mateusz Guzik, Michal Hocko, linux-api On 2016-08-16 02:01 PM, Jann Horn wrote: > nit: s/extenssion/extension/ Thanks :) ^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2016-08-16 18:47 UTC | newest] Thread overview: 9+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2016-08-16 17:34 [PACTH v3 0/3] Implement /proc/<pid>/totmaps robert.foss 2016-08-16 17:34 ` [PACTH v3 1/3] mm, proc: " robert.foss 2016-08-16 18:18 ` Jann Horn [not found] ` <20160816181840.GB7298-J1fxOzX/cBvk1uMJSBkQmQ@public.gmane.org> 2016-08-16 18:34 ` Robert Foss 2016-08-16 18:47 ` Jann Horn 2016-08-16 17:34 ` [PACTH v3 2/3] Documentation/filesystems: Fixed typo robert.foss 2016-08-16 17:34 ` [PACTH v3 3/3] Documentation/filesystems: Added /proc/PID/totmaps documentation robert.foss 2016-08-16 18:01 ` Jann Horn 2016-08-16 18:26 ` Robert Foss
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).