Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1732469 > unrolled thread
| Started by | "Yang Shi" <yang.s@alibaba-inc.com> |
|---|---|
| First post | 2017-09-14 19:20 +0200 |
| Last post | 2017-09-14 19:30 +0200 |
| Articles | 6 — 2 participants |
Back to article view | Back to linux.kernel
[RFC] oom: capture unreclaimable slab info in oom message when kernel panic "Yang Shi" <yang.s@alibaba-inc.com> - 2017-09-14 19:20 +0200
[PATCH 1/3] mm: slab: output reclaimable flag in /proc/slabinfo "Yang Shi" <yang.s@alibaba-inc.com> - 2017-09-14 19:20 +0200
Re: [PATCH 1/3] mm: slab: output reclaimable flag in /proc/slabinfo Christopher Lameter <cl@linux.com> - 2017-09-14 19:30 +0200
Re: [PATCH 1/3] mm: slab: output reclaimable flag in /proc/slabinfo "Yang Shi" <yang.s@alibaba-inc.com> - 2017-09-14 20:00 +0200
[PATCH 2/3] tools: slabinfo: add "-U" option to show unreclaimable slabs only "Yang Shi" <yang.s@alibaba-inc.com> - 2017-09-14 19:20 +0200
Re: [PATCH 2/3] tools: slabinfo: add "-U" option to show unreclaimable slabs only Christopher Lameter <cl@linux.com> - 2017-09-14 19:30 +0200
| From | "Yang Shi" <yang.s@alibaba-inc.com> |
|---|---|
| Date | 2017-09-14 19:20 +0200 |
| Subject | [RFC] oom: capture unreclaimable slab info in oom message when kernel panic |
| Message-ID | <upFXY-7Vl-5@gated-at.bofh.it> |
Recently we ran into a oom issue, kernel panic due to no killable process.
The dmesg shows huge unreclaimable slabs used almost 100% memory, but kdump
doesn't capture vmcore due to some reason.
So, it may sound better to capture unreclaimable slab info in oom message when
kernel panic to aid trouble shooting and cover the corner case.
Since kernel already panic, so capturing more information sounds worthy and
doesn't bother normal oom killer.
With the patchset, /proc/slabinfo can print an extra column for reclaimable
flag and tools/vm/slabinfo has a new option, "-U", to show unreclaimable
slab only.
And, oom will print all non zero (num_objs * size != 0) unreclaimable slabs in
oom killer message.
For details, please see the commit log for each commit.
Yang Shi (3):
mm: slab: output reclaimable flag in /proc/slabinfo
tools: slabinfo: add "-U" option to show unreclaimable slabs only
mm: oom: show unreclaimable slab info when kernel panic
mm/oom_kill.c | 13 +++++++++++--
mm/slab.c | 1 +
mm/slab.h | 7 +++++++
mm/slab_common.c | 27 +++++++++++++++++++++++++++
mm/slub.c | 1 +
tools/vm/slabinfo.c | 11 ++++++++++-
6 files changed, 57 insertions(+), 3 deletions(-)
[toc] | [next] | [standalone]
| From | "Yang Shi" <yang.s@alibaba-inc.com> |
|---|---|
| Date | 2017-09-14 19:20 +0200 |
| Subject | [PATCH 1/3] mm: slab: output reclaimable flag in /proc/slabinfo |
| Message-ID | <upFXY-7Vl-15@gated-at.bofh.it> |
| In reply to | #1732469 |
Although slabinfo in tools can print out the flag of slabs to show which
one is reclaimable, it sounds nice to have reclaimable flag shows in
/proc/slabinfo too since /proc should be still the first place to check
those slab info.
Add a new column called "reclaim" in /proc/slabinfo, "1" means
reclaimable, "0" means unreclaimable.
Signed-off-by: Yang Shi <yang.s@alibaba-inc.com>
---
mm/slab.c | 1 +
mm/slab.h | 6 ++++++
mm/slab_common.c | 2 ++
mm/slub.c | 1 +
4 files changed, 10 insertions(+)
diff --git a/mm/slab.c b/mm/slab.c
index 04dec48..4f4971c 100644
--- a/mm/slab.c
+++ b/mm/slab.c
@@ -4132,6 +4132,7 @@ void get_slabinfo(struct kmem_cache *cachep, struct slabinfo *sinfo)
sinfo->shared = cachep->shared;
sinfo->objects_per_slab = cachep->num;
sinfo->cache_order = cachep->gfporder;
+ sinfo->reclaim = is_reclaimable(cachep);
}
void slabinfo_show_stats(struct seq_file *m, struct kmem_cache *cachep)
diff --git a/mm/slab.h b/mm/slab.h
index 0733628..cf01a6e 100644
--- a/mm/slab.h
+++ b/mm/slab.h
@@ -186,6 +186,7 @@ struct slabinfo {
unsigned int shared;
unsigned int objects_per_slab;
unsigned int cache_order;
+ unsigned int reclaim;
};
void get_slabinfo(struct kmem_cache *s, struct slabinfo *sinfo);
@@ -352,6 +353,11 @@ static inline void memcg_link_cache(struct kmem_cache *s)
#endif /* CONFIG_MEMCG && !CONFIG_SLOB */
+static inline bool is_reclaimable(struct kmem_cache *s)
+{
+ return (s->flags & SLAB_RECLAIM_ACCOUNT) ? true : false;
+}
+
static inline struct kmem_cache *cache_from_obj(struct kmem_cache *s, void *x)
{
struct kmem_cache *cachep;
diff --git a/mm/slab_common.c b/mm/slab_common.c
index 904a83b..8a55730 100644
--- a/mm/slab_common.c
+++ b/mm/slab_common.c
@@ -1201,6 +1201,7 @@ static void print_slabinfo_header(struct seq_file *m)
seq_puts(m, " : globalstat <listallocs> <maxobjs> <grown> <reaped> <error> <maxfreeable> <nodeallocs> <remotefrees> <alienoverflow>");
seq_puts(m, " : cpustat <allochit> <allocmiss> <freehit> <freemiss>");
#endif
+ seq_puts(m, " : reclaim");
seq_putc(m, '\n');
}
@@ -1259,6 +1260,7 @@ static void cache_show(struct kmem_cache *s, struct seq_file *m)
seq_printf(m, " : slabdata %6lu %6lu %6lu",
sinfo.active_slabs, sinfo.num_slabs, sinfo.shared_avail);
slabinfo_show_stats(m, s);
+ seq_printf(m, " : %u", sinfo.reclaim);
seq_putc(m, '\n');
}
diff --git a/mm/slub.c b/mm/slub.c
index d39a5d3..c8526c0 100644
--- a/mm/slub.c
+++ b/mm/slub.c
@@ -5872,6 +5872,7 @@ void get_slabinfo(struct kmem_cache *s, struct slabinfo *sinfo)
sinfo->num_slabs = nr_slabs;
sinfo->objects_per_slab = oo_objects(s->oo);
sinfo->cache_order = oo_order(s->oo);
+ sinfo->reclaim = is_reclaimable(s);
}
void slabinfo_show_stats(struct seq_file *m, struct kmem_cache *s)
--
1.8.3.1
[toc] | [prev] | [next] | [standalone]
| From | Christopher Lameter <cl@linux.com> |
|---|---|
| Date | 2017-09-14 19:30 +0200 |
| Subject | Re: [PATCH 1/3] mm: slab: output reclaimable flag in /proc/slabinfo |
| Message-ID | <upG7E-7Yy-15@gated-at.bofh.it> |
| In reply to | #1732470 |
Well /proc/slabinfo is a legacy interface. The infomation if a slab is reclaimable is available via the slabinfo tool. We would break a format that is relied upon by numerous tools.
[toc] | [prev] | [next] | [standalone]
| From | "Yang Shi" <yang.s@alibaba-inc.com> |
|---|---|
| Date | 2017-09-14 20:00 +0200 |
| Subject | Re: [PATCH 1/3] mm: slab: output reclaimable flag in /proc/slabinfo |
| Message-ID | <upGAG-88i-9@gated-at.bofh.it> |
| In reply to | #1732478 |
On 9/14/17 10:27 AM, Christopher Lameter wrote: > Well /proc/slabinfo is a legacy interface. The infomation if a slab is > reclaimable is available via the slabinfo tool. We would break a format > that is relied upon by numerous tools. Thanks for pointing this out. It would be unacceptable if it would break the backward compatibility. A follow-up question is do we know what tools rely on the slabinfo format? From my point of view, although /proc/slabinfo is legacy, it sounds it is still used very often by the users. Thanks, Yang >
[toc] | [prev] | [next] | [standalone]
| From | "Yang Shi" <yang.s@alibaba-inc.com> |
|---|---|
| Date | 2017-09-14 19:20 +0200 |
| Subject | [PATCH 2/3] tools: slabinfo: add "-U" option to show unreclaimable slabs only |
| Message-ID | <upFXY-7Vl-19@gated-at.bofh.it> |
| In reply to | #1732469 |
Add "-U" option to show unreclaimable slabs only.
"-U" and "-S" together can tell us what unreclaimable slabs use the most
memory to help debug huge unreclaimable slabs issue.
Signed-off-by: Yang Shi <yang.s@alibaba-inc.com>
---
tools/vm/slabinfo.c | 11 ++++++++++-
1 file changed, 10 insertions(+), 1 deletion(-)
diff --git a/tools/vm/slabinfo.c b/tools/vm/slabinfo.c
index b9d34b3..9673190 100644
--- a/tools/vm/slabinfo.c
+++ b/tools/vm/slabinfo.c
@@ -83,6 +83,7 @@ struct aliasinfo {
int sort_loss;
int extended_totals;
int show_bytes;
+int unreclaim_only;
/* Debug options */
int sanity;
@@ -132,6 +133,7 @@ static void usage(void)
"-L|--Loss Sort by loss\n"
"-X|--Xtotals Show extended summary information\n"
"-B|--Bytes Show size in bytes\n"
+ "-U|--unreclaim Show unreclaimable slabs only\n"
"\nValid debug options (FZPUT may be combined)\n"
"a / A Switch on all debug options (=FZUP)\n"
"- Switch off all debug options\n"
@@ -568,6 +570,9 @@ static void slabcache(struct slabinfo *s)
if (strcmp(s->name, "*") == 0)
return;
+ if (unreclaim_only && s->reclaim_account)
+ return;
+
if (actual_slabs == 1) {
report(s);
return;
@@ -1346,6 +1351,7 @@ struct option opts[] = {
{ "Loss", no_argument, NULL, 'L'},
{ "Xtotals", no_argument, NULL, 'X'},
{ "Bytes", no_argument, NULL, 'B'},
+ { "unreclaim", no_argument, NULL, 'U'},
{ NULL, 0, NULL, 0 }
};
@@ -1357,7 +1363,7 @@ int main(int argc, char *argv[])
page_size = getpagesize();
- while ((c = getopt_long(argc, argv, "aAd::Defhil1noprstvzTSN:LXB",
+ while ((c = getopt_long(argc, argv, "aAd::Defhil1noprstvzTSN:LXBU",
opts, NULL)) != -1)
switch (c) {
case '1':
@@ -1438,6 +1444,9 @@ int main(int argc, char *argv[])
case 'B':
show_bytes = 1;
break;
+ case 'U':
+ unreclaim_only = 1;
+ break;
default:
fatal("%s: Invalid option '%c'\n", argv[0], optopt);
--
1.8.3.1
[toc] | [prev] | [next] | [standalone]
| From | Christopher Lameter <cl@linux.com> |
|---|---|
| Date | 2017-09-14 19:30 +0200 |
| Subject | Re: [PATCH 2/3] tools: slabinfo: add "-U" option to show unreclaimable slabs only |
| Message-ID | <upG7E-7Yy-1@gated-at.bofh.it> |
| In reply to | #1732472 |
Acked-by: Christoph Lameter <cl@linux.com>
[toc] | [prev] | [standalone]
Back to top | Article view | linux.kernel
csiph-web