History

mm: memcontrol: flush percpu slab vmstats on kmem offlining

I've noticed that the "slab" value in memory.stat is sometimes 0, even if some children memory cgroups have a non-zero "slab" value. The following investigation showed that this is the result of the kmem_cache reparenting in combination with the per-cpu batching of slab vmstats. At the offlining some vmstat value may leave in the percpu cache, not being propagated upwards by the cgroup hierarchy. It means that stats on ancestor levels are lower than actual. Later when slab pages are released, the precise number of pages is substracted on the parent level, making the value negative. We don't show negative values, 0 is printed instead. To fix this issue, let's flush percpu slab memcg and lruvec stats on memcg offlining. This guarantees that numbers on all ancestor levels are accurate and match the actual number of outstanding slab pages.

Roman Gushchin committed 7 years ago

Commit bee07b31 parent 846d2db2 files · +30 −10Browse files

Showing the changes to include/linux (1 of 2 files). Show all

Unified · Split

include/linux/mmzone.h+3−2
@@ -215,8 +215,9 @@ enum node_stat_item { · 214 unmodified lines
215215 NR_INACTIVE_FILE, /* " " " " " */
216216 NR_ACTIVE_FILE, /* " " " " " */
217217 NR_UNEVICTABLE, /* " " " " " */
218− NR_SLAB_RECLAIMABLE,
219− NR_SLAB_UNRECLAIMABLE,
218+ NR_SLAB_RECLAIMABLE, /* Please do not reorder this item */
219+ NR_SLAB_UNRECLAIMABLE, /* and this one without looking at
220+ * memcg_flush_percpu_vmstats() first. */
220221 NR_ISOLATED_ANON, /* Temporary isolated pages from anon lru */
221222 NR_ISOLATED_FILE, /* Temporary isolated pages from file lru */
222223 WORKINGSET_NODES,

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t