Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
awilliam
GitHub Repository: awilliam/linux-vfio
Path: blob/master/mm/memcontrol.c
10814 views
1
/* memcontrol.c - Memory Controller
2
*
3
* Copyright IBM Corporation, 2007
4
* Author Balbir Singh <[email protected]>
5
*
6
* Copyright 2007 OpenVZ SWsoft Inc
7
* Author: Pavel Emelianov <[email protected]>
8
*
9
* Memory thresholds
10
* Copyright (C) 2009 Nokia Corporation
11
* Author: Kirill A. Shutemov
12
*
13
* This program is free software; you can redistribute it and/or modify
14
* it under the terms of the GNU General Public License as published by
15
* the Free Software Foundation; either version 2 of the License, or
16
* (at your option) any later version.
17
*
18
* This program is distributed in the hope that it will be useful,
19
* but WITHOUT ANY WARRANTY; without even the implied warranty of
20
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21
* GNU General Public License for more details.
22
*/
23
24
#include <linux/res_counter.h>
25
#include <linux/memcontrol.h>
26
#include <linux/cgroup.h>
27
#include <linux/mm.h>
28
#include <linux/hugetlb.h>
29
#include <linux/pagemap.h>
30
#include <linux/smp.h>
31
#include <linux/page-flags.h>
32
#include <linux/backing-dev.h>
33
#include <linux/bit_spinlock.h>
34
#include <linux/rcupdate.h>
35
#include <linux/limits.h>
36
#include <linux/mutex.h>
37
#include <linux/rbtree.h>
38
#include <linux/shmem_fs.h>
39
#include <linux/slab.h>
40
#include <linux/swap.h>
41
#include <linux/swapops.h>
42
#include <linux/spinlock.h>
43
#include <linux/eventfd.h>
44
#include <linux/sort.h>
45
#include <linux/fs.h>
46
#include <linux/seq_file.h>
47
#include <linux/vmalloc.h>
48
#include <linux/mm_inline.h>
49
#include <linux/page_cgroup.h>
50
#include <linux/cpu.h>
51
#include <linux/oom.h>
52
#include "internal.h"
53
54
#include <asm/uaccess.h>
55
56
#include <trace/events/vmscan.h>
57
58
struct cgroup_subsys mem_cgroup_subsys __read_mostly;
59
#define MEM_CGROUP_RECLAIM_RETRIES 5
60
struct mem_cgroup *root_mem_cgroup __read_mostly;
61
62
#ifdef CONFIG_CGROUP_MEM_RES_CTLR_SWAP
63
/* Turned on only when memory cgroup is enabled && really_do_swap_account = 1 */
64
int do_swap_account __read_mostly;
65
66
/* for remember boot option*/
67
#ifdef CONFIG_CGROUP_MEM_RES_CTLR_SWAP_ENABLED
68
static int really_do_swap_account __initdata = 1;
69
#else
70
static int really_do_swap_account __initdata = 0;
71
#endif
72
73
#else
74
#define do_swap_account (0)
75
#endif
76
77
78
/*
79
* Statistics for memory cgroup.
80
*/
81
enum mem_cgroup_stat_index {
82
/*
83
* For MEM_CONTAINER_TYPE_ALL, usage = pagecache + rss.
84
*/
85
MEM_CGROUP_STAT_CACHE, /* # of pages charged as cache */
86
MEM_CGROUP_STAT_RSS, /* # of pages charged as anon rss */
87
MEM_CGROUP_STAT_FILE_MAPPED, /* # of pages charged as file rss */
88
MEM_CGROUP_STAT_SWAPOUT, /* # of pages, swapped out */
89
MEM_CGROUP_STAT_DATA, /* end of data requires synchronization */
90
MEM_CGROUP_ON_MOVE, /* someone is moving account between groups */
91
MEM_CGROUP_STAT_NSTATS,
92
};
93
94
enum mem_cgroup_events_index {
95
MEM_CGROUP_EVENTS_PGPGIN, /* # of pages paged in */
96
MEM_CGROUP_EVENTS_PGPGOUT, /* # of pages paged out */
97
MEM_CGROUP_EVENTS_COUNT, /* # of pages paged in/out */
98
MEM_CGROUP_EVENTS_PGFAULT, /* # of page-faults */
99
MEM_CGROUP_EVENTS_PGMAJFAULT, /* # of major page-faults */
100
MEM_CGROUP_EVENTS_NSTATS,
101
};
102
/*
103
* Per memcg event counter is incremented at every pagein/pageout. With THP,
104
* it will be incremated by the number of pages. This counter is used for
105
* for trigger some periodic events. This is straightforward and better
106
* than using jiffies etc. to handle periodic memcg event.
107
*/
108
enum mem_cgroup_events_target {
109
MEM_CGROUP_TARGET_THRESH,
110
MEM_CGROUP_TARGET_SOFTLIMIT,
111
MEM_CGROUP_TARGET_NUMAINFO,
112
MEM_CGROUP_NTARGETS,
113
};
114
#define THRESHOLDS_EVENTS_TARGET (128)
115
#define SOFTLIMIT_EVENTS_TARGET (1024)
116
#define NUMAINFO_EVENTS_TARGET (1024)
117
118
struct mem_cgroup_stat_cpu {
119
long count[MEM_CGROUP_STAT_NSTATS];
120
unsigned long events[MEM_CGROUP_EVENTS_NSTATS];
121
unsigned long targets[MEM_CGROUP_NTARGETS];
122
};
123
124
/*
125
* per-zone information in memory controller.
126
*/
127
struct mem_cgroup_per_zone {
128
/*
129
* spin_lock to protect the per cgroup LRU
130
*/
131
struct list_head lists[NR_LRU_LISTS];
132
unsigned long count[NR_LRU_LISTS];
133
134
struct zone_reclaim_stat reclaim_stat;
135
struct rb_node tree_node; /* RB tree node */
136
unsigned long long usage_in_excess;/* Set to the value by which */
137
/* the soft limit is exceeded*/
138
bool on_tree;
139
struct mem_cgroup *mem; /* Back pointer, we cannot */
140
/* use container_of */
141
};
142
/* Macro for accessing counter */
143
#define MEM_CGROUP_ZSTAT(mz, idx) ((mz)->count[(idx)])
144
145
struct mem_cgroup_per_node {
146
struct mem_cgroup_per_zone zoneinfo[MAX_NR_ZONES];
147
};
148
149
struct mem_cgroup_lru_info {
150
struct mem_cgroup_per_node *nodeinfo[MAX_NUMNODES];
151
};
152
153
/*
154
* Cgroups above their limits are maintained in a RB-Tree, independent of
155
* their hierarchy representation
156
*/
157
158
struct mem_cgroup_tree_per_zone {
159
struct rb_root rb_root;
160
spinlock_t lock;
161
};
162
163
struct mem_cgroup_tree_per_node {
164
struct mem_cgroup_tree_per_zone rb_tree_per_zone[MAX_NR_ZONES];
165
};
166
167
struct mem_cgroup_tree {
168
struct mem_cgroup_tree_per_node *rb_tree_per_node[MAX_NUMNODES];
169
};
170
171
static struct mem_cgroup_tree soft_limit_tree __read_mostly;
172
173
struct mem_cgroup_threshold {
174
struct eventfd_ctx *eventfd;
175
u64 threshold;
176
};
177
178
/* For threshold */
179
struct mem_cgroup_threshold_ary {
180
/* An array index points to threshold just below usage. */
181
int current_threshold;
182
/* Size of entries[] */
183
unsigned int size;
184
/* Array of thresholds */
185
struct mem_cgroup_threshold entries[0];
186
};
187
188
struct mem_cgroup_thresholds {
189
/* Primary thresholds array */
190
struct mem_cgroup_threshold_ary *primary;
191
/*
192
* Spare threshold array.
193
* This is needed to make mem_cgroup_unregister_event() "never fail".
194
* It must be able to store at least primary->size - 1 entries.
195
*/
196
struct mem_cgroup_threshold_ary *spare;
197
};
198
199
/* for OOM */
200
struct mem_cgroup_eventfd_list {
201
struct list_head list;
202
struct eventfd_ctx *eventfd;
203
};
204
205
static void mem_cgroup_threshold(struct mem_cgroup *mem);
206
static void mem_cgroup_oom_notify(struct mem_cgroup *mem);
207
208
/*
209
* The memory controller data structure. The memory controller controls both
210
* page cache and RSS per cgroup. We would eventually like to provide
211
* statistics based on the statistics developed by Rik Van Riel for clock-pro,
212
* to help the administrator determine what knobs to tune.
213
*
214
* TODO: Add a water mark for the memory controller. Reclaim will begin when
215
* we hit the water mark. May be even add a low water mark, such that
216
* no reclaim occurs from a cgroup at it's low water mark, this is
217
* a feature that will be implemented much later in the future.
218
*/
219
struct mem_cgroup {
220
struct cgroup_subsys_state css;
221
/*
222
* the counter to account for memory usage
223
*/
224
struct res_counter res;
225
/*
226
* the counter to account for mem+swap usage.
227
*/
228
struct res_counter memsw;
229
/*
230
* Per cgroup active and inactive list, similar to the
231
* per zone LRU lists.
232
*/
233
struct mem_cgroup_lru_info info;
234
/*
235
* While reclaiming in a hierarchy, we cache the last child we
236
* reclaimed from.
237
*/
238
int last_scanned_child;
239
int last_scanned_node;
240
#if MAX_NUMNODES > 1
241
nodemask_t scan_nodes;
242
atomic_t numainfo_events;
243
atomic_t numainfo_updating;
244
#endif
245
/*
246
* Should the accounting and control be hierarchical, per subtree?
247
*/
248
bool use_hierarchy;
249
atomic_t oom_lock;
250
atomic_t refcnt;
251
252
unsigned int swappiness;
253
/* OOM-Killer disable */
254
int oom_kill_disable;
255
256
/* set when res.limit == memsw.limit */
257
bool memsw_is_minimum;
258
259
/* protect arrays of thresholds */
260
struct mutex thresholds_lock;
261
262
/* thresholds for memory usage. RCU-protected */
263
struct mem_cgroup_thresholds thresholds;
264
265
/* thresholds for mem+swap usage. RCU-protected */
266
struct mem_cgroup_thresholds memsw_thresholds;
267
268
/* For oom notifier event fd */
269
struct list_head oom_notify;
270
271
/*
272
* Should we move charges of a task when a task is moved into this
273
* mem_cgroup ? And what type of charges should we move ?
274
*/
275
unsigned long move_charge_at_immigrate;
276
/*
277
* percpu counter.
278
*/
279
struct mem_cgroup_stat_cpu *stat;
280
/*
281
* used when a cpu is offlined or other synchronizations
282
* See mem_cgroup_read_stat().
283
*/
284
struct mem_cgroup_stat_cpu nocpu_base;
285
spinlock_t pcp_counter_lock;
286
};
287
288
/* Stuffs for move charges at task migration. */
289
/*
290
* Types of charges to be moved. "move_charge_at_immitgrate" is treated as a
291
* left-shifted bitmap of these types.
292
*/
293
enum move_type {
294
MOVE_CHARGE_TYPE_ANON, /* private anonymous page and swap of it */
295
MOVE_CHARGE_TYPE_FILE, /* file page(including tmpfs) and swap of it */
296
NR_MOVE_TYPE,
297
};
298
299
/* "mc" and its members are protected by cgroup_mutex */
300
static struct move_charge_struct {
301
spinlock_t lock; /* for from, to */
302
struct mem_cgroup *from;
303
struct mem_cgroup *to;
304
unsigned long precharge;
305
unsigned long moved_charge;
306
unsigned long moved_swap;
307
struct task_struct *moving_task; /* a task moving charges */
308
wait_queue_head_t waitq; /* a waitq for other context */
309
} mc = {
310
.lock = __SPIN_LOCK_UNLOCKED(mc.lock),
311
.waitq = __WAIT_QUEUE_HEAD_INITIALIZER(mc.waitq),
312
};
313
314
static bool move_anon(void)
315
{
316
return test_bit(MOVE_CHARGE_TYPE_ANON,
317
&mc.to->move_charge_at_immigrate);
318
}
319
320
static bool move_file(void)
321
{
322
return test_bit(MOVE_CHARGE_TYPE_FILE,
323
&mc.to->move_charge_at_immigrate);
324
}
325
326
/*
327
* Maximum loops in mem_cgroup_hierarchical_reclaim(), used for soft
328
* limit reclaim to prevent infinite loops, if they ever occur.
329
*/
330
#define MEM_CGROUP_MAX_RECLAIM_LOOPS (100)
331
#define MEM_CGROUP_MAX_SOFT_LIMIT_RECLAIM_LOOPS (2)
332
333
enum charge_type {
334
MEM_CGROUP_CHARGE_TYPE_CACHE = 0,
335
MEM_CGROUP_CHARGE_TYPE_MAPPED,
336
MEM_CGROUP_CHARGE_TYPE_SHMEM, /* used by page migration of shmem */
337
MEM_CGROUP_CHARGE_TYPE_FORCE, /* used by force_empty */
338
MEM_CGROUP_CHARGE_TYPE_SWAPOUT, /* for accounting swapcache */
339
MEM_CGROUP_CHARGE_TYPE_DROP, /* a page was unused swap cache */
340
NR_CHARGE_TYPE,
341
};
342
343
/* for encoding cft->private value on file */
344
#define _MEM (0)
345
#define _MEMSWAP (1)
346
#define _OOM_TYPE (2)
347
#define MEMFILE_PRIVATE(x, val) (((x) << 16) | (val))
348
#define MEMFILE_TYPE(val) (((val) >> 16) & 0xffff)
349
#define MEMFILE_ATTR(val) ((val) & 0xffff)
350
/* Used for OOM nofiier */
351
#define OOM_CONTROL (0)
352
353
/*
354
* Reclaim flags for mem_cgroup_hierarchical_reclaim
355
*/
356
#define MEM_CGROUP_RECLAIM_NOSWAP_BIT 0x0
357
#define MEM_CGROUP_RECLAIM_NOSWAP (1 << MEM_CGROUP_RECLAIM_NOSWAP_BIT)
358
#define MEM_CGROUP_RECLAIM_SHRINK_BIT 0x1
359
#define MEM_CGROUP_RECLAIM_SHRINK (1 << MEM_CGROUP_RECLAIM_SHRINK_BIT)
360
#define MEM_CGROUP_RECLAIM_SOFT_BIT 0x2
361
#define MEM_CGROUP_RECLAIM_SOFT (1 << MEM_CGROUP_RECLAIM_SOFT_BIT)
362
363
static void mem_cgroup_get(struct mem_cgroup *mem);
364
static void mem_cgroup_put(struct mem_cgroup *mem);
365
static struct mem_cgroup *parent_mem_cgroup(struct mem_cgroup *mem);
366
static void drain_all_stock_async(struct mem_cgroup *mem);
367
368
static struct mem_cgroup_per_zone *
369
mem_cgroup_zoneinfo(struct mem_cgroup *mem, int nid, int zid)
370
{
371
return &mem->info.nodeinfo[nid]->zoneinfo[zid];
372
}
373
374
struct cgroup_subsys_state *mem_cgroup_css(struct mem_cgroup *mem)
375
{
376
return &mem->css;
377
}
378
379
static struct mem_cgroup_per_zone *
380
page_cgroup_zoneinfo(struct mem_cgroup *mem, struct page *page)
381
{
382
int nid = page_to_nid(page);
383
int zid = page_zonenum(page);
384
385
return mem_cgroup_zoneinfo(mem, nid, zid);
386
}
387
388
static struct mem_cgroup_tree_per_zone *
389
soft_limit_tree_node_zone(int nid, int zid)
390
{
391
return &soft_limit_tree.rb_tree_per_node[nid]->rb_tree_per_zone[zid];
392
}
393
394
static struct mem_cgroup_tree_per_zone *
395
soft_limit_tree_from_page(struct page *page)
396
{
397
int nid = page_to_nid(page);
398
int zid = page_zonenum(page);
399
400
return &soft_limit_tree.rb_tree_per_node[nid]->rb_tree_per_zone[zid];
401
}
402
403
static void
404
__mem_cgroup_insert_exceeded(struct mem_cgroup *mem,
405
struct mem_cgroup_per_zone *mz,
406
struct mem_cgroup_tree_per_zone *mctz,
407
unsigned long long new_usage_in_excess)
408
{
409
struct rb_node **p = &mctz->rb_root.rb_node;
410
struct rb_node *parent = NULL;
411
struct mem_cgroup_per_zone *mz_node;
412
413
if (mz->on_tree)
414
return;
415
416
mz->usage_in_excess = new_usage_in_excess;
417
if (!mz->usage_in_excess)
418
return;
419
while (*p) {
420
parent = *p;
421
mz_node = rb_entry(parent, struct mem_cgroup_per_zone,
422
tree_node);
423
if (mz->usage_in_excess < mz_node->usage_in_excess)
424
p = &(*p)->rb_left;
425
/*
426
* We can't avoid mem cgroups that are over their soft
427
* limit by the same amount
428
*/
429
else if (mz->usage_in_excess >= mz_node->usage_in_excess)
430
p = &(*p)->rb_right;
431
}
432
rb_link_node(&mz->tree_node, parent, p);
433
rb_insert_color(&mz->tree_node, &mctz->rb_root);
434
mz->on_tree = true;
435
}
436
437
static void
438
__mem_cgroup_remove_exceeded(struct mem_cgroup *mem,
439
struct mem_cgroup_per_zone *mz,
440
struct mem_cgroup_tree_per_zone *mctz)
441
{
442
if (!mz->on_tree)
443
return;
444
rb_erase(&mz->tree_node, &mctz->rb_root);
445
mz->on_tree = false;
446
}
447
448
static void
449
mem_cgroup_remove_exceeded(struct mem_cgroup *mem,
450
struct mem_cgroup_per_zone *mz,
451
struct mem_cgroup_tree_per_zone *mctz)
452
{
453
spin_lock(&mctz->lock);
454
__mem_cgroup_remove_exceeded(mem, mz, mctz);
455
spin_unlock(&mctz->lock);
456
}
457
458
459
static void mem_cgroup_update_tree(struct mem_cgroup *mem, struct page *page)
460
{
461
unsigned long long excess;
462
struct mem_cgroup_per_zone *mz;
463
struct mem_cgroup_tree_per_zone *mctz;
464
int nid = page_to_nid(page);
465
int zid = page_zonenum(page);
466
mctz = soft_limit_tree_from_page(page);
467
468
/*
469
* Necessary to update all ancestors when hierarchy is used.
470
* because their event counter is not touched.
471
*/
472
for (; mem; mem = parent_mem_cgroup(mem)) {
473
mz = mem_cgroup_zoneinfo(mem, nid, zid);
474
excess = res_counter_soft_limit_excess(&mem->res);
475
/*
476
* We have to update the tree if mz is on RB-tree or
477
* mem is over its softlimit.
478
*/
479
if (excess || mz->on_tree) {
480
spin_lock(&mctz->lock);
481
/* if on-tree, remove it */
482
if (mz->on_tree)
483
__mem_cgroup_remove_exceeded(mem, mz, mctz);
484
/*
485
* Insert again. mz->usage_in_excess will be updated.
486
* If excess is 0, no tree ops.
487
*/
488
__mem_cgroup_insert_exceeded(mem, mz, mctz, excess);
489
spin_unlock(&mctz->lock);
490
}
491
}
492
}
493
494
static void mem_cgroup_remove_from_trees(struct mem_cgroup *mem)
495
{
496
int node, zone;
497
struct mem_cgroup_per_zone *mz;
498
struct mem_cgroup_tree_per_zone *mctz;
499
500
for_each_node_state(node, N_POSSIBLE) {
501
for (zone = 0; zone < MAX_NR_ZONES; zone++) {
502
mz = mem_cgroup_zoneinfo(mem, node, zone);
503
mctz = soft_limit_tree_node_zone(node, zone);
504
mem_cgroup_remove_exceeded(mem, mz, mctz);
505
}
506
}
507
}
508
509
static struct mem_cgroup_per_zone *
510
__mem_cgroup_largest_soft_limit_node(struct mem_cgroup_tree_per_zone *mctz)
511
{
512
struct rb_node *rightmost = NULL;
513
struct mem_cgroup_per_zone *mz;
514
515
retry:
516
mz = NULL;
517
rightmost = rb_last(&mctz->rb_root);
518
if (!rightmost)
519
goto done; /* Nothing to reclaim from */
520
521
mz = rb_entry(rightmost, struct mem_cgroup_per_zone, tree_node);
522
/*
523
* Remove the node now but someone else can add it back,
524
* we will to add it back at the end of reclaim to its correct
525
* position in the tree.
526
*/
527
__mem_cgroup_remove_exceeded(mz->mem, mz, mctz);
528
if (!res_counter_soft_limit_excess(&mz->mem->res) ||
529
!css_tryget(&mz->mem->css))
530
goto retry;
531
done:
532
return mz;
533
}
534
535
static struct mem_cgroup_per_zone *
536
mem_cgroup_largest_soft_limit_node(struct mem_cgroup_tree_per_zone *mctz)
537
{
538
struct mem_cgroup_per_zone *mz;
539
540
spin_lock(&mctz->lock);
541
mz = __mem_cgroup_largest_soft_limit_node(mctz);
542
spin_unlock(&mctz->lock);
543
return mz;
544
}
545
546
/*
547
* Implementation Note: reading percpu statistics for memcg.
548
*
549
* Both of vmstat[] and percpu_counter has threshold and do periodic
550
* synchronization to implement "quick" read. There are trade-off between
551
* reading cost and precision of value. Then, we may have a chance to implement
552
* a periodic synchronizion of counter in memcg's counter.
553
*
554
* But this _read() function is used for user interface now. The user accounts
555
* memory usage by memory cgroup and he _always_ requires exact value because
556
* he accounts memory. Even if we provide quick-and-fuzzy read, we always
557
* have to visit all online cpus and make sum. So, for now, unnecessary
558
* synchronization is not implemented. (just implemented for cpu hotplug)
559
*
560
* If there are kernel internal actions which can make use of some not-exact
561
* value, and reading all cpu value can be performance bottleneck in some
562
* common workload, threashold and synchonization as vmstat[] should be
563
* implemented.
564
*/
565
static long mem_cgroup_read_stat(struct mem_cgroup *mem,
566
enum mem_cgroup_stat_index idx)
567
{
568
long val = 0;
569
int cpu;
570
571
get_online_cpus();
572
for_each_online_cpu(cpu)
573
val += per_cpu(mem->stat->count[idx], cpu);
574
#ifdef CONFIG_HOTPLUG_CPU
575
spin_lock(&mem->pcp_counter_lock);
576
val += mem->nocpu_base.count[idx];
577
spin_unlock(&mem->pcp_counter_lock);
578
#endif
579
put_online_cpus();
580
return val;
581
}
582
583
static void mem_cgroup_swap_statistics(struct mem_cgroup *mem,
584
bool charge)
585
{
586
int val = (charge) ? 1 : -1;
587
this_cpu_add(mem->stat->count[MEM_CGROUP_STAT_SWAPOUT], val);
588
}
589
590
void mem_cgroup_pgfault(struct mem_cgroup *mem, int val)
591
{
592
this_cpu_add(mem->stat->events[MEM_CGROUP_EVENTS_PGFAULT], val);
593
}
594
595
void mem_cgroup_pgmajfault(struct mem_cgroup *mem, int val)
596
{
597
this_cpu_add(mem->stat->events[MEM_CGROUP_EVENTS_PGMAJFAULT], val);
598
}
599
600
static unsigned long mem_cgroup_read_events(struct mem_cgroup *mem,
601
enum mem_cgroup_events_index idx)
602
{
603
unsigned long val = 0;
604
int cpu;
605
606
for_each_online_cpu(cpu)
607
val += per_cpu(mem->stat->events[idx], cpu);
608
#ifdef CONFIG_HOTPLUG_CPU
609
spin_lock(&mem->pcp_counter_lock);
610
val += mem->nocpu_base.events[idx];
611
spin_unlock(&mem->pcp_counter_lock);
612
#endif
613
return val;
614
}
615
616
static void mem_cgroup_charge_statistics(struct mem_cgroup *mem,
617
bool file, int nr_pages)
618
{
619
preempt_disable();
620
621
if (file)
622
__this_cpu_add(mem->stat->count[MEM_CGROUP_STAT_CACHE], nr_pages);
623
else
624
__this_cpu_add(mem->stat->count[MEM_CGROUP_STAT_RSS], nr_pages);
625
626
/* pagein of a big page is an event. So, ignore page size */
627
if (nr_pages > 0)
628
__this_cpu_inc(mem->stat->events[MEM_CGROUP_EVENTS_PGPGIN]);
629
else {
630
__this_cpu_inc(mem->stat->events[MEM_CGROUP_EVENTS_PGPGOUT]);
631
nr_pages = -nr_pages; /* for event */
632
}
633
634
__this_cpu_add(mem->stat->events[MEM_CGROUP_EVENTS_COUNT], nr_pages);
635
636
preempt_enable();
637
}
638
639
static unsigned long
640
mem_cgroup_get_zonestat_node(struct mem_cgroup *mem, int nid, enum lru_list idx)
641
{
642
struct mem_cgroup_per_zone *mz;
643
u64 total = 0;
644
int zid;
645
646
for (zid = 0; zid < MAX_NR_ZONES; zid++) {
647
mz = mem_cgroup_zoneinfo(mem, nid, zid);
648
total += MEM_CGROUP_ZSTAT(mz, idx);
649
}
650
return total;
651
}
652
static unsigned long mem_cgroup_get_local_zonestat(struct mem_cgroup *mem,
653
enum lru_list idx)
654
{
655
int nid;
656
u64 total = 0;
657
658
for_each_online_node(nid)
659
total += mem_cgroup_get_zonestat_node(mem, nid, idx);
660
return total;
661
}
662
663
static bool __memcg_event_check(struct mem_cgroup *mem, int target)
664
{
665
unsigned long val, next;
666
667
val = this_cpu_read(mem->stat->events[MEM_CGROUP_EVENTS_COUNT]);
668
next = this_cpu_read(mem->stat->targets[target]);
669
/* from time_after() in jiffies.h */
670
return ((long)next - (long)val < 0);
671
}
672
673
static void __mem_cgroup_target_update(struct mem_cgroup *mem, int target)
674
{
675
unsigned long val, next;
676
677
val = this_cpu_read(mem->stat->events[MEM_CGROUP_EVENTS_COUNT]);
678
679
switch (target) {
680
case MEM_CGROUP_TARGET_THRESH:
681
next = val + THRESHOLDS_EVENTS_TARGET;
682
break;
683
case MEM_CGROUP_TARGET_SOFTLIMIT:
684
next = val + SOFTLIMIT_EVENTS_TARGET;
685
break;
686
case MEM_CGROUP_TARGET_NUMAINFO:
687
next = val + NUMAINFO_EVENTS_TARGET;
688
break;
689
default:
690
return;
691
}
692
693
this_cpu_write(mem->stat->targets[target], next);
694
}
695
696
/*
697
* Check events in order.
698
*
699
*/
700
static void memcg_check_events(struct mem_cgroup *mem, struct page *page)
701
{
702
/* threshold event is triggered in finer grain than soft limit */
703
if (unlikely(__memcg_event_check(mem, MEM_CGROUP_TARGET_THRESH))) {
704
mem_cgroup_threshold(mem);
705
__mem_cgroup_target_update(mem, MEM_CGROUP_TARGET_THRESH);
706
if (unlikely(__memcg_event_check(mem,
707
MEM_CGROUP_TARGET_SOFTLIMIT))) {
708
mem_cgroup_update_tree(mem, page);
709
__mem_cgroup_target_update(mem,
710
MEM_CGROUP_TARGET_SOFTLIMIT);
711
}
712
#if MAX_NUMNODES > 1
713
if (unlikely(__memcg_event_check(mem,
714
MEM_CGROUP_TARGET_NUMAINFO))) {
715
atomic_inc(&mem->numainfo_events);
716
__mem_cgroup_target_update(mem,
717
MEM_CGROUP_TARGET_NUMAINFO);
718
}
719
#endif
720
}
721
}
722
723
static struct mem_cgroup *mem_cgroup_from_cont(struct cgroup *cont)
724
{
725
return container_of(cgroup_subsys_state(cont,
726
mem_cgroup_subsys_id), struct mem_cgroup,
727
css);
728
}
729
730
struct mem_cgroup *mem_cgroup_from_task(struct task_struct *p)
731
{
732
/*
733
* mm_update_next_owner() may clear mm->owner to NULL
734
* if it races with swapoff, page migration, etc.
735
* So this can be called with p == NULL.
736
*/
737
if (unlikely(!p))
738
return NULL;
739
740
return container_of(task_subsys_state(p, mem_cgroup_subsys_id),
741
struct mem_cgroup, css);
742
}
743
744
struct mem_cgroup *try_get_mem_cgroup_from_mm(struct mm_struct *mm)
745
{
746
struct mem_cgroup *mem = NULL;
747
748
if (!mm)
749
return NULL;
750
/*
751
* Because we have no locks, mm->owner's may be being moved to other
752
* cgroup. We use css_tryget() here even if this looks
753
* pessimistic (rather than adding locks here).
754
*/
755
rcu_read_lock();
756
do {
757
mem = mem_cgroup_from_task(rcu_dereference(mm->owner));
758
if (unlikely(!mem))
759
break;
760
} while (!css_tryget(&mem->css));
761
rcu_read_unlock();
762
return mem;
763
}
764
765
/* The caller has to guarantee "mem" exists before calling this */
766
static struct mem_cgroup *mem_cgroup_start_loop(struct mem_cgroup *mem)
767
{
768
struct cgroup_subsys_state *css;
769
int found;
770
771
if (!mem) /* ROOT cgroup has the smallest ID */
772
return root_mem_cgroup; /*css_put/get against root is ignored*/
773
if (!mem->use_hierarchy) {
774
if (css_tryget(&mem->css))
775
return mem;
776
return NULL;
777
}
778
rcu_read_lock();
779
/*
780
* searching a memory cgroup which has the smallest ID under given
781
* ROOT cgroup. (ID >= 1)
782
*/
783
css = css_get_next(&mem_cgroup_subsys, 1, &mem->css, &found);
784
if (css && css_tryget(css))
785
mem = container_of(css, struct mem_cgroup, css);
786
else
787
mem = NULL;
788
rcu_read_unlock();
789
return mem;
790
}
791
792
static struct mem_cgroup *mem_cgroup_get_next(struct mem_cgroup *iter,
793
struct mem_cgroup *root,
794
bool cond)
795
{
796
int nextid = css_id(&iter->css) + 1;
797
int found;
798
int hierarchy_used;
799
struct cgroup_subsys_state *css;
800
801
hierarchy_used = iter->use_hierarchy;
802
803
css_put(&iter->css);
804
/* If no ROOT, walk all, ignore hierarchy */
805
if (!cond || (root && !hierarchy_used))
806
return NULL;
807
808
if (!root)
809
root = root_mem_cgroup;
810
811
do {
812
iter = NULL;
813
rcu_read_lock();
814
815
css = css_get_next(&mem_cgroup_subsys, nextid,
816
&root->css, &found);
817
if (css && css_tryget(css))
818
iter = container_of(css, struct mem_cgroup, css);
819
rcu_read_unlock();
820
/* If css is NULL, no more cgroups will be found */
821
nextid = found + 1;
822
} while (css && !iter);
823
824
return iter;
825
}
826
/*
827
* for_eacn_mem_cgroup_tree() for visiting all cgroup under tree. Please
828
* be careful that "break" loop is not allowed. We have reference count.
829
* Instead of that modify "cond" to be false and "continue" to exit the loop.
830
*/
831
#define for_each_mem_cgroup_tree_cond(iter, root, cond) \
832
for (iter = mem_cgroup_start_loop(root);\
833
iter != NULL;\
834
iter = mem_cgroup_get_next(iter, root, cond))
835
836
#define for_each_mem_cgroup_tree(iter, root) \
837
for_each_mem_cgroup_tree_cond(iter, root, true)
838
839
#define for_each_mem_cgroup_all(iter) \
840
for_each_mem_cgroup_tree_cond(iter, NULL, true)
841
842
843
static inline bool mem_cgroup_is_root(struct mem_cgroup *mem)
844
{
845
return (mem == root_mem_cgroup);
846
}
847
848
void mem_cgroup_count_vm_event(struct mm_struct *mm, enum vm_event_item idx)
849
{
850
struct mem_cgroup *mem;
851
852
if (!mm)
853
return;
854
855
rcu_read_lock();
856
mem = mem_cgroup_from_task(rcu_dereference(mm->owner));
857
if (unlikely(!mem))
858
goto out;
859
860
switch (idx) {
861
case PGMAJFAULT:
862
mem_cgroup_pgmajfault(mem, 1);
863
break;
864
case PGFAULT:
865
mem_cgroup_pgfault(mem, 1);
866
break;
867
default:
868
BUG();
869
}
870
out:
871
rcu_read_unlock();
872
}
873
EXPORT_SYMBOL(mem_cgroup_count_vm_event);
874
875
/*
876
* Following LRU functions are allowed to be used without PCG_LOCK.
877
* Operations are called by routine of global LRU independently from memcg.
878
* What we have to take care of here is validness of pc->mem_cgroup.
879
*
880
* Changes to pc->mem_cgroup happens when
881
* 1. charge
882
* 2. moving account
883
* In typical case, "charge" is done before add-to-lru. Exception is SwapCache.
884
* It is added to LRU before charge.
885
* If PCG_USED bit is not set, page_cgroup is not added to this private LRU.
886
* When moving account, the page is not on LRU. It's isolated.
887
*/
888
889
void mem_cgroup_del_lru_list(struct page *page, enum lru_list lru)
890
{
891
struct page_cgroup *pc;
892
struct mem_cgroup_per_zone *mz;
893
894
if (mem_cgroup_disabled())
895
return;
896
pc = lookup_page_cgroup(page);
897
/* can happen while we handle swapcache. */
898
if (!TestClearPageCgroupAcctLRU(pc))
899
return;
900
VM_BUG_ON(!pc->mem_cgroup);
901
/*
902
* We don't check PCG_USED bit. It's cleared when the "page" is finally
903
* removed from global LRU.
904
*/
905
mz = page_cgroup_zoneinfo(pc->mem_cgroup, page);
906
/* huge page split is done under lru_lock. so, we have no races. */
907
MEM_CGROUP_ZSTAT(mz, lru) -= 1 << compound_order(page);
908
if (mem_cgroup_is_root(pc->mem_cgroup))
909
return;
910
VM_BUG_ON(list_empty(&pc->lru));
911
list_del_init(&pc->lru);
912
}
913
914
void mem_cgroup_del_lru(struct page *page)
915
{
916
mem_cgroup_del_lru_list(page, page_lru(page));
917
}
918
919
/*
920
* Writeback is about to end against a page which has been marked for immediate
921
* reclaim. If it still appears to be reclaimable, move it to the tail of the
922
* inactive list.
923
*/
924
void mem_cgroup_rotate_reclaimable_page(struct page *page)
925
{
926
struct mem_cgroup_per_zone *mz;
927
struct page_cgroup *pc;
928
enum lru_list lru = page_lru(page);
929
930
if (mem_cgroup_disabled())
931
return;
932
933
pc = lookup_page_cgroup(page);
934
/* unused or root page is not rotated. */
935
if (!PageCgroupUsed(pc))
936
return;
937
/* Ensure pc->mem_cgroup is visible after reading PCG_USED. */
938
smp_rmb();
939
if (mem_cgroup_is_root(pc->mem_cgroup))
940
return;
941
mz = page_cgroup_zoneinfo(pc->mem_cgroup, page);
942
list_move_tail(&pc->lru, &mz->lists[lru]);
943
}
944
945
void mem_cgroup_rotate_lru_list(struct page *page, enum lru_list lru)
946
{
947
struct mem_cgroup_per_zone *mz;
948
struct page_cgroup *pc;
949
950
if (mem_cgroup_disabled())
951
return;
952
953
pc = lookup_page_cgroup(page);
954
/* unused or root page is not rotated. */
955
if (!PageCgroupUsed(pc))
956
return;
957
/* Ensure pc->mem_cgroup is visible after reading PCG_USED. */
958
smp_rmb();
959
if (mem_cgroup_is_root(pc->mem_cgroup))
960
return;
961
mz = page_cgroup_zoneinfo(pc->mem_cgroup, page);
962
list_move(&pc->lru, &mz->lists[lru]);
963
}
964
965
void mem_cgroup_add_lru_list(struct page *page, enum lru_list lru)
966
{
967
struct page_cgroup *pc;
968
struct mem_cgroup_per_zone *mz;
969
970
if (mem_cgroup_disabled())
971
return;
972
pc = lookup_page_cgroup(page);
973
VM_BUG_ON(PageCgroupAcctLRU(pc));
974
if (!PageCgroupUsed(pc))
975
return;
976
/* Ensure pc->mem_cgroup is visible after reading PCG_USED. */
977
smp_rmb();
978
mz = page_cgroup_zoneinfo(pc->mem_cgroup, page);
979
/* huge page split is done under lru_lock. so, we have no races. */
980
MEM_CGROUP_ZSTAT(mz, lru) += 1 << compound_order(page);
981
SetPageCgroupAcctLRU(pc);
982
if (mem_cgroup_is_root(pc->mem_cgroup))
983
return;
984
list_add(&pc->lru, &mz->lists[lru]);
985
}
986
987
/*
988
* At handling SwapCache and other FUSE stuff, pc->mem_cgroup may be changed
989
* while it's linked to lru because the page may be reused after it's fully
990
* uncharged. To handle that, unlink page_cgroup from LRU when charge it again.
991
* It's done under lock_page and expected that zone->lru_lock isnever held.
992
*/
993
static void mem_cgroup_lru_del_before_commit(struct page *page)
994
{
995
unsigned long flags;
996
struct zone *zone = page_zone(page);
997
struct page_cgroup *pc = lookup_page_cgroup(page);
998
999
/*
1000
* Doing this check without taking ->lru_lock seems wrong but this
1001
* is safe. Because if page_cgroup's USED bit is unset, the page
1002
* will not be added to any memcg's LRU. If page_cgroup's USED bit is
1003
* set, the commit after this will fail, anyway.
1004
* This all charge/uncharge is done under some mutual execustion.
1005
* So, we don't need to taking care of changes in USED bit.
1006
*/
1007
if (likely(!PageLRU(page)))
1008
return;
1009
1010
spin_lock_irqsave(&zone->lru_lock, flags);
1011
/*
1012
* Forget old LRU when this page_cgroup is *not* used. This Used bit
1013
* is guarded by lock_page() because the page is SwapCache.
1014
*/
1015
if (!PageCgroupUsed(pc))
1016
mem_cgroup_del_lru_list(page, page_lru(page));
1017
spin_unlock_irqrestore(&zone->lru_lock, flags);
1018
}
1019
1020
static void mem_cgroup_lru_add_after_commit(struct page *page)
1021
{
1022
unsigned long flags;
1023
struct zone *zone = page_zone(page);
1024
struct page_cgroup *pc = lookup_page_cgroup(page);
1025
1026
/* taking care of that the page is added to LRU while we commit it */
1027
if (likely(!PageLRU(page)))
1028
return;
1029
spin_lock_irqsave(&zone->lru_lock, flags);
1030
/* link when the page is linked to LRU but page_cgroup isn't */
1031
if (PageLRU(page) && !PageCgroupAcctLRU(pc))
1032
mem_cgroup_add_lru_list(page, page_lru(page));
1033
spin_unlock_irqrestore(&zone->lru_lock, flags);
1034
}
1035
1036
1037
void mem_cgroup_move_lists(struct page *page,
1038
enum lru_list from, enum lru_list to)
1039
{
1040
if (mem_cgroup_disabled())
1041
return;
1042
mem_cgroup_del_lru_list(page, from);
1043
mem_cgroup_add_lru_list(page, to);
1044
}
1045
1046
int task_in_mem_cgroup(struct task_struct *task, const struct mem_cgroup *mem)
1047
{
1048
int ret;
1049
struct mem_cgroup *curr = NULL;
1050
struct task_struct *p;
1051
1052
p = find_lock_task_mm(task);
1053
if (!p)
1054
return 0;
1055
curr = try_get_mem_cgroup_from_mm(p->mm);
1056
task_unlock(p);
1057
if (!curr)
1058
return 0;
1059
/*
1060
* We should check use_hierarchy of "mem" not "curr". Because checking
1061
* use_hierarchy of "curr" here make this function true if hierarchy is
1062
* enabled in "curr" and "curr" is a child of "mem" in *cgroup*
1063
* hierarchy(even if use_hierarchy is disabled in "mem").
1064
*/
1065
if (mem->use_hierarchy)
1066
ret = css_is_ancestor(&curr->css, &mem->css);
1067
else
1068
ret = (curr == mem);
1069
css_put(&curr->css);
1070
return ret;
1071
}
1072
1073
static int calc_inactive_ratio(struct mem_cgroup *memcg, unsigned long *present_pages)
1074
{
1075
unsigned long active;
1076
unsigned long inactive;
1077
unsigned long gb;
1078
unsigned long inactive_ratio;
1079
1080
inactive = mem_cgroup_get_local_zonestat(memcg, LRU_INACTIVE_ANON);
1081
active = mem_cgroup_get_local_zonestat(memcg, LRU_ACTIVE_ANON);
1082
1083
gb = (inactive + active) >> (30 - PAGE_SHIFT);
1084
if (gb)
1085
inactive_ratio = int_sqrt(10 * gb);
1086
else
1087
inactive_ratio = 1;
1088
1089
if (present_pages) {
1090
present_pages[0] = inactive;
1091
present_pages[1] = active;
1092
}
1093
1094
return inactive_ratio;
1095
}
1096
1097
int mem_cgroup_inactive_anon_is_low(struct mem_cgroup *memcg)
1098
{
1099
unsigned long active;
1100
unsigned long inactive;
1101
unsigned long present_pages[2];
1102
unsigned long inactive_ratio;
1103
1104
inactive_ratio = calc_inactive_ratio(memcg, present_pages);
1105
1106
inactive = present_pages[0];
1107
active = present_pages[1];
1108
1109
if (inactive * inactive_ratio < active)
1110
return 1;
1111
1112
return 0;
1113
}
1114
1115
int mem_cgroup_inactive_file_is_low(struct mem_cgroup *memcg)
1116
{
1117
unsigned long active;
1118
unsigned long inactive;
1119
1120
inactive = mem_cgroup_get_local_zonestat(memcg, LRU_INACTIVE_FILE);
1121
active = mem_cgroup_get_local_zonestat(memcg, LRU_ACTIVE_FILE);
1122
1123
return (active > inactive);
1124
}
1125
1126
unsigned long mem_cgroup_zone_nr_lru_pages(struct mem_cgroup *memcg,
1127
struct zone *zone,
1128
enum lru_list lru)
1129
{
1130
int nid = zone_to_nid(zone);
1131
int zid = zone_idx(zone);
1132
struct mem_cgroup_per_zone *mz = mem_cgroup_zoneinfo(memcg, nid, zid);
1133
1134
return MEM_CGROUP_ZSTAT(mz, lru);
1135
}
1136
1137
static unsigned long mem_cgroup_node_nr_file_lru_pages(struct mem_cgroup *memcg,
1138
int nid)
1139
{
1140
unsigned long ret;
1141
1142
ret = mem_cgroup_get_zonestat_node(memcg, nid, LRU_INACTIVE_FILE) +
1143
mem_cgroup_get_zonestat_node(memcg, nid, LRU_ACTIVE_FILE);
1144
1145
return ret;
1146
}
1147
1148
static unsigned long mem_cgroup_node_nr_anon_lru_pages(struct mem_cgroup *memcg,
1149
int nid)
1150
{
1151
unsigned long ret;
1152
1153
ret = mem_cgroup_get_zonestat_node(memcg, nid, LRU_INACTIVE_ANON) +
1154
mem_cgroup_get_zonestat_node(memcg, nid, LRU_ACTIVE_ANON);
1155
return ret;
1156
}
1157
1158
#if MAX_NUMNODES > 1
1159
static unsigned long mem_cgroup_nr_file_lru_pages(struct mem_cgroup *memcg)
1160
{
1161
u64 total = 0;
1162
int nid;
1163
1164
for_each_node_state(nid, N_HIGH_MEMORY)
1165
total += mem_cgroup_node_nr_file_lru_pages(memcg, nid);
1166
1167
return total;
1168
}
1169
1170
static unsigned long mem_cgroup_nr_anon_lru_pages(struct mem_cgroup *memcg)
1171
{
1172
u64 total = 0;
1173
int nid;
1174
1175
for_each_node_state(nid, N_HIGH_MEMORY)
1176
total += mem_cgroup_node_nr_anon_lru_pages(memcg, nid);
1177
1178
return total;
1179
}
1180
1181
static unsigned long
1182
mem_cgroup_node_nr_unevictable_lru_pages(struct mem_cgroup *memcg, int nid)
1183
{
1184
return mem_cgroup_get_zonestat_node(memcg, nid, LRU_UNEVICTABLE);
1185
}
1186
1187
static unsigned long
1188
mem_cgroup_nr_unevictable_lru_pages(struct mem_cgroup *memcg)
1189
{
1190
u64 total = 0;
1191
int nid;
1192
1193
for_each_node_state(nid, N_HIGH_MEMORY)
1194
total += mem_cgroup_node_nr_unevictable_lru_pages(memcg, nid);
1195
1196
return total;
1197
}
1198
1199
static unsigned long mem_cgroup_node_nr_lru_pages(struct mem_cgroup *memcg,
1200
int nid)
1201
{
1202
enum lru_list l;
1203
u64 total = 0;
1204
1205
for_each_lru(l)
1206
total += mem_cgroup_get_zonestat_node(memcg, nid, l);
1207
1208
return total;
1209
}
1210
1211
static unsigned long mem_cgroup_nr_lru_pages(struct mem_cgroup *memcg)
1212
{
1213
u64 total = 0;
1214
int nid;
1215
1216
for_each_node_state(nid, N_HIGH_MEMORY)
1217
total += mem_cgroup_node_nr_lru_pages(memcg, nid);
1218
1219
return total;
1220
}
1221
#endif /* CONFIG_NUMA */
1222
1223
struct zone_reclaim_stat *mem_cgroup_get_reclaim_stat(struct mem_cgroup *memcg,
1224
struct zone *zone)
1225
{
1226
int nid = zone_to_nid(zone);
1227
int zid = zone_idx(zone);
1228
struct mem_cgroup_per_zone *mz = mem_cgroup_zoneinfo(memcg, nid, zid);
1229
1230
return &mz->reclaim_stat;
1231
}
1232
1233
struct zone_reclaim_stat *
1234
mem_cgroup_get_reclaim_stat_from_page(struct page *page)
1235
{
1236
struct page_cgroup *pc;
1237
struct mem_cgroup_per_zone *mz;
1238
1239
if (mem_cgroup_disabled())
1240
return NULL;
1241
1242
pc = lookup_page_cgroup(page);
1243
if (!PageCgroupUsed(pc))
1244
return NULL;
1245
/* Ensure pc->mem_cgroup is visible after reading PCG_USED. */
1246
smp_rmb();
1247
mz = page_cgroup_zoneinfo(pc->mem_cgroup, page);
1248
return &mz->reclaim_stat;
1249
}
1250
1251
unsigned long mem_cgroup_isolate_pages(unsigned long nr_to_scan,
1252
struct list_head *dst,
1253
unsigned long *scanned, int order,
1254
int mode, struct zone *z,
1255
struct mem_cgroup *mem_cont,
1256
int active, int file)
1257
{
1258
unsigned long nr_taken = 0;
1259
struct page *page;
1260
unsigned long scan;
1261
LIST_HEAD(pc_list);
1262
struct list_head *src;
1263
struct page_cgroup *pc, *tmp;
1264
int nid = zone_to_nid(z);
1265
int zid = zone_idx(z);
1266
struct mem_cgroup_per_zone *mz;
1267
int lru = LRU_FILE * file + active;
1268
int ret;
1269
1270
BUG_ON(!mem_cont);
1271
mz = mem_cgroup_zoneinfo(mem_cont, nid, zid);
1272
src = &mz->lists[lru];
1273
1274
scan = 0;
1275
list_for_each_entry_safe_reverse(pc, tmp, src, lru) {
1276
if (scan >= nr_to_scan)
1277
break;
1278
1279
if (unlikely(!PageCgroupUsed(pc)))
1280
continue;
1281
1282
page = lookup_cgroup_page(pc);
1283
1284
if (unlikely(!PageLRU(page)))
1285
continue;
1286
1287
scan++;
1288
ret = __isolate_lru_page(page, mode, file);
1289
switch (ret) {
1290
case 0:
1291
list_move(&page->lru, dst);
1292
mem_cgroup_del_lru(page);
1293
nr_taken += hpage_nr_pages(page);
1294
break;
1295
case -EBUSY:
1296
/* we don't affect global LRU but rotate in our LRU */
1297
mem_cgroup_rotate_lru_list(page, page_lru(page));
1298
break;
1299
default:
1300
break;
1301
}
1302
}
1303
1304
*scanned = scan;
1305
1306
trace_mm_vmscan_memcg_isolate(0, nr_to_scan, scan, nr_taken,
1307
0, 0, 0, mode);
1308
1309
return nr_taken;
1310
}
1311
1312
#define mem_cgroup_from_res_counter(counter, member) \
1313
container_of(counter, struct mem_cgroup, member)
1314
1315
/**
1316
* mem_cgroup_margin - calculate chargeable space of a memory cgroup
1317
* @mem: the memory cgroup
1318
*
1319
* Returns the maximum amount of memory @mem can be charged with, in
1320
* pages.
1321
*/
1322
static unsigned long mem_cgroup_margin(struct mem_cgroup *mem)
1323
{
1324
unsigned long long margin;
1325
1326
margin = res_counter_margin(&mem->res);
1327
if (do_swap_account)
1328
margin = min(margin, res_counter_margin(&mem->memsw));
1329
return margin >> PAGE_SHIFT;
1330
}
1331
1332
static unsigned int get_swappiness(struct mem_cgroup *memcg)
1333
{
1334
struct cgroup *cgrp = memcg->css.cgroup;
1335
1336
/* root ? */
1337
if (cgrp->parent == NULL)
1338
return vm_swappiness;
1339
1340
return memcg->swappiness;
1341
}
1342
1343
static void mem_cgroup_start_move(struct mem_cgroup *mem)
1344
{
1345
int cpu;
1346
1347
get_online_cpus();
1348
spin_lock(&mem->pcp_counter_lock);
1349
for_each_online_cpu(cpu)
1350
per_cpu(mem->stat->count[MEM_CGROUP_ON_MOVE], cpu) += 1;
1351
mem->nocpu_base.count[MEM_CGROUP_ON_MOVE] += 1;
1352
spin_unlock(&mem->pcp_counter_lock);
1353
put_online_cpus();
1354
1355
synchronize_rcu();
1356
}
1357
1358
static void mem_cgroup_end_move(struct mem_cgroup *mem)
1359
{
1360
int cpu;
1361
1362
if (!mem)
1363
return;
1364
get_online_cpus();
1365
spin_lock(&mem->pcp_counter_lock);
1366
for_each_online_cpu(cpu)
1367
per_cpu(mem->stat->count[MEM_CGROUP_ON_MOVE], cpu) -= 1;
1368
mem->nocpu_base.count[MEM_CGROUP_ON_MOVE] -= 1;
1369
spin_unlock(&mem->pcp_counter_lock);
1370
put_online_cpus();
1371
}
1372
/*
1373
* 2 routines for checking "mem" is under move_account() or not.
1374
*
1375
* mem_cgroup_stealed() - checking a cgroup is mc.from or not. This is used
1376
* for avoiding race in accounting. If true,
1377
* pc->mem_cgroup may be overwritten.
1378
*
1379
* mem_cgroup_under_move() - checking a cgroup is mc.from or mc.to or
1380
* under hierarchy of moving cgroups. This is for
1381
* waiting at hith-memory prressure caused by "move".
1382
*/
1383
1384
static bool mem_cgroup_stealed(struct mem_cgroup *mem)
1385
{
1386
VM_BUG_ON(!rcu_read_lock_held());
1387
return this_cpu_read(mem->stat->count[MEM_CGROUP_ON_MOVE]) > 0;
1388
}
1389
1390
static bool mem_cgroup_under_move(struct mem_cgroup *mem)
1391
{
1392
struct mem_cgroup *from;
1393
struct mem_cgroup *to;
1394
bool ret = false;
1395
/*
1396
* Unlike task_move routines, we access mc.to, mc.from not under
1397
* mutual exclusion by cgroup_mutex. Here, we take spinlock instead.
1398
*/
1399
spin_lock(&mc.lock);
1400
from = mc.from;
1401
to = mc.to;
1402
if (!from)
1403
goto unlock;
1404
if (from == mem || to == mem
1405
|| (mem->use_hierarchy && css_is_ancestor(&from->css, &mem->css))
1406
|| (mem->use_hierarchy && css_is_ancestor(&to->css, &mem->css)))
1407
ret = true;
1408
unlock:
1409
spin_unlock(&mc.lock);
1410
return ret;
1411
}
1412
1413
static bool mem_cgroup_wait_acct_move(struct mem_cgroup *mem)
1414
{
1415
if (mc.moving_task && current != mc.moving_task) {
1416
if (mem_cgroup_under_move(mem)) {
1417
DEFINE_WAIT(wait);
1418
prepare_to_wait(&mc.waitq, &wait, TASK_INTERRUPTIBLE);
1419
/* moving charge context might have finished. */
1420
if (mc.moving_task)
1421
schedule();
1422
finish_wait(&mc.waitq, &wait);
1423
return true;
1424
}
1425
}
1426
return false;
1427
}
1428
1429
/**
1430
* mem_cgroup_print_oom_info: Called from OOM with tasklist_lock held in read mode.
1431
* @memcg: The memory cgroup that went over limit
1432
* @p: Task that is going to be killed
1433
*
1434
* NOTE: @memcg and @p's mem_cgroup can be different when hierarchy is
1435
* enabled
1436
*/
1437
void mem_cgroup_print_oom_info(struct mem_cgroup *memcg, struct task_struct *p)
1438
{
1439
struct cgroup *task_cgrp;
1440
struct cgroup *mem_cgrp;
1441
/*
1442
* Need a buffer in BSS, can't rely on allocations. The code relies
1443
* on the assumption that OOM is serialized for memory controller.
1444
* If this assumption is broken, revisit this code.
1445
*/
1446
static char memcg_name[PATH_MAX];
1447
int ret;
1448
1449
if (!memcg || !p)
1450
return;
1451
1452
1453
rcu_read_lock();
1454
1455
mem_cgrp = memcg->css.cgroup;
1456
task_cgrp = task_cgroup(p, mem_cgroup_subsys_id);
1457
1458
ret = cgroup_path(task_cgrp, memcg_name, PATH_MAX);
1459
if (ret < 0) {
1460
/*
1461
* Unfortunately, we are unable to convert to a useful name
1462
* But we'll still print out the usage information
1463
*/
1464
rcu_read_unlock();
1465
goto done;
1466
}
1467
rcu_read_unlock();
1468
1469
printk(KERN_INFO "Task in %s killed", memcg_name);
1470
1471
rcu_read_lock();
1472
ret = cgroup_path(mem_cgrp, memcg_name, PATH_MAX);
1473
if (ret < 0) {
1474
rcu_read_unlock();
1475
goto done;
1476
}
1477
rcu_read_unlock();
1478
1479
/*
1480
* Continues from above, so we don't need an KERN_ level
1481
*/
1482
printk(KERN_CONT " as a result of limit of %s\n", memcg_name);
1483
done:
1484
1485
printk(KERN_INFO "memory: usage %llukB, limit %llukB, failcnt %llu\n",
1486
res_counter_read_u64(&memcg->res, RES_USAGE) >> 10,
1487
res_counter_read_u64(&memcg->res, RES_LIMIT) >> 10,
1488
res_counter_read_u64(&memcg->res, RES_FAILCNT));
1489
printk(KERN_INFO "memory+swap: usage %llukB, limit %llukB, "
1490
"failcnt %llu\n",
1491
res_counter_read_u64(&memcg->memsw, RES_USAGE) >> 10,
1492
res_counter_read_u64(&memcg->memsw, RES_LIMIT) >> 10,
1493
res_counter_read_u64(&memcg->memsw, RES_FAILCNT));
1494
}
1495
1496
/*
1497
* This function returns the number of memcg under hierarchy tree. Returns
1498
* 1(self count) if no children.
1499
*/
1500
static int mem_cgroup_count_children(struct mem_cgroup *mem)
1501
{
1502
int num = 0;
1503
struct mem_cgroup *iter;
1504
1505
for_each_mem_cgroup_tree(iter, mem)
1506
num++;
1507
return num;
1508
}
1509
1510
/*
1511
* Return the memory (and swap, if configured) limit for a memcg.
1512
*/
1513
u64 mem_cgroup_get_limit(struct mem_cgroup *memcg)
1514
{
1515
u64 limit;
1516
u64 memsw;
1517
1518
limit = res_counter_read_u64(&memcg->res, RES_LIMIT);
1519
limit += total_swap_pages << PAGE_SHIFT;
1520
1521
memsw = res_counter_read_u64(&memcg->memsw, RES_LIMIT);
1522
/*
1523
* If memsw is finite and limits the amount of swap space available
1524
* to this memcg, return that limit.
1525
*/
1526
return min(limit, memsw);
1527
}
1528
1529
/*
1530
* Visit the first child (need not be the first child as per the ordering
1531
* of the cgroup list, since we track last_scanned_child) of @mem and use
1532
* that to reclaim free pages from.
1533
*/
1534
static struct mem_cgroup *
1535
mem_cgroup_select_victim(struct mem_cgroup *root_mem)
1536
{
1537
struct mem_cgroup *ret = NULL;
1538
struct cgroup_subsys_state *css;
1539
int nextid, found;
1540
1541
if (!root_mem->use_hierarchy) {
1542
css_get(&root_mem->css);
1543
ret = root_mem;
1544
}
1545
1546
while (!ret) {
1547
rcu_read_lock();
1548
nextid = root_mem->last_scanned_child + 1;
1549
css = css_get_next(&mem_cgroup_subsys, nextid, &root_mem->css,
1550
&found);
1551
if (css && css_tryget(css))
1552
ret = container_of(css, struct mem_cgroup, css);
1553
1554
rcu_read_unlock();
1555
/* Updates scanning parameter */
1556
if (!css) {
1557
/* this means start scan from ID:1 */
1558
root_mem->last_scanned_child = 0;
1559
} else
1560
root_mem->last_scanned_child = found;
1561
}
1562
1563
return ret;
1564
}
1565
1566
/**
1567
* test_mem_cgroup_node_reclaimable
1568
* @mem: the target memcg
1569
* @nid: the node ID to be checked.
1570
* @noswap : specify true here if the user wants flle only information.
1571
*
1572
* This function returns whether the specified memcg contains any
1573
* reclaimable pages on a node. Returns true if there are any reclaimable
1574
* pages in the node.
1575
*/
1576
static bool test_mem_cgroup_node_reclaimable(struct mem_cgroup *mem,
1577
int nid, bool noswap)
1578
{
1579
if (mem_cgroup_node_nr_file_lru_pages(mem, nid))
1580
return true;
1581
if (noswap || !total_swap_pages)
1582
return false;
1583
if (mem_cgroup_node_nr_anon_lru_pages(mem, nid))
1584
return true;
1585
return false;
1586
1587
}
1588
#if MAX_NUMNODES > 1
1589
1590
/*
1591
* Always updating the nodemask is not very good - even if we have an empty
1592
* list or the wrong list here, we can start from some node and traverse all
1593
* nodes based on the zonelist. So update the list loosely once per 10 secs.
1594
*
1595
*/
1596
static void mem_cgroup_may_update_nodemask(struct mem_cgroup *mem)
1597
{
1598
int nid;
1599
/*
1600
* numainfo_events > 0 means there was at least NUMAINFO_EVENTS_TARGET
1601
* pagein/pageout changes since the last update.
1602
*/
1603
if (!atomic_read(&mem->numainfo_events))
1604
return;
1605
if (atomic_inc_return(&mem->numainfo_updating) > 1)
1606
return;
1607
1608
/* make a nodemask where this memcg uses memory from */
1609
mem->scan_nodes = node_states[N_HIGH_MEMORY];
1610
1611
for_each_node_mask(nid, node_states[N_HIGH_MEMORY]) {
1612
1613
if (!test_mem_cgroup_node_reclaimable(mem, nid, false))
1614
node_clear(nid, mem->scan_nodes);
1615
}
1616
1617
atomic_set(&mem->numainfo_events, 0);
1618
atomic_set(&mem->numainfo_updating, 0);
1619
}
1620
1621
/*
1622
* Selecting a node where we start reclaim from. Because what we need is just
1623
* reducing usage counter, start from anywhere is O,K. Considering
1624
* memory reclaim from current node, there are pros. and cons.
1625
*
1626
* Freeing memory from current node means freeing memory from a node which
1627
* we'll use or we've used. So, it may make LRU bad. And if several threads
1628
* hit limits, it will see a contention on a node. But freeing from remote
1629
* node means more costs for memory reclaim because of memory latency.
1630
*
1631
* Now, we use round-robin. Better algorithm is welcomed.
1632
*/
1633
int mem_cgroup_select_victim_node(struct mem_cgroup *mem)
1634
{
1635
int node;
1636
1637
mem_cgroup_may_update_nodemask(mem);
1638
node = mem->last_scanned_node;
1639
1640
node = next_node(node, mem->scan_nodes);
1641
if (node == MAX_NUMNODES)
1642
node = first_node(mem->scan_nodes);
1643
/*
1644
* We call this when we hit limit, not when pages are added to LRU.
1645
* No LRU may hold pages because all pages are UNEVICTABLE or
1646
* memcg is too small and all pages are not on LRU. In that case,
1647
* we use curret node.
1648
*/
1649
if (unlikely(node == MAX_NUMNODES))
1650
node = numa_node_id();
1651
1652
mem->last_scanned_node = node;
1653
return node;
1654
}
1655
1656
/*
1657
* Check all nodes whether it contains reclaimable pages or not.
1658
* For quick scan, we make use of scan_nodes. This will allow us to skip
1659
* unused nodes. But scan_nodes is lazily updated and may not cotain
1660
* enough new information. We need to do double check.
1661
*/
1662
bool mem_cgroup_reclaimable(struct mem_cgroup *mem, bool noswap)
1663
{
1664
int nid;
1665
1666
/*
1667
* quick check...making use of scan_node.
1668
* We can skip unused nodes.
1669
*/
1670
if (!nodes_empty(mem->scan_nodes)) {
1671
for (nid = first_node(mem->scan_nodes);
1672
nid < MAX_NUMNODES;
1673
nid = next_node(nid, mem->scan_nodes)) {
1674
1675
if (test_mem_cgroup_node_reclaimable(mem, nid, noswap))
1676
return true;
1677
}
1678
}
1679
/*
1680
* Check rest of nodes.
1681
*/
1682
for_each_node_state(nid, N_HIGH_MEMORY) {
1683
if (node_isset(nid, mem->scan_nodes))
1684
continue;
1685
if (test_mem_cgroup_node_reclaimable(mem, nid, noswap))
1686
return true;
1687
}
1688
return false;
1689
}
1690
1691
#else
1692
int mem_cgroup_select_victim_node(struct mem_cgroup *mem)
1693
{
1694
return 0;
1695
}
1696
1697
bool mem_cgroup_reclaimable(struct mem_cgroup *mem, bool noswap)
1698
{
1699
return test_mem_cgroup_node_reclaimable(mem, 0, noswap);
1700
}
1701
#endif
1702
1703
/*
1704
* Scan the hierarchy if needed to reclaim memory. We remember the last child
1705
* we reclaimed from, so that we don't end up penalizing one child extensively
1706
* based on its position in the children list.
1707
*
1708
* root_mem is the original ancestor that we've been reclaim from.
1709
*
1710
* We give up and return to the caller when we visit root_mem twice.
1711
* (other groups can be removed while we're walking....)
1712
*
1713
* If shrink==true, for avoiding to free too much, this returns immedieately.
1714
*/
1715
static int mem_cgroup_hierarchical_reclaim(struct mem_cgroup *root_mem,
1716
struct zone *zone,
1717
gfp_t gfp_mask,
1718
unsigned long reclaim_options,
1719
unsigned long *total_scanned)
1720
{
1721
struct mem_cgroup *victim;
1722
int ret, total = 0;
1723
int loop = 0;
1724
bool noswap = reclaim_options & MEM_CGROUP_RECLAIM_NOSWAP;
1725
bool shrink = reclaim_options & MEM_CGROUP_RECLAIM_SHRINK;
1726
bool check_soft = reclaim_options & MEM_CGROUP_RECLAIM_SOFT;
1727
unsigned long excess;
1728
unsigned long nr_scanned;
1729
1730
excess = res_counter_soft_limit_excess(&root_mem->res) >> PAGE_SHIFT;
1731
1732
/* If memsw_is_minimum==1, swap-out is of-no-use. */
1733
if (!check_soft && root_mem->memsw_is_minimum)
1734
noswap = true;
1735
1736
while (1) {
1737
victim = mem_cgroup_select_victim(root_mem);
1738
if (victim == root_mem) {
1739
loop++;
1740
/*
1741
* We are not draining per cpu cached charges during
1742
* soft limit reclaim because global reclaim doesn't
1743
* care about charges. It tries to free some memory and
1744
* charges will not give any.
1745
*/
1746
if (!check_soft && loop >= 1)
1747
drain_all_stock_async(root_mem);
1748
if (loop >= 2) {
1749
/*
1750
* If we have not been able to reclaim
1751
* anything, it might because there are
1752
* no reclaimable pages under this hierarchy
1753
*/
1754
if (!check_soft || !total) {
1755
css_put(&victim->css);
1756
break;
1757
}
1758
/*
1759
* We want to do more targeted reclaim.
1760
* excess >> 2 is not to excessive so as to
1761
* reclaim too much, nor too less that we keep
1762
* coming back to reclaim from this cgroup
1763
*/
1764
if (total >= (excess >> 2) ||
1765
(loop > MEM_CGROUP_MAX_RECLAIM_LOOPS)) {
1766
css_put(&victim->css);
1767
break;
1768
}
1769
}
1770
}
1771
if (!mem_cgroup_reclaimable(victim, noswap)) {
1772
/* this cgroup's local usage == 0 */
1773
css_put(&victim->css);
1774
continue;
1775
}
1776
/* we use swappiness of local cgroup */
1777
if (check_soft) {
1778
ret = mem_cgroup_shrink_node_zone(victim, gfp_mask,
1779
noswap, get_swappiness(victim), zone,
1780
&nr_scanned);
1781
*total_scanned += nr_scanned;
1782
} else
1783
ret = try_to_free_mem_cgroup_pages(victim, gfp_mask,
1784
noswap, get_swappiness(victim));
1785
css_put(&victim->css);
1786
/*
1787
* At shrinking usage, we can't check we should stop here or
1788
* reclaim more. It's depends on callers. last_scanned_child
1789
* will work enough for keeping fairness under tree.
1790
*/
1791
if (shrink)
1792
return ret;
1793
total += ret;
1794
if (check_soft) {
1795
if (!res_counter_soft_limit_excess(&root_mem->res))
1796
return total;
1797
} else if (mem_cgroup_margin(root_mem))
1798
return total;
1799
}
1800
return total;
1801
}
1802
1803
/*
1804
* Check OOM-Killer is already running under our hierarchy.
1805
* If someone is running, return false.
1806
*/
1807
static bool mem_cgroup_oom_lock(struct mem_cgroup *mem)
1808
{
1809
int x, lock_count = 0;
1810
struct mem_cgroup *iter;
1811
1812
for_each_mem_cgroup_tree(iter, mem) {
1813
x = atomic_inc_return(&iter->oom_lock);
1814
lock_count = max(x, lock_count);
1815
}
1816
1817
if (lock_count == 1)
1818
return true;
1819
return false;
1820
}
1821
1822
static int mem_cgroup_oom_unlock(struct mem_cgroup *mem)
1823
{
1824
struct mem_cgroup *iter;
1825
1826
/*
1827
* When a new child is created while the hierarchy is under oom,
1828
* mem_cgroup_oom_lock() may not be called. We have to use
1829
* atomic_add_unless() here.
1830
*/
1831
for_each_mem_cgroup_tree(iter, mem)
1832
atomic_add_unless(&iter->oom_lock, -1, 0);
1833
return 0;
1834
}
1835
1836
1837
static DEFINE_MUTEX(memcg_oom_mutex);
1838
static DECLARE_WAIT_QUEUE_HEAD(memcg_oom_waitq);
1839
1840
struct oom_wait_info {
1841
struct mem_cgroup *mem;
1842
wait_queue_t wait;
1843
};
1844
1845
static int memcg_oom_wake_function(wait_queue_t *wait,
1846
unsigned mode, int sync, void *arg)
1847
{
1848
struct mem_cgroup *wake_mem = (struct mem_cgroup *)arg;
1849
struct oom_wait_info *oom_wait_info;
1850
1851
oom_wait_info = container_of(wait, struct oom_wait_info, wait);
1852
1853
if (oom_wait_info->mem == wake_mem)
1854
goto wakeup;
1855
/* if no hierarchy, no match */
1856
if (!oom_wait_info->mem->use_hierarchy || !wake_mem->use_hierarchy)
1857
return 0;
1858
/*
1859
* Both of oom_wait_info->mem and wake_mem are stable under us.
1860
* Then we can use css_is_ancestor without taking care of RCU.
1861
*/
1862
if (!css_is_ancestor(&oom_wait_info->mem->css, &wake_mem->css) &&
1863
!css_is_ancestor(&wake_mem->css, &oom_wait_info->mem->css))
1864
return 0;
1865
1866
wakeup:
1867
return autoremove_wake_function(wait, mode, sync, arg);
1868
}
1869
1870
static void memcg_wakeup_oom(struct mem_cgroup *mem)
1871
{
1872
/* for filtering, pass "mem" as argument. */
1873
__wake_up(&memcg_oom_waitq, TASK_NORMAL, 0, mem);
1874
}
1875
1876
static void memcg_oom_recover(struct mem_cgroup *mem)
1877
{
1878
if (mem && atomic_read(&mem->oom_lock))
1879
memcg_wakeup_oom(mem);
1880
}
1881
1882
/*
1883
* try to call OOM killer. returns false if we should exit memory-reclaim loop.
1884
*/
1885
bool mem_cgroup_handle_oom(struct mem_cgroup *mem, gfp_t mask)
1886
{
1887
struct oom_wait_info owait;
1888
bool locked, need_to_kill;
1889
1890
owait.mem = mem;
1891
owait.wait.flags = 0;
1892
owait.wait.func = memcg_oom_wake_function;
1893
owait.wait.private = current;
1894
INIT_LIST_HEAD(&owait.wait.task_list);
1895
need_to_kill = true;
1896
/* At first, try to OOM lock hierarchy under mem.*/
1897
mutex_lock(&memcg_oom_mutex);
1898
locked = mem_cgroup_oom_lock(mem);
1899
/*
1900
* Even if signal_pending(), we can't quit charge() loop without
1901
* accounting. So, UNINTERRUPTIBLE is appropriate. But SIGKILL
1902
* under OOM is always welcomed, use TASK_KILLABLE here.
1903
*/
1904
prepare_to_wait(&memcg_oom_waitq, &owait.wait, TASK_KILLABLE);
1905
if (!locked || mem->oom_kill_disable)
1906
need_to_kill = false;
1907
if (locked)
1908
mem_cgroup_oom_notify(mem);
1909
mutex_unlock(&memcg_oom_mutex);
1910
1911
if (need_to_kill) {
1912
finish_wait(&memcg_oom_waitq, &owait.wait);
1913
mem_cgroup_out_of_memory(mem, mask);
1914
} else {
1915
schedule();
1916
finish_wait(&memcg_oom_waitq, &owait.wait);
1917
}
1918
mutex_lock(&memcg_oom_mutex);
1919
mem_cgroup_oom_unlock(mem);
1920
memcg_wakeup_oom(mem);
1921
mutex_unlock(&memcg_oom_mutex);
1922
1923
if (test_thread_flag(TIF_MEMDIE) || fatal_signal_pending(current))
1924
return false;
1925
/* Give chance to dying process */
1926
schedule_timeout(1);
1927
return true;
1928
}
1929
1930
/*
1931
* Currently used to update mapped file statistics, but the routine can be
1932
* generalized to update other statistics as well.
1933
*
1934
* Notes: Race condition
1935
*
1936
* We usually use page_cgroup_lock() for accessing page_cgroup member but
1937
* it tends to be costly. But considering some conditions, we doesn't need
1938
* to do so _always_.
1939
*
1940
* Considering "charge", lock_page_cgroup() is not required because all
1941
* file-stat operations happen after a page is attached to radix-tree. There
1942
* are no race with "charge".
1943
*
1944
* Considering "uncharge", we know that memcg doesn't clear pc->mem_cgroup
1945
* at "uncharge" intentionally. So, we always see valid pc->mem_cgroup even
1946
* if there are race with "uncharge". Statistics itself is properly handled
1947
* by flags.
1948
*
1949
* Considering "move", this is an only case we see a race. To make the race
1950
* small, we check MEM_CGROUP_ON_MOVE percpu value and detect there are
1951
* possibility of race condition. If there is, we take a lock.
1952
*/
1953
1954
void mem_cgroup_update_page_stat(struct page *page,
1955
enum mem_cgroup_page_stat_item idx, int val)
1956
{
1957
struct mem_cgroup *mem;
1958
struct page_cgroup *pc = lookup_page_cgroup(page);
1959
bool need_unlock = false;
1960
unsigned long uninitialized_var(flags);
1961
1962
if (unlikely(!pc))
1963
return;
1964
1965
rcu_read_lock();
1966
mem = pc->mem_cgroup;
1967
if (unlikely(!mem || !PageCgroupUsed(pc)))
1968
goto out;
1969
/* pc->mem_cgroup is unstable ? */
1970
if (unlikely(mem_cgroup_stealed(mem)) || PageTransHuge(page)) {
1971
/* take a lock against to access pc->mem_cgroup */
1972
move_lock_page_cgroup(pc, &flags);
1973
need_unlock = true;
1974
mem = pc->mem_cgroup;
1975
if (!mem || !PageCgroupUsed(pc))
1976
goto out;
1977
}
1978
1979
switch (idx) {
1980
case MEMCG_NR_FILE_MAPPED:
1981
if (val > 0)
1982
SetPageCgroupFileMapped(pc);
1983
else if (!page_mapped(page))
1984
ClearPageCgroupFileMapped(pc);
1985
idx = MEM_CGROUP_STAT_FILE_MAPPED;
1986
break;
1987
default:
1988
BUG();
1989
}
1990
1991
this_cpu_add(mem->stat->count[idx], val);
1992
1993
out:
1994
if (unlikely(need_unlock))
1995
move_unlock_page_cgroup(pc, &flags);
1996
rcu_read_unlock();
1997
return;
1998
}
1999
EXPORT_SYMBOL(mem_cgroup_update_page_stat);
2000
2001
/*
2002
* size of first charge trial. "32" comes from vmscan.c's magic value.
2003
* TODO: maybe necessary to use big numbers in big irons.
2004
*/
2005
#define CHARGE_BATCH 32U
2006
struct memcg_stock_pcp {
2007
struct mem_cgroup *cached; /* this never be root cgroup */
2008
unsigned int nr_pages;
2009
struct work_struct work;
2010
unsigned long flags;
2011
#define FLUSHING_CACHED_CHARGE (0)
2012
};
2013
static DEFINE_PER_CPU(struct memcg_stock_pcp, memcg_stock);
2014
static DEFINE_MUTEX(percpu_charge_mutex);
2015
2016
/*
2017
* Try to consume stocked charge on this cpu. If success, one page is consumed
2018
* from local stock and true is returned. If the stock is 0 or charges from a
2019
* cgroup which is not current target, returns false. This stock will be
2020
* refilled.
2021
*/
2022
static bool consume_stock(struct mem_cgroup *mem)
2023
{
2024
struct memcg_stock_pcp *stock;
2025
bool ret = true;
2026
2027
stock = &get_cpu_var(memcg_stock);
2028
if (mem == stock->cached && stock->nr_pages)
2029
stock->nr_pages--;
2030
else /* need to call res_counter_charge */
2031
ret = false;
2032
put_cpu_var(memcg_stock);
2033
return ret;
2034
}
2035
2036
/*
2037
* Returns stocks cached in percpu to res_counter and reset cached information.
2038
*/
2039
static void drain_stock(struct memcg_stock_pcp *stock)
2040
{
2041
struct mem_cgroup *old = stock->cached;
2042
2043
if (stock->nr_pages) {
2044
unsigned long bytes = stock->nr_pages * PAGE_SIZE;
2045
2046
res_counter_uncharge(&old->res, bytes);
2047
if (do_swap_account)
2048
res_counter_uncharge(&old->memsw, bytes);
2049
stock->nr_pages = 0;
2050
}
2051
stock->cached = NULL;
2052
}
2053
2054
/*
2055
* This must be called under preempt disabled or must be called by
2056
* a thread which is pinned to local cpu.
2057
*/
2058
static void drain_local_stock(struct work_struct *dummy)
2059
{
2060
struct memcg_stock_pcp *stock = &__get_cpu_var(memcg_stock);
2061
drain_stock(stock);
2062
clear_bit(FLUSHING_CACHED_CHARGE, &stock->flags);
2063
}
2064
2065
/*
2066
* Cache charges(val) which is from res_counter, to local per_cpu area.
2067
* This will be consumed by consume_stock() function, later.
2068
*/
2069
static void refill_stock(struct mem_cgroup *mem, unsigned int nr_pages)
2070
{
2071
struct memcg_stock_pcp *stock = &get_cpu_var(memcg_stock);
2072
2073
if (stock->cached != mem) { /* reset if necessary */
2074
drain_stock(stock);
2075
stock->cached = mem;
2076
}
2077
stock->nr_pages += nr_pages;
2078
put_cpu_var(memcg_stock);
2079
}
2080
2081
/*
2082
* Tries to drain stocked charges in other cpus. This function is asynchronous
2083
* and just put a work per cpu for draining localy on each cpu. Caller can
2084
* expects some charges will be back to res_counter later but cannot wait for
2085
* it.
2086
*/
2087
static void drain_all_stock_async(struct mem_cgroup *root_mem)
2088
{
2089
int cpu, curcpu;
2090
/*
2091
* If someone calls draining, avoid adding more kworker runs.
2092
*/
2093
if (!mutex_trylock(&percpu_charge_mutex))
2094
return;
2095
/* Notify other cpus that system-wide "drain" is running */
2096
get_online_cpus();
2097
/*
2098
* Get a hint for avoiding draining charges on the current cpu,
2099
* which must be exhausted by our charging. It is not required that
2100
* this be a precise check, so we use raw_smp_processor_id() instead of
2101
* getcpu()/putcpu().
2102
*/
2103
curcpu = raw_smp_processor_id();
2104
for_each_online_cpu(cpu) {
2105
struct memcg_stock_pcp *stock = &per_cpu(memcg_stock, cpu);
2106
struct mem_cgroup *mem;
2107
2108
if (cpu == curcpu)
2109
continue;
2110
2111
mem = stock->cached;
2112
if (!mem)
2113
continue;
2114
if (mem != root_mem) {
2115
if (!root_mem->use_hierarchy)
2116
continue;
2117
/* check whether "mem" is under tree of "root_mem" */
2118
if (!css_is_ancestor(&mem->css, &root_mem->css))
2119
continue;
2120
}
2121
if (!test_and_set_bit(FLUSHING_CACHED_CHARGE, &stock->flags))
2122
schedule_work_on(cpu, &stock->work);
2123
}
2124
put_online_cpus();
2125
mutex_unlock(&percpu_charge_mutex);
2126
/* We don't wait for flush_work */
2127
}
2128
2129
/* This is a synchronous drain interface. */
2130
static void drain_all_stock_sync(void)
2131
{
2132
/* called when force_empty is called */
2133
mutex_lock(&percpu_charge_mutex);
2134
schedule_on_each_cpu(drain_local_stock);
2135
mutex_unlock(&percpu_charge_mutex);
2136
}
2137
2138
/*
2139
* This function drains percpu counter value from DEAD cpu and
2140
* move it to local cpu. Note that this function can be preempted.
2141
*/
2142
static void mem_cgroup_drain_pcp_counter(struct mem_cgroup *mem, int cpu)
2143
{
2144
int i;
2145
2146
spin_lock(&mem->pcp_counter_lock);
2147
for (i = 0; i < MEM_CGROUP_STAT_DATA; i++) {
2148
long x = per_cpu(mem->stat->count[i], cpu);
2149
2150
per_cpu(mem->stat->count[i], cpu) = 0;
2151
mem->nocpu_base.count[i] += x;
2152
}
2153
for (i = 0; i < MEM_CGROUP_EVENTS_NSTATS; i++) {
2154
unsigned long x = per_cpu(mem->stat->events[i], cpu);
2155
2156
per_cpu(mem->stat->events[i], cpu) = 0;
2157
mem->nocpu_base.events[i] += x;
2158
}
2159
/* need to clear ON_MOVE value, works as a kind of lock. */
2160
per_cpu(mem->stat->count[MEM_CGROUP_ON_MOVE], cpu) = 0;
2161
spin_unlock(&mem->pcp_counter_lock);
2162
}
2163
2164
static void synchronize_mem_cgroup_on_move(struct mem_cgroup *mem, int cpu)
2165
{
2166
int idx = MEM_CGROUP_ON_MOVE;
2167
2168
spin_lock(&mem->pcp_counter_lock);
2169
per_cpu(mem->stat->count[idx], cpu) = mem->nocpu_base.count[idx];
2170
spin_unlock(&mem->pcp_counter_lock);
2171
}
2172
2173
static int __cpuinit memcg_cpu_hotplug_callback(struct notifier_block *nb,
2174
unsigned long action,
2175
void *hcpu)
2176
{
2177
int cpu = (unsigned long)hcpu;
2178
struct memcg_stock_pcp *stock;
2179
struct mem_cgroup *iter;
2180
2181
if ((action == CPU_ONLINE)) {
2182
for_each_mem_cgroup_all(iter)
2183
synchronize_mem_cgroup_on_move(iter, cpu);
2184
return NOTIFY_OK;
2185
}
2186
2187
if ((action != CPU_DEAD) || action != CPU_DEAD_FROZEN)
2188
return NOTIFY_OK;
2189
2190
for_each_mem_cgroup_all(iter)
2191
mem_cgroup_drain_pcp_counter(iter, cpu);
2192
2193
stock = &per_cpu(memcg_stock, cpu);
2194
drain_stock(stock);
2195
return NOTIFY_OK;
2196
}
2197
2198
2199
/* See __mem_cgroup_try_charge() for details */
2200
enum {
2201
CHARGE_OK, /* success */
2202
CHARGE_RETRY, /* need to retry but retry is not bad */
2203
CHARGE_NOMEM, /* we can't do more. return -ENOMEM */
2204
CHARGE_WOULDBLOCK, /* GFP_WAIT wasn't set and no enough res. */
2205
CHARGE_OOM_DIE, /* the current is killed because of OOM */
2206
};
2207
2208
static int mem_cgroup_do_charge(struct mem_cgroup *mem, gfp_t gfp_mask,
2209
unsigned int nr_pages, bool oom_check)
2210
{
2211
unsigned long csize = nr_pages * PAGE_SIZE;
2212
struct mem_cgroup *mem_over_limit;
2213
struct res_counter *fail_res;
2214
unsigned long flags = 0;
2215
int ret;
2216
2217
ret = res_counter_charge(&mem->res, csize, &fail_res);
2218
2219
if (likely(!ret)) {
2220
if (!do_swap_account)
2221
return CHARGE_OK;
2222
ret = res_counter_charge(&mem->memsw, csize, &fail_res);
2223
if (likely(!ret))
2224
return CHARGE_OK;
2225
2226
res_counter_uncharge(&mem->res, csize);
2227
mem_over_limit = mem_cgroup_from_res_counter(fail_res, memsw);
2228
flags |= MEM_CGROUP_RECLAIM_NOSWAP;
2229
} else
2230
mem_over_limit = mem_cgroup_from_res_counter(fail_res, res);
2231
/*
2232
* nr_pages can be either a huge page (HPAGE_PMD_NR), a batch
2233
* of regular pages (CHARGE_BATCH), or a single regular page (1).
2234
*
2235
* Never reclaim on behalf of optional batching, retry with a
2236
* single page instead.
2237
*/
2238
if (nr_pages == CHARGE_BATCH)
2239
return CHARGE_RETRY;
2240
2241
if (!(gfp_mask & __GFP_WAIT))
2242
return CHARGE_WOULDBLOCK;
2243
2244
ret = mem_cgroup_hierarchical_reclaim(mem_over_limit, NULL,
2245
gfp_mask, flags, NULL);
2246
if (mem_cgroup_margin(mem_over_limit) >= nr_pages)
2247
return CHARGE_RETRY;
2248
/*
2249
* Even though the limit is exceeded at this point, reclaim
2250
* may have been able to free some pages. Retry the charge
2251
* before killing the task.
2252
*
2253
* Only for regular pages, though: huge pages are rather
2254
* unlikely to succeed so close to the limit, and we fall back
2255
* to regular pages anyway in case of failure.
2256
*/
2257
if (nr_pages == 1 && ret)
2258
return CHARGE_RETRY;
2259
2260
/*
2261
* At task move, charge accounts can be doubly counted. So, it's
2262
* better to wait until the end of task_move if something is going on.
2263
*/
2264
if (mem_cgroup_wait_acct_move(mem_over_limit))
2265
return CHARGE_RETRY;
2266
2267
/* If we don't need to call oom-killer at el, return immediately */
2268
if (!oom_check)
2269
return CHARGE_NOMEM;
2270
/* check OOM */
2271
if (!mem_cgroup_handle_oom(mem_over_limit, gfp_mask))
2272
return CHARGE_OOM_DIE;
2273
2274
return CHARGE_RETRY;
2275
}
2276
2277
/*
2278
* Unlike exported interface, "oom" parameter is added. if oom==true,
2279
* oom-killer can be invoked.
2280
*/
2281
static int __mem_cgroup_try_charge(struct mm_struct *mm,
2282
gfp_t gfp_mask,
2283
unsigned int nr_pages,
2284
struct mem_cgroup **memcg,
2285
bool oom)
2286
{
2287
unsigned int batch = max(CHARGE_BATCH, nr_pages);
2288
int nr_oom_retries = MEM_CGROUP_RECLAIM_RETRIES;
2289
struct mem_cgroup *mem = NULL;
2290
int ret;
2291
2292
/*
2293
* Unlike gloval-vm's OOM-kill, we're not in memory shortage
2294
* in system level. So, allow to go ahead dying process in addition to
2295
* MEMDIE process.
2296
*/
2297
if (unlikely(test_thread_flag(TIF_MEMDIE)
2298
|| fatal_signal_pending(current)))
2299
goto bypass;
2300
2301
/*
2302
* We always charge the cgroup the mm_struct belongs to.
2303
* The mm_struct's mem_cgroup changes on task migration if the
2304
* thread group leader migrates. It's possible that mm is not
2305
* set, if so charge the init_mm (happens for pagecache usage).
2306
*/
2307
if (!*memcg && !mm)
2308
goto bypass;
2309
again:
2310
if (*memcg) { /* css should be a valid one */
2311
mem = *memcg;
2312
VM_BUG_ON(css_is_removed(&mem->css));
2313
if (mem_cgroup_is_root(mem))
2314
goto done;
2315
if (nr_pages == 1 && consume_stock(mem))
2316
goto done;
2317
css_get(&mem->css);
2318
} else {
2319
struct task_struct *p;
2320
2321
rcu_read_lock();
2322
p = rcu_dereference(mm->owner);
2323
/*
2324
* Because we don't have task_lock(), "p" can exit.
2325
* In that case, "mem" can point to root or p can be NULL with
2326
* race with swapoff. Then, we have small risk of mis-accouning.
2327
* But such kind of mis-account by race always happens because
2328
* we don't have cgroup_mutex(). It's overkill and we allo that
2329
* small race, here.
2330
* (*) swapoff at el will charge against mm-struct not against
2331
* task-struct. So, mm->owner can be NULL.
2332
*/
2333
mem = mem_cgroup_from_task(p);
2334
if (!mem || mem_cgroup_is_root(mem)) {
2335
rcu_read_unlock();
2336
goto done;
2337
}
2338
if (nr_pages == 1 && consume_stock(mem)) {
2339
/*
2340
* It seems dagerous to access memcg without css_get().
2341
* But considering how consume_stok works, it's not
2342
* necessary. If consume_stock success, some charges
2343
* from this memcg are cached on this cpu. So, we
2344
* don't need to call css_get()/css_tryget() before
2345
* calling consume_stock().
2346
*/
2347
rcu_read_unlock();
2348
goto done;
2349
}
2350
/* after here, we may be blocked. we need to get refcnt */
2351
if (!css_tryget(&mem->css)) {
2352
rcu_read_unlock();
2353
goto again;
2354
}
2355
rcu_read_unlock();
2356
}
2357
2358
do {
2359
bool oom_check;
2360
2361
/* If killed, bypass charge */
2362
if (fatal_signal_pending(current)) {
2363
css_put(&mem->css);
2364
goto bypass;
2365
}
2366
2367
oom_check = false;
2368
if (oom && !nr_oom_retries) {
2369
oom_check = true;
2370
nr_oom_retries = MEM_CGROUP_RECLAIM_RETRIES;
2371
}
2372
2373
ret = mem_cgroup_do_charge(mem, gfp_mask, batch, oom_check);
2374
switch (ret) {
2375
case CHARGE_OK:
2376
break;
2377
case CHARGE_RETRY: /* not in OOM situation but retry */
2378
batch = nr_pages;
2379
css_put(&mem->css);
2380
mem = NULL;
2381
goto again;
2382
case CHARGE_WOULDBLOCK: /* !__GFP_WAIT */
2383
css_put(&mem->css);
2384
goto nomem;
2385
case CHARGE_NOMEM: /* OOM routine works */
2386
if (!oom) {
2387
css_put(&mem->css);
2388
goto nomem;
2389
}
2390
/* If oom, we never return -ENOMEM */
2391
nr_oom_retries--;
2392
break;
2393
case CHARGE_OOM_DIE: /* Killed by OOM Killer */
2394
css_put(&mem->css);
2395
goto bypass;
2396
}
2397
} while (ret != CHARGE_OK);
2398
2399
if (batch > nr_pages)
2400
refill_stock(mem, batch - nr_pages);
2401
css_put(&mem->css);
2402
done:
2403
*memcg = mem;
2404
return 0;
2405
nomem:
2406
*memcg = NULL;
2407
return -ENOMEM;
2408
bypass:
2409
*memcg = NULL;
2410
return 0;
2411
}
2412
2413
/*
2414
* Somemtimes we have to undo a charge we got by try_charge().
2415
* This function is for that and do uncharge, put css's refcnt.
2416
* gotten by try_charge().
2417
*/
2418
static void __mem_cgroup_cancel_charge(struct mem_cgroup *mem,
2419
unsigned int nr_pages)
2420
{
2421
if (!mem_cgroup_is_root(mem)) {
2422
unsigned long bytes = nr_pages * PAGE_SIZE;
2423
2424
res_counter_uncharge(&mem->res, bytes);
2425
if (do_swap_account)
2426
res_counter_uncharge(&mem->memsw, bytes);
2427
}
2428
}
2429
2430
/*
2431
* A helper function to get mem_cgroup from ID. must be called under
2432
* rcu_read_lock(). The caller must check css_is_removed() or some if
2433
* it's concern. (dropping refcnt from swap can be called against removed
2434
* memcg.)
2435
*/
2436
static struct mem_cgroup *mem_cgroup_lookup(unsigned short id)
2437
{
2438
struct cgroup_subsys_state *css;
2439
2440
/* ID 0 is unused ID */
2441
if (!id)
2442
return NULL;
2443
css = css_lookup(&mem_cgroup_subsys, id);
2444
if (!css)
2445
return NULL;
2446
return container_of(css, struct mem_cgroup, css);
2447
}
2448
2449
struct mem_cgroup *try_get_mem_cgroup_from_page(struct page *page)
2450
{
2451
struct mem_cgroup *mem = NULL;
2452
struct page_cgroup *pc;
2453
unsigned short id;
2454
swp_entry_t ent;
2455
2456
VM_BUG_ON(!PageLocked(page));
2457
2458
pc = lookup_page_cgroup(page);
2459
lock_page_cgroup(pc);
2460
if (PageCgroupUsed(pc)) {
2461
mem = pc->mem_cgroup;
2462
if (mem && !css_tryget(&mem->css))
2463
mem = NULL;
2464
} else if (PageSwapCache(page)) {
2465
ent.val = page_private(page);
2466
id = lookup_swap_cgroup(ent);
2467
rcu_read_lock();
2468
mem = mem_cgroup_lookup(id);
2469
if (mem && !css_tryget(&mem->css))
2470
mem = NULL;
2471
rcu_read_unlock();
2472
}
2473
unlock_page_cgroup(pc);
2474
return mem;
2475
}
2476
2477
static void __mem_cgroup_commit_charge(struct mem_cgroup *mem,
2478
struct page *page,
2479
unsigned int nr_pages,
2480
struct page_cgroup *pc,
2481
enum charge_type ctype)
2482
{
2483
lock_page_cgroup(pc);
2484
if (unlikely(PageCgroupUsed(pc))) {
2485
unlock_page_cgroup(pc);
2486
__mem_cgroup_cancel_charge(mem, nr_pages);
2487
return;
2488
}
2489
/*
2490
* we don't need page_cgroup_lock about tail pages, becase they are not
2491
* accessed by any other context at this point.
2492
*/
2493
pc->mem_cgroup = mem;
2494
/*
2495
* We access a page_cgroup asynchronously without lock_page_cgroup().
2496
* Especially when a page_cgroup is taken from a page, pc->mem_cgroup
2497
* is accessed after testing USED bit. To make pc->mem_cgroup visible
2498
* before USED bit, we need memory barrier here.
2499
* See mem_cgroup_add_lru_list(), etc.
2500
*/
2501
smp_wmb();
2502
switch (ctype) {
2503
case MEM_CGROUP_CHARGE_TYPE_CACHE:
2504
case MEM_CGROUP_CHARGE_TYPE_SHMEM:
2505
SetPageCgroupCache(pc);
2506
SetPageCgroupUsed(pc);
2507
break;
2508
case MEM_CGROUP_CHARGE_TYPE_MAPPED:
2509
ClearPageCgroupCache(pc);
2510
SetPageCgroupUsed(pc);
2511
break;
2512
default:
2513
break;
2514
}
2515
2516
mem_cgroup_charge_statistics(mem, PageCgroupCache(pc), nr_pages);
2517
unlock_page_cgroup(pc);
2518
/*
2519
* "charge_statistics" updated event counter. Then, check it.
2520
* Insert ancestor (and ancestor's ancestors), to softlimit RB-tree.
2521
* if they exceeds softlimit.
2522
*/
2523
memcg_check_events(mem, page);
2524
}
2525
2526
#ifdef CONFIG_TRANSPARENT_HUGEPAGE
2527
2528
#define PCGF_NOCOPY_AT_SPLIT ((1 << PCG_LOCK) | (1 << PCG_MOVE_LOCK) |\
2529
(1 << PCG_ACCT_LRU) | (1 << PCG_MIGRATION))
2530
/*
2531
* Because tail pages are not marked as "used", set it. We're under
2532
* zone->lru_lock, 'splitting on pmd' and compund_lock.
2533
*/
2534
void mem_cgroup_split_huge_fixup(struct page *head, struct page *tail)
2535
{
2536
struct page_cgroup *head_pc = lookup_page_cgroup(head);
2537
struct page_cgroup *tail_pc = lookup_page_cgroup(tail);
2538
unsigned long flags;
2539
2540
if (mem_cgroup_disabled())
2541
return;
2542
/*
2543
* We have no races with charge/uncharge but will have races with
2544
* page state accounting.
2545
*/
2546
move_lock_page_cgroup(head_pc, &flags);
2547
2548
tail_pc->mem_cgroup = head_pc->mem_cgroup;
2549
smp_wmb(); /* see __commit_charge() */
2550
if (PageCgroupAcctLRU(head_pc)) {
2551
enum lru_list lru;
2552
struct mem_cgroup_per_zone *mz;
2553
2554
/*
2555
* LRU flags cannot be copied because we need to add tail
2556
*.page to LRU by generic call and our hook will be called.
2557
* We hold lru_lock, then, reduce counter directly.
2558
*/
2559
lru = page_lru(head);
2560
mz = page_cgroup_zoneinfo(head_pc->mem_cgroup, head);
2561
MEM_CGROUP_ZSTAT(mz, lru) -= 1;
2562
}
2563
tail_pc->flags = head_pc->flags & ~PCGF_NOCOPY_AT_SPLIT;
2564
move_unlock_page_cgroup(head_pc, &flags);
2565
}
2566
#endif
2567
2568
/**
2569
* mem_cgroup_move_account - move account of the page
2570
* @page: the page
2571
* @nr_pages: number of regular pages (>1 for huge pages)
2572
* @pc: page_cgroup of the page.
2573
* @from: mem_cgroup which the page is moved from.
2574
* @to: mem_cgroup which the page is moved to. @from != @to.
2575
* @uncharge: whether we should call uncharge and css_put against @from.
2576
*
2577
* The caller must confirm following.
2578
* - page is not on LRU (isolate_page() is useful.)
2579
* - compound_lock is held when nr_pages > 1
2580
*
2581
* This function doesn't do "charge" nor css_get to new cgroup. It should be
2582
* done by a caller(__mem_cgroup_try_charge would be useful). If @uncharge is
2583
* true, this function does "uncharge" from old cgroup, but it doesn't if
2584
* @uncharge is false, so a caller should do "uncharge".
2585
*/
2586
static int mem_cgroup_move_account(struct page *page,
2587
unsigned int nr_pages,
2588
struct page_cgroup *pc,
2589
struct mem_cgroup *from,
2590
struct mem_cgroup *to,
2591
bool uncharge)
2592
{
2593
unsigned long flags;
2594
int ret;
2595
2596
VM_BUG_ON(from == to);
2597
VM_BUG_ON(PageLRU(page));
2598
/*
2599
* The page is isolated from LRU. So, collapse function
2600
* will not handle this page. But page splitting can happen.
2601
* Do this check under compound_page_lock(). The caller should
2602
* hold it.
2603
*/
2604
ret = -EBUSY;
2605
if (nr_pages > 1 && !PageTransHuge(page))
2606
goto out;
2607
2608
lock_page_cgroup(pc);
2609
2610
ret = -EINVAL;
2611
if (!PageCgroupUsed(pc) || pc->mem_cgroup != from)
2612
goto unlock;
2613
2614
move_lock_page_cgroup(pc, &flags);
2615
2616
if (PageCgroupFileMapped(pc)) {
2617
/* Update mapped_file data for mem_cgroup */
2618
preempt_disable();
2619
__this_cpu_dec(from->stat->count[MEM_CGROUP_STAT_FILE_MAPPED]);
2620
__this_cpu_inc(to->stat->count[MEM_CGROUP_STAT_FILE_MAPPED]);
2621
preempt_enable();
2622
}
2623
mem_cgroup_charge_statistics(from, PageCgroupCache(pc), -nr_pages);
2624
if (uncharge)
2625
/* This is not "cancel", but cancel_charge does all we need. */
2626
__mem_cgroup_cancel_charge(from, nr_pages);
2627
2628
/* caller should have done css_get */
2629
pc->mem_cgroup = to;
2630
mem_cgroup_charge_statistics(to, PageCgroupCache(pc), nr_pages);
2631
/*
2632
* We charges against "to" which may not have any tasks. Then, "to"
2633
* can be under rmdir(). But in current implementation, caller of
2634
* this function is just force_empty() and move charge, so it's
2635
* guaranteed that "to" is never removed. So, we don't check rmdir
2636
* status here.
2637
*/
2638
move_unlock_page_cgroup(pc, &flags);
2639
ret = 0;
2640
unlock:
2641
unlock_page_cgroup(pc);
2642
/*
2643
* check events
2644
*/
2645
memcg_check_events(to, page);
2646
memcg_check_events(from, page);
2647
out:
2648
return ret;
2649
}
2650
2651
/*
2652
* move charges to its parent.
2653
*/
2654
2655
static int mem_cgroup_move_parent(struct page *page,
2656
struct page_cgroup *pc,
2657
struct mem_cgroup *child,
2658
gfp_t gfp_mask)
2659
{
2660
struct cgroup *cg = child->css.cgroup;
2661
struct cgroup *pcg = cg->parent;
2662
struct mem_cgroup *parent;
2663
unsigned int nr_pages;
2664
unsigned long uninitialized_var(flags);
2665
int ret;
2666
2667
/* Is ROOT ? */
2668
if (!pcg)
2669
return -EINVAL;
2670
2671
ret = -EBUSY;
2672
if (!get_page_unless_zero(page))
2673
goto out;
2674
if (isolate_lru_page(page))
2675
goto put;
2676
2677
nr_pages = hpage_nr_pages(page);
2678
2679
parent = mem_cgroup_from_cont(pcg);
2680
ret = __mem_cgroup_try_charge(NULL, gfp_mask, nr_pages, &parent, false);
2681
if (ret || !parent)
2682
goto put_back;
2683
2684
if (nr_pages > 1)
2685
flags = compound_lock_irqsave(page);
2686
2687
ret = mem_cgroup_move_account(page, nr_pages, pc, child, parent, true);
2688
if (ret)
2689
__mem_cgroup_cancel_charge(parent, nr_pages);
2690
2691
if (nr_pages > 1)
2692
compound_unlock_irqrestore(page, flags);
2693
put_back:
2694
putback_lru_page(page);
2695
put:
2696
put_page(page);
2697
out:
2698
return ret;
2699
}
2700
2701
/*
2702
* Charge the memory controller for page usage.
2703
* Return
2704
* 0 if the charge was successful
2705
* < 0 if the cgroup is over its limit
2706
*/
2707
static int mem_cgroup_charge_common(struct page *page, struct mm_struct *mm,
2708
gfp_t gfp_mask, enum charge_type ctype)
2709
{
2710
struct mem_cgroup *mem = NULL;
2711
unsigned int nr_pages = 1;
2712
struct page_cgroup *pc;
2713
bool oom = true;
2714
int ret;
2715
2716
if (PageTransHuge(page)) {
2717
nr_pages <<= compound_order(page);
2718
VM_BUG_ON(!PageTransHuge(page));
2719
/*
2720
* Never OOM-kill a process for a huge page. The
2721
* fault handler will fall back to regular pages.
2722
*/
2723
oom = false;
2724
}
2725
2726
pc = lookup_page_cgroup(page);
2727
BUG_ON(!pc); /* XXX: remove this and move pc lookup into commit */
2728
2729
ret = __mem_cgroup_try_charge(mm, gfp_mask, nr_pages, &mem, oom);
2730
if (ret || !mem)
2731
return ret;
2732
2733
__mem_cgroup_commit_charge(mem, page, nr_pages, pc, ctype);
2734
return 0;
2735
}
2736
2737
int mem_cgroup_newpage_charge(struct page *page,
2738
struct mm_struct *mm, gfp_t gfp_mask)
2739
{
2740
if (mem_cgroup_disabled())
2741
return 0;
2742
/*
2743
* If already mapped, we don't have to account.
2744
* If page cache, page->mapping has address_space.
2745
* But page->mapping may have out-of-use anon_vma pointer,
2746
* detecit it by PageAnon() check. newly-mapped-anon's page->mapping
2747
* is NULL.
2748
*/
2749
if (page_mapped(page) || (page->mapping && !PageAnon(page)))
2750
return 0;
2751
if (unlikely(!mm))
2752
mm = &init_mm;
2753
return mem_cgroup_charge_common(page, mm, gfp_mask,
2754
MEM_CGROUP_CHARGE_TYPE_MAPPED);
2755
}
2756
2757
static void
2758
__mem_cgroup_commit_charge_swapin(struct page *page, struct mem_cgroup *ptr,
2759
enum charge_type ctype);
2760
2761
static void
2762
__mem_cgroup_commit_charge_lrucare(struct page *page, struct mem_cgroup *mem,
2763
enum charge_type ctype)
2764
{
2765
struct page_cgroup *pc = lookup_page_cgroup(page);
2766
/*
2767
* In some case, SwapCache, FUSE(splice_buf->radixtree), the page
2768
* is already on LRU. It means the page may on some other page_cgroup's
2769
* LRU. Take care of it.
2770
*/
2771
mem_cgroup_lru_del_before_commit(page);
2772
__mem_cgroup_commit_charge(mem, page, 1, pc, ctype);
2773
mem_cgroup_lru_add_after_commit(page);
2774
return;
2775
}
2776
2777
int mem_cgroup_cache_charge(struct page *page, struct mm_struct *mm,
2778
gfp_t gfp_mask)
2779
{
2780
struct mem_cgroup *mem = NULL;
2781
int ret;
2782
2783
if (mem_cgroup_disabled())
2784
return 0;
2785
if (PageCompound(page))
2786
return 0;
2787
/*
2788
* Corner case handling. This is called from add_to_page_cache()
2789
* in usual. But some FS (shmem) precharges this page before calling it
2790
* and call add_to_page_cache() with GFP_NOWAIT.
2791
*
2792
* For GFP_NOWAIT case, the page may be pre-charged before calling
2793
* add_to_page_cache(). (See shmem.c) check it here and avoid to call
2794
* charge twice. (It works but has to pay a bit larger cost.)
2795
* And when the page is SwapCache, it should take swap information
2796
* into account. This is under lock_page() now.
2797
*/
2798
if (!(gfp_mask & __GFP_WAIT)) {
2799
struct page_cgroup *pc;
2800
2801
pc = lookup_page_cgroup(page);
2802
if (!pc)
2803
return 0;
2804
lock_page_cgroup(pc);
2805
if (PageCgroupUsed(pc)) {
2806
unlock_page_cgroup(pc);
2807
return 0;
2808
}
2809
unlock_page_cgroup(pc);
2810
}
2811
2812
if (unlikely(!mm))
2813
mm = &init_mm;
2814
2815
if (page_is_file_cache(page)) {
2816
ret = __mem_cgroup_try_charge(mm, gfp_mask, 1, &mem, true);
2817
if (ret || !mem)
2818
return ret;
2819
2820
/*
2821
* FUSE reuses pages without going through the final
2822
* put that would remove them from the LRU list, make
2823
* sure that they get relinked properly.
2824
*/
2825
__mem_cgroup_commit_charge_lrucare(page, mem,
2826
MEM_CGROUP_CHARGE_TYPE_CACHE);
2827
return ret;
2828
}
2829
/* shmem */
2830
if (PageSwapCache(page)) {
2831
ret = mem_cgroup_try_charge_swapin(mm, page, gfp_mask, &mem);
2832
if (!ret)
2833
__mem_cgroup_commit_charge_swapin(page, mem,
2834
MEM_CGROUP_CHARGE_TYPE_SHMEM);
2835
} else
2836
ret = mem_cgroup_charge_common(page, mm, gfp_mask,
2837
MEM_CGROUP_CHARGE_TYPE_SHMEM);
2838
2839
return ret;
2840
}
2841
2842
/*
2843
* While swap-in, try_charge -> commit or cancel, the page is locked.
2844
* And when try_charge() successfully returns, one refcnt to memcg without
2845
* struct page_cgroup is acquired. This refcnt will be consumed by
2846
* "commit()" or removed by "cancel()"
2847
*/
2848
int mem_cgroup_try_charge_swapin(struct mm_struct *mm,
2849
struct page *page,
2850
gfp_t mask, struct mem_cgroup **ptr)
2851
{
2852
struct mem_cgroup *mem;
2853
int ret;
2854
2855
*ptr = NULL;
2856
2857
if (mem_cgroup_disabled())
2858
return 0;
2859
2860
if (!do_swap_account)
2861
goto charge_cur_mm;
2862
/*
2863
* A racing thread's fault, or swapoff, may have already updated
2864
* the pte, and even removed page from swap cache: in those cases
2865
* do_swap_page()'s pte_same() test will fail; but there's also a
2866
* KSM case which does need to charge the page.
2867
*/
2868
if (!PageSwapCache(page))
2869
goto charge_cur_mm;
2870
mem = try_get_mem_cgroup_from_page(page);
2871
if (!mem)
2872
goto charge_cur_mm;
2873
*ptr = mem;
2874
ret = __mem_cgroup_try_charge(NULL, mask, 1, ptr, true);
2875
css_put(&mem->css);
2876
return ret;
2877
charge_cur_mm:
2878
if (unlikely(!mm))
2879
mm = &init_mm;
2880
return __mem_cgroup_try_charge(mm, mask, 1, ptr, true);
2881
}
2882
2883
static void
2884
__mem_cgroup_commit_charge_swapin(struct page *page, struct mem_cgroup *ptr,
2885
enum charge_type ctype)
2886
{
2887
if (mem_cgroup_disabled())
2888
return;
2889
if (!ptr)
2890
return;
2891
cgroup_exclude_rmdir(&ptr->css);
2892
2893
__mem_cgroup_commit_charge_lrucare(page, ptr, ctype);
2894
/*
2895
* Now swap is on-memory. This means this page may be
2896
* counted both as mem and swap....double count.
2897
* Fix it by uncharging from memsw. Basically, this SwapCache is stable
2898
* under lock_page(). But in do_swap_page()::memory.c, reuse_swap_page()
2899
* may call delete_from_swap_cache() before reach here.
2900
*/
2901
if (do_swap_account && PageSwapCache(page)) {
2902
swp_entry_t ent = {.val = page_private(page)};
2903
unsigned short id;
2904
struct mem_cgroup *memcg;
2905
2906
id = swap_cgroup_record(ent, 0);
2907
rcu_read_lock();
2908
memcg = mem_cgroup_lookup(id);
2909
if (memcg) {
2910
/*
2911
* This recorded memcg can be obsolete one. So, avoid
2912
* calling css_tryget
2913
*/
2914
if (!mem_cgroup_is_root(memcg))
2915
res_counter_uncharge(&memcg->memsw, PAGE_SIZE);
2916
mem_cgroup_swap_statistics(memcg, false);
2917
mem_cgroup_put(memcg);
2918
}
2919
rcu_read_unlock();
2920
}
2921
/*
2922
* At swapin, we may charge account against cgroup which has no tasks.
2923
* So, rmdir()->pre_destroy() can be called while we do this charge.
2924
* In that case, we need to call pre_destroy() again. check it here.
2925
*/
2926
cgroup_release_and_wakeup_rmdir(&ptr->css);
2927
}
2928
2929
void mem_cgroup_commit_charge_swapin(struct page *page, struct mem_cgroup *ptr)
2930
{
2931
__mem_cgroup_commit_charge_swapin(page, ptr,
2932
MEM_CGROUP_CHARGE_TYPE_MAPPED);
2933
}
2934
2935
void mem_cgroup_cancel_charge_swapin(struct mem_cgroup *mem)
2936
{
2937
if (mem_cgroup_disabled())
2938
return;
2939
if (!mem)
2940
return;
2941
__mem_cgroup_cancel_charge(mem, 1);
2942
}
2943
2944
static void mem_cgroup_do_uncharge(struct mem_cgroup *mem,
2945
unsigned int nr_pages,
2946
const enum charge_type ctype)
2947
{
2948
struct memcg_batch_info *batch = NULL;
2949
bool uncharge_memsw = true;
2950
2951
/* If swapout, usage of swap doesn't decrease */
2952
if (!do_swap_account || ctype == MEM_CGROUP_CHARGE_TYPE_SWAPOUT)
2953
uncharge_memsw = false;
2954
2955
batch = &current->memcg_batch;
2956
/*
2957
* In usual, we do css_get() when we remember memcg pointer.
2958
* But in this case, we keep res->usage until end of a series of
2959
* uncharges. Then, it's ok to ignore memcg's refcnt.
2960
*/
2961
if (!batch->memcg)
2962
batch->memcg = mem;
2963
/*
2964
* do_batch > 0 when unmapping pages or inode invalidate/truncate.
2965
* In those cases, all pages freed continuously can be expected to be in
2966
* the same cgroup and we have chance to coalesce uncharges.
2967
* But we do uncharge one by one if this is killed by OOM(TIF_MEMDIE)
2968
* because we want to do uncharge as soon as possible.
2969
*/
2970
2971
if (!batch->do_batch || test_thread_flag(TIF_MEMDIE))
2972
goto direct_uncharge;
2973
2974
if (nr_pages > 1)
2975
goto direct_uncharge;
2976
2977
/*
2978
* In typical case, batch->memcg == mem. This means we can
2979
* merge a series of uncharges to an uncharge of res_counter.
2980
* If not, we uncharge res_counter ony by one.
2981
*/
2982
if (batch->memcg != mem)
2983
goto direct_uncharge;
2984
/* remember freed charge and uncharge it later */
2985
batch->nr_pages++;
2986
if (uncharge_memsw)
2987
batch->memsw_nr_pages++;
2988
return;
2989
direct_uncharge:
2990
res_counter_uncharge(&mem->res, nr_pages * PAGE_SIZE);
2991
if (uncharge_memsw)
2992
res_counter_uncharge(&mem->memsw, nr_pages * PAGE_SIZE);
2993
if (unlikely(batch->memcg != mem))
2994
memcg_oom_recover(mem);
2995
return;
2996
}
2997
2998
/*
2999
* uncharge if !page_mapped(page)
3000
*/
3001
static struct mem_cgroup *
3002
__mem_cgroup_uncharge_common(struct page *page, enum charge_type ctype)
3003
{
3004
struct mem_cgroup *mem = NULL;
3005
unsigned int nr_pages = 1;
3006
struct page_cgroup *pc;
3007
3008
if (mem_cgroup_disabled())
3009
return NULL;
3010
3011
if (PageSwapCache(page))
3012
return NULL;
3013
3014
if (PageTransHuge(page)) {
3015
nr_pages <<= compound_order(page);
3016
VM_BUG_ON(!PageTransHuge(page));
3017
}
3018
/*
3019
* Check if our page_cgroup is valid
3020
*/
3021
pc = lookup_page_cgroup(page);
3022
if (unlikely(!pc || !PageCgroupUsed(pc)))
3023
return NULL;
3024
3025
lock_page_cgroup(pc);
3026
3027
mem = pc->mem_cgroup;
3028
3029
if (!PageCgroupUsed(pc))
3030
goto unlock_out;
3031
3032
switch (ctype) {
3033
case MEM_CGROUP_CHARGE_TYPE_MAPPED:
3034
case MEM_CGROUP_CHARGE_TYPE_DROP:
3035
/* See mem_cgroup_prepare_migration() */
3036
if (page_mapped(page) || PageCgroupMigration(pc))
3037
goto unlock_out;
3038
break;
3039
case MEM_CGROUP_CHARGE_TYPE_SWAPOUT:
3040
if (!PageAnon(page)) { /* Shared memory */
3041
if (page->mapping && !page_is_file_cache(page))
3042
goto unlock_out;
3043
} else if (page_mapped(page)) /* Anon */
3044
goto unlock_out;
3045
break;
3046
default:
3047
break;
3048
}
3049
3050
mem_cgroup_charge_statistics(mem, PageCgroupCache(pc), -nr_pages);
3051
3052
ClearPageCgroupUsed(pc);
3053
/*
3054
* pc->mem_cgroup is not cleared here. It will be accessed when it's
3055
* freed from LRU. This is safe because uncharged page is expected not
3056
* to be reused (freed soon). Exception is SwapCache, it's handled by
3057
* special functions.
3058
*/
3059
3060
unlock_page_cgroup(pc);
3061
/*
3062
* even after unlock, we have mem->res.usage here and this memcg
3063
* will never be freed.
3064
*/
3065
memcg_check_events(mem, page);
3066
if (do_swap_account && ctype == MEM_CGROUP_CHARGE_TYPE_SWAPOUT) {
3067
mem_cgroup_swap_statistics(mem, true);
3068
mem_cgroup_get(mem);
3069
}
3070
if (!mem_cgroup_is_root(mem))
3071
mem_cgroup_do_uncharge(mem, nr_pages, ctype);
3072
3073
return mem;
3074
3075
unlock_out:
3076
unlock_page_cgroup(pc);
3077
return NULL;
3078
}
3079
3080
void mem_cgroup_uncharge_page(struct page *page)
3081
{
3082
/* early check. */
3083
if (page_mapped(page))
3084
return;
3085
if (page->mapping && !PageAnon(page))
3086
return;
3087
__mem_cgroup_uncharge_common(page, MEM_CGROUP_CHARGE_TYPE_MAPPED);
3088
}
3089
3090
void mem_cgroup_uncharge_cache_page(struct page *page)
3091
{
3092
VM_BUG_ON(page_mapped(page));
3093
VM_BUG_ON(page->mapping);
3094
__mem_cgroup_uncharge_common(page, MEM_CGROUP_CHARGE_TYPE_CACHE);
3095
}
3096
3097
/*
3098
* Batch_start/batch_end is called in unmap_page_range/invlidate/trucate.
3099
* In that cases, pages are freed continuously and we can expect pages
3100
* are in the same memcg. All these calls itself limits the number of
3101
* pages freed at once, then uncharge_start/end() is called properly.
3102
* This may be called prural(2) times in a context,
3103
*/
3104
3105
void mem_cgroup_uncharge_start(void)
3106
{
3107
current->memcg_batch.do_batch++;
3108
/* We can do nest. */
3109
if (current->memcg_batch.do_batch == 1) {
3110
current->memcg_batch.memcg = NULL;
3111
current->memcg_batch.nr_pages = 0;
3112
current->memcg_batch.memsw_nr_pages = 0;
3113
}
3114
}
3115
3116
void mem_cgroup_uncharge_end(void)
3117
{
3118
struct memcg_batch_info *batch = &current->memcg_batch;
3119
3120
if (!batch->do_batch)
3121
return;
3122
3123
batch->do_batch--;
3124
if (batch->do_batch) /* If stacked, do nothing. */
3125
return;
3126
3127
if (!batch->memcg)
3128
return;
3129
/*
3130
* This "batch->memcg" is valid without any css_get/put etc...
3131
* bacause we hide charges behind us.
3132
*/
3133
if (batch->nr_pages)
3134
res_counter_uncharge(&batch->memcg->res,
3135
batch->nr_pages * PAGE_SIZE);
3136
if (batch->memsw_nr_pages)
3137
res_counter_uncharge(&batch->memcg->memsw,
3138
batch->memsw_nr_pages * PAGE_SIZE);
3139
memcg_oom_recover(batch->memcg);
3140
/* forget this pointer (for sanity check) */
3141
batch->memcg = NULL;
3142
}
3143
3144
#ifdef CONFIG_SWAP
3145
/*
3146
* called after __delete_from_swap_cache() and drop "page" account.
3147
* memcg information is recorded to swap_cgroup of "ent"
3148
*/
3149
void
3150
mem_cgroup_uncharge_swapcache(struct page *page, swp_entry_t ent, bool swapout)
3151
{
3152
struct mem_cgroup *memcg;
3153
int ctype = MEM_CGROUP_CHARGE_TYPE_SWAPOUT;
3154
3155
if (!swapout) /* this was a swap cache but the swap is unused ! */
3156
ctype = MEM_CGROUP_CHARGE_TYPE_DROP;
3157
3158
memcg = __mem_cgroup_uncharge_common(page, ctype);
3159
3160
/*
3161
* record memcg information, if swapout && memcg != NULL,
3162
* mem_cgroup_get() was called in uncharge().
3163
*/
3164
if (do_swap_account && swapout && memcg)
3165
swap_cgroup_record(ent, css_id(&memcg->css));
3166
}
3167
#endif
3168
3169
#ifdef CONFIG_CGROUP_MEM_RES_CTLR_SWAP
3170
/*
3171
* called from swap_entry_free(). remove record in swap_cgroup and
3172
* uncharge "memsw" account.
3173
*/
3174
void mem_cgroup_uncharge_swap(swp_entry_t ent)
3175
{
3176
struct mem_cgroup *memcg;
3177
unsigned short id;
3178
3179
if (!do_swap_account)
3180
return;
3181
3182
id = swap_cgroup_record(ent, 0);
3183
rcu_read_lock();
3184
memcg = mem_cgroup_lookup(id);
3185
if (memcg) {
3186
/*
3187
* We uncharge this because swap is freed.
3188
* This memcg can be obsolete one. We avoid calling css_tryget
3189
*/
3190
if (!mem_cgroup_is_root(memcg))
3191
res_counter_uncharge(&memcg->memsw, PAGE_SIZE);
3192
mem_cgroup_swap_statistics(memcg, false);
3193
mem_cgroup_put(memcg);
3194
}
3195
rcu_read_unlock();
3196
}
3197
3198
/**
3199
* mem_cgroup_move_swap_account - move swap charge and swap_cgroup's record.
3200
* @entry: swap entry to be moved
3201
* @from: mem_cgroup which the entry is moved from
3202
* @to: mem_cgroup which the entry is moved to
3203
* @need_fixup: whether we should fixup res_counters and refcounts.
3204
*
3205
* It succeeds only when the swap_cgroup's record for this entry is the same
3206
* as the mem_cgroup's id of @from.
3207
*
3208
* Returns 0 on success, -EINVAL on failure.
3209
*
3210
* The caller must have charged to @to, IOW, called res_counter_charge() about
3211
* both res and memsw, and called css_get().
3212
*/
3213
static int mem_cgroup_move_swap_account(swp_entry_t entry,
3214
struct mem_cgroup *from, struct mem_cgroup *to, bool need_fixup)
3215
{
3216
unsigned short old_id, new_id;
3217
3218
old_id = css_id(&from->css);
3219
new_id = css_id(&to->css);
3220
3221
if (swap_cgroup_cmpxchg(entry, old_id, new_id) == old_id) {
3222
mem_cgroup_swap_statistics(from, false);
3223
mem_cgroup_swap_statistics(to, true);
3224
/*
3225
* This function is only called from task migration context now.
3226
* It postpones res_counter and refcount handling till the end
3227
* of task migration(mem_cgroup_clear_mc()) for performance
3228
* improvement. But we cannot postpone mem_cgroup_get(to)
3229
* because if the process that has been moved to @to does
3230
* swap-in, the refcount of @to might be decreased to 0.
3231
*/
3232
mem_cgroup_get(to);
3233
if (need_fixup) {
3234
if (!mem_cgroup_is_root(from))
3235
res_counter_uncharge(&from->memsw, PAGE_SIZE);
3236
mem_cgroup_put(from);
3237
/*
3238
* we charged both to->res and to->memsw, so we should
3239
* uncharge to->res.
3240
*/
3241
if (!mem_cgroup_is_root(to))
3242
res_counter_uncharge(&to->res, PAGE_SIZE);
3243
}
3244
return 0;
3245
}
3246
return -EINVAL;
3247
}
3248
#else
3249
static inline int mem_cgroup_move_swap_account(swp_entry_t entry,
3250
struct mem_cgroup *from, struct mem_cgroup *to, bool need_fixup)
3251
{
3252
return -EINVAL;
3253
}
3254
#endif
3255
3256
/*
3257
* Before starting migration, account PAGE_SIZE to mem_cgroup that the old
3258
* page belongs to.
3259
*/
3260
int mem_cgroup_prepare_migration(struct page *page,
3261
struct page *newpage, struct mem_cgroup **ptr, gfp_t gfp_mask)
3262
{
3263
struct mem_cgroup *mem = NULL;
3264
struct page_cgroup *pc;
3265
enum charge_type ctype;
3266
int ret = 0;
3267
3268
*ptr = NULL;
3269
3270
VM_BUG_ON(PageTransHuge(page));
3271
if (mem_cgroup_disabled())
3272
return 0;
3273
3274
pc = lookup_page_cgroup(page);
3275
lock_page_cgroup(pc);
3276
if (PageCgroupUsed(pc)) {
3277
mem = pc->mem_cgroup;
3278
css_get(&mem->css);
3279
/*
3280
* At migrating an anonymous page, its mapcount goes down
3281
* to 0 and uncharge() will be called. But, even if it's fully
3282
* unmapped, migration may fail and this page has to be
3283
* charged again. We set MIGRATION flag here and delay uncharge
3284
* until end_migration() is called
3285
*
3286
* Corner Case Thinking
3287
* A)
3288
* When the old page was mapped as Anon and it's unmap-and-freed
3289
* while migration was ongoing.
3290
* If unmap finds the old page, uncharge() of it will be delayed
3291
* until end_migration(). If unmap finds a new page, it's
3292
* uncharged when it make mapcount to be 1->0. If unmap code
3293
* finds swap_migration_entry, the new page will not be mapped
3294
* and end_migration() will find it(mapcount==0).
3295
*
3296
* B)
3297
* When the old page was mapped but migraion fails, the kernel
3298
* remaps it. A charge for it is kept by MIGRATION flag even
3299
* if mapcount goes down to 0. We can do remap successfully
3300
* without charging it again.
3301
*
3302
* C)
3303
* The "old" page is under lock_page() until the end of
3304
* migration, so, the old page itself will not be swapped-out.
3305
* If the new page is swapped out before end_migraton, our
3306
* hook to usual swap-out path will catch the event.
3307
*/
3308
if (PageAnon(page))
3309
SetPageCgroupMigration(pc);
3310
}
3311
unlock_page_cgroup(pc);
3312
/*
3313
* If the page is not charged at this point,
3314
* we return here.
3315
*/
3316
if (!mem)
3317
return 0;
3318
3319
*ptr = mem;
3320
ret = __mem_cgroup_try_charge(NULL, gfp_mask, 1, ptr, false);
3321
css_put(&mem->css);/* drop extra refcnt */
3322
if (ret || *ptr == NULL) {
3323
if (PageAnon(page)) {
3324
lock_page_cgroup(pc);
3325
ClearPageCgroupMigration(pc);
3326
unlock_page_cgroup(pc);
3327
/*
3328
* The old page may be fully unmapped while we kept it.
3329
*/
3330
mem_cgroup_uncharge_page(page);
3331
}
3332
return -ENOMEM;
3333
}
3334
/*
3335
* We charge new page before it's used/mapped. So, even if unlock_page()
3336
* is called before end_migration, we can catch all events on this new
3337
* page. In the case new page is migrated but not remapped, new page's
3338
* mapcount will be finally 0 and we call uncharge in end_migration().
3339
*/
3340
pc = lookup_page_cgroup(newpage);
3341
if (PageAnon(page))
3342
ctype = MEM_CGROUP_CHARGE_TYPE_MAPPED;
3343
else if (page_is_file_cache(page))
3344
ctype = MEM_CGROUP_CHARGE_TYPE_CACHE;
3345
else
3346
ctype = MEM_CGROUP_CHARGE_TYPE_SHMEM;
3347
__mem_cgroup_commit_charge(mem, page, 1, pc, ctype);
3348
return ret;
3349
}
3350
3351
/* remove redundant charge if migration failed*/
3352
void mem_cgroup_end_migration(struct mem_cgroup *mem,
3353
struct page *oldpage, struct page *newpage, bool migration_ok)
3354
{
3355
struct page *used, *unused;
3356
struct page_cgroup *pc;
3357
3358
if (!mem)
3359
return;
3360
/* blocks rmdir() */
3361
cgroup_exclude_rmdir(&mem->css);
3362
if (!migration_ok) {
3363
used = oldpage;
3364
unused = newpage;
3365
} else {
3366
used = newpage;
3367
unused = oldpage;
3368
}
3369
/*
3370
* We disallowed uncharge of pages under migration because mapcount
3371
* of the page goes down to zero, temporarly.
3372
* Clear the flag and check the page should be charged.
3373
*/
3374
pc = lookup_page_cgroup(oldpage);
3375
lock_page_cgroup(pc);
3376
ClearPageCgroupMigration(pc);
3377
unlock_page_cgroup(pc);
3378
3379
__mem_cgroup_uncharge_common(unused, MEM_CGROUP_CHARGE_TYPE_FORCE);
3380
3381
/*
3382
* If a page is a file cache, radix-tree replacement is very atomic
3383
* and we can skip this check. When it was an Anon page, its mapcount
3384
* goes down to 0. But because we added MIGRATION flage, it's not
3385
* uncharged yet. There are several case but page->mapcount check
3386
* and USED bit check in mem_cgroup_uncharge_page() will do enough
3387
* check. (see prepare_charge() also)
3388
*/
3389
if (PageAnon(used))
3390
mem_cgroup_uncharge_page(used);
3391
/*
3392
* At migration, we may charge account against cgroup which has no
3393
* tasks.
3394
* So, rmdir()->pre_destroy() can be called while we do this charge.
3395
* In that case, we need to call pre_destroy() again. check it here.
3396
*/
3397
cgroup_release_and_wakeup_rmdir(&mem->css);
3398
}
3399
3400
/*
3401
* A call to try to shrink memory usage on charge failure at shmem's swapin.
3402
* Calling hierarchical_reclaim is not enough because we should update
3403
* last_oom_jiffies to prevent pagefault_out_of_memory from invoking global OOM.
3404
* Moreover considering hierarchy, we should reclaim from the mem_over_limit,
3405
* not from the memcg which this page would be charged to.
3406
* try_charge_swapin does all of these works properly.
3407
*/
3408
int mem_cgroup_shmem_charge_fallback(struct page *page,
3409
struct mm_struct *mm,
3410
gfp_t gfp_mask)
3411
{
3412
struct mem_cgroup *mem;
3413
int ret;
3414
3415
if (mem_cgroup_disabled())
3416
return 0;
3417
3418
ret = mem_cgroup_try_charge_swapin(mm, page, gfp_mask, &mem);
3419
if (!ret)
3420
mem_cgroup_cancel_charge_swapin(mem); /* it does !mem check */
3421
3422
return ret;
3423
}
3424
3425
#ifdef CONFIG_DEBUG_VM
3426
static struct page_cgroup *lookup_page_cgroup_used(struct page *page)
3427
{
3428
struct page_cgroup *pc;
3429
3430
pc = lookup_page_cgroup(page);
3431
if (likely(pc) && PageCgroupUsed(pc))
3432
return pc;
3433
return NULL;
3434
}
3435
3436
bool mem_cgroup_bad_page_check(struct page *page)
3437
{
3438
if (mem_cgroup_disabled())
3439
return false;
3440
3441
return lookup_page_cgroup_used(page) != NULL;
3442
}
3443
3444
void mem_cgroup_print_bad_page(struct page *page)
3445
{
3446
struct page_cgroup *pc;
3447
3448
pc = lookup_page_cgroup_used(page);
3449
if (pc) {
3450
int ret = -1;
3451
char *path;
3452
3453
printk(KERN_ALERT "pc:%p pc->flags:%lx pc->mem_cgroup:%p",
3454
pc, pc->flags, pc->mem_cgroup);
3455
3456
path = kmalloc(PATH_MAX, GFP_KERNEL);
3457
if (path) {
3458
rcu_read_lock();
3459
ret = cgroup_path(pc->mem_cgroup->css.cgroup,
3460
path, PATH_MAX);
3461
rcu_read_unlock();
3462
}
3463
3464
printk(KERN_CONT "(%s)\n",
3465
(ret < 0) ? "cannot get the path" : path);
3466
kfree(path);
3467
}
3468
}
3469
#endif
3470
3471
static DEFINE_MUTEX(set_limit_mutex);
3472
3473
static int mem_cgroup_resize_limit(struct mem_cgroup *memcg,
3474
unsigned long long val)
3475
{
3476
int retry_count;
3477
u64 memswlimit, memlimit;
3478
int ret = 0;
3479
int children = mem_cgroup_count_children(memcg);
3480
u64 curusage, oldusage;
3481
int enlarge;
3482
3483
/*
3484
* For keeping hierarchical_reclaim simple, how long we should retry
3485
* is depends on callers. We set our retry-count to be function
3486
* of # of children which we should visit in this loop.
3487
*/
3488
retry_count = MEM_CGROUP_RECLAIM_RETRIES * children;
3489
3490
oldusage = res_counter_read_u64(&memcg->res, RES_USAGE);
3491
3492
enlarge = 0;
3493
while (retry_count) {
3494
if (signal_pending(current)) {
3495
ret = -EINTR;
3496
break;
3497
}
3498
/*
3499
* Rather than hide all in some function, I do this in
3500
* open coded manner. You see what this really does.
3501
* We have to guarantee mem->res.limit < mem->memsw.limit.
3502
*/
3503
mutex_lock(&set_limit_mutex);
3504
memswlimit = res_counter_read_u64(&memcg->memsw, RES_LIMIT);
3505
if (memswlimit < val) {
3506
ret = -EINVAL;
3507
mutex_unlock(&set_limit_mutex);
3508
break;
3509
}
3510
3511
memlimit = res_counter_read_u64(&memcg->res, RES_LIMIT);
3512
if (memlimit < val)
3513
enlarge = 1;
3514
3515
ret = res_counter_set_limit(&memcg->res, val);
3516
if (!ret) {
3517
if (memswlimit == val)
3518
memcg->memsw_is_minimum = true;
3519
else
3520
memcg->memsw_is_minimum = false;
3521
}
3522
mutex_unlock(&set_limit_mutex);
3523
3524
if (!ret)
3525
break;
3526
3527
mem_cgroup_hierarchical_reclaim(memcg, NULL, GFP_KERNEL,
3528
MEM_CGROUP_RECLAIM_SHRINK,
3529
NULL);
3530
curusage = res_counter_read_u64(&memcg->res, RES_USAGE);
3531
/* Usage is reduced ? */
3532
if (curusage >= oldusage)
3533
retry_count--;
3534
else
3535
oldusage = curusage;
3536
}
3537
if (!ret && enlarge)
3538
memcg_oom_recover(memcg);
3539
3540
return ret;
3541
}
3542
3543
static int mem_cgroup_resize_memsw_limit(struct mem_cgroup *memcg,
3544
unsigned long long val)
3545
{
3546
int retry_count;
3547
u64 memlimit, memswlimit, oldusage, curusage;
3548
int children = mem_cgroup_count_children(memcg);
3549
int ret = -EBUSY;
3550
int enlarge = 0;
3551
3552
/* see mem_cgroup_resize_res_limit */
3553
retry_count = children * MEM_CGROUP_RECLAIM_RETRIES;
3554
oldusage = res_counter_read_u64(&memcg->memsw, RES_USAGE);
3555
while (retry_count) {
3556
if (signal_pending(current)) {
3557
ret = -EINTR;
3558
break;
3559
}
3560
/*
3561
* Rather than hide all in some function, I do this in
3562
* open coded manner. You see what this really does.
3563
* We have to guarantee mem->res.limit < mem->memsw.limit.
3564
*/
3565
mutex_lock(&set_limit_mutex);
3566
memlimit = res_counter_read_u64(&memcg->res, RES_LIMIT);
3567
if (memlimit > val) {
3568
ret = -EINVAL;
3569
mutex_unlock(&set_limit_mutex);
3570
break;
3571
}
3572
memswlimit = res_counter_read_u64(&memcg->memsw, RES_LIMIT);
3573
if (memswlimit < val)
3574
enlarge = 1;
3575
ret = res_counter_set_limit(&memcg->memsw, val);
3576
if (!ret) {
3577
if (memlimit == val)
3578
memcg->memsw_is_minimum = true;
3579
else
3580
memcg->memsw_is_minimum = false;
3581
}
3582
mutex_unlock(&set_limit_mutex);
3583
3584
if (!ret)
3585
break;
3586
3587
mem_cgroup_hierarchical_reclaim(memcg, NULL, GFP_KERNEL,
3588
MEM_CGROUP_RECLAIM_NOSWAP |
3589
MEM_CGROUP_RECLAIM_SHRINK,
3590
NULL);
3591
curusage = res_counter_read_u64(&memcg->memsw, RES_USAGE);
3592
/* Usage is reduced ? */
3593
if (curusage >= oldusage)
3594
retry_count--;
3595
else
3596
oldusage = curusage;
3597
}
3598
if (!ret && enlarge)
3599
memcg_oom_recover(memcg);
3600
return ret;
3601
}
3602
3603
unsigned long mem_cgroup_soft_limit_reclaim(struct zone *zone, int order,
3604
gfp_t gfp_mask,
3605
unsigned long *total_scanned)
3606
{
3607
unsigned long nr_reclaimed = 0;
3608
struct mem_cgroup_per_zone *mz, *next_mz = NULL;
3609
unsigned long reclaimed;
3610
int loop = 0;
3611
struct mem_cgroup_tree_per_zone *mctz;
3612
unsigned long long excess;
3613
unsigned long nr_scanned;
3614
3615
if (order > 0)
3616
return 0;
3617
3618
mctz = soft_limit_tree_node_zone(zone_to_nid(zone), zone_idx(zone));
3619
/*
3620
* This loop can run a while, specially if mem_cgroup's continuously
3621
* keep exceeding their soft limit and putting the system under
3622
* pressure
3623
*/
3624
do {
3625
if (next_mz)
3626
mz = next_mz;
3627
else
3628
mz = mem_cgroup_largest_soft_limit_node(mctz);
3629
if (!mz)
3630
break;
3631
3632
nr_scanned = 0;
3633
reclaimed = mem_cgroup_hierarchical_reclaim(mz->mem, zone,
3634
gfp_mask,
3635
MEM_CGROUP_RECLAIM_SOFT,
3636
&nr_scanned);
3637
nr_reclaimed += reclaimed;
3638
*total_scanned += nr_scanned;
3639
spin_lock(&mctz->lock);
3640
3641
/*
3642
* If we failed to reclaim anything from this memory cgroup
3643
* it is time to move on to the next cgroup
3644
*/
3645
next_mz = NULL;
3646
if (!reclaimed) {
3647
do {
3648
/*
3649
* Loop until we find yet another one.
3650
*
3651
* By the time we get the soft_limit lock
3652
* again, someone might have aded the
3653
* group back on the RB tree. Iterate to
3654
* make sure we get a different mem.
3655
* mem_cgroup_largest_soft_limit_node returns
3656
* NULL if no other cgroup is present on
3657
* the tree
3658
*/
3659
next_mz =
3660
__mem_cgroup_largest_soft_limit_node(mctz);
3661
if (next_mz == mz)
3662
css_put(&next_mz->mem->css);
3663
else /* next_mz == NULL or other memcg */
3664
break;
3665
} while (1);
3666
}
3667
__mem_cgroup_remove_exceeded(mz->mem, mz, mctz);
3668
excess = res_counter_soft_limit_excess(&mz->mem->res);
3669
/*
3670
* One school of thought says that we should not add
3671
* back the node to the tree if reclaim returns 0.
3672
* But our reclaim could return 0, simply because due
3673
* to priority we are exposing a smaller subset of
3674
* memory to reclaim from. Consider this as a longer
3675
* term TODO.
3676
*/
3677
/* If excess == 0, no tree ops */
3678
__mem_cgroup_insert_exceeded(mz->mem, mz, mctz, excess);
3679
spin_unlock(&mctz->lock);
3680
css_put(&mz->mem->css);
3681
loop++;
3682
/*
3683
* Could not reclaim anything and there are no more
3684
* mem cgroups to try or we seem to be looping without
3685
* reclaiming anything.
3686
*/
3687
if (!nr_reclaimed &&
3688
(next_mz == NULL ||
3689
loop > MEM_CGROUP_MAX_SOFT_LIMIT_RECLAIM_LOOPS))
3690
break;
3691
} while (!nr_reclaimed);
3692
if (next_mz)
3693
css_put(&next_mz->mem->css);
3694
return nr_reclaimed;
3695
}
3696
3697
/*
3698
* This routine traverse page_cgroup in given list and drop them all.
3699
* *And* this routine doesn't reclaim page itself, just removes page_cgroup.
3700
*/
3701
static int mem_cgroup_force_empty_list(struct mem_cgroup *mem,
3702
int node, int zid, enum lru_list lru)
3703
{
3704
struct zone *zone;
3705
struct mem_cgroup_per_zone *mz;
3706
struct page_cgroup *pc, *busy;
3707
unsigned long flags, loop;
3708
struct list_head *list;
3709
int ret = 0;
3710
3711
zone = &NODE_DATA(node)->node_zones[zid];
3712
mz = mem_cgroup_zoneinfo(mem, node, zid);
3713
list = &mz->lists[lru];
3714
3715
loop = MEM_CGROUP_ZSTAT(mz, lru);
3716
/* give some margin against EBUSY etc...*/
3717
loop += 256;
3718
busy = NULL;
3719
while (loop--) {
3720
struct page *page;
3721
3722
ret = 0;
3723
spin_lock_irqsave(&zone->lru_lock, flags);
3724
if (list_empty(list)) {
3725
spin_unlock_irqrestore(&zone->lru_lock, flags);
3726
break;
3727
}
3728
pc = list_entry(list->prev, struct page_cgroup, lru);
3729
if (busy == pc) {
3730
list_move(&pc->lru, list);
3731
busy = NULL;
3732
spin_unlock_irqrestore(&zone->lru_lock, flags);
3733
continue;
3734
}
3735
spin_unlock_irqrestore(&zone->lru_lock, flags);
3736
3737
page = lookup_cgroup_page(pc);
3738
3739
ret = mem_cgroup_move_parent(page, pc, mem, GFP_KERNEL);
3740
if (ret == -ENOMEM)
3741
break;
3742
3743
if (ret == -EBUSY || ret == -EINVAL) {
3744
/* found lock contention or "pc" is obsolete. */
3745
busy = pc;
3746
cond_resched();
3747
} else
3748
busy = NULL;
3749
}
3750
3751
if (!ret && !list_empty(list))
3752
return -EBUSY;
3753
return ret;
3754
}
3755
3756
/*
3757
* make mem_cgroup's charge to be 0 if there is no task.
3758
* This enables deleting this mem_cgroup.
3759
*/
3760
static int mem_cgroup_force_empty(struct mem_cgroup *mem, bool free_all)
3761
{
3762
int ret;
3763
int node, zid, shrink;
3764
int nr_retries = MEM_CGROUP_RECLAIM_RETRIES;
3765
struct cgroup *cgrp = mem->css.cgroup;
3766
3767
css_get(&mem->css);
3768
3769
shrink = 0;
3770
/* should free all ? */
3771
if (free_all)
3772
goto try_to_free;
3773
move_account:
3774
do {
3775
ret = -EBUSY;
3776
if (cgroup_task_count(cgrp) || !list_empty(&cgrp->children))
3777
goto out;
3778
ret = -EINTR;
3779
if (signal_pending(current))
3780
goto out;
3781
/* This is for making all *used* pages to be on LRU. */
3782
lru_add_drain_all();
3783
drain_all_stock_sync();
3784
ret = 0;
3785
mem_cgroup_start_move(mem);
3786
for_each_node_state(node, N_HIGH_MEMORY) {
3787
for (zid = 0; !ret && zid < MAX_NR_ZONES; zid++) {
3788
enum lru_list l;
3789
for_each_lru(l) {
3790
ret = mem_cgroup_force_empty_list(mem,
3791
node, zid, l);
3792
if (ret)
3793
break;
3794
}
3795
}
3796
if (ret)
3797
break;
3798
}
3799
mem_cgroup_end_move(mem);
3800
memcg_oom_recover(mem);
3801
/* it seems parent cgroup doesn't have enough mem */
3802
if (ret == -ENOMEM)
3803
goto try_to_free;
3804
cond_resched();
3805
/* "ret" should also be checked to ensure all lists are empty. */
3806
} while (mem->res.usage > 0 || ret);
3807
out:
3808
css_put(&mem->css);
3809
return ret;
3810
3811
try_to_free:
3812
/* returns EBUSY if there is a task or if we come here twice. */
3813
if (cgroup_task_count(cgrp) || !list_empty(&cgrp->children) || shrink) {
3814
ret = -EBUSY;
3815
goto out;
3816
}
3817
/* we call try-to-free pages for make this cgroup empty */
3818
lru_add_drain_all();
3819
/* try to free all pages in this cgroup */
3820
shrink = 1;
3821
while (nr_retries && mem->res.usage > 0) {
3822
int progress;
3823
3824
if (signal_pending(current)) {
3825
ret = -EINTR;
3826
goto out;
3827
}
3828
progress = try_to_free_mem_cgroup_pages(mem, GFP_KERNEL,
3829
false, get_swappiness(mem));
3830
if (!progress) {
3831
nr_retries--;
3832
/* maybe some writeback is necessary */
3833
congestion_wait(BLK_RW_ASYNC, HZ/10);
3834
}
3835
3836
}
3837
lru_add_drain();
3838
/* try move_account...there may be some *locked* pages. */
3839
goto move_account;
3840
}
3841
3842
int mem_cgroup_force_empty_write(struct cgroup *cont, unsigned int event)
3843
{
3844
return mem_cgroup_force_empty(mem_cgroup_from_cont(cont), true);
3845
}
3846
3847
3848
static u64 mem_cgroup_hierarchy_read(struct cgroup *cont, struct cftype *cft)
3849
{
3850
return mem_cgroup_from_cont(cont)->use_hierarchy;
3851
}
3852
3853
static int mem_cgroup_hierarchy_write(struct cgroup *cont, struct cftype *cft,
3854
u64 val)
3855
{
3856
int retval = 0;
3857
struct mem_cgroup *mem = mem_cgroup_from_cont(cont);
3858
struct cgroup *parent = cont->parent;
3859
struct mem_cgroup *parent_mem = NULL;
3860
3861
if (parent)
3862
parent_mem = mem_cgroup_from_cont(parent);
3863
3864
cgroup_lock();
3865
/*
3866
* If parent's use_hierarchy is set, we can't make any modifications
3867
* in the child subtrees. If it is unset, then the change can
3868
* occur, provided the current cgroup has no children.
3869
*
3870
* For the root cgroup, parent_mem is NULL, we allow value to be
3871
* set if there are no children.
3872
*/
3873
if ((!parent_mem || !parent_mem->use_hierarchy) &&
3874
(val == 1 || val == 0)) {
3875
if (list_empty(&cont->children))
3876
mem->use_hierarchy = val;
3877
else
3878
retval = -EBUSY;
3879
} else
3880
retval = -EINVAL;
3881
cgroup_unlock();
3882
3883
return retval;
3884
}
3885
3886
3887
static unsigned long mem_cgroup_recursive_stat(struct mem_cgroup *mem,
3888
enum mem_cgroup_stat_index idx)
3889
{
3890
struct mem_cgroup *iter;
3891
long val = 0;
3892
3893
/* Per-cpu values can be negative, use a signed accumulator */
3894
for_each_mem_cgroup_tree(iter, mem)
3895
val += mem_cgroup_read_stat(iter, idx);
3896
3897
if (val < 0) /* race ? */
3898
val = 0;
3899
return val;
3900
}
3901
3902
static inline u64 mem_cgroup_usage(struct mem_cgroup *mem, bool swap)
3903
{
3904
u64 val;
3905
3906
if (!mem_cgroup_is_root(mem)) {
3907
if (!swap)
3908
return res_counter_read_u64(&mem->res, RES_USAGE);
3909
else
3910
return res_counter_read_u64(&mem->memsw, RES_USAGE);
3911
}
3912
3913
val = mem_cgroup_recursive_stat(mem, MEM_CGROUP_STAT_CACHE);
3914
val += mem_cgroup_recursive_stat(mem, MEM_CGROUP_STAT_RSS);
3915
3916
if (swap)
3917
val += mem_cgroup_recursive_stat(mem, MEM_CGROUP_STAT_SWAPOUT);
3918
3919
return val << PAGE_SHIFT;
3920
}
3921
3922
static u64 mem_cgroup_read(struct cgroup *cont, struct cftype *cft)
3923
{
3924
struct mem_cgroup *mem = mem_cgroup_from_cont(cont);
3925
u64 val;
3926
int type, name;
3927
3928
type = MEMFILE_TYPE(cft->private);
3929
name = MEMFILE_ATTR(cft->private);
3930
switch (type) {
3931
case _MEM:
3932
if (name == RES_USAGE)
3933
val = mem_cgroup_usage(mem, false);
3934
else
3935
val = res_counter_read_u64(&mem->res, name);
3936
break;
3937
case _MEMSWAP:
3938
if (name == RES_USAGE)
3939
val = mem_cgroup_usage(mem, true);
3940
else
3941
val = res_counter_read_u64(&mem->memsw, name);
3942
break;
3943
default:
3944
BUG();
3945
break;
3946
}
3947
return val;
3948
}
3949
/*
3950
* The user of this function is...
3951
* RES_LIMIT.
3952
*/
3953
static int mem_cgroup_write(struct cgroup *cont, struct cftype *cft,
3954
const char *buffer)
3955
{
3956
struct mem_cgroup *memcg = mem_cgroup_from_cont(cont);
3957
int type, name;
3958
unsigned long long val;
3959
int ret;
3960
3961
type = MEMFILE_TYPE(cft->private);
3962
name = MEMFILE_ATTR(cft->private);
3963
switch (name) {
3964
case RES_LIMIT:
3965
if (mem_cgroup_is_root(memcg)) { /* Can't set limit on root */
3966
ret = -EINVAL;
3967
break;
3968
}
3969
/* This function does all necessary parse...reuse it */
3970
ret = res_counter_memparse_write_strategy(buffer, &val);
3971
if (ret)
3972
break;
3973
if (type == _MEM)
3974
ret = mem_cgroup_resize_limit(memcg, val);
3975
else
3976
ret = mem_cgroup_resize_memsw_limit(memcg, val);
3977
break;
3978
case RES_SOFT_LIMIT:
3979
ret = res_counter_memparse_write_strategy(buffer, &val);
3980
if (ret)
3981
break;
3982
/*
3983
* For memsw, soft limits are hard to implement in terms
3984
* of semantics, for now, we support soft limits for
3985
* control without swap
3986
*/
3987
if (type == _MEM)
3988
ret = res_counter_set_soft_limit(&memcg->res, val);
3989
else
3990
ret = -EINVAL;
3991
break;
3992
default:
3993
ret = -EINVAL; /* should be BUG() ? */
3994
break;
3995
}
3996
return ret;
3997
}
3998
3999
static void memcg_get_hierarchical_limit(struct mem_cgroup *memcg,
4000
unsigned long long *mem_limit, unsigned long long *memsw_limit)
4001
{
4002
struct cgroup *cgroup;
4003
unsigned long long min_limit, min_memsw_limit, tmp;
4004
4005
min_limit = res_counter_read_u64(&memcg->res, RES_LIMIT);
4006
min_memsw_limit = res_counter_read_u64(&memcg->memsw, RES_LIMIT);
4007
cgroup = memcg->css.cgroup;
4008
if (!memcg->use_hierarchy)
4009
goto out;
4010
4011
while (cgroup->parent) {
4012
cgroup = cgroup->parent;
4013
memcg = mem_cgroup_from_cont(cgroup);
4014
if (!memcg->use_hierarchy)
4015
break;
4016
tmp = res_counter_read_u64(&memcg->res, RES_LIMIT);
4017
min_limit = min(min_limit, tmp);
4018
tmp = res_counter_read_u64(&memcg->memsw, RES_LIMIT);
4019
min_memsw_limit = min(min_memsw_limit, tmp);
4020
}
4021
out:
4022
*mem_limit = min_limit;
4023
*memsw_limit = min_memsw_limit;
4024
return;
4025
}
4026
4027
static int mem_cgroup_reset(struct cgroup *cont, unsigned int event)
4028
{
4029
struct mem_cgroup *mem;
4030
int type, name;
4031
4032
mem = mem_cgroup_from_cont(cont);
4033
type = MEMFILE_TYPE(event);
4034
name = MEMFILE_ATTR(event);
4035
switch (name) {
4036
case RES_MAX_USAGE:
4037
if (type == _MEM)
4038
res_counter_reset_max(&mem->res);
4039
else
4040
res_counter_reset_max(&mem->memsw);
4041
break;
4042
case RES_FAILCNT:
4043
if (type == _MEM)
4044
res_counter_reset_failcnt(&mem->res);
4045
else
4046
res_counter_reset_failcnt(&mem->memsw);
4047
break;
4048
}
4049
4050
return 0;
4051
}
4052
4053
static u64 mem_cgroup_move_charge_read(struct cgroup *cgrp,
4054
struct cftype *cft)
4055
{
4056
return mem_cgroup_from_cont(cgrp)->move_charge_at_immigrate;
4057
}
4058
4059
#ifdef CONFIG_MMU
4060
static int mem_cgroup_move_charge_write(struct cgroup *cgrp,
4061
struct cftype *cft, u64 val)
4062
{
4063
struct mem_cgroup *mem = mem_cgroup_from_cont(cgrp);
4064
4065
if (val >= (1 << NR_MOVE_TYPE))
4066
return -EINVAL;
4067
/*
4068
* We check this value several times in both in can_attach() and
4069
* attach(), so we need cgroup lock to prevent this value from being
4070
* inconsistent.
4071
*/
4072
cgroup_lock();
4073
mem->move_charge_at_immigrate = val;
4074
cgroup_unlock();
4075
4076
return 0;
4077
}
4078
#else
4079
static int mem_cgroup_move_charge_write(struct cgroup *cgrp,
4080
struct cftype *cft, u64 val)
4081
{
4082
return -ENOSYS;
4083
}
4084
#endif
4085
4086
4087
/* For read statistics */
4088
enum {
4089
MCS_CACHE,
4090
MCS_RSS,
4091
MCS_FILE_MAPPED,
4092
MCS_PGPGIN,
4093
MCS_PGPGOUT,
4094
MCS_SWAP,
4095
MCS_PGFAULT,
4096
MCS_PGMAJFAULT,
4097
MCS_INACTIVE_ANON,
4098
MCS_ACTIVE_ANON,
4099
MCS_INACTIVE_FILE,
4100
MCS_ACTIVE_FILE,
4101
MCS_UNEVICTABLE,
4102
NR_MCS_STAT,
4103
};
4104
4105
struct mcs_total_stat {
4106
s64 stat[NR_MCS_STAT];
4107
};
4108
4109
struct {
4110
char *local_name;
4111
char *total_name;
4112
} memcg_stat_strings[NR_MCS_STAT] = {
4113
{"cache", "total_cache"},
4114
{"rss", "total_rss"},
4115
{"mapped_file", "total_mapped_file"},
4116
{"pgpgin", "total_pgpgin"},
4117
{"pgpgout", "total_pgpgout"},
4118
{"swap", "total_swap"},
4119
{"pgfault", "total_pgfault"},
4120
{"pgmajfault", "total_pgmajfault"},
4121
{"inactive_anon", "total_inactive_anon"},
4122
{"active_anon", "total_active_anon"},
4123
{"inactive_file", "total_inactive_file"},
4124
{"active_file", "total_active_file"},
4125
{"unevictable", "total_unevictable"}
4126
};
4127
4128
4129
static void
4130
mem_cgroup_get_local_stat(struct mem_cgroup *mem, struct mcs_total_stat *s)
4131
{
4132
s64 val;
4133
4134
/* per cpu stat */
4135
val = mem_cgroup_read_stat(mem, MEM_CGROUP_STAT_CACHE);
4136
s->stat[MCS_CACHE] += val * PAGE_SIZE;
4137
val = mem_cgroup_read_stat(mem, MEM_CGROUP_STAT_RSS);
4138
s->stat[MCS_RSS] += val * PAGE_SIZE;
4139
val = mem_cgroup_read_stat(mem, MEM_CGROUP_STAT_FILE_MAPPED);
4140
s->stat[MCS_FILE_MAPPED] += val * PAGE_SIZE;
4141
val = mem_cgroup_read_events(mem, MEM_CGROUP_EVENTS_PGPGIN);
4142
s->stat[MCS_PGPGIN] += val;
4143
val = mem_cgroup_read_events(mem, MEM_CGROUP_EVENTS_PGPGOUT);
4144
s->stat[MCS_PGPGOUT] += val;
4145
if (do_swap_account) {
4146
val = mem_cgroup_read_stat(mem, MEM_CGROUP_STAT_SWAPOUT);
4147
s->stat[MCS_SWAP] += val * PAGE_SIZE;
4148
}
4149
val = mem_cgroup_read_events(mem, MEM_CGROUP_EVENTS_PGFAULT);
4150
s->stat[MCS_PGFAULT] += val;
4151
val = mem_cgroup_read_events(mem, MEM_CGROUP_EVENTS_PGMAJFAULT);
4152
s->stat[MCS_PGMAJFAULT] += val;
4153
4154
/* per zone stat */
4155
val = mem_cgroup_get_local_zonestat(mem, LRU_INACTIVE_ANON);
4156
s->stat[MCS_INACTIVE_ANON] += val * PAGE_SIZE;
4157
val = mem_cgroup_get_local_zonestat(mem, LRU_ACTIVE_ANON);
4158
s->stat[MCS_ACTIVE_ANON] += val * PAGE_SIZE;
4159
val = mem_cgroup_get_local_zonestat(mem, LRU_INACTIVE_FILE);
4160
s->stat[MCS_INACTIVE_FILE] += val * PAGE_SIZE;
4161
val = mem_cgroup_get_local_zonestat(mem, LRU_ACTIVE_FILE);
4162
s->stat[MCS_ACTIVE_FILE] += val * PAGE_SIZE;
4163
val = mem_cgroup_get_local_zonestat(mem, LRU_UNEVICTABLE);
4164
s->stat[MCS_UNEVICTABLE] += val * PAGE_SIZE;
4165
}
4166
4167
static void
4168
mem_cgroup_get_total_stat(struct mem_cgroup *mem, struct mcs_total_stat *s)
4169
{
4170
struct mem_cgroup *iter;
4171
4172
for_each_mem_cgroup_tree(iter, mem)
4173
mem_cgroup_get_local_stat(iter, s);
4174
}
4175
4176
#ifdef CONFIG_NUMA
4177
static int mem_control_numa_stat_show(struct seq_file *m, void *arg)
4178
{
4179
int nid;
4180
unsigned long total_nr, file_nr, anon_nr, unevictable_nr;
4181
unsigned long node_nr;
4182
struct cgroup *cont = m->private;
4183
struct mem_cgroup *mem_cont = mem_cgroup_from_cont(cont);
4184
4185
total_nr = mem_cgroup_nr_lru_pages(mem_cont);
4186
seq_printf(m, "total=%lu", total_nr);
4187
for_each_node_state(nid, N_HIGH_MEMORY) {
4188
node_nr = mem_cgroup_node_nr_lru_pages(mem_cont, nid);
4189
seq_printf(m, " N%d=%lu", nid, node_nr);
4190
}
4191
seq_putc(m, '\n');
4192
4193
file_nr = mem_cgroup_nr_file_lru_pages(mem_cont);
4194
seq_printf(m, "file=%lu", file_nr);
4195
for_each_node_state(nid, N_HIGH_MEMORY) {
4196
node_nr = mem_cgroup_node_nr_file_lru_pages(mem_cont, nid);
4197
seq_printf(m, " N%d=%lu", nid, node_nr);
4198
}
4199
seq_putc(m, '\n');
4200
4201
anon_nr = mem_cgroup_nr_anon_lru_pages(mem_cont);
4202
seq_printf(m, "anon=%lu", anon_nr);
4203
for_each_node_state(nid, N_HIGH_MEMORY) {
4204
node_nr = mem_cgroup_node_nr_anon_lru_pages(mem_cont, nid);
4205
seq_printf(m, " N%d=%lu", nid, node_nr);
4206
}
4207
seq_putc(m, '\n');
4208
4209
unevictable_nr = mem_cgroup_nr_unevictable_lru_pages(mem_cont);
4210
seq_printf(m, "unevictable=%lu", unevictable_nr);
4211
for_each_node_state(nid, N_HIGH_MEMORY) {
4212
node_nr = mem_cgroup_node_nr_unevictable_lru_pages(mem_cont,
4213
nid);
4214
seq_printf(m, " N%d=%lu", nid, node_nr);
4215
}
4216
seq_putc(m, '\n');
4217
return 0;
4218
}
4219
#endif /* CONFIG_NUMA */
4220
4221
static int mem_control_stat_show(struct cgroup *cont, struct cftype *cft,
4222
struct cgroup_map_cb *cb)
4223
{
4224
struct mem_cgroup *mem_cont = mem_cgroup_from_cont(cont);
4225
struct mcs_total_stat mystat;
4226
int i;
4227
4228
memset(&mystat, 0, sizeof(mystat));
4229
mem_cgroup_get_local_stat(mem_cont, &mystat);
4230
4231
4232
for (i = 0; i < NR_MCS_STAT; i++) {
4233
if (i == MCS_SWAP && !do_swap_account)
4234
continue;
4235
cb->fill(cb, memcg_stat_strings[i].local_name, mystat.stat[i]);
4236
}
4237
4238
/* Hierarchical information */
4239
{
4240
unsigned long long limit, memsw_limit;
4241
memcg_get_hierarchical_limit(mem_cont, &limit, &memsw_limit);
4242
cb->fill(cb, "hierarchical_memory_limit", limit);
4243
if (do_swap_account)
4244
cb->fill(cb, "hierarchical_memsw_limit", memsw_limit);
4245
}
4246
4247
memset(&mystat, 0, sizeof(mystat));
4248
mem_cgroup_get_total_stat(mem_cont, &mystat);
4249
for (i = 0; i < NR_MCS_STAT; i++) {
4250
if (i == MCS_SWAP && !do_swap_account)
4251
continue;
4252
cb->fill(cb, memcg_stat_strings[i].total_name, mystat.stat[i]);
4253
}
4254
4255
#ifdef CONFIG_DEBUG_VM
4256
cb->fill(cb, "inactive_ratio", calc_inactive_ratio(mem_cont, NULL));
4257
4258
{
4259
int nid, zid;
4260
struct mem_cgroup_per_zone *mz;
4261
unsigned long recent_rotated[2] = {0, 0};
4262
unsigned long recent_scanned[2] = {0, 0};
4263
4264
for_each_online_node(nid)
4265
for (zid = 0; zid < MAX_NR_ZONES; zid++) {
4266
mz = mem_cgroup_zoneinfo(mem_cont, nid, zid);
4267
4268
recent_rotated[0] +=
4269
mz->reclaim_stat.recent_rotated[0];
4270
recent_rotated[1] +=
4271
mz->reclaim_stat.recent_rotated[1];
4272
recent_scanned[0] +=
4273
mz->reclaim_stat.recent_scanned[0];
4274
recent_scanned[1] +=
4275
mz->reclaim_stat.recent_scanned[1];
4276
}
4277
cb->fill(cb, "recent_rotated_anon", recent_rotated[0]);
4278
cb->fill(cb, "recent_rotated_file", recent_rotated[1]);
4279
cb->fill(cb, "recent_scanned_anon", recent_scanned[0]);
4280
cb->fill(cb, "recent_scanned_file", recent_scanned[1]);
4281
}
4282
#endif
4283
4284
return 0;
4285
}
4286
4287
static u64 mem_cgroup_swappiness_read(struct cgroup *cgrp, struct cftype *cft)
4288
{
4289
struct mem_cgroup *memcg = mem_cgroup_from_cont(cgrp);
4290
4291
return get_swappiness(memcg);
4292
}
4293
4294
static int mem_cgroup_swappiness_write(struct cgroup *cgrp, struct cftype *cft,
4295
u64 val)
4296
{
4297
struct mem_cgroup *memcg = mem_cgroup_from_cont(cgrp);
4298
struct mem_cgroup *parent;
4299
4300
if (val > 100)
4301
return -EINVAL;
4302
4303
if (cgrp->parent == NULL)
4304
return -EINVAL;
4305
4306
parent = mem_cgroup_from_cont(cgrp->parent);
4307
4308
cgroup_lock();
4309
4310
/* If under hierarchy, only empty-root can set this value */
4311
if ((parent->use_hierarchy) ||
4312
(memcg->use_hierarchy && !list_empty(&cgrp->children))) {
4313
cgroup_unlock();
4314
return -EINVAL;
4315
}
4316
4317
memcg->swappiness = val;
4318
4319
cgroup_unlock();
4320
4321
return 0;
4322
}
4323
4324
static void __mem_cgroup_threshold(struct mem_cgroup *memcg, bool swap)
4325
{
4326
struct mem_cgroup_threshold_ary *t;
4327
u64 usage;
4328
int i;
4329
4330
rcu_read_lock();
4331
if (!swap)
4332
t = rcu_dereference(memcg->thresholds.primary);
4333
else
4334
t = rcu_dereference(memcg->memsw_thresholds.primary);
4335
4336
if (!t)
4337
goto unlock;
4338
4339
usage = mem_cgroup_usage(memcg, swap);
4340
4341
/*
4342
* current_threshold points to threshold just below usage.
4343
* If it's not true, a threshold was crossed after last
4344
* call of __mem_cgroup_threshold().
4345
*/
4346
i = t->current_threshold;
4347
4348
/*
4349
* Iterate backward over array of thresholds starting from
4350
* current_threshold and check if a threshold is crossed.
4351
* If none of thresholds below usage is crossed, we read
4352
* only one element of the array here.
4353
*/
4354
for (; i >= 0 && unlikely(t->entries[i].threshold > usage); i--)
4355
eventfd_signal(t->entries[i].eventfd, 1);
4356
4357
/* i = current_threshold + 1 */
4358
i++;
4359
4360
/*
4361
* Iterate forward over array of thresholds starting from
4362
* current_threshold+1 and check if a threshold is crossed.
4363
* If none of thresholds above usage is crossed, we read
4364
* only one element of the array here.
4365
*/
4366
for (; i < t->size && unlikely(t->entries[i].threshold <= usage); i++)
4367
eventfd_signal(t->entries[i].eventfd, 1);
4368
4369
/* Update current_threshold */
4370
t->current_threshold = i - 1;
4371
unlock:
4372
rcu_read_unlock();
4373
}
4374
4375
static void mem_cgroup_threshold(struct mem_cgroup *memcg)
4376
{
4377
while (memcg) {
4378
__mem_cgroup_threshold(memcg, false);
4379
if (do_swap_account)
4380
__mem_cgroup_threshold(memcg, true);
4381
4382
memcg = parent_mem_cgroup(memcg);
4383
}
4384
}
4385
4386
static int compare_thresholds(const void *a, const void *b)
4387
{
4388
const struct mem_cgroup_threshold *_a = a;
4389
const struct mem_cgroup_threshold *_b = b;
4390
4391
return _a->threshold - _b->threshold;
4392
}
4393
4394
static int mem_cgroup_oom_notify_cb(struct mem_cgroup *mem)
4395
{
4396
struct mem_cgroup_eventfd_list *ev;
4397
4398
list_for_each_entry(ev, &mem->oom_notify, list)
4399
eventfd_signal(ev->eventfd, 1);
4400
return 0;
4401
}
4402
4403
static void mem_cgroup_oom_notify(struct mem_cgroup *mem)
4404
{
4405
struct mem_cgroup *iter;
4406
4407
for_each_mem_cgroup_tree(iter, mem)
4408
mem_cgroup_oom_notify_cb(iter);
4409
}
4410
4411
static int mem_cgroup_usage_register_event(struct cgroup *cgrp,
4412
struct cftype *cft, struct eventfd_ctx *eventfd, const char *args)
4413
{
4414
struct mem_cgroup *memcg = mem_cgroup_from_cont(cgrp);
4415
struct mem_cgroup_thresholds *thresholds;
4416
struct mem_cgroup_threshold_ary *new;
4417
int type = MEMFILE_TYPE(cft->private);
4418
u64 threshold, usage;
4419
int i, size, ret;
4420
4421
ret = res_counter_memparse_write_strategy(args, &threshold);
4422
if (ret)
4423
return ret;
4424
4425
mutex_lock(&memcg->thresholds_lock);
4426
4427
if (type == _MEM)
4428
thresholds = &memcg->thresholds;
4429
else if (type == _MEMSWAP)
4430
thresholds = &memcg->memsw_thresholds;
4431
else
4432
BUG();
4433
4434
usage = mem_cgroup_usage(memcg, type == _MEMSWAP);
4435
4436
/* Check if a threshold crossed before adding a new one */
4437
if (thresholds->primary)
4438
__mem_cgroup_threshold(memcg, type == _MEMSWAP);
4439
4440
size = thresholds->primary ? thresholds->primary->size + 1 : 1;
4441
4442
/* Allocate memory for new array of thresholds */
4443
new = kmalloc(sizeof(*new) + size * sizeof(struct mem_cgroup_threshold),
4444
GFP_KERNEL);
4445
if (!new) {
4446
ret = -ENOMEM;
4447
goto unlock;
4448
}
4449
new->size = size;
4450
4451
/* Copy thresholds (if any) to new array */
4452
if (thresholds->primary) {
4453
memcpy(new->entries, thresholds->primary->entries, (size - 1) *
4454
sizeof(struct mem_cgroup_threshold));
4455
}
4456
4457
/* Add new threshold */
4458
new->entries[size - 1].eventfd = eventfd;
4459
new->entries[size - 1].threshold = threshold;
4460
4461
/* Sort thresholds. Registering of new threshold isn't time-critical */
4462
sort(new->entries, size, sizeof(struct mem_cgroup_threshold),
4463
compare_thresholds, NULL);
4464
4465
/* Find current threshold */
4466
new->current_threshold = -1;
4467
for (i = 0; i < size; i++) {
4468
if (new->entries[i].threshold < usage) {
4469
/*
4470
* new->current_threshold will not be used until
4471
* rcu_assign_pointer(), so it's safe to increment
4472
* it here.
4473
*/
4474
++new->current_threshold;
4475
}
4476
}
4477
4478
/* Free old spare buffer and save old primary buffer as spare */
4479
kfree(thresholds->spare);
4480
thresholds->spare = thresholds->primary;
4481
4482
rcu_assign_pointer(thresholds->primary, new);
4483
4484
/* To be sure that nobody uses thresholds */
4485
synchronize_rcu();
4486
4487
unlock:
4488
mutex_unlock(&memcg->thresholds_lock);
4489
4490
return ret;
4491
}
4492
4493
static void mem_cgroup_usage_unregister_event(struct cgroup *cgrp,
4494
struct cftype *cft, struct eventfd_ctx *eventfd)
4495
{
4496
struct mem_cgroup *memcg = mem_cgroup_from_cont(cgrp);
4497
struct mem_cgroup_thresholds *thresholds;
4498
struct mem_cgroup_threshold_ary *new;
4499
int type = MEMFILE_TYPE(cft->private);
4500
u64 usage;
4501
int i, j, size;
4502
4503
mutex_lock(&memcg->thresholds_lock);
4504
if (type == _MEM)
4505
thresholds = &memcg->thresholds;
4506
else if (type == _MEMSWAP)
4507
thresholds = &memcg->memsw_thresholds;
4508
else
4509
BUG();
4510
4511
/*
4512
* Something went wrong if we trying to unregister a threshold
4513
* if we don't have thresholds
4514
*/
4515
BUG_ON(!thresholds);
4516
4517
usage = mem_cgroup_usage(memcg, type == _MEMSWAP);
4518
4519
/* Check if a threshold crossed before removing */
4520
__mem_cgroup_threshold(memcg, type == _MEMSWAP);
4521
4522
/* Calculate new number of threshold */
4523
size = 0;
4524
for (i = 0; i < thresholds->primary->size; i++) {
4525
if (thresholds->primary->entries[i].eventfd != eventfd)
4526
size++;
4527
}
4528
4529
new = thresholds->spare;
4530
4531
/* Set thresholds array to NULL if we don't have thresholds */
4532
if (!size) {
4533
kfree(new);
4534
new = NULL;
4535
goto swap_buffers;
4536
}
4537
4538
new->size = size;
4539
4540
/* Copy thresholds and find current threshold */
4541
new->current_threshold = -1;
4542
for (i = 0, j = 0; i < thresholds->primary->size; i++) {
4543
if (thresholds->primary->entries[i].eventfd == eventfd)
4544
continue;
4545
4546
new->entries[j] = thresholds->primary->entries[i];
4547
if (new->entries[j].threshold < usage) {
4548
/*
4549
* new->current_threshold will not be used
4550
* until rcu_assign_pointer(), so it's safe to increment
4551
* it here.
4552
*/
4553
++new->current_threshold;
4554
}
4555
j++;
4556
}
4557
4558
swap_buffers:
4559
/* Swap primary and spare array */
4560
thresholds->spare = thresholds->primary;
4561
rcu_assign_pointer(thresholds->primary, new);
4562
4563
/* To be sure that nobody uses thresholds */
4564
synchronize_rcu();
4565
4566
mutex_unlock(&memcg->thresholds_lock);
4567
}
4568
4569
static int mem_cgroup_oom_register_event(struct cgroup *cgrp,
4570
struct cftype *cft, struct eventfd_ctx *eventfd, const char *args)
4571
{
4572
struct mem_cgroup *memcg = mem_cgroup_from_cont(cgrp);
4573
struct mem_cgroup_eventfd_list *event;
4574
int type = MEMFILE_TYPE(cft->private);
4575
4576
BUG_ON(type != _OOM_TYPE);
4577
event = kmalloc(sizeof(*event), GFP_KERNEL);
4578
if (!event)
4579
return -ENOMEM;
4580
4581
mutex_lock(&memcg_oom_mutex);
4582
4583
event->eventfd = eventfd;
4584
list_add(&event->list, &memcg->oom_notify);
4585
4586
/* already in OOM ? */
4587
if (atomic_read(&memcg->oom_lock))
4588
eventfd_signal(eventfd, 1);
4589
mutex_unlock(&memcg_oom_mutex);
4590
4591
return 0;
4592
}
4593
4594
static void mem_cgroup_oom_unregister_event(struct cgroup *cgrp,
4595
struct cftype *cft, struct eventfd_ctx *eventfd)
4596
{
4597
struct mem_cgroup *mem = mem_cgroup_from_cont(cgrp);
4598
struct mem_cgroup_eventfd_list *ev, *tmp;
4599
int type = MEMFILE_TYPE(cft->private);
4600
4601
BUG_ON(type != _OOM_TYPE);
4602
4603
mutex_lock(&memcg_oom_mutex);
4604
4605
list_for_each_entry_safe(ev, tmp, &mem->oom_notify, list) {
4606
if (ev->eventfd == eventfd) {
4607
list_del(&ev->list);
4608
kfree(ev);
4609
}
4610
}
4611
4612
mutex_unlock(&memcg_oom_mutex);
4613
}
4614
4615
static int mem_cgroup_oom_control_read(struct cgroup *cgrp,
4616
struct cftype *cft, struct cgroup_map_cb *cb)
4617
{
4618
struct mem_cgroup *mem = mem_cgroup_from_cont(cgrp);
4619
4620
cb->fill(cb, "oom_kill_disable", mem->oom_kill_disable);
4621
4622
if (atomic_read(&mem->oom_lock))
4623
cb->fill(cb, "under_oom", 1);
4624
else
4625
cb->fill(cb, "under_oom", 0);
4626
return 0;
4627
}
4628
4629
static int mem_cgroup_oom_control_write(struct cgroup *cgrp,
4630
struct cftype *cft, u64 val)
4631
{
4632
struct mem_cgroup *mem = mem_cgroup_from_cont(cgrp);
4633
struct mem_cgroup *parent;
4634
4635
/* cannot set to root cgroup and only 0 and 1 are allowed */
4636
if (!cgrp->parent || !((val == 0) || (val == 1)))
4637
return -EINVAL;
4638
4639
parent = mem_cgroup_from_cont(cgrp->parent);
4640
4641
cgroup_lock();
4642
/* oom-kill-disable is a flag for subhierarchy. */
4643
if ((parent->use_hierarchy) ||
4644
(mem->use_hierarchy && !list_empty(&cgrp->children))) {
4645
cgroup_unlock();
4646
return -EINVAL;
4647
}
4648
mem->oom_kill_disable = val;
4649
if (!val)
4650
memcg_oom_recover(mem);
4651
cgroup_unlock();
4652
return 0;
4653
}
4654
4655
#ifdef CONFIG_NUMA
4656
static const struct file_operations mem_control_numa_stat_file_operations = {
4657
.read = seq_read,
4658
.llseek = seq_lseek,
4659
.release = single_release,
4660
};
4661
4662
static int mem_control_numa_stat_open(struct inode *unused, struct file *file)
4663
{
4664
struct cgroup *cont = file->f_dentry->d_parent->d_fsdata;
4665
4666
file->f_op = &mem_control_numa_stat_file_operations;
4667
return single_open(file, mem_control_numa_stat_show, cont);
4668
}
4669
#endif /* CONFIG_NUMA */
4670
4671
static struct cftype mem_cgroup_files[] = {
4672
{
4673
.name = "usage_in_bytes",
4674
.private = MEMFILE_PRIVATE(_MEM, RES_USAGE),
4675
.read_u64 = mem_cgroup_read,
4676
.register_event = mem_cgroup_usage_register_event,
4677
.unregister_event = mem_cgroup_usage_unregister_event,
4678
},
4679
{
4680
.name = "max_usage_in_bytes",
4681
.private = MEMFILE_PRIVATE(_MEM, RES_MAX_USAGE),
4682
.trigger = mem_cgroup_reset,
4683
.read_u64 = mem_cgroup_read,
4684
},
4685
{
4686
.name = "limit_in_bytes",
4687
.private = MEMFILE_PRIVATE(_MEM, RES_LIMIT),
4688
.write_string = mem_cgroup_write,
4689
.read_u64 = mem_cgroup_read,
4690
},
4691
{
4692
.name = "soft_limit_in_bytes",
4693
.private = MEMFILE_PRIVATE(_MEM, RES_SOFT_LIMIT),
4694
.write_string = mem_cgroup_write,
4695
.read_u64 = mem_cgroup_read,
4696
},
4697
{
4698
.name = "failcnt",
4699
.private = MEMFILE_PRIVATE(_MEM, RES_FAILCNT),
4700
.trigger = mem_cgroup_reset,
4701
.read_u64 = mem_cgroup_read,
4702
},
4703
{
4704
.name = "stat",
4705
.read_map = mem_control_stat_show,
4706
},
4707
{
4708
.name = "force_empty",
4709
.trigger = mem_cgroup_force_empty_write,
4710
},
4711
{
4712
.name = "use_hierarchy",
4713
.write_u64 = mem_cgroup_hierarchy_write,
4714
.read_u64 = mem_cgroup_hierarchy_read,
4715
},
4716
{
4717
.name = "swappiness",
4718
.read_u64 = mem_cgroup_swappiness_read,
4719
.write_u64 = mem_cgroup_swappiness_write,
4720
},
4721
{
4722
.name = "move_charge_at_immigrate",
4723
.read_u64 = mem_cgroup_move_charge_read,
4724
.write_u64 = mem_cgroup_move_charge_write,
4725
},
4726
{
4727
.name = "oom_control",
4728
.read_map = mem_cgroup_oom_control_read,
4729
.write_u64 = mem_cgroup_oom_control_write,
4730
.register_event = mem_cgroup_oom_register_event,
4731
.unregister_event = mem_cgroup_oom_unregister_event,
4732
.private = MEMFILE_PRIVATE(_OOM_TYPE, OOM_CONTROL),
4733
},
4734
#ifdef CONFIG_NUMA
4735
{
4736
.name = "numa_stat",
4737
.open = mem_control_numa_stat_open,
4738
.mode = S_IRUGO,
4739
},
4740
#endif
4741
};
4742
4743
#ifdef CONFIG_CGROUP_MEM_RES_CTLR_SWAP
4744
static struct cftype memsw_cgroup_files[] = {
4745
{
4746
.name = "memsw.usage_in_bytes",
4747
.private = MEMFILE_PRIVATE(_MEMSWAP, RES_USAGE),
4748
.read_u64 = mem_cgroup_read,
4749
.register_event = mem_cgroup_usage_register_event,
4750
.unregister_event = mem_cgroup_usage_unregister_event,
4751
},
4752
{
4753
.name = "memsw.max_usage_in_bytes",
4754
.private = MEMFILE_PRIVATE(_MEMSWAP, RES_MAX_USAGE),
4755
.trigger = mem_cgroup_reset,
4756
.read_u64 = mem_cgroup_read,
4757
},
4758
{
4759
.name = "memsw.limit_in_bytes",
4760
.private = MEMFILE_PRIVATE(_MEMSWAP, RES_LIMIT),
4761
.write_string = mem_cgroup_write,
4762
.read_u64 = mem_cgroup_read,
4763
},
4764
{
4765
.name = "memsw.failcnt",
4766
.private = MEMFILE_PRIVATE(_MEMSWAP, RES_FAILCNT),
4767
.trigger = mem_cgroup_reset,
4768
.read_u64 = mem_cgroup_read,
4769
},
4770
};
4771
4772
static int register_memsw_files(struct cgroup *cont, struct cgroup_subsys *ss)
4773
{
4774
if (!do_swap_account)
4775
return 0;
4776
return cgroup_add_files(cont, ss, memsw_cgroup_files,
4777
ARRAY_SIZE(memsw_cgroup_files));
4778
};
4779
#else
4780
static int register_memsw_files(struct cgroup *cont, struct cgroup_subsys *ss)
4781
{
4782
return 0;
4783
}
4784
#endif
4785
4786
static int alloc_mem_cgroup_per_zone_info(struct mem_cgroup *mem, int node)
4787
{
4788
struct mem_cgroup_per_node *pn;
4789
struct mem_cgroup_per_zone *mz;
4790
enum lru_list l;
4791
int zone, tmp = node;
4792
/*
4793
* This routine is called against possible nodes.
4794
* But it's BUG to call kmalloc() against offline node.
4795
*
4796
* TODO: this routine can waste much memory for nodes which will
4797
* never be onlined. It's better to use memory hotplug callback
4798
* function.
4799
*/
4800
if (!node_state(node, N_NORMAL_MEMORY))
4801
tmp = -1;
4802
pn = kzalloc_node(sizeof(*pn), GFP_KERNEL, tmp);
4803
if (!pn)
4804
return 1;
4805
4806
mem->info.nodeinfo[node] = pn;
4807
for (zone = 0; zone < MAX_NR_ZONES; zone++) {
4808
mz = &pn->zoneinfo[zone];
4809
for_each_lru(l)
4810
INIT_LIST_HEAD(&mz->lists[l]);
4811
mz->usage_in_excess = 0;
4812
mz->on_tree = false;
4813
mz->mem = mem;
4814
}
4815
return 0;
4816
}
4817
4818
static void free_mem_cgroup_per_zone_info(struct mem_cgroup *mem, int node)
4819
{
4820
kfree(mem->info.nodeinfo[node]);
4821
}
4822
4823
static struct mem_cgroup *mem_cgroup_alloc(void)
4824
{
4825
struct mem_cgroup *mem;
4826
int size = sizeof(struct mem_cgroup);
4827
4828
/* Can be very big if MAX_NUMNODES is very big */
4829
if (size < PAGE_SIZE)
4830
mem = kzalloc(size, GFP_KERNEL);
4831
else
4832
mem = vzalloc(size);
4833
4834
if (!mem)
4835
return NULL;
4836
4837
mem->stat = alloc_percpu(struct mem_cgroup_stat_cpu);
4838
if (!mem->stat)
4839
goto out_free;
4840
spin_lock_init(&mem->pcp_counter_lock);
4841
return mem;
4842
4843
out_free:
4844
if (size < PAGE_SIZE)
4845
kfree(mem);
4846
else
4847
vfree(mem);
4848
return NULL;
4849
}
4850
4851
/*
4852
* At destroying mem_cgroup, references from swap_cgroup can remain.
4853
* (scanning all at force_empty is too costly...)
4854
*
4855
* Instead of clearing all references at force_empty, we remember
4856
* the number of reference from swap_cgroup and free mem_cgroup when
4857
* it goes down to 0.
4858
*
4859
* Removal of cgroup itself succeeds regardless of refs from swap.
4860
*/
4861
4862
static void __mem_cgroup_free(struct mem_cgroup *mem)
4863
{
4864
int node;
4865
4866
mem_cgroup_remove_from_trees(mem);
4867
free_css_id(&mem_cgroup_subsys, &mem->css);
4868
4869
for_each_node_state(node, N_POSSIBLE)
4870
free_mem_cgroup_per_zone_info(mem, node);
4871
4872
free_percpu(mem->stat);
4873
if (sizeof(struct mem_cgroup) < PAGE_SIZE)
4874
kfree(mem);
4875
else
4876
vfree(mem);
4877
}
4878
4879
static void mem_cgroup_get(struct mem_cgroup *mem)
4880
{
4881
atomic_inc(&mem->refcnt);
4882
}
4883
4884
static void __mem_cgroup_put(struct mem_cgroup *mem, int count)
4885
{
4886
if (atomic_sub_and_test(count, &mem->refcnt)) {
4887
struct mem_cgroup *parent = parent_mem_cgroup(mem);
4888
__mem_cgroup_free(mem);
4889
if (parent)
4890
mem_cgroup_put(parent);
4891
}
4892
}
4893
4894
static void mem_cgroup_put(struct mem_cgroup *mem)
4895
{
4896
__mem_cgroup_put(mem, 1);
4897
}
4898
4899
/*
4900
* Returns the parent mem_cgroup in memcgroup hierarchy with hierarchy enabled.
4901
*/
4902
static struct mem_cgroup *parent_mem_cgroup(struct mem_cgroup *mem)
4903
{
4904
if (!mem->res.parent)
4905
return NULL;
4906
return mem_cgroup_from_res_counter(mem->res.parent, res);
4907
}
4908
4909
#ifdef CONFIG_CGROUP_MEM_RES_CTLR_SWAP
4910
static void __init enable_swap_cgroup(void)
4911
{
4912
if (!mem_cgroup_disabled() && really_do_swap_account)
4913
do_swap_account = 1;
4914
}
4915
#else
4916
static void __init enable_swap_cgroup(void)
4917
{
4918
}
4919
#endif
4920
4921
static int mem_cgroup_soft_limit_tree_init(void)
4922
{
4923
struct mem_cgroup_tree_per_node *rtpn;
4924
struct mem_cgroup_tree_per_zone *rtpz;
4925
int tmp, node, zone;
4926
4927
for_each_node_state(node, N_POSSIBLE) {
4928
tmp = node;
4929
if (!node_state(node, N_NORMAL_MEMORY))
4930
tmp = -1;
4931
rtpn = kzalloc_node(sizeof(*rtpn), GFP_KERNEL, tmp);
4932
if (!rtpn)
4933
return 1;
4934
4935
soft_limit_tree.rb_tree_per_node[node] = rtpn;
4936
4937
for (zone = 0; zone < MAX_NR_ZONES; zone++) {
4938
rtpz = &rtpn->rb_tree_per_zone[zone];
4939
rtpz->rb_root = RB_ROOT;
4940
spin_lock_init(&rtpz->lock);
4941
}
4942
}
4943
return 0;
4944
}
4945
4946
static struct cgroup_subsys_state * __ref
4947
mem_cgroup_create(struct cgroup_subsys *ss, struct cgroup *cont)
4948
{
4949
struct mem_cgroup *mem, *parent;
4950
long error = -ENOMEM;
4951
int node;
4952
4953
mem = mem_cgroup_alloc();
4954
if (!mem)
4955
return ERR_PTR(error);
4956
4957
for_each_node_state(node, N_POSSIBLE)
4958
if (alloc_mem_cgroup_per_zone_info(mem, node))
4959
goto free_out;
4960
4961
/* root ? */
4962
if (cont->parent == NULL) {
4963
int cpu;
4964
enable_swap_cgroup();
4965
parent = NULL;
4966
root_mem_cgroup = mem;
4967
if (mem_cgroup_soft_limit_tree_init())
4968
goto free_out;
4969
for_each_possible_cpu(cpu) {
4970
struct memcg_stock_pcp *stock =
4971
&per_cpu(memcg_stock, cpu);
4972
INIT_WORK(&stock->work, drain_local_stock);
4973
}
4974
hotcpu_notifier(memcg_cpu_hotplug_callback, 0);
4975
} else {
4976
parent = mem_cgroup_from_cont(cont->parent);
4977
mem->use_hierarchy = parent->use_hierarchy;
4978
mem->oom_kill_disable = parent->oom_kill_disable;
4979
}
4980
4981
if (parent && parent->use_hierarchy) {
4982
res_counter_init(&mem->res, &parent->res);
4983
res_counter_init(&mem->memsw, &parent->memsw);
4984
/*
4985
* We increment refcnt of the parent to ensure that we can
4986
* safely access it on res_counter_charge/uncharge.
4987
* This refcnt will be decremented when freeing this
4988
* mem_cgroup(see mem_cgroup_put).
4989
*/
4990
mem_cgroup_get(parent);
4991
} else {
4992
res_counter_init(&mem->res, NULL);
4993
res_counter_init(&mem->memsw, NULL);
4994
}
4995
mem->last_scanned_child = 0;
4996
mem->last_scanned_node = MAX_NUMNODES;
4997
INIT_LIST_HEAD(&mem->oom_notify);
4998
4999
if (parent)
5000
mem->swappiness = get_swappiness(parent);
5001
atomic_set(&mem->refcnt, 1);
5002
mem->move_charge_at_immigrate = 0;
5003
mutex_init(&mem->thresholds_lock);
5004
return &mem->css;
5005
free_out:
5006
__mem_cgroup_free(mem);
5007
root_mem_cgroup = NULL;
5008
return ERR_PTR(error);
5009
}
5010
5011
static int mem_cgroup_pre_destroy(struct cgroup_subsys *ss,
5012
struct cgroup *cont)
5013
{
5014
struct mem_cgroup *mem = mem_cgroup_from_cont(cont);
5015
5016
return mem_cgroup_force_empty(mem, false);
5017
}
5018
5019
static void mem_cgroup_destroy(struct cgroup_subsys *ss,
5020
struct cgroup *cont)
5021
{
5022
struct mem_cgroup *mem = mem_cgroup_from_cont(cont);
5023
5024
mem_cgroup_put(mem);
5025
}
5026
5027
static int mem_cgroup_populate(struct cgroup_subsys *ss,
5028
struct cgroup *cont)
5029
{
5030
int ret;
5031
5032
ret = cgroup_add_files(cont, ss, mem_cgroup_files,
5033
ARRAY_SIZE(mem_cgroup_files));
5034
5035
if (!ret)
5036
ret = register_memsw_files(cont, ss);
5037
return ret;
5038
}
5039
5040
#ifdef CONFIG_MMU
5041
/* Handlers for move charge at task migration. */
5042
#define PRECHARGE_COUNT_AT_ONCE 256
5043
static int mem_cgroup_do_precharge(unsigned long count)
5044
{
5045
int ret = 0;
5046
int batch_count = PRECHARGE_COUNT_AT_ONCE;
5047
struct mem_cgroup *mem = mc.to;
5048
5049
if (mem_cgroup_is_root(mem)) {
5050
mc.precharge += count;
5051
/* we don't need css_get for root */
5052
return ret;
5053
}
5054
/* try to charge at once */
5055
if (count > 1) {
5056
struct res_counter *dummy;
5057
/*
5058
* "mem" cannot be under rmdir() because we've already checked
5059
* by cgroup_lock_live_cgroup() that it is not removed and we
5060
* are still under the same cgroup_mutex. So we can postpone
5061
* css_get().
5062
*/
5063
if (res_counter_charge(&mem->res, PAGE_SIZE * count, &dummy))
5064
goto one_by_one;
5065
if (do_swap_account && res_counter_charge(&mem->memsw,
5066
PAGE_SIZE * count, &dummy)) {
5067
res_counter_uncharge(&mem->res, PAGE_SIZE * count);
5068
goto one_by_one;
5069
}
5070
mc.precharge += count;
5071
return ret;
5072
}
5073
one_by_one:
5074
/* fall back to one by one charge */
5075
while (count--) {
5076
if (signal_pending(current)) {
5077
ret = -EINTR;
5078
break;
5079
}
5080
if (!batch_count--) {
5081
batch_count = PRECHARGE_COUNT_AT_ONCE;
5082
cond_resched();
5083
}
5084
ret = __mem_cgroup_try_charge(NULL, GFP_KERNEL, 1, &mem, false);
5085
if (ret || !mem)
5086
/* mem_cgroup_clear_mc() will do uncharge later */
5087
return -ENOMEM;
5088
mc.precharge++;
5089
}
5090
return ret;
5091
}
5092
5093
/**
5094
* is_target_pte_for_mc - check a pte whether it is valid for move charge
5095
* @vma: the vma the pte to be checked belongs
5096
* @addr: the address corresponding to the pte to be checked
5097
* @ptent: the pte to be checked
5098
* @target: the pointer the target page or swap ent will be stored(can be NULL)
5099
*
5100
* Returns
5101
* 0(MC_TARGET_NONE): if the pte is not a target for move charge.
5102
* 1(MC_TARGET_PAGE): if the page corresponding to this pte is a target for
5103
* move charge. if @target is not NULL, the page is stored in target->page
5104
* with extra refcnt got(Callers should handle it).
5105
* 2(MC_TARGET_SWAP): if the swap entry corresponding to this pte is a
5106
* target for charge migration. if @target is not NULL, the entry is stored
5107
* in target->ent.
5108
*
5109
* Called with pte lock held.
5110
*/
5111
union mc_target {
5112
struct page *page;
5113
swp_entry_t ent;
5114
};
5115
5116
enum mc_target_type {
5117
MC_TARGET_NONE, /* not used */
5118
MC_TARGET_PAGE,
5119
MC_TARGET_SWAP,
5120
};
5121
5122
static struct page *mc_handle_present_pte(struct vm_area_struct *vma,
5123
unsigned long addr, pte_t ptent)
5124
{
5125
struct page *page = vm_normal_page(vma, addr, ptent);
5126
5127
if (!page || !page_mapped(page))
5128
return NULL;
5129
if (PageAnon(page)) {
5130
/* we don't move shared anon */
5131
if (!move_anon() || page_mapcount(page) > 2)
5132
return NULL;
5133
} else if (!move_file())
5134
/* we ignore mapcount for file pages */
5135
return NULL;
5136
if (!get_page_unless_zero(page))
5137
return NULL;
5138
5139
return page;
5140
}
5141
5142
static struct page *mc_handle_swap_pte(struct vm_area_struct *vma,
5143
unsigned long addr, pte_t ptent, swp_entry_t *entry)
5144
{
5145
int usage_count;
5146
struct page *page = NULL;
5147
swp_entry_t ent = pte_to_swp_entry(ptent);
5148
5149
if (!move_anon() || non_swap_entry(ent))
5150
return NULL;
5151
usage_count = mem_cgroup_count_swap_user(ent, &page);
5152
if (usage_count > 1) { /* we don't move shared anon */
5153
if (page)
5154
put_page(page);
5155
return NULL;
5156
}
5157
if (do_swap_account)
5158
entry->val = ent.val;
5159
5160
return page;
5161
}
5162
5163
static struct page *mc_handle_file_pte(struct vm_area_struct *vma,
5164
unsigned long addr, pte_t ptent, swp_entry_t *entry)
5165
{
5166
struct page *page = NULL;
5167
struct inode *inode;
5168
struct address_space *mapping;
5169
pgoff_t pgoff;
5170
5171
if (!vma->vm_file) /* anonymous vma */
5172
return NULL;
5173
if (!move_file())
5174
return NULL;
5175
5176
inode = vma->vm_file->f_path.dentry->d_inode;
5177
mapping = vma->vm_file->f_mapping;
5178
if (pte_none(ptent))
5179
pgoff = linear_page_index(vma, addr);
5180
else /* pte_file(ptent) is true */
5181
pgoff = pte_to_pgoff(ptent);
5182
5183
/* page is moved even if it's not RSS of this task(page-faulted). */
5184
if (!mapping_cap_swap_backed(mapping)) { /* normal file */
5185
page = find_get_page(mapping, pgoff);
5186
} else { /* shmem/tmpfs file. we should take account of swap too. */
5187
swp_entry_t ent;
5188
mem_cgroup_get_shmem_target(inode, pgoff, &page, &ent);
5189
if (do_swap_account)
5190
entry->val = ent.val;
5191
}
5192
5193
return page;
5194
}
5195
5196
static int is_target_pte_for_mc(struct vm_area_struct *vma,
5197
unsigned long addr, pte_t ptent, union mc_target *target)
5198
{
5199
struct page *page = NULL;
5200
struct page_cgroup *pc;
5201
int ret = 0;
5202
swp_entry_t ent = { .val = 0 };
5203
5204
if (pte_present(ptent))
5205
page = mc_handle_present_pte(vma, addr, ptent);
5206
else if (is_swap_pte(ptent))
5207
page = mc_handle_swap_pte(vma, addr, ptent, &ent);
5208
else if (pte_none(ptent) || pte_file(ptent))
5209
page = mc_handle_file_pte(vma, addr, ptent, &ent);
5210
5211
if (!page && !ent.val)
5212
return 0;
5213
if (page) {
5214
pc = lookup_page_cgroup(page);
5215
/*
5216
* Do only loose check w/o page_cgroup lock.
5217
* mem_cgroup_move_account() checks the pc is valid or not under
5218
* the lock.
5219
*/
5220
if (PageCgroupUsed(pc) && pc->mem_cgroup == mc.from) {
5221
ret = MC_TARGET_PAGE;
5222
if (target)
5223
target->page = page;
5224
}
5225
if (!ret || !target)
5226
put_page(page);
5227
}
5228
/* There is a swap entry and a page doesn't exist or isn't charged */
5229
if (ent.val && !ret &&
5230
css_id(&mc.from->css) == lookup_swap_cgroup(ent)) {
5231
ret = MC_TARGET_SWAP;
5232
if (target)
5233
target->ent = ent;
5234
}
5235
return ret;
5236
}
5237
5238
static int mem_cgroup_count_precharge_pte_range(pmd_t *pmd,
5239
unsigned long addr, unsigned long end,
5240
struct mm_walk *walk)
5241
{
5242
struct vm_area_struct *vma = walk->private;
5243
pte_t *pte;
5244
spinlock_t *ptl;
5245
5246
split_huge_page_pmd(walk->mm, pmd);
5247
5248
pte = pte_offset_map_lock(vma->vm_mm, pmd, addr, &ptl);
5249
for (; addr != end; pte++, addr += PAGE_SIZE)
5250
if (is_target_pte_for_mc(vma, addr, *pte, NULL))
5251
mc.precharge++; /* increment precharge temporarily */
5252
pte_unmap_unlock(pte - 1, ptl);
5253
cond_resched();
5254
5255
return 0;
5256
}
5257
5258
static unsigned long mem_cgroup_count_precharge(struct mm_struct *mm)
5259
{
5260
unsigned long precharge;
5261
struct vm_area_struct *vma;
5262
5263
down_read(&mm->mmap_sem);
5264
for (vma = mm->mmap; vma; vma = vma->vm_next) {
5265
struct mm_walk mem_cgroup_count_precharge_walk = {
5266
.pmd_entry = mem_cgroup_count_precharge_pte_range,
5267
.mm = mm,
5268
.private = vma,
5269
};
5270
if (is_vm_hugetlb_page(vma))
5271
continue;
5272
walk_page_range(vma->vm_start, vma->vm_end,
5273
&mem_cgroup_count_precharge_walk);
5274
}
5275
up_read(&mm->mmap_sem);
5276
5277
precharge = mc.precharge;
5278
mc.precharge = 0;
5279
5280
return precharge;
5281
}
5282
5283
static int mem_cgroup_precharge_mc(struct mm_struct *mm)
5284
{
5285
unsigned long precharge = mem_cgroup_count_precharge(mm);
5286
5287
VM_BUG_ON(mc.moving_task);
5288
mc.moving_task = current;
5289
return mem_cgroup_do_precharge(precharge);
5290
}
5291
5292
/* cancels all extra charges on mc.from and mc.to, and wakes up all waiters. */
5293
static void __mem_cgroup_clear_mc(void)
5294
{
5295
struct mem_cgroup *from = mc.from;
5296
struct mem_cgroup *to = mc.to;
5297
5298
/* we must uncharge all the leftover precharges from mc.to */
5299
if (mc.precharge) {
5300
__mem_cgroup_cancel_charge(mc.to, mc.precharge);
5301
mc.precharge = 0;
5302
}
5303
/*
5304
* we didn't uncharge from mc.from at mem_cgroup_move_account(), so
5305
* we must uncharge here.
5306
*/
5307
if (mc.moved_charge) {
5308
__mem_cgroup_cancel_charge(mc.from, mc.moved_charge);
5309
mc.moved_charge = 0;
5310
}
5311
/* we must fixup refcnts and charges */
5312
if (mc.moved_swap) {
5313
/* uncharge swap account from the old cgroup */
5314
if (!mem_cgroup_is_root(mc.from))
5315
res_counter_uncharge(&mc.from->memsw,
5316
PAGE_SIZE * mc.moved_swap);
5317
__mem_cgroup_put(mc.from, mc.moved_swap);
5318
5319
if (!mem_cgroup_is_root(mc.to)) {
5320
/*
5321
* we charged both to->res and to->memsw, so we should
5322
* uncharge to->res.
5323
*/
5324
res_counter_uncharge(&mc.to->res,
5325
PAGE_SIZE * mc.moved_swap);
5326
}
5327
/* we've already done mem_cgroup_get(mc.to) */
5328
mc.moved_swap = 0;
5329
}
5330
memcg_oom_recover(from);
5331
memcg_oom_recover(to);
5332
wake_up_all(&mc.waitq);
5333
}
5334
5335
static void mem_cgroup_clear_mc(void)
5336
{
5337
struct mem_cgroup *from = mc.from;
5338
5339
/*
5340
* we must clear moving_task before waking up waiters at the end of
5341
* task migration.
5342
*/
5343
mc.moving_task = NULL;
5344
__mem_cgroup_clear_mc();
5345
spin_lock(&mc.lock);
5346
mc.from = NULL;
5347
mc.to = NULL;
5348
spin_unlock(&mc.lock);
5349
mem_cgroup_end_move(from);
5350
}
5351
5352
static int mem_cgroup_can_attach(struct cgroup_subsys *ss,
5353
struct cgroup *cgroup,
5354
struct task_struct *p)
5355
{
5356
int ret = 0;
5357
struct mem_cgroup *mem = mem_cgroup_from_cont(cgroup);
5358
5359
if (mem->move_charge_at_immigrate) {
5360
struct mm_struct *mm;
5361
struct mem_cgroup *from = mem_cgroup_from_task(p);
5362
5363
VM_BUG_ON(from == mem);
5364
5365
mm = get_task_mm(p);
5366
if (!mm)
5367
return 0;
5368
/* We move charges only when we move a owner of the mm */
5369
if (mm->owner == p) {
5370
VM_BUG_ON(mc.from);
5371
VM_BUG_ON(mc.to);
5372
VM_BUG_ON(mc.precharge);
5373
VM_BUG_ON(mc.moved_charge);
5374
VM_BUG_ON(mc.moved_swap);
5375
mem_cgroup_start_move(from);
5376
spin_lock(&mc.lock);
5377
mc.from = from;
5378
mc.to = mem;
5379
spin_unlock(&mc.lock);
5380
/* We set mc.moving_task later */
5381
5382
ret = mem_cgroup_precharge_mc(mm);
5383
if (ret)
5384
mem_cgroup_clear_mc();
5385
}
5386
mmput(mm);
5387
}
5388
return ret;
5389
}
5390
5391
static void mem_cgroup_cancel_attach(struct cgroup_subsys *ss,
5392
struct cgroup *cgroup,
5393
struct task_struct *p)
5394
{
5395
mem_cgroup_clear_mc();
5396
}
5397
5398
static int mem_cgroup_move_charge_pte_range(pmd_t *pmd,
5399
unsigned long addr, unsigned long end,
5400
struct mm_walk *walk)
5401
{
5402
int ret = 0;
5403
struct vm_area_struct *vma = walk->private;
5404
pte_t *pte;
5405
spinlock_t *ptl;
5406
5407
split_huge_page_pmd(walk->mm, pmd);
5408
retry:
5409
pte = pte_offset_map_lock(vma->vm_mm, pmd, addr, &ptl);
5410
for (; addr != end; addr += PAGE_SIZE) {
5411
pte_t ptent = *(pte++);
5412
union mc_target target;
5413
int type;
5414
struct page *page;
5415
struct page_cgroup *pc;
5416
swp_entry_t ent;
5417
5418
if (!mc.precharge)
5419
break;
5420
5421
type = is_target_pte_for_mc(vma, addr, ptent, &target);
5422
switch (type) {
5423
case MC_TARGET_PAGE:
5424
page = target.page;
5425
if (isolate_lru_page(page))
5426
goto put;
5427
pc = lookup_page_cgroup(page);
5428
if (!mem_cgroup_move_account(page, 1, pc,
5429
mc.from, mc.to, false)) {
5430
mc.precharge--;
5431
/* we uncharge from mc.from later. */
5432
mc.moved_charge++;
5433
}
5434
putback_lru_page(page);
5435
put: /* is_target_pte_for_mc() gets the page */
5436
put_page(page);
5437
break;
5438
case MC_TARGET_SWAP:
5439
ent = target.ent;
5440
if (!mem_cgroup_move_swap_account(ent,
5441
mc.from, mc.to, false)) {
5442
mc.precharge--;
5443
/* we fixup refcnts and charges later. */
5444
mc.moved_swap++;
5445
}
5446
break;
5447
default:
5448
break;
5449
}
5450
}
5451
pte_unmap_unlock(pte - 1, ptl);
5452
cond_resched();
5453
5454
if (addr != end) {
5455
/*
5456
* We have consumed all precharges we got in can_attach().
5457
* We try charge one by one, but don't do any additional
5458
* charges to mc.to if we have failed in charge once in attach()
5459
* phase.
5460
*/
5461
ret = mem_cgroup_do_precharge(1);
5462
if (!ret)
5463
goto retry;
5464
}
5465
5466
return ret;
5467
}
5468
5469
static void mem_cgroup_move_charge(struct mm_struct *mm)
5470
{
5471
struct vm_area_struct *vma;
5472
5473
lru_add_drain_all();
5474
retry:
5475
if (unlikely(!down_read_trylock(&mm->mmap_sem))) {
5476
/*
5477
* Someone who are holding the mmap_sem might be waiting in
5478
* waitq. So we cancel all extra charges, wake up all waiters,
5479
* and retry. Because we cancel precharges, we might not be able
5480
* to move enough charges, but moving charge is a best-effort
5481
* feature anyway, so it wouldn't be a big problem.
5482
*/
5483
__mem_cgroup_clear_mc();
5484
cond_resched();
5485
goto retry;
5486
}
5487
for (vma = mm->mmap; vma; vma = vma->vm_next) {
5488
int ret;
5489
struct mm_walk mem_cgroup_move_charge_walk = {
5490
.pmd_entry = mem_cgroup_move_charge_pte_range,
5491
.mm = mm,
5492
.private = vma,
5493
};
5494
if (is_vm_hugetlb_page(vma))
5495
continue;
5496
ret = walk_page_range(vma->vm_start, vma->vm_end,
5497
&mem_cgroup_move_charge_walk);
5498
if (ret)
5499
/*
5500
* means we have consumed all precharges and failed in
5501
* doing additional charge. Just abandon here.
5502
*/
5503
break;
5504
}
5505
up_read(&mm->mmap_sem);
5506
}
5507
5508
static void mem_cgroup_move_task(struct cgroup_subsys *ss,
5509
struct cgroup *cont,
5510
struct cgroup *old_cont,
5511
struct task_struct *p)
5512
{
5513
struct mm_struct *mm = get_task_mm(p);
5514
5515
if (mm) {
5516
if (mc.to)
5517
mem_cgroup_move_charge(mm);
5518
put_swap_token(mm);
5519
mmput(mm);
5520
}
5521
if (mc.to)
5522
mem_cgroup_clear_mc();
5523
}
5524
#else /* !CONFIG_MMU */
5525
static int mem_cgroup_can_attach(struct cgroup_subsys *ss,
5526
struct cgroup *cgroup,
5527
struct task_struct *p)
5528
{
5529
return 0;
5530
}
5531
static void mem_cgroup_cancel_attach(struct cgroup_subsys *ss,
5532
struct cgroup *cgroup,
5533
struct task_struct *p)
5534
{
5535
}
5536
static void mem_cgroup_move_task(struct cgroup_subsys *ss,
5537
struct cgroup *cont,
5538
struct cgroup *old_cont,
5539
struct task_struct *p)
5540
{
5541
}
5542
#endif
5543
5544
struct cgroup_subsys mem_cgroup_subsys = {
5545
.name = "memory",
5546
.subsys_id = mem_cgroup_subsys_id,
5547
.create = mem_cgroup_create,
5548
.pre_destroy = mem_cgroup_pre_destroy,
5549
.destroy = mem_cgroup_destroy,
5550
.populate = mem_cgroup_populate,
5551
.can_attach = mem_cgroup_can_attach,
5552
.cancel_attach = mem_cgroup_cancel_attach,
5553
.attach = mem_cgroup_move_task,
5554
.early_init = 0,
5555
.use_id = 1,
5556
};
5557
5558
#ifdef CONFIG_CGROUP_MEM_RES_CTLR_SWAP
5559
static int __init enable_swap_account(char *s)
5560
{
5561
/* consider enabled if no parameter or 1 is given */
5562
if (!strcmp(s, "1"))
5563
really_do_swap_account = 1;
5564
else if (!strcmp(s, "0"))
5565
really_do_swap_account = 0;
5566
return 1;
5567
}
5568
__setup("swapaccount=", enable_swap_account);
5569
5570
#endif
5571
5572