Received: by 2002:a25:4158:0:0:0:0:0 with SMTP id o85csp500395yba; Fri, 5 Apr 2019 10:49:22 -0700 (PDT) X-Google-Smtp-Source: APXvYqz9ZmBDJiaakdMzv1uI67hmnw58Ft4hkMeVz69faexw8IaVKtPFuQIYLZv+0esaCN9iTtBz X-Received: by 2002:aa7:8083:: with SMTP id v3mr14130401pff.135.1554486561985; Fri, 05 Apr 2019 10:49:21 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1554486561; cv=none; d=google.com; s=arc-20160816; b=TSGaUIyHstYzV3tX63OkZqUYaSrTP5WdC6t48kWXd086EpnJgGY4CgkLio3ZyEU/xs 0KjcuxCCTNF1KRdUjvVG6+CsEIDvthiJtBXnpQ77fJ0zBuZ1SWX0Qbj9qzYfJLzAXQhr GBvHkP6h7lDyuBTRBlCMGhqvabwArT4g/8Ximb5t0CxKPVbaqeGOzllrKuNISxnMuERj 2arJEP9ICLA7bTEi5GD2CnKCEPnK3tqF2R7qjWgiEUz4czI7rm55EZP+AxgTDg/8UJBm bUOka2RgQ3WObpr9Tw9bkb+4/UP19OukxEWR/w7strp99+6XC+Kn3wMp9Jp25W9LqxV6 55kA== 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=+Xwgw7oNRWc5QUjdIzS9HWKC+CrbutV7TwPIITbbDd4=; b=yRv3DolKoixH2I88ecKi5CFW7VAI8dHgxzccd88gBiXVxCsl4wqt0SUzPECYE2PEQ7 aRI6T6dSw2WrGyhtHVAUsgXaHGvygKL5MwBI/oucHf5LmdIQazg2KOfidl2Hgkrn41AV qI5DKcjbMMzBBwo91maMK5KTqXp2Dk/lcC+OLPsa0peUqibxLtrDbgU/tJwJWPILtPxh +iY+WJKJh8cgF9v4zbtH1zqtIGyUQqSRZS2GeCMnOqYxuOvwgFQ618myToRFeSUCMfS7 nnOH4XgoElk2XZnOSlwUxxAWUehVCf+DrQKnTK/IABzTkE1FmOW4V8pAX4zYlxFb8wJG v6sQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=XDqeaeSn; 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 g21si19149889pgi.448.2019.04.05.10.49.07; Fri, 05 Apr 2019 10:49:21 -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=XDqeaeSn; 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 S1731813AbfDERsD (ORCPT + 99 others); Fri, 5 Apr 2019 13:48:03 -0400 Received: from mail-pg1-f195.google.com ([209.85.215.195]:42763 "EHLO mail-pg1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1731633AbfDERrn (ORCPT ); Fri, 5 Apr 2019 13:47:43 -0400 Received: by mail-pg1-f195.google.com with SMTP id p6so3447626pgh.9; Fri, 05 Apr 2019 10:47:42 -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=+Xwgw7oNRWc5QUjdIzS9HWKC+CrbutV7TwPIITbbDd4=; b=XDqeaeSnd2hPunQJv8l1EwYu+c818r6D50Dm5yMr6X0anpwLI1ih2M5mjd9pkF2Fjv +pnI4yAVsepRQ4w8wNmvSUBUGMtA3JQ4C4m7VF2irPc7ACPEEPSAnlasFp978zTu2vHE C+E5kA5Kf5iJRYpPulrRj7cv4MjjxSSS3kxJMSknmy5oytN/V5z2+trE17uoFb8nt4TR 6I3s4t3NAWtn5/8Dqg9kVEdsroQrJeeq/plurZSLRxrOOyLN6r0+TOmvYG0Doi5W0bct uP7VcTKdZN8E/wg0mibnD1x/X1s59oXpcXGxtu0WmYvq1JufuqFX87vgpJY1UvEcSLLH rUBA== 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=+Xwgw7oNRWc5QUjdIzS9HWKC+CrbutV7TwPIITbbDd4=; b=jvcl30UyuRHVyPeFuH9iOKyFH7tFhi8uZRVYdOtwdBB2PDikvpcVlwAdmuwIC0Xwel wf9v8pPRbIkc5ICkWeeE2EbZ1Fkcc/lKD5+adx3WwuLzpJBAleZvNmuaOWbLqGKWqQm1 /fY5fML5i1efbQ2TvyVG/tEDU2MEC/3L0WRejvifJgeqFbXZCkMJ5LOs1MjXhnfBeJfO /L4w01aSNWx7XFVidVTafcIeXKaQPV8QUzzEtqvNtcKQI+XkOA7j/cStwUbKsrYMOMXt V6xRaTWV2QFt8TvhbiUtMEnwBdHdwg+WR80FaG+xRFd3XGpII8oWQPJFcGMA0B8BMkdh lSZg== X-Gm-Message-State: APjAAAXhcdcjtrckpOlPBqVv2p7tLglbcc4YkytJi036aBsnzGB5tWD0 UFmVFXm+ycQNhnoBsqfwpCNuiTISd6E= X-Received: by 2002:a63:4620:: with SMTP id t32mr13252675pga.363.1554486462092; Fri, 05 Apr 2019 10:47:42 -0700 (PDT) Received: from tower.thefacebook.com ([2620:10d:c090:200::1:ad20]) by smtp.gmail.com with ESMTPSA id m2sm33169135pgr.74.2019.04.05.10.47.40 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Fri, 05 Apr 2019 10:47:41 -0700 (PDT) From: Roman Gushchin X-Google-Original-From: Roman Gushchin To: Tejun Heo , Oleg Nesterov Cc: kernel-team@fb.com, cgroups@vger.kernel.org, linux-kernel@vger.kernel.org, Roman Gushchin Subject: [PATCH v10 8/9] cgroup: add tracing points for cgroup v2 freezer Date: Fri, 5 Apr 2019 10:47:07 -0700 Message-Id: <20190405174708.1010-9-guro@fb.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190405174708.1010-1-guro@fb.com> References: <20190405174708.1010-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 6895464b54c6..57edcf398d71 100644 --- a/kernel/cgroup/cgroup.c +++ b/kernel/cgroup/cgroup.c @@ -816,6 +816,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 9d8cda478fc9..3bfbb3c8baf3 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); @@ -189,6 +194,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))) { /* @@ -312,6 +322,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