Received: by 2002:ac0:950e:0:0:0:0:0 with SMTP id f14csp633651imc; Sat, 16 Mar 2019 10:59:29 -0700 (PDT) X-Google-Smtp-Source: APXvYqyLI0CPP73NrdWFn2zHC0GubaOt0eCu4hjujpWHhJ5Y7JQxt+4lmTNtuUSR2zx62zY89Eu6 X-Received: by 2002:a62:3001:: with SMTP id w1mr10435228pfw.59.1552759169448; Sat, 16 Mar 2019 10:59:29 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1552759169; cv=none; d=google.com; s=arc-20160816; b=ATbiU+OfXNs1w00eMtXqctPFmySD5RXV0Di4Uu0W9MKsjA7/DYhluAC2HgApO2QT5z W+k5DYiRXVM5RBwM1yf0YDAa6wzYNpTpfK8v3Q/ITQwdh71ENhFg/ZMllKJ/T+5SbExj qQAJsoVddYHqAGbIXIoI3NLp+ATcwmZ6szmwj+XscOCGxsxrC459jMkeObvjaBPaGRn9 aPK3WgOj9BjH6H/T7DdZV26Vf0J4UK+g6xJCTyxQen+pQsba6uSq3PtPlRshBvpuCVGT Zyuj+qfphsknB+6fZK5qQChN4Sy0M+9i0Can5clvdnupmbxieBVLGybPgVCCHKDgcyCR JqHA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=nD+VamgFg4au3bPjQ/QrkvUzoOQTX/WN4pmQo0ul2RE=; b=DTudlCA+J77ZRCrknbhIa7nqa8RdFzREuQJBU3uoK1LFk+4HbBExcwG8ATnUMIk+A6 x9Fw8kNoFodhQUVfDkZnHXoZaSQ7nUC9KUPNno6XgU3BsowPkAE6qML5R2KksnLLoCFH afzZt2ATbbXEFkQ9YyQzE3utBVj2B97nV4ApyOfyx4yvoHUecaneMdUAAmsIgPvZDj6S Bu8lgW1Ql1SkReMNHs6hfc7pXVEl8Luy8+mEdBpf0ZcHKLE66syduSciF6WmRxlIf4E2 GB/I3VGQhlj5sidZwa0PEB7FQNlGWiopZ5PHQICi+lceYm+NMEf/bLHIb3PGT4MG0yXg 7pZg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=R+ByCgL+; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id d8si4782378plr.409.2019.03.16.10.59.14; Sat, 16 Mar 2019 10:59:29 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=R+ByCgL+; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727289AbfCPR6c (ORCPT + 99 others); Sat, 16 Mar 2019 13:58:32 -0400 Received: from mail-pg1-f194.google.com ([209.85.215.194]:40078 "EHLO mail-pg1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727268AbfCPR6a (ORCPT ); Sat, 16 Mar 2019 13:58:30 -0400 Received: by mail-pg1-f194.google.com with SMTP id u9so8584811pgo.7; Sat, 16 Mar 2019 10:58:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=nD+VamgFg4au3bPjQ/QrkvUzoOQTX/WN4pmQo0ul2RE=; b=R+ByCgL+h1jQRHAz3GAe0LzcoKDZVpKor5BAvv39SoeUyk/nNRLBZ7kfW8LEknLng9 sWSfRLjMZ0o3MRxbFjjGZCAy23Jk6xW+iDAhPMNSwLVRZpS/bdsdI/C1u97oq9L6Pt5T ajCPqXVlgRk6qqOMCh5mrCL8grGQnvWRwOu+V2gfzg3LRPBrW+6ojyUpKiK7ct1hQ1hF HRZMSZkr2hBLrLq8Sv4LwlKRWqiGeHr9n6mSEVA6pfQuj5ME6Mr7Iu05JhE9p0EQ/Fwi nQjg8DJD/MN4MoRhj9ANwAaGwmj7Ft9izN7jjtU8kz08CFw9SssIaftR9vUH9sBEjsK7 endA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=nD+VamgFg4au3bPjQ/QrkvUzoOQTX/WN4pmQo0ul2RE=; b=fHkcLr++oGkPTbrla3PkfkuyMZrhmctW8Yngnt+nLS1DGEsMeFzQz2F/hGDAakDbTo J8NMrqaMriNS5kMvld9jYL4O7qXGcjRNUR4CuO45pR3PA5xdsRDBmbYfy65LKHA8LGUx ECq5s3ZfmHMqGVyl07L9qoBQbzy9bNNTS0PL52L+aI7jyfYOhQjfQSgzaWP1Z7XnI5DR XpC11lJamMepwt3zR1lpa3iJPZt7Xqw2l+wSPIMva+1zXyK78fbof+CD24Xt1s3xkg6j iVHa3fN07qqahFDMcEqrae3GC+BIzsc9T+1Vb8CQQlZ65uY3xMDcGQNofdHN7oYImWrZ Ta7A== X-Gm-Message-State: APjAAAXRypfC6818Jvr62Zfh/PBUU2xXmOu0Vfz7EtFJmE+cSDyG+h4h z6wGr2HlinxBipVPugTW/YEM7Db4huw= X-Received: by 2002:a65:6201:: with SMTP id d1mr7772670pgv.382.1552759109335; Sat, 16 Mar 2019 10:58:29 -0700 (PDT) Received: from castle.hsd1.ca.comcast.net ([2603:3024:1704:3e00::d657]) by smtp.gmail.com with ESMTPSA id p86sm11025638pfa.104.2019.03.16.10.58.27 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Sat, 16 Mar 2019 10:58:27 -0700 (PDT) From: Roman Gushchin X-Google-Original-From: Roman Gushchin To: Tejun Heo , Oleg Nesterov Cc: Roman Gushchin , kernel-team@fb.com, cgroups@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v9 8/9] cgroup: add tracing points for cgroup v2 freezer Date: Sat, 16 Mar 2019 10:58:11 -0700 Message-Id: <20190316175812.6787-9-guro@fb.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190316175812.6787-1-guro@fb.com> References: <20190316175812.6787-1-guro@fb.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Add cgroup:cgroup_freeze and cgroup:cgroup_unfreeze events, which are using the existing cgroup tracing infrastructure. Add the cgroup_event event class, which is similar to the cgroup class, but contains an additional integer field to store a new value (the level field is dropped). Also add two tracing events: cgroup_notify_populated and cgroup_notify_frozen, which are raised in a generic way using the TRACE_CGROUP_PATH() macro. This allows to trace cgroup state transitions and is generally helpful for debugging the cgroup freezer code. Signed-off-by: Roman Gushchin --- include/trace/events/cgroup.h | 55 +++++++++++++++++++++++++++++++++++ kernel/cgroup/cgroup.c | 2 ++ kernel/cgroup/freezer.c | 15 +++++++++- 3 files changed, 71 insertions(+), 1 deletion(-) diff --git a/include/trace/events/cgroup.h b/include/trace/events/cgroup.h index a401ff5e7847..a566cc521476 100644 --- a/include/trace/events/cgroup.h +++ b/include/trace/events/cgroup.h @@ -103,6 +103,20 @@ DEFINE_EVENT(cgroup, cgroup_rename, TP_ARGS(cgrp, path) ); +DEFINE_EVENT(cgroup, cgroup_freeze, + + TP_PROTO(struct cgroup *cgrp, const char *path), + + TP_ARGS(cgrp, path) +); + +DEFINE_EVENT(cgroup, cgroup_unfreeze, + + TP_PROTO(struct cgroup *cgrp, const char *path), + + TP_ARGS(cgrp, path) +); + DECLARE_EVENT_CLASS(cgroup_migrate, TP_PROTO(struct cgroup *dst_cgrp, const char *path, @@ -149,6 +163,47 @@ DEFINE_EVENT(cgroup_migrate, cgroup_transfer_tasks, TP_ARGS(dst_cgrp, path, task, threadgroup) ); +DECLARE_EVENT_CLASS(cgroup_event, + + TP_PROTO(struct cgroup *cgrp, const char *path, int val), + + TP_ARGS(cgrp, path, val), + + TP_STRUCT__entry( + __field( int, root ) + __field( int, id ) + __field( int, level ) + __string( path, path ) + __field( int, val ) + ), + + TP_fast_assign( + __entry->root = cgrp->root->hierarchy_id; + __entry->id = cgrp->id; + __entry->level = cgrp->level; + __assign_str(path, path); + __entry->val = val; + ), + + TP_printk("root=%d id=%d level=%d path=%s val=%d", + __entry->root, __entry->id, __entry->level, __get_str(path), + __entry->val) +); + +DEFINE_EVENT(cgroup_event, cgroup_notify_populated, + + TP_PROTO(struct cgroup *cgrp, const char *path, int val), + + TP_ARGS(cgrp, path, val) +); + +DEFINE_EVENT(cgroup_event, cgroup_notify_frozen, + + TP_PROTO(struct cgroup *cgrp, const char *path, int val), + + TP_ARGS(cgrp, path, val) +); + #endif /* _TRACE_CGROUP_H */ /* This part must be outside protection */ diff --git a/kernel/cgroup/cgroup.c b/kernel/cgroup/cgroup.c index 3225ebb8689c..b9d18fa16323 100644 --- a/kernel/cgroup/cgroup.c +++ b/kernel/cgroup/cgroup.c @@ -815,6 +815,8 @@ static void cgroup_update_populated(struct cgroup *cgrp, bool populated) break; cgroup1_check_for_release(cgrp); + TRACE_CGROUP_PATH(notify_populated, cgrp, + cgroup_is_populated(cgrp)); cgroup_file_notify(&cgrp->events_file); child = cgrp; diff --git a/kernel/cgroup/freezer.c b/kernel/cgroup/freezer.c index 8530aa5f4c69..cf28373b7528 100644 --- a/kernel/cgroup/freezer.c +++ b/kernel/cgroup/freezer.c @@ -6,6 +6,8 @@ #include "cgroup-internal.h" +#include + /* * Propagate the cgroup frozen state upwards by the cgroup tree. */ @@ -28,6 +30,7 @@ static void cgroup_propagate_frozen(struct cgroup *cgrp, bool frozen) cgrp->nr_descendants) { set_bit(CGRP_FROZEN, &cgrp->flags); cgroup_file_notify(&cgrp->events_file); + TRACE_CGROUP_PATH(notify_frozen, cgrp, 1); desc++; } } else { @@ -35,6 +38,7 @@ static void cgroup_propagate_frozen(struct cgroup *cgrp, bool frozen) if (test_bit(CGRP_FROZEN, &cgrp->flags)) { clear_bit(CGRP_FROZEN, &cgrp->flags); cgroup_file_notify(&cgrp->events_file); + TRACE_CGROUP_PATH(notify_frozen, cgrp, 0); desc++; } } @@ -73,6 +77,7 @@ void cgroup_update_frozen(struct cgroup *cgrp) clear_bit(CGRP_FROZEN, &cgrp->flags); } cgroup_file_notify(&cgrp->events_file); + TRACE_CGROUP_PATH(notify_frozen, cgrp, frozen); /* Update the state of ancestor cgroups. */ cgroup_propagate_frozen(cgrp, frozen); @@ -182,6 +187,11 @@ static void cgroup_do_freeze(struct cgroup *cgrp, bool freeze) clear_bit(CGRP_FREEZE, &cgrp->flags); spin_unlock_irq(&css_set_lock); + if (freeze) + TRACE_CGROUP_PATH(freeze, cgrp); + else + TRACE_CGROUP_PATH(unfreeze, cgrp); + css_task_iter_start(&cgrp->self, 0, &it); while ((task = css_task_iter_next(&it))) { /* @@ -305,6 +315,9 @@ void cgroup_freeze(struct cgroup *cgrp, bool freeze) * In both cases it's better to notify a user, that there is * nothing to wait for. */ - if (!applied) + if (!applied) { + TRACE_CGROUP_PATH(notify_frozen, cgrp, + test_bit(CGRP_FROZEN, &cgrp->flags)); cgroup_file_notify(&cgrp->events_file); + } } -- 2.20.1