From patchwork Sun Jan 20 03:30:17 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Xiongchun Duan X-Patchwork-Id: 10772279 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 437A713B5 for ; Sun, 20 Jan 2019 03:30:59 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 3126C2AFD0 for ; Sun, 20 Jan 2019 03:30:59 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 252842AFD2; Sun, 20 Jan 2019 03:30:59 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE autolearn=ham version=3.3.1 Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id EE5E62AFD0 for ; Sun, 20 Jan 2019 03:30:57 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id C24258E0004; Sat, 19 Jan 2019 22:30:56 -0500 (EST) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id B84C78E0002; Sat, 19 Jan 2019 22:30:56 -0500 (EST) X-Original-To: int-list-linux-mm@kvack.org X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 9DA7D8E0004; Sat, 19 Jan 2019 22:30:56 -0500 (EST) X-Original-To: linux-mm@kvack.org X-Delivered-To: linux-mm@kvack.org Received: from mail-pl1-f197.google.com (mail-pl1-f197.google.com [209.85.214.197]) by kanga.kvack.org (Postfix) with ESMTP id 576348E0002 for ; Sat, 19 Jan 2019 22:30:56 -0500 (EST) Received: by mail-pl1-f197.google.com with SMTP id g12so10597718pll.22 for ; Sat, 19 Jan 2019 19:30:56 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:dkim-signature:from:to:cc:subject:date :message-id:in-reply-to:references; bh=q/TuW3S5ToUtCEC5UfsMrJz5V8v0OvKIFNCtqwQnvrM=; b=KX5PxQlBrgeSWyUhMMtihiq/GGZDkfIH0+WQsB/+Rrz+CXPKOPFbcIrf4eWwqTu9p0 FG7iPmIHQv8sv1L2+ORZeozNDt72nDgQ8swzZwKZ6f3SaoDhEbh/c3S3VPRaBWuZZYFy LgwmUgabianXcSBhVy0mj4xnl5VHpx29EIJU69aumlxSIEJ9AT8ru/GGh+QvAmM/Qqma w7AFvUY20r/eae3iwL031y92TRR0Qh/uyE4jR5b8VZoMQHk0gIE+EfBqgQ4nwr/Kwr3H rkyUzRwep2gSliU1aRRedFhwEM7JcA4ha/vbvwHqvSrffWoDAEjGaepIb/b2Tw2Esks2 xVKg== X-Gm-Message-State: AJcUukeE292Eeg87pMuHO1RuITwiRhY2lPr3ek0dJ5iiF4EKqxEYTDHi xAnnItJn0/g3NP16swlKNopQwO+Y+YkbjSCz0M3AXS2jSV0DNFe1w5pqyNk0/1LTtAHIWyh8i7K D1VsvjJaze39IreuIs77FH5xvELoZS0iLB/I4YrwMagqSaOVxUCOsz+0+fsCJ4jSY5eW4Bmcach wSk8yOwZy2Qynoak+gxD+O7fyIXK5LzR7pnBIuoVOmjwbA5QWaQD9yczKgvwvI6PZuHeC2MWST0 +mn0moXIzRw6Lqzmv2kuCObbSk8FCwzkRFW2uMaPffjsCxHR1zEmtyW4ZOQzcbCgqtE1CshK9AS jslotOZUCI/2gH0tiUp2fqtXFZEErEraqAhTcSviUeA1wdVCtBFGHKTF4TFOj8jzgZlgII1kag0 B X-Received: by 2002:a63:2222:: with SMTP id i34mr21804834pgi.83.1547955055904; Sat, 19 Jan 2019 19:30:55 -0800 (PST) X-Received: by 2002:a63:2222:: with SMTP id i34mr21804781pgi.83.1547955054586; Sat, 19 Jan 2019 19:30:54 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1547955054; cv=none; d=google.com; s=arc-20160816; b=GOGUHFAX4P74SFqmVsvvWWgGEGovaqLXa2cyX5c17fmTw1j3TM0wyh6HNPq1JYazSs O9564y0IV2dWoiU+PlG6iGJiHbqsIu9MFtiqjsBFkDMvqZjq+WdwjsYpv4i2pzxx4II1 rE2DOcIICLkz12bx8vks+mDiEQ4GHx+ip6enYfkskG7JAFoBTSmnPshUCVTTXsac3axV CMD1ibTZEyyiX8CBot5iPus8EtwQADg1m26n5xtmapXP93nFnwmzxhOeUn1xI/jiRGlD 3FgzrYSccK+PlLrZjT43RJGUS8JP2f957oCYUjfthleuZ3GwWoSKqZ9X2RpW16RZpFln H3Hg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=q/TuW3S5ToUtCEC5UfsMrJz5V8v0OvKIFNCtqwQnvrM=; b=rEppCoTXdi3VRtRf8qX+pY2lEZbQLgDIMisp4wPR2EXKf8dBO+d5fiaf8+GEk/X+M9 LEVBQcrOKo7KyMQeE0lfW+aNTtBt3obf1dayaIIdF/EjbtHqqti0cPupm4Cc23HjKwRm FbThXO+N/8qVLnE4NpG+lg7IlroXV04Nv6SMv7Lj1MuK3OL26zcaWZPtNZ3qPjI3HwSh i+bPEOtEwxlnCZPw1im0DmqH1vMUkYHIyeNg4qOAoI2/p/fgZaYai3CgSlABaZggcxPF 5NsrRQN0Z6+c+siHKHuHUIE+i8XQeGMDXTzDj7ZayYMCmWoDjVhkUPjqmj3oRgFwL3Dj 959w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@bytedance-com.20150623.gappssmtp.com header.s=20150623 header.b=zNBZ0oKI; spf=pass (google.com: domain of duanxiongchun@bytedance.com designates 209.85.220.65 as permitted sender) smtp.mailfrom=duanxiongchun@bytedance.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=bytedance.com Received: from mail-sor-f65.google.com (mail-sor-f65.google.com. [209.85.220.65]) by mx.google.com with SMTPS id e39sor12518160plb.21.2019.01.19.19.30.54 for (Google Transport Security); Sat, 19 Jan 2019 19:30:54 -0800 (PST) Received-SPF: pass (google.com: domain of duanxiongchun@bytedance.com designates 209.85.220.65 as permitted sender) client-ip=209.85.220.65; Authentication-Results: mx.google.com; dkim=pass header.i=@bytedance-com.20150623.gappssmtp.com header.s=20150623 header.b=zNBZ0oKI; spf=pass (google.com: domain of duanxiongchun@bytedance.com designates 209.85.220.65 as permitted sender) smtp.mailfrom=duanxiongchun@bytedance.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=bytedance.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=q/TuW3S5ToUtCEC5UfsMrJz5V8v0OvKIFNCtqwQnvrM=; b=zNBZ0oKIfI2NXj+BDvx36Yy1iZo7cXSsOFmwEqGd54uBnaCCFXVcfmdl3i5H+ZbmIX qOSifn7p6uiWjnma5e+KCpuhRDuIEC46ZfhHb9t38KJRnYXXUb6QNOhTJdFYHfy8JRcT sFcSyGsIwS126AqhgkfHtVjzMwmipE8iZ6OiXr9tbVjxYZM1odZ6yyZ/Qb38AmjSjY1s O1YokGlJkhDcoUQ/hJ4y+WeF4bivkPvsSajkQq/ob3KrWck9OMo+4wyBhHOyXcYLSxT+ 40O6IHdhT5yEnVAqv68Km1B/I+I7TRycLVQkQT0A4ojQBjOa5N9/hU5E1YW8rszA03Qs Kf4A== X-Google-Smtp-Source: ALg8bN4LfPH3198qoDbOF4YkoHAmR4tjDbG51dAEvF8hC8gmQjmnABvCpApEn//NlgtOc63Zm4ez8w== X-Received: by 2002:a17:902:c5:: with SMTP id a63mr25294209pla.267.1547955054239; Sat, 19 Jan 2019 19:30:54 -0800 (PST) Received: from localhost.localdomain.localdomain ([61.120.150.71]) by smtp.gmail.com with ESMTPSA id s130sm16022421pgc.60.2019.01.19.19.30.50 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sat, 19 Jan 2019 19:30:53 -0800 (PST) From: Xiongchun Duan To: cgroups@vger.kernel.org, linux-mm@kvack.org Cc: shy828301@gmail.com, mhocko@kernel.org, tj@kernel.org, hannes@cmpxchg.org, zhangyongsu@bytedance.com, liuxiaozhou@bytedance.com, zhengfeiran@bytedance.com, wangdongdong.6@bytedance.com, Xiongchun Duan Subject: [PATCH 1/5] Memcgroup: force empty after memcgroup offline Date: Sat, 19 Jan 2019 22:30:17 -0500 Message-Id: <1547955021-11520-2-git-send-email-duanxiongchun@bytedance.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1547955021-11520-1-git-send-email-duanxiongchun@bytedance.com> References: <1547955021-11520-1-git-send-email-duanxiongchun@bytedance.com> X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: X-Virus-Scanned: ClamAV using ClamSMTP After memcgroup offline,if page still charge in memcgroup, this memcgroup will hold in memory.in some system which has many memory(such 256G) will hold more than 100000 offline memcgroup. this memory can't be free as soon as possible. Using workqueue and timer to repeatedly trigger offline memcgroup force empty memory will solve this problem. the reason why need repeatedly trigger is that force_empty fail to reclaim page when this page is locked. Signed-off-by: Xiongchun Duan --- Documentation/cgroup-v1/memory.txt | 7 +++++-- Documentation/sysctl/kernel.txt | 10 ++++++++++ include/linux/memcontrol.h | 6 ++++++ kernel/sysctl.c | 9 +++++++++ mm/memcontrol.c | 17 +++++++++++++++++ 5 files changed, 47 insertions(+), 2 deletions(-) diff --git a/Documentation/cgroup-v1/memory.txt b/Documentation/cgroup-v1/memory.txt index 3682e99..bdba86f 100644 --- a/Documentation/cgroup-v1/memory.txt +++ b/Documentation/cgroup-v1/memory.txt @@ -452,11 +452,14 @@ About use_hierarchy, see Section 6. 5.1 force_empty memory.force_empty interface is provided to make cgroup's memory usage empty. - When writing anything to this + When writing o or 1 or >18 to this # echo 0 > memory.force_empty - the cgroup will be reclaimed and as many pages reclaimed as possible. + the cgroup will be reclaimed and as many pages reclaimed as possible + synchronously. + writing 2 to 18 to this, the cgroup will delay the memory reclaim to css offline. + if memory reclaim fail one call, will delay to workqueue to recalaim as many as value. The typical use case for this interface is before calling rmdir(). Because rmdir() moves all pages to parent, some out-of-use page caches can be diff --git a/Documentation/sysctl/kernel.txt b/Documentation/sysctl/kernel.txt index c0527d8..fc0b9b1 100644 --- a/Documentation/sysctl/kernel.txt +++ b/Documentation/sysctl/kernel.txt @@ -99,6 +99,7 @@ show up in /proc/sys/kernel: - unknown_nmi_panic - watchdog - watchdog_thresh +- cgroup_default_retry - version ============================================================== @@ -1137,3 +1138,12 @@ The softlockup threshold is (2 * watchdog_thresh). Setting this tunable to zero will disable lockup detection altogether. ============================================================== + +cgroup_default_retry: + +This value can be used to control the default of memory cgroup reclaim +times . The default value is 0 . + +the max value is 16 the min value is 0. + +============================================================== diff --git a/include/linux/memcontrol.h b/include/linux/memcontrol.h index 83ae11c..d6fbb77 100644 --- a/include/linux/memcontrol.h +++ b/include/linux/memcontrol.h @@ -311,9 +311,15 @@ struct mem_cgroup { struct list_head event_list; spinlock_t event_list_lock; + int max_retry; + int current_retry; + struct mem_cgroup_per_node *nodeinfo[0]; /* WARNING: nodeinfo must be the last member here */ }; +extern int sysctl_cgroup_default_retry; +extern int sysctl_cgroup_default_retry_min; +extern int sysctl_cgroup_default_retry_max; /* * size of first charge trial. "32" comes from vmscan.c's magic value. diff --git a/kernel/sysctl.c b/kernel/sysctl.c index ba4d9e8..b6dbb10 100644 --- a/kernel/sysctl.c +++ b/kernel/sysctl.c @@ -1252,6 +1252,15 @@ static int sysrq_sysctl_handler(struct ctl_table *table, int write, .extra2 = &one, }, #endif + { + .procname = "cgroup_default_retry", + .data = &sysctl_cgroup_default_retry, + .maxlen = sizeof(unsigned int), + .mode = 0644, + .proc_handler = proc_dointvec_minmax, + .extra1 = &sysctl_cgroup_default_retry_min, + .extra2 = &sysctl_cgroup_default_retry_max, + }, { } }; diff --git a/mm/memcontrol.c b/mm/memcontrol.c index af7f18b..2b13c2b 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c @@ -77,6 +77,10 @@ struct cgroup_subsys memory_cgrp_subsys __read_mostly; EXPORT_SYMBOL(memory_cgrp_subsys); +int sysctl_cgroup_default_retry __read_mostly; +int sysctl_cgroup_default_retry_min; +int sysctl_cgroup_default_retry_max = 16; + struct mem_cgroup *root_mem_cgroup __read_mostly; #define MEM_CGROUP_RECLAIM_RETRIES 5 @@ -2911,10 +2915,21 @@ static ssize_t mem_cgroup_force_empty_write(struct kernfs_open_file *of, char *buf, size_t nbytes, loff_t off) { + unsigned long val; + ssize_t ret; struct mem_cgroup *memcg = mem_cgroup_from_css(of_css(of)); if (mem_cgroup_is_root(memcg)) return -EINVAL; + + buf = strstrip(buf); + ret = kstrtoul(buf, 10, &val); + if (ret < 0) + return ret; + if (val > 1 && val < 18) { + memcg->max_retry = val - 1; + return nbytes; + } return mem_cgroup_force_empty(memcg) ?: nbytes; } @@ -4521,6 +4536,8 @@ static struct mem_cgroup *mem_cgroup_alloc(void) if (cgroup_subsys_on_dfl(memory_cgrp_subsys) && !cgroup_memory_nosocket) static_branch_inc(&memcg_sockets_enabled_key); + memcg->max_retry = sysctl_cgroup_default_retry; + memcg->current_retry = 0; return &memcg->css; fail: From patchwork Sun Jan 20 03:30:18 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Xiongchun Duan X-Patchwork-Id: 10772281 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id D447E13BF for ; Sun, 20 Jan 2019 03:31:01 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id C185D2AFD0 for ; Sun, 20 Jan 2019 03:31:01 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id B578F2AFD2; Sun, 20 Jan 2019 03:31:01 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE autolearn=ham version=3.3.1 Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 449092AFD0 for ; Sun, 20 Jan 2019 03:31:01 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 399A18E0005; Sat, 19 Jan 2019 22:31:00 -0500 (EST) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id 2F9628E0002; Sat, 19 Jan 2019 22:31:00 -0500 (EST) X-Original-To: int-list-linux-mm@kvack.org X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 19C3A8E0005; Sat, 19 Jan 2019 22:31:00 -0500 (EST) X-Original-To: linux-mm@kvack.org X-Delivered-To: linux-mm@kvack.org Received: from mail-pg1-f200.google.com (mail-pg1-f200.google.com [209.85.215.200]) by kanga.kvack.org (Postfix) with ESMTP id CAE398E0002 for ; Sat, 19 Jan 2019 22:30:59 -0500 (EST) Received: by mail-pg1-f200.google.com with SMTP id o17so11613463pgi.14 for ; Sat, 19 Jan 2019 19:30:59 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:dkim-signature:from:to:cc:subject:date :message-id:in-reply-to:references; bh=qqi/uvN+XCi1ZkhWjHEWDHqcrb3xlLQtNtZA/U9u9d0=; b=TefRb+/q0TB8Y2Da0payqtiT3G2jf3X2WyHDxgFwD4ZziuiB+s74mb9OsELz7a1A/z WB+oXjSgiPWgBW/UHkZyl4MviCHF4MSuERo+ofnur0OYdKOQ9B3/Y3jWZS+SXV+ZDLA7 WrTC57s4Nzm9VYKQZf8NAU6Cr6FAbjoUhdaSzsTQv66XLbR6fIx1JHu0oufPaT5M5iK0 GqCOEi2csKBb/cd8me8re0iKEBHdEr3aYgUl5YSt2KwI3z4uyRKH8o0wTpjrtVvazwNI mlQJvLUbraWj7mvhSK4uOp5rg9ice7Hm92VI53L2EWITPeQaf4O8jO5duGKAY26YV9hW eo4Q== X-Gm-Message-State: AJcUukeTvr59Ml2+WFtIbWbLXAot09Ta/aDS4k575JInNEL+TQY/g//A yNpNtIIlNw3aYdYsOAz+lzUVb8A2ca17txDBVsGJi9S6qTWhKqRTiO4qkmGT6ExERdmcOW4pWyQ LXSIYCLLrspxpWGOHI54hjSMHUhTSYMgo8URHnDueg9cyaSXNHgP1rUOfhLIFhHlDvzM8m6Huso Zzzymahlb5TA+XQrraejwP5Be2kK3a1p5JflDyCWMEn8TMEv8e5VpB6p2wGdOLruzSkEeu2Y7WM KmR7h9KcIFhLVAkSyAkhFvI6xSJaIf5Ct3UrXaUstVbgT+HICfF3xYBmT37OD2MtSz6xHQ4R//P Epeo1a9JLad/GAsGRnsw+ClgZrsOauwIT7pgiaDw2TujP8zHUUS5fYfxfCOoorHJKoF6DPtJmLe Q X-Received: by 2002:a63:62c4:: with SMTP id w187mr21722501pgb.230.1547955059497; Sat, 19 Jan 2019 19:30:59 -0800 (PST) X-Received: by 2002:a63:62c4:: with SMTP id w187mr21722469pgb.230.1547955058750; Sat, 19 Jan 2019 19:30:58 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1547955058; cv=none; d=google.com; s=arc-20160816; b=EkSnQRByIcwOzGLi3YcaubrtHivo1Ph4+3I4oJf6gSPbHCgHgaiUcuRQLsjk1QtmDR wZCXR7JjI4xB1xMovj6FvQSLtYaLeTdbU11LZ1MbeTHeW3ZJOMn6xnLL82CxujLV7qzF g9zvRCX4LOO9sHfFb0F0g1tvlCnMpgmS8ufHwmDOEZBwn1AglY8j57kf+1Hj+Mdjo/RO 2+S1Up5/chPU/1ab91YJveL95sXlomxNgj3KkE3j4hKxjraN8ZsXx3vWsMj5qmrDOgq2 C7+Iu758VJMh+j2JoYwF0/if5X3QLtUAXuI+E2H2hp7kZI2AMG3kcY+ZSMez/1jr+L9R VuCg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=qqi/uvN+XCi1ZkhWjHEWDHqcrb3xlLQtNtZA/U9u9d0=; b=TlcgrcRKao0v2E3K1cj0g+qQoIqgrLEJr7d5GRwrFW+Cu8fBXQMnPJdG1BihG2ZXdp lTX050IM6HCpRpSxlPWx+plf6myrqqY03ldieOu2w8HIJzQend4+H6fo4VphWZdUByQk I4Z1u/aFU6woRH8tRah/XsuwcdJafMHMeLRXUFGsTg5lEkvZ+RkYzt0vBCziubYGIfhN AjYjOjXYlQtdv2ljB0exl3BwOxVuDugavpTrWOJr0yvTJAu+NRyva29LbPp+YUuN0JHE /A5LHcmteBJwtMBDaWDVksBarGVnDO/EuCzMOCIQrHlomoImXMEkclOe9ldoEfJVLeOq NvfA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@bytedance-com.20150623.gappssmtp.com header.s=20150623 header.b=wPDP1n4T; spf=pass (google.com: domain of duanxiongchun@bytedance.com designates 209.85.220.65 as permitted sender) smtp.mailfrom=duanxiongchun@bytedance.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=bytedance.com Received: from mail-sor-f65.google.com (mail-sor-f65.google.com. [209.85.220.65]) by mx.google.com with SMTPS id k11sor12726020pll.39.2019.01.19.19.30.58 for (Google Transport Security); Sat, 19 Jan 2019 19:30:58 -0800 (PST) Received-SPF: pass (google.com: domain of duanxiongchun@bytedance.com designates 209.85.220.65 as permitted sender) client-ip=209.85.220.65; Authentication-Results: mx.google.com; dkim=pass header.i=@bytedance-com.20150623.gappssmtp.com header.s=20150623 header.b=wPDP1n4T; spf=pass (google.com: domain of duanxiongchun@bytedance.com designates 209.85.220.65 as permitted sender) smtp.mailfrom=duanxiongchun@bytedance.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=bytedance.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=qqi/uvN+XCi1ZkhWjHEWDHqcrb3xlLQtNtZA/U9u9d0=; b=wPDP1n4Tb8G3I4VRDPQ1BSW7TewgLi4bcS7dcOTWXr7oj5omtd8JMCIpD3uxI4/ESJ 4Cm6LA7fEQ07a87yXeQ3819MiuXemtWQpQAabQVdsj7wtI9ZQ3vB1EzKZK14juz5T5LR 9zkMcbYJII3SeuQe7TSe/zx6Nv+caEduIOZiljUB4mYT4F+OV87+0xMn/qNnuJGBz/fr 3K3NWSuOpYWJQCHXXdCIBSJnrsMRAVnmwXcPlTtEPy/fwrTxFVah33z/fj2mKqeWQAbV ILeGxsXynw0H/WizJoWJW7N871YSftuow1Cs43cnfOFAe0g+hoCap/JMILrivoHk6rZf zcUg== X-Google-Smtp-Source: ALg8bN4IH74OIojZdAvvDwqN6oDLoIMfngxzpXsU5IDBv/JAMSzQv8ZUbqt80AXBo+0DUUwFyD9oWA== X-Received: by 2002:a17:902:704b:: with SMTP id h11mr25027685plt.157.1547955058509; Sat, 19 Jan 2019 19:30:58 -0800 (PST) Received: from localhost.localdomain.localdomain ([61.120.150.71]) by smtp.gmail.com with ESMTPSA id s130sm16022421pgc.60.2019.01.19.19.30.54 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sat, 19 Jan 2019 19:30:58 -0800 (PST) From: Xiongchun Duan To: cgroups@vger.kernel.org, linux-mm@kvack.org Cc: shy828301@gmail.com, mhocko@kernel.org, tj@kernel.org, hannes@cmpxchg.org, zhangyongsu@bytedance.com, liuxiaozhou@bytedance.com, zhengfeiran@bytedance.com, wangdongdong.6@bytedance.com, Xiongchun Duan Subject: [PATCH 2/5] Memcgroup: Add timer to trigger workqueue Date: Sat, 19 Jan 2019 22:30:18 -0500 Message-Id: <1547955021-11520-3-git-send-email-duanxiongchun@bytedance.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1547955021-11520-1-git-send-email-duanxiongchun@bytedance.com> References: <1547955021-11520-1-git-send-email-duanxiongchun@bytedance.com> X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: X-Virus-Scanned: ClamAV using ClamSMTP Add timer to trigger workqueue which will scan offline memcgroup and call trigger memcgroup force_empty worker to force_empty itself. Signed-off-by: Xiongchun Duan --- include/linux/memcontrol.h | 1 + mm/memcontrol.c | 23 +++++++++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/include/linux/memcontrol.h b/include/linux/memcontrol.h index d6fbb77..0a29f7f 100644 --- a/include/linux/memcontrol.h +++ b/include/linux/memcontrol.h @@ -313,6 +313,7 @@ struct mem_cgroup { int max_retry; int current_retry; + unsigned long timer_jiffies; struct mem_cgroup_per_node *nodeinfo[0]; /* WARNING: nodeinfo must be the last member here */ diff --git a/mm/memcontrol.c b/mm/memcontrol.c index 2b13c2b..4db08b7 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c @@ -81,6 +81,8 @@ int sysctl_cgroup_default_retry_min; int sysctl_cgroup_default_retry_max = 16; +struct timer_list empty_trigger; + struct mem_cgroup *root_mem_cgroup __read_mostly; #define MEM_CGROUP_RECLAIM_RETRIES 5 @@ -2933,6 +2935,11 @@ static ssize_t mem_cgroup_force_empty_write(struct kernfs_open_file *of, return mem_cgroup_force_empty(memcg) ?: nbytes; } +static void add_force_empty_list(struct mem_cgroup *memcg) +{ + +} + static u64 mem_cgroup_hierarchy_read(struct cgroup_subsys_state *css, struct cftype *cft) { @@ -4566,11 +4573,26 @@ static int mem_cgroup_css_online(struct cgroup_subsys_state *css) return 0; } +void empty_timer_trigger(struct timer_list *t) +{ + +} + static void mem_cgroup_css_offline(struct cgroup_subsys_state *css) { struct mem_cgroup *memcg = mem_cgroup_from_css(css); struct mem_cgroup_event *event, *tmp; + if (memcg->max_retry != 0) { + memcg->current_retry = 1; + mem_cgroup_force_empty(memcg); + if (page_counter_read(&memcg->memory) && + memcg->max_retry != 1) { + memcg->timer_jiffies = jiffies + HZ; + add_force_empty_list(memcg); + } + } + /* * Unregister events and notify userspace. * Notify userspace about cgroup removing only after rmdir of cgroup @@ -6368,6 +6390,7 @@ static int __init mem_cgroup_init(void) memcg_kmem_cache_wq = alloc_workqueue("memcg_kmem_cache", 0, 1); BUG_ON(!memcg_kmem_cache_wq); #endif + timer_setup(&empty_trigger, empty_timer_trigger, 0); cpuhp_setup_state_nocalls(CPUHP_MM_MEMCQ_DEAD, "mm/memctrl:dead", NULL, memcg_hotplug_cpu_dead); From patchwork Sun Jan 20 03:30:19 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Xiongchun Duan X-Patchwork-Id: 10772283 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id D86CA13BF for ; Sun, 20 Jan 2019 03:31:05 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id C7BC32AFD0 for ; Sun, 20 Jan 2019 03:31:05 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id BB9D72AFD2; Sun, 20 Jan 2019 03:31:05 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE autolearn=ham version=3.3.1 Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 51CCD2AFD0 for ; Sun, 20 Jan 2019 03:31:05 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 520968E0006; Sat, 19 Jan 2019 22:31:04 -0500 (EST) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id 4A76B8E0002; Sat, 19 Jan 2019 22:31:04 -0500 (EST) X-Original-To: int-list-linux-mm@kvack.org X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 348E58E0006; Sat, 19 Jan 2019 22:31:04 -0500 (EST) X-Original-To: linux-mm@kvack.org X-Delivered-To: linux-mm@kvack.org Received: from mail-pl1-f197.google.com (mail-pl1-f197.google.com [209.85.214.197]) by kanga.kvack.org (Postfix) with ESMTP id E2DE78E0002 for ; Sat, 19 Jan 2019 22:31:03 -0500 (EST) Received: by mail-pl1-f197.google.com with SMTP id 12so10615573plb.18 for ; Sat, 19 Jan 2019 19:31:03 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:dkim-signature:from:to:cc:subject:date :message-id:in-reply-to:references; bh=+Ob4m+8HhfDRHofgsh4oQeaXXhKz9LieXTA+7dZHuhE=; b=sHBpByGj4u60nspYh97C528lof0hws2Q8Lf/RJsR6X/PNYdMEajALuBkHeDQum4IEe turUzeNepgIcUPyQ9/lOk+61OnMzuSGFY7J8WU0exQ0THJZ2OzkqOwz9I52VUwmUYufF OOdQwf3D8ZvJZ0ltMi3yn08Sih7F+YugWckr6Wdx41JdG9y8XrcmgRQ8vi4JhLERIWJP y5LH2dudpz+2jc1+Gz2qkarSPJw5fuThBIR33rqPgLYRbyw0uK00vE+5TwHwQEkVPkOc VbbL6cq8AEluSxpvm5xEnMwr5TmkY1qxDKqrx11HZwRpVE58uqMrQz1VgnNmmkGxbAFh bYdg== X-Gm-Message-State: AJcUukd22kjo79IXmnHvwcrXOILPELRd9WJlhNSSbsxKdFMHGIjRaIHT /RzdMWH8RulnuvNEM0P/42rwCBszIV5tcmFK3rTwnWf3Vj/ET14bMI4Zz82okcqZvSeWL5Z7jIL YClxOOJPd1D7Xdr/7TYdDFQ5LfxpCJjKwj9h/CclbCEruQmgkh3dvsofYlxQHIhuH0IOs2dry31 D5yZKkZZ/QHah3CdoSohpajFT2cq43cOAEnbNYjJwEsPwhfdnXnM4uKqRi6wzI28wZyXbae4XyR DQyAxN/QvqIWLWwLrAkucb0fY0a77/LJo64Jgyh2A63i3V48UmzZUNQ5SFR+75QmxL2JGsAqm7s sPUK88+hINuHQBt/2NMxbzAsXO8zEcaiAR33/df35cdX7y3PztatgDhPQnLSWRJtgeDPDIo6ARt 5 X-Received: by 2002:a17:902:5a4d:: with SMTP id f13mr25632310plm.49.1547955063596; Sat, 19 Jan 2019 19:31:03 -0800 (PST) X-Received: by 2002:a17:902:5a4d:: with SMTP id f13mr25632270plm.49.1547955062924; Sat, 19 Jan 2019 19:31:02 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1547955062; cv=none; d=google.com; s=arc-20160816; b=j7wC62xaznX5c1YODK21HrajP+iar3ky8j458znAJdhqMjcLsyp1YAuybRY1r9w6zl 4oxvIOAhUqZ1geR/z6oJ0kGv5qWajUWn2uUu1scWf/FxqOJXeOOHwAKMs3HOFuW5QBzV w6jCnLKWXxrrcMvqSiNkariHZKZ1LYpKsHmuwzpubNDEgmYuPo0eRrzt16PUvocLrqDu 52pzSbqz0UP9bdvU6rjZl3AVksSKkMTBxbY5A3QW3CpVgMoKFyu8LDqb9vVIoV0tjMHa jfK2M4jVEu768T3vcTs3qcz1tIXjaUTf4Gy7+jEAXmKPK5l1gNkbnkOer3128gGFu8GB rWgA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=+Ob4m+8HhfDRHofgsh4oQeaXXhKz9LieXTA+7dZHuhE=; b=MroMKvqbTwanOM4/9AQqZ5wYRgXQHusWuajieGTMpt8KzI1Qu6z75TMEzaf0+trSSl jldqqjG2GgKqnod2hB9EmnzbBtio+R+Q9DGvRA7+7xUYO8OrLRSDtJdD5RKaHe/X6KWv PV6LWE6yqe7PfgeGkjUY5wsfUSYDdngXFR1G+uLCzI2o7WVUkGgXg118Jn7OhFdrBj2s /JqCkDnWRLmao1I1ybJOaYo82iap1MUNeyRu1aryoq3VFnsNkI9gJaPeVhffqFE9QLrx CG3yCN2AV7wbRVzAd3D26J+Cz457HNZ1sj2/qu4YF6vTExk8dim+TI4vludz6aX9A/Um x3Zw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@bytedance-com.20150623.gappssmtp.com header.s=20150623 header.b=bmJMZmhC; spf=pass (google.com: domain of duanxiongchun@bytedance.com designates 209.85.220.65 as permitted sender) smtp.mailfrom=duanxiongchun@bytedance.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=bytedance.com Received: from mail-sor-f65.google.com (mail-sor-f65.google.com. [209.85.220.65]) by mx.google.com with SMTPS id x81sor13730162pfk.1.2019.01.19.19.31.02 for (Google Transport Security); Sat, 19 Jan 2019 19:31:02 -0800 (PST) Received-SPF: pass (google.com: domain of duanxiongchun@bytedance.com designates 209.85.220.65 as permitted sender) client-ip=209.85.220.65; Authentication-Results: mx.google.com; dkim=pass header.i=@bytedance-com.20150623.gappssmtp.com header.s=20150623 header.b=bmJMZmhC; spf=pass (google.com: domain of duanxiongchun@bytedance.com designates 209.85.220.65 as permitted sender) smtp.mailfrom=duanxiongchun@bytedance.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=bytedance.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=+Ob4m+8HhfDRHofgsh4oQeaXXhKz9LieXTA+7dZHuhE=; b=bmJMZmhCf+SVMenOBE7PM9fCm7WFBJ6qViAzg7+FCZGzAAG1pUqocbCO/Aapffi5JT FJ0hH7d0ND2PqyW6b2xY2YVP6D02L7BZd0SJCbIKWlLQ366RzGeOhdNxctgAl8ffyTBs uhQqr8/44ojmQE2PVf5gKohNAdcqq2GkLlLdKkae5MvSbhuSFyhbKRse2g8Bu3XZILSj ZHlDzQw8LxGjrGXBkPQmbJXo6UIpmoDiDc3z29SpNsqv1GYDR+V+lpfUHnaEjC6WofTn HWHnSqvks8diLDOBrsa+l28uBrvutNtSmg2V6DUwjCbxLXy3id1UHGrA1/oqPaxfyTap rjiA== X-Google-Smtp-Source: ALg8bN5DrUBCIqB05VTh4bhhATsg2/AJz8PY+n5tAARzhL9+oKNXOiF44nbRnyhUtGQneq40gt5REA== X-Received: by 2002:a62:8949:: with SMTP id v70mr24709384pfd.85.1547955062613; Sat, 19 Jan 2019 19:31:02 -0800 (PST) Received: from localhost.localdomain.localdomain ([61.120.150.71]) by smtp.gmail.com with ESMTPSA id s130sm16022421pgc.60.2019.01.19.19.30.58 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sat, 19 Jan 2019 19:31:02 -0800 (PST) From: Xiongchun Duan To: cgroups@vger.kernel.org, linux-mm@kvack.org Cc: shy828301@gmail.com, mhocko@kernel.org, tj@kernel.org, hannes@cmpxchg.org, zhangyongsu@bytedance.com, liuxiaozhou@bytedance.com, zhengfeiran@bytedance.com, wangdongdong.6@bytedance.com, Xiongchun Duan Subject: [PATCH 3/5] Memcgroup:add a global work Date: Sat, 19 Jan 2019 22:30:19 -0500 Message-Id: <1547955021-11520-4-git-send-email-duanxiongchun@bytedance.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1547955021-11520-1-git-send-email-duanxiongchun@bytedance.com> References: <1547955021-11520-1-git-send-email-duanxiongchun@bytedance.com> X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: X-Virus-Scanned: ClamAV using ClamSMTP Add a global work to scan offline cgroup and trigger offline cgroup force empty. Signed-off-by: Xiongchun Duan --- mm/memcontrol.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/mm/memcontrol.c b/mm/memcontrol.c index 4db08b7..fad1aae 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c @@ -82,6 +82,7 @@ int sysctl_cgroup_default_retry_max = 16; struct timer_list empty_trigger; +struct work_struct timer_poll_work; struct mem_cgroup *root_mem_cgroup __read_mostly; @@ -320,6 +321,7 @@ void memcg_put_cache_ids(void) EXPORT_SYMBOL(memcg_kmem_enabled_key); struct workqueue_struct *memcg_kmem_cache_wq; +struct workqueue_struct *memcg_force_empty_wq; static int memcg_shrinker_map_size; static DEFINE_MUTEX(memcg_shrinker_map_mutex); @@ -4573,11 +4575,16 @@ static int mem_cgroup_css_online(struct cgroup_subsys_state *css) return 0; } -void empty_timer_trigger(struct timer_list *t) +static void trigger_force_empty(struct work_struct *work) { } +static void empty_timer_trigger(struct timer_list *t) +{ + queue_work(memcg_force_empty_wq, &timer_poll_work); +} + static void mem_cgroup_css_offline(struct cgroup_subsys_state *css) { struct mem_cgroup *memcg = mem_cgroup_from_css(css); @@ -6390,6 +6397,9 @@ static int __init mem_cgroup_init(void) memcg_kmem_cache_wq = alloc_workqueue("memcg_kmem_cache", 0, 1); BUG_ON(!memcg_kmem_cache_wq); #endif + memcg_force_empty_wq = alloc_workqueue("memcg_force_empty_wq", 0, 1); + BUG_ON(!memcg_force_empty_wq); + INIT_WORK(&timer_poll_work, trigger_force_empty); timer_setup(&empty_trigger, empty_timer_trigger, 0); cpuhp_setup_state_nocalls(CPUHP_MM_MEMCQ_DEAD, "mm/memctrl:dead", NULL, From patchwork Sun Jan 20 03:30:20 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Xiongchun Duan X-Patchwork-Id: 10772285 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 650E813B5 for ; Sun, 20 Jan 2019 03:31:10 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 527A52AFD0 for ; Sun, 20 Jan 2019 03:31:10 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 469812AFD2; Sun, 20 Jan 2019 03:31:10 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE autolearn=ham version=3.3.1 Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id A9C4D2AFD0 for ; Sun, 20 Jan 2019 03:31:09 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 9D9BB8E0007; Sat, 19 Jan 2019 22:31:08 -0500 (EST) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id 9621D8E0002; Sat, 19 Jan 2019 22:31:08 -0500 (EST) X-Original-To: int-list-linux-mm@kvack.org X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 7DD0E8E0007; Sat, 19 Jan 2019 22:31:08 -0500 (EST) X-Original-To: linux-mm@kvack.org X-Delivered-To: linux-mm@kvack.org Received: from mail-pl1-f199.google.com (mail-pl1-f199.google.com [209.85.214.199]) by kanga.kvack.org (Postfix) with ESMTP id 385BB8E0002 for ; Sat, 19 Jan 2019 22:31:08 -0500 (EST) Received: by mail-pl1-f199.google.com with SMTP id e68so10654789plb.3 for ; Sat, 19 Jan 2019 19:31:08 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:dkim-signature:from:to:cc:subject:date :message-id:in-reply-to:references; bh=/zsbjQO9YDL29rXU1zSaBifmoCx2btuFtC325tJUsuQ=; b=uAD1p/ZJ4CNB8iwLqc40tVQhK03iKFHBi8oIxm47dF7deTWmwxS4YA3YyrptZ99e3E Omk3S5Ra2avQjYNI00G9QiOvvXedwlp7+ruTotknbQQKLfaFGVH1fO/tufM67nTaiz/l N/5ocfFKUwKltJKk/thvQI4b93Cmk5SiqW/RKKv6lhb5+nplV/Biz6S+2kFhcsSawu4f 8R7WH6KSv661F6+YdDaDaW/6lRGg5ohWwFhmZWXIwSTcZvFb2JOJA8W4fzZI3GSEF/bP opTD8zEIr9E9+22/n74+8kWPGllq3nJdcdIJGcb1+WFoUuCxYy3hP59BLORjRCD8OoDC mHQw== X-Gm-Message-State: AJcUukekOu2hPNozipU3XZ9tgPJI5ZI5tCg8JlMBdt3CWu8hHvq1+UM+ g9f8rsaMMfZh2FV2njfVAiTpPBdKJXcf62DOcCGREIz1FcIa/luf/xIsShMytAUOKXvJE1zBgJA UGa1VMM7ZxQFhS0Nm9MbH/BmleKGdPxnWJs0pkIURtuxlcha+q72PqW81P/myKjGIlIHfNz4CiW dI35iSgeIbuufXXJHOe3RPwiYEzHnNax8u9c3krM/ugTU0gs/LFyAvOF4nfnRfMrNXeEjo1OVZr Fo8hMoQHSPlDRHUKEVbySXrORlNKvI8coS8mqsdUOBu5mPLcnHv3wByAXCsf8pi00OAf5nSWNDV CsoWtLH+NQQa0LZuJXRKFa2fWnjGI0JT3keK0wkMTIIJw46FPn5x2eDj812wG3RbvORG4BnwJ3/ n X-Received: by 2002:a62:6408:: with SMTP id y8mr25023061pfb.202.1547955067827; Sat, 19 Jan 2019 19:31:07 -0800 (PST) X-Received: by 2002:a62:6408:: with SMTP id y8mr25023026pfb.202.1547955066898; Sat, 19 Jan 2019 19:31:06 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1547955066; cv=none; d=google.com; s=arc-20160816; b=Ytr/s19gOjmKYAo36TvVjHavdQ0CVmPsFsGDukwDJEH45EWNZxWxH0zvoJoDDESZuX Cb7FtPTJKnztOqkDKc6KEdS4kz0UyPV/F4knByqlneZswCf5X9GiZofUYm+/QnMUhFqK TdAbtJ73IZIt/rGFJ8r2/MRlmgyDHxsSlb+7BFgCH3a2Ja5L5kvzEdaVavS2ySjBQA2E NwugJGqZ7JCegPRhHndv5Yr7XUk8GcrtmaqwpsRbybzgv4Ua39IR/ATKsWizMwcd8OAu Ughrnim/0186zHeLrS0BJ9nRVc7nXHoZUPuckDvqdwFH0zDHaRVkFZluCiAv9MttxpNs DlUg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=/zsbjQO9YDL29rXU1zSaBifmoCx2btuFtC325tJUsuQ=; b=ibsiWvMtS4qaWs86gyflwa4G0xmW998BtXWtULSiJxcc+hZ19roX6Fw8bZYlz3Tg9U EhqiF43ZdfwZFSRETXjRQ89TsxdmuNRz8+yUsx/uEXqcSwQy9rkq0d0POu4jRXZ7l85e TreRiTMUagDHLzTtNIKn7z1O3r3pbmRGFE6LNO1hoUvooFENM9AQO59Q32rTqKYba6cf tetGr2nut6KeEiu4AhQPHI9/7Mc/VN//R54aL4udfSdLf2+NfqdFbhEd//m+dZrzafX6 onBdaOolyO0hsBG2IU5iM1czsULLMQ6mZUehERBUhnaHbNV1WlquGDIa4vitz0tkjU1Q xRzQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@bytedance-com.20150623.gappssmtp.com header.s=20150623 header.b=oeSSmuan; spf=pass (google.com: domain of duanxiongchun@bytedance.com designates 209.85.220.65 as permitted sender) smtp.mailfrom=duanxiongchun@bytedance.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=bytedance.com Received: from mail-sor-f65.google.com (mail-sor-f65.google.com. [209.85.220.65]) by mx.google.com with SMTPS id 43sor12796381plc.28.2019.01.19.19.31.06 for (Google Transport Security); Sat, 19 Jan 2019 19:31:06 -0800 (PST) Received-SPF: pass (google.com: domain of duanxiongchun@bytedance.com designates 209.85.220.65 as permitted sender) client-ip=209.85.220.65; Authentication-Results: mx.google.com; dkim=pass header.i=@bytedance-com.20150623.gappssmtp.com header.s=20150623 header.b=oeSSmuan; spf=pass (google.com: domain of duanxiongchun@bytedance.com designates 209.85.220.65 as permitted sender) smtp.mailfrom=duanxiongchun@bytedance.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=bytedance.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=/zsbjQO9YDL29rXU1zSaBifmoCx2btuFtC325tJUsuQ=; b=oeSSmuanGf+0tYWi62PjqBsZm8a2wMP7eUXJSjjaiGWQZh9GD5xP7leLps0sWCJe3U wXfgXv/s0FG1m3VAcVhui8/QVbFs4oRRuBkRVzHXHLSmYOjhH4mWMmjSB2xt9eAyQADE CI2QiCjwBjIdrRaUxe6G9yTR7VeAnwpu47Wpf41ZNPfu4mtzJnhgfn6fWI8Fis/27wO9 nmSnVrDeVbWVr1zq5cFSXy0GnyAjWfJnpqPXOvBYI+TR1pNLPU6IvTsM8hLcZrNjNsA5 QOOCMetn4ghz3OneldvBgvzHPoMRe73JWp+UYXTTXtjcLBp74t0UBkjZYkf7FkzqAReX Q1xg== X-Google-Smtp-Source: ALg8bN5ubSZjZUGBdxmFZbqIdKpxZ26RE4n1Wa0Y2fWsb0a9AAVX1+z59rPyfhoIEhT5jr1XN8VAIg== X-Received: by 2002:a17:902:7e4f:: with SMTP id a15mr24447024pln.149.1547955066536; Sat, 19 Jan 2019 19:31:06 -0800 (PST) Received: from localhost.localdomain.localdomain ([61.120.150.71]) by smtp.gmail.com with ESMTPSA id s130sm16022421pgc.60.2019.01.19.19.31.02 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sat, 19 Jan 2019 19:31:06 -0800 (PST) From: Xiongchun Duan To: cgroups@vger.kernel.org, linux-mm@kvack.org Cc: shy828301@gmail.com, mhocko@kernel.org, tj@kernel.org, hannes@cmpxchg.org, zhangyongsu@bytedance.com, liuxiaozhou@bytedance.com, zhengfeiran@bytedance.com, wangdongdong.6@bytedance.com, Xiongchun Duan Subject: [PATCH 4/5] Memcgroup:Implement force empty work function Date: Sat, 19 Jan 2019 22:30:20 -0500 Message-Id: <1547955021-11520-5-git-send-email-duanxiongchun@bytedance.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1547955021-11520-1-git-send-email-duanxiongchun@bytedance.com> References: <1547955021-11520-1-git-send-email-duanxiongchun@bytedance.com> X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: X-Virus-Scanned: ClamAV using ClamSMTP Implement force empty work function and add trigger by global work. force_empty_list : offline cgroup wait for trigger force empty. empty_fail_list: offline cgroup which had been trigger for too many time will not auto retrigger. Signed-off-by: Xiongchun Duan --- include/linux/memcontrol.h | 4 +++ mm/memcontrol.c | 81 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 85 insertions(+) diff --git a/include/linux/memcontrol.h b/include/linux/memcontrol.h index 0a29f7f..064192e 100644 --- a/include/linux/memcontrol.h +++ b/include/linux/memcontrol.h @@ -315,6 +315,10 @@ struct mem_cgroup { int current_retry; unsigned long timer_jiffies; + struct list_head force_empty_node; + struct list_head empty_fail_node; + struct work_struct force_empty_work; + struct mem_cgroup_per_node *nodeinfo[0]; /* WARNING: nodeinfo must be the last member here */ }; diff --git a/mm/memcontrol.c b/mm/memcontrol.c index fad1aae..21b4432 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c @@ -86,6 +86,10 @@ struct mem_cgroup *root_mem_cgroup __read_mostly; +static DEFINE_MUTEX(offline_cgroup_mutex); +static LIST_HEAD(force_empty_list); +static LIST_HEAD(empty_fail_list); + #define MEM_CGROUP_RECLAIM_RETRIES 5 /* Socket memory accounting disabled? */ @@ -2939,9 +2943,52 @@ static ssize_t mem_cgroup_force_empty_write(struct kernfs_open_file *of, static void add_force_empty_list(struct mem_cgroup *memcg) { + struct list_head *pos, *n; + struct mem_cgroup *pos_memcg; + unsigned long tmp = memcg->timer_jiffies; + + mutex_lock(&offline_cgroup_mutex); + list_for_each_safe(pos, n, &force_empty_list) { + pos_memcg = container_of(pos, + struct mem_cgroup, force_empty_node); + if (time_after(tmp, pos_memcg->timer_jiffies)) + tmp = pos_memcg->timer_jiffies; + if (time_after(pos_memcg->timer_jiffies, memcg->timer_jiffies)) + break; + } + list_add_tail(&memcg->force_empty_node, pos); + mutex_unlock(&offline_cgroup_mutex); + mod_timer(&empty_trigger, tmp); } +static void mem_cgroup_force_empty_delay(struct work_struct *work) +{ + unsigned int order; + struct mem_cgroup *memcg = container_of(work, + struct mem_cgroup, force_empty_work); + + if (page_counter_read(&memcg->memory)) { + mem_cgroup_force_empty(memcg); + memcg->current_retry += 1; + if (page_counter_read(&memcg->memory)) { + if (memcg->current_retry >= memcg->max_retry) { + if (list_empty(&memcg->empty_fail_node)) { + mutex_lock(&offline_cgroup_mutex); + list_add(&memcg->empty_fail_node, + &empty_fail_list); + mutex_unlock(&offline_cgroup_mutex); + } + } else { + order = 1 << (memcg->current_retry - 1); + memcg->timer_jiffies = jiffies + HZ * order; + add_force_empty_list(memcg); + } + } + } + css_put(&memcg->css); +} + static u64 mem_cgroup_hierarchy_read(struct cgroup_subsys_state *css, struct cftype *cft) { @@ -4545,6 +4592,9 @@ static struct mem_cgroup *mem_cgroup_alloc(void) if (cgroup_subsys_on_dfl(memory_cgrp_subsys) && !cgroup_memory_nosocket) static_branch_inc(&memcg_sockets_enabled_key); + + INIT_LIST_HEAD(&memcg->force_empty_node); + INIT_LIST_HEAD(&memcg->empty_fail_node); memcg->max_retry = sysctl_cgroup_default_retry; memcg->current_retry = 0; @@ -4577,7 +4627,26 @@ static int mem_cgroup_css_online(struct cgroup_subsys_state *css) static void trigger_force_empty(struct work_struct *work) { + struct list_head *pos, *n; + struct mem_cgroup *memcg; + mutex_lock(&offline_cgroup_mutex); + list_for_each_safe(pos, n, &force_empty_list) { + memcg = container_of(pos, struct mem_cgroup, + force_empty_node); + if (time_after(jiffies, memcg->timer_jiffies)) { + if (atomic_long_add_unless(&memcg->css.refcnt.count, + 1, 0) == 0) { + continue; + } else if (!queue_work(memcg_force_empty_wq, + &memcg->force_empty_work)) { + css_put(&memcg->css); + } else { + list_del_init(&memcg->force_empty_node); + } + } + } + mutex_unlock(&offline_cgroup_mutex); } static void empty_timer_trigger(struct timer_list *t) @@ -4595,6 +4664,8 @@ static void mem_cgroup_css_offline(struct cgroup_subsys_state *css) mem_cgroup_force_empty(memcg); if (page_counter_read(&memcg->memory) && memcg->max_retry != 1) { + INIT_WORK(&memcg->force_empty_work, + mem_cgroup_force_empty_delay); memcg->timer_jiffies = jiffies + HZ; add_force_empty_list(memcg); } @@ -4626,6 +4697,16 @@ static void mem_cgroup_css_offline(struct cgroup_subsys_state *css) static void mem_cgroup_css_released(struct cgroup_subsys_state *css) { struct mem_cgroup *memcg = mem_cgroup_from_css(css); + if (!list_empty(&memcg->force_empty_node)) { + mutex_lock(&offline_cgroup_mutex); + list_del_init(&memcg->force_empty_node); + mutex_unlock(&offline_cgroup_mutex); + } + if (!list_empty(&memcg->empty_fail_node)) { + mutex_lock(&offline_cgroup_mutex); + list_del_init(&memcg->empty_fail_node); + mutex_unlock(&offline_cgroup_mutex); + } invalidate_reclaim_iterators(memcg); } From patchwork Sun Jan 20 03:30:21 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Xiongchun Duan X-Patchwork-Id: 10772287 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 7248913B5 for ; Sun, 20 Jan 2019 03:31:14 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 606D82AFD0 for ; Sun, 20 Jan 2019 03:31:14 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 544A12AFD2; Sun, 20 Jan 2019 03:31:14 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE autolearn=ham version=3.3.1 Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id B64B92AFD0 for ; Sun, 20 Jan 2019 03:31:13 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id A7A7B8E0008; Sat, 19 Jan 2019 22:31:12 -0500 (EST) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id 9FDE58E0002; Sat, 19 Jan 2019 22:31:12 -0500 (EST) X-Original-To: int-list-linux-mm@kvack.org X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 89E1A8E0008; Sat, 19 Jan 2019 22:31:12 -0500 (EST) X-Original-To: linux-mm@kvack.org X-Delivered-To: linux-mm@kvack.org Received: from mail-pg1-f200.google.com (mail-pg1-f200.google.com [209.85.215.200]) by kanga.kvack.org (Postfix) with ESMTP id 4698E8E0002 for ; Sat, 19 Jan 2019 22:31:12 -0500 (EST) Received: by mail-pg1-f200.google.com with SMTP id s22so11600741pgv.8 for ; Sat, 19 Jan 2019 19:31:12 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:dkim-signature:from:to:cc:subject:date :message-id:in-reply-to:references; bh=BtSFwzbqmwxC5o7dmdfSFqed76kpaDTXakHzY/6Bkyo=; b=Fiiz/+Q06XVGdDhCUJhpllOuTgyNX61ZeUqlaIqflSg+bzuvheipzaxiXqasRRI5Gk ZatSnA/t1TmjRJHtvK2FSaX+alTBJx1mO+LpKtUMLmMX8Rbp/0fbbUg01uJnX3Zq7kqv XyLMA3i4tIfV7RVu0w9JskdHwECqw6TXnZEdNLggs0hj+8kHNSHio9i4oQZRlkr8Df7q 3iwCTJf0B3RAXxbPb4Y6FPp3gPb18zv9vTQ61LShzOgM1DAiJXA5o9Oqib3f5wMd32fX LGpVJXD3QN0sEA9hqPX3AprkgMexkPqd9QzUBx20HdaavyEWanKl1pAHEv0bUS25TWY7 lSvw== X-Gm-Message-State: AJcUukdtRNqTVA+ISBUHabg3uBt4p8YKEWbdoRuOgShcZlJfI+VZWGx8 OSDGs/coYAp9SqTBhA6sEQT0YBmv05JpsDVALZ+TI8B8dF2rPuPLbcO1ZV6uQ19tO6tlvrYH5zq 8dfPqD2M/VTB+LQCBwV/nVbWw2JNnvK6rHh/4lz53z3+IEd0wNlWeumRXOvaSrP7B+4/7+JdN2q zyTxk2pryWs3dQakK/UvL063LM9COP4yi99/XtP1SFLpEwjr4oN7XUB7VSYdPl+0UbJwEAbv9O3 oBr68W2sx5unkqFKmpscc20vw4SfJEPea0kSSg56EtIVJIpKqvZMFoNCLBJHIj5JjxVw0uxg+YV jNli0KY6XmpbAKvUOrGAwkEAXt9jzPkOITVUWr1XBrta4GGmPAER5LmOWgJe/IlQB5XOKkXZhrv x X-Received: by 2002:a62:62c5:: with SMTP id w188mr25474461pfb.160.1547955071916; Sat, 19 Jan 2019 19:31:11 -0800 (PST) X-Received: by 2002:a62:62c5:: with SMTP id w188mr25474411pfb.160.1547955070711; Sat, 19 Jan 2019 19:31:10 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1547955070; cv=none; d=google.com; s=arc-20160816; b=Y5hteB4PEA2SBFmycKbLb7/IqFJoPbg3j5nsr9ib6tdiw94WxG4jfkPjxiAY/yN9xP /VQCZ0yNDJIFQdnJn3ZBCdf3deBPcnf/p/mwvfDd56IUHsE6aLY4+hC+VsmKueHOhhe7 lAhzin+x+c18pDhAwHZBKxrBu2ZqMxkrvIM3wFBpAjeSwXPpaYD8VAfPoIPc29qXXFBY pImMadL9CrhV/HwQfhnXzVh/DFigXpMMGRk7xkRmUAlFMjhntB9VYkIng4LduZCndWxN Bf3VURDMEkwIOLeaQNZBxTd5TEABYu+kdqX/V3FuNEsVlU464sm6JMxD3Cf1tAHse6fn lusg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=BtSFwzbqmwxC5o7dmdfSFqed76kpaDTXakHzY/6Bkyo=; b=BOUHhSm4MWlEeLqi5xxPaWGsmzZW7B5ZDrn/66FB192/yvLKvDWG1edfGvq1brtD7A F8exZJ0rwcW8jWCPP7XBCDsQhgPsEFuIHOiDnkFv3iYGvfizQYO2kElBE1z1eGdM0YV9 JGkAEc/ErVGK17roW51vYdD3q9JOMCa3DsE6WTfxfTQnSe98tYy1KYEU+9/X915LWiUK Yzn4uDjIHhPsxvVfS24UFT6ZlOWp6M8SB0hZk8B6QaewHXb9QwOnDOZYZ5ZMDOLG6LwJ QSAvFMGqDMI7Bcps6SWVZjphmeO5DTqme0SceuxdqyqAOLM/KOvOYrAKAVxLfUXR/jdX B2Qg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@bytedance-com.20150623.gappssmtp.com header.s=20150623 header.b=Tbjcj7ua; spf=pass (google.com: domain of duanxiongchun@bytedance.com designates 209.85.220.65 as permitted sender) smtp.mailfrom=duanxiongchun@bytedance.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=bytedance.com Received: from mail-sor-f65.google.com (mail-sor-f65.google.com. [209.85.220.65]) by mx.google.com with SMTPS id l30sor12519399plg.17.2019.01.19.19.31.10 for (Google Transport Security); Sat, 19 Jan 2019 19:31:10 -0800 (PST) Received-SPF: pass (google.com: domain of duanxiongchun@bytedance.com designates 209.85.220.65 as permitted sender) client-ip=209.85.220.65; Authentication-Results: mx.google.com; dkim=pass header.i=@bytedance-com.20150623.gappssmtp.com header.s=20150623 header.b=Tbjcj7ua; spf=pass (google.com: domain of duanxiongchun@bytedance.com designates 209.85.220.65 as permitted sender) smtp.mailfrom=duanxiongchun@bytedance.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=bytedance.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=BtSFwzbqmwxC5o7dmdfSFqed76kpaDTXakHzY/6Bkyo=; b=Tbjcj7uaE+kle402Td25YftFGAc4enbple0QV/U1TFmnOMtRFShhIWjtYCl7HaARr5 GI3P88Awy7lID0fMowGVvDizBAtVxZtXpBYfcx1B3r18lo8CSGz3L9kaDxAsjSUrIPst RhiFLOT9n6q5Z+OmnKWkuE3ov7vbxzzjH29PgyUjdXI3DnZKnkPZDZXgTzBgslLkYy+A D17ca0JTCGDx1iAUllF7SM6Ta8WxlPfDZ1wqz/Teef2e1hLjM/kbDxyEv+apEAiyY1At R1IQL79QOlTM7zkXdfXC4aotxpFtcnvfSY9bNgjJxdxDpMTC/N92b5V6xseTM3gZBKd3 Njag== X-Google-Smtp-Source: ALg8bN7Fl18nTCt0kag7mBEaP5XaJW+RJ1lbMTiMrdHKVMKe22zIKGq0pf2MZ8LzOrdAU/sat4V8eg== X-Received: by 2002:a17:902:4464:: with SMTP id k91mr23665248pld.13.1547955070422; Sat, 19 Jan 2019 19:31:10 -0800 (PST) Received: from localhost.localdomain.localdomain ([61.120.150.71]) by smtp.gmail.com with ESMTPSA id s130sm16022421pgc.60.2019.01.19.19.31.06 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sat, 19 Jan 2019 19:31:10 -0800 (PST) From: Xiongchun Duan To: cgroups@vger.kernel.org, linux-mm@kvack.org Cc: shy828301@gmail.com, mhocko@kernel.org, tj@kernel.org, hannes@cmpxchg.org, zhangyongsu@bytedance.com, liuxiaozhou@bytedance.com, zhengfeiran@bytedance.com, wangdongdong.6@bytedance.com, Xiongchun Duan Subject: [PATCH 5/5] Memcgroup:add cgroup fs to show offline memcgroup status Date: Sat, 19 Jan 2019 22:30:21 -0500 Message-Id: <1547955021-11520-6-git-send-email-duanxiongchun@bytedance.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1547955021-11520-1-git-send-email-duanxiongchun@bytedance.com> References: <1547955021-11520-1-git-send-email-duanxiongchun@bytedance.com> X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: X-Virus-Scanned: ClamAV using ClamSMTP Add cgroups_wait_empty proc file to show wait force empty memcgroup Add cgroup_empty_fail file to show memcgroup which had try many time still did not release. you can echo 0 > /proc/cgroup_empty_fail to manualy trigger force empty this memcgroup Signed-off-by: Xiongchun Duan --- mm/memcontrol.c | 140 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 140 insertions(+) diff --git a/mm/memcontrol.c b/mm/memcontrol.c index 21b4432..1529549 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c @@ -57,6 +57,7 @@ #include #include #include +#include #include #include #include @@ -6440,6 +6441,140 @@ void mem_cgroup_uncharge_skmem(struct mem_cgroup *memcg, unsigned int nr_pages) refill_stock(memcg, nr_pages); } +#ifdef CONFIG_PROC_FS +static void print_memcg_header(struct seq_file *m) +{ + seq_puts(m, "address,css_ref,mem_ref,current_retry,max_retry\n"); +} + +static void memcgroup_show(struct mem_cgroup *memcg, + struct seq_file *m, bool header) +{ + if (header) + print_memcg_header(m); + seq_printf(m, "%p,%lu,%lu,%d,%d\n", memcg, + atomic_long_read(&memcg->css.refcnt.count), + page_counter_read(&memcg->memory), + memcg->current_retry, memcg->max_retry); +} + +void *fail_start(struct seq_file *m, loff_t *pos) +{ + mutex_lock(&offline_cgroup_mutex); + return seq_list_start(&empty_fail_list, *pos); +} + +void *fail_next(struct seq_file *m, void *p, loff_t *pos) +{ + return seq_list_next(p, &empty_fail_list, pos); +} + +void fail_stop(struct seq_file *m, void *p) +{ + mutex_unlock(&offline_cgroup_mutex); +} + +static int fail_show(struct seq_file *m, void *p) +{ + struct mem_cgroup *memcg = list_entry(p, struct mem_cgroup, + empty_fail_node); + if (p == empty_fail_list.next) + memcgroup_show(memcg, m, true); + else + memcgroup_show(memcg, m, false); + + return 0; +} + +static const struct seq_operations fail_list_op = { + .start = fail_start, + .next = fail_next, + .stop = fail_stop, + .show = fail_show, +}; + +static int fail_list_open(struct inode *inode, struct file *file) +{ + return seq_open(file, &fail_list_op); +} + +ssize_t fail_list_write(struct file *file, const char __user *buffer, + size_t count, loff_t *ppos) +{ + struct list_head *pos, *n; + struct mem_cgroup *memcg; + + mutex_lock(&offline_cgroup_mutex); + list_for_each_safe(pos, n, &empty_fail_list) { + memcg = container_of(pos, struct mem_cgroup, empty_fail_node); + if (atomic_long_add_unless(&memcg->css.refcnt.count, + 1, 0) == 0) { + continue; + } else if (!queue_work(memcg_force_empty_wq, + &memcg->force_empty_work)) { + css_put(&memcg->css); + } + } + mutex_unlock(&offline_cgroup_mutex); + return count; +} + +static const struct file_operations proc_fail_list_operations = { + .open = fail_list_open, + .read = seq_read, + .write = fail_list_write, + .llseek = seq_lseek, + .release = seq_release, +}; + +void *empty_start(struct seq_file *m, loff_t *pos) +{ + mutex_lock(&offline_cgroup_mutex); + return seq_list_start(&force_empty_list, *pos); +} + +void *empty_next(struct seq_file *m, void *p, loff_t *pos) +{ + return seq_list_next(p, &force_empty_list, pos); +} + +void empty_stop(struct seq_file *m, void *p) +{ + mutex_unlock(&offline_cgroup_mutex); +} + +static int empty_show(struct seq_file *m, void *p) +{ + struct mem_cgroup *memcg = list_entry(p, + struct mem_cgroup, force_empty_node); + if (p == force_empty_list.next) + memcgroup_show(memcg, m, true); + else + memcgroup_show(memcg, m, false); + + return 0; +} + +static const struct seq_operations empty_list_op = { + .start = empty_start, + .next = empty_next, + .stop = empty_stop, + .show = empty_show, +}; + +static int empty_list_open(struct inode *inode, struct file *file) +{ + return seq_open(file, &empty_list_op); +} + +static const struct file_operations proc_empty_list_operations = { + .open = empty_list_open, + .read = seq_read, + .llseek = seq_lseek, + .release = seq_release, +}; +#endif + static int __init cgroup_memory(char *s) { char *token; @@ -6483,6 +6618,11 @@ static int __init mem_cgroup_init(void) INIT_WORK(&timer_poll_work, trigger_force_empty); timer_setup(&empty_trigger, empty_timer_trigger, 0); +#ifdef CONFIG_PROC_FS + proc_create("cgroups_wait_empty", 0, NULL, &proc_empty_list_operations); + proc_create("cgroups_empty_fail", 0, NULL, &proc_fail_list_operations); +#endif + cpuhp_setup_state_nocalls(CPUHP_MM_MEMCQ_DEAD, "mm/memctrl:dead", NULL, memcg_hotplug_cpu_dead);