From patchwork Sat Mar 4 03:48:35 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sergey Senozhatsky X-Patchwork-Id: 13159782 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 277D3C6FD18 for ; Sat, 4 Mar 2023 03:48:55 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id B55C76B007D; Fri, 3 Mar 2023 22:48:54 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id AB7BB6B007E; Fri, 3 Mar 2023 22:48:54 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 92ED56B0080; Fri, 3 Mar 2023 22:48:54 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0014.hostedemail.com [216.40.44.14]) by kanga.kvack.org (Postfix) with ESMTP id 844D56B007D for ; Fri, 3 Mar 2023 22:48:54 -0500 (EST) Received: from smtpin01.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id 55CD1A0243 for ; Sat, 4 Mar 2023 03:48:54 +0000 (UTC) X-FDA: 80529834588.01.31C377B Received: from mail-pl1-f182.google.com (mail-pl1-f182.google.com [209.85.214.182]) by imf04.hostedemail.com (Postfix) with ESMTP id 8A72640012 for ; Sat, 4 Mar 2023 03:48:52 +0000 (UTC) Authentication-Results: imf04.hostedemail.com; dkim=pass header.d=chromium.org header.s=google header.b=ma0hJFSM; spf=pass (imf04.hostedemail.com: domain of senozhatsky@chromium.org designates 209.85.214.182 as permitted sender) smtp.mailfrom=senozhatsky@chromium.org; dmarc=pass (policy=none) header.from=chromium.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1677901732; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=VDa9Rt5gN+wqseziIq8dAlRWmwkEfGNI/W086ilXD04=; b=rdVU9tsVa0hQnOZasgDQJnGhgyNwLwYWcuLcTt0RYKar4HuANEquo6t+blDnexdtCcUrE4 Z6kYNWPqvjusEcGbxqaxglL0mNpiP230qLVB9xrD15dM7jEnA4dI3YX41prPNZ5H1GiQ/x ndl16WGxWPxR93CcsxaR0+8k+tvC7LA= ARC-Authentication-Results: i=1; imf04.hostedemail.com; dkim=pass header.d=chromium.org header.s=google header.b=ma0hJFSM; spf=pass (imf04.hostedemail.com: domain of senozhatsky@chromium.org designates 209.85.214.182 as permitted sender) smtp.mailfrom=senozhatsky@chromium.org; dmarc=pass (policy=none) header.from=chromium.org ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1677901732; a=rsa-sha256; cv=none; b=G7JsNAsaNP/3UivlDnXmjbweo2oRMY5asGXG8GF0QPrmGDkGgtL+6n7q57MjtagAJcnE+z QjICZteLoAzb9wRDTicQd3He4Qdq2X1Riomezt/50wQs7Pn5mAL74lH/QRvWtXQ6j3mKXT DGxkG7VK5PnkUTI50V4jU4byhr/n5lo= Received: by mail-pl1-f182.google.com with SMTP id v11so4771673plz.8 for ; Fri, 03 Mar 2023 19:48:52 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=VDa9Rt5gN+wqseziIq8dAlRWmwkEfGNI/W086ilXD04=; b=ma0hJFSMBbjPeOiDUGSPZH6UdO2Bu0ejhFXINdaxj+UMAC+rJPSDWse/UcI3XjdJB7 XawTUDuCcYalqmSOEk5p0AaYQkVlIA52BdOk2CEjoo8NtEnudjtGwVlkDwdoKSwqAHFz nVpsbZEnKloellNxEGTwamXMjFp6+noHmgOSg= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=VDa9Rt5gN+wqseziIq8dAlRWmwkEfGNI/W086ilXD04=; b=VkNB51DDi8ajWS/Ghg2scdTt0HSasdd69ObMzSeuEI64tT3M3CfS3ibizc+taLrNX4 2FZ4iBvH5QGoao1iU+DSk9mbteAniSyeSBnJcFmabF1EJhYDwmCpCtBnk11eNSpAGG/W QeTRJooUMPmZcXIuA9u5COdkYw2zFTL9fImljIxjPqtp80rmYCxwubg1s4UhhhjJ46LT dCcWlXafZvwZTbXqMM4F7717iejn89GjPJaFpFoD5v0NNHhX9EKWlhdZNMVzp3+yMJnG bdk6/eO/eLF2+34220KpjXopec6Q4wOzqlB8SsxVxeBL1n/5hZnLFDhE37QBMsnrU6eM g9ug== X-Gm-Message-State: AO0yUKVdM8xi6h2Mtc2XSWrdTFyMZ3Ig8uy9mIka1nlRzZ6LzWNDyJag 7xVLVQHzqEPtnUntFYcIXZGzFw== X-Google-Smtp-Source: AK7set+fQINFAZ8pGr8zRqFr/P11wMfjLik9Ns7+gC6nbPtWNZv37U4HFsrWhKuOWZaethOn90CMKw== X-Received: by 2002:a17:903:1249:b0:19a:ad90:4223 with SMTP id u9-20020a170903124900b0019aad904223mr4358621plh.48.1677901731582; Fri, 03 Mar 2023 19:48:51 -0800 (PST) Received: from tigerii.tok.corp.google.com ([2401:fa00:8f:203:6ac2:6eee:5465:7ee6]) by smtp.gmail.com with ESMTPSA id d6-20020a170902c18600b00199025284b3sm2249204pld.151.2023.03.03.19.48.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 03 Mar 2023 19:48:51 -0800 (PST) From: Sergey Senozhatsky To: Minchan Kim , Andrew Morton Cc: Yosry Ahmed , linux-kernel@vger.kernel.org, linux-mm@kvack.org, Sergey Senozhatsky Subject: [PATCHv4 4/4] zsmalloc: show per fullness group class stats Date: Sat, 4 Mar 2023 12:48:35 +0900 Message-Id: <20230304034835.2082479-5-senozhatsky@chromium.org> X-Mailer: git-send-email 2.40.0.rc0.216.gc4246ad0f0-goog In-Reply-To: <20230304034835.2082479-1-senozhatsky@chromium.org> References: <20230304034835.2082479-1-senozhatsky@chromium.org> MIME-Version: 1.0 X-Rspamd-Server: rspam07 X-Rspamd-Queue-Id: 8A72640012 X-Rspam-User: X-Stat-Signature: hi4dzpeq1h9rggr78j9ssmk99ba9i53u X-HE-Tag: 1677901732-443148 X-HE-Meta: U2FsdGVkX19jNpFrx2p3S3+mwP96FRrlaKVg3QSX/aaGGxxE+v7smv77pGYZUdFFJ1cP8qxKlUhD1bt/l3L1QknaYUjmHGcs7s6hYs+bEFSlFCBg2zzhYHjrKhLJDDexW6OqZbY5/a80pI/p/wDG+1hFChRUVkgAmJEhxzvcOLNXRLq8yYs8Ke4Qp/4ZTMcs9z2ajPdc93WrwosE9yYhLo2ntRmqJ3v9XzjnLw9TAvbFKRBXTPLmVt2zkz3bqARwLYWO0P9QnjFt/QlLCGiNp2F5+UWQlWlE9mvyFTHFRDCA0lMpW7/5laQnjQUMY5Mhb+KjvMEvru7gzuq0Jjwn8Gnn6djgwyt2s6oW4kzJ1PY+VxsPJJZ1yyF52a27/3TvypD3NhlyeVvyJ8QnL+LC6HFeyg7zyBIBpZREduu0ETyu5tIUf4+xicKMILUHRSzSuYx9HtwsvsOoupSzXH8hOvk8MEi99zw6bwC3vdvewh8UXY4cOhZP5GOYISwOpkojclUqXlmFjbS1ij5gkHewGIwWgOTKL8ga+zs2P0mq0ibr3hT5zMscD1J23xLwiDGFeEB8fgHEBELJRLl+RBcTd8+kuD2godUZGZ3jLDNye9rsVCPM4l0HLqVBn/jCHje9s1XowmyAlLympZ6ivMyeMRNC8Rxx2o4HqprAW5yMC2uCUPUoYl9Ivf9NgGYlGPlIvDEdy9T3rTn37gnOXBuYUHeNDBErhlFxoILYZAwNKyUeTRYFcz0lLpSpveczNFFE886EUKd1Y54eJ2+ZriSUwAJG1WaazJSKFtlfxEMhHBksM7kbFQyfv8Fe924Yo+CZXDXGF5lFuP7CA/G2IGfnM6u8kh/MN1UHwamMw+UeddZJXaSk3uvXBXydm/fnT+DSVj8iNmH94Yw9MSY9MzEcxVGrWAnrJCpYAwovBScRJvO4jBDMAlYtlC1L/7P1hQDy1Wq8sTEgdv11Cvz3XiN OoAMUDCI PPBxIsn1PXF9mInQigyK/fAnyAyT1pht52dy6YORxpTJGqV2YKVfp8oyFNL5gJkh0Wg/a6Om+cO5Ya7cjWpoG0+Yvg3Uia5JICYIpX+7D1DdXkDNtX4yGVmD7YTJWz9pcB6wdqTMdyvAIZq0k54W0YXaJoDUOOyr458NrmCdZvvcOsNxlM6e/1A9ZKkoyl3WWb5rQsvjz17uJf39iuOC0DBmdhVvf+0PKoJqGowuKUczkBwMDwejFzzUAvoO9Aa+TQEizSI9rcTxsJdjaBikoeVmWkAErnRFiapAIzycJb7LURHkqq2NJrQxfr3HA7P8k+fsdrP/cZ92g6Jd8wyber7+g7NwhReMvbCDQKZEAHSPu82+HP3+89Xuy61I71wJ/XQEF9e7XSdZSUffmKkdjyAGD4ALTQa2A8sIuFX55EH4fvl4= 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: We keep the old fullness (3/4 threshold) reporting in zs_stats_size_show(). Switch from allmost full/empty stats to fine-grained per inuse ratio (fullness group) reporting, which gives signicantly more data on classes fragmentation. Signed-off-by: Sergey Senozhatsky --- mm/zsmalloc.c | 53 ++++++++++++++++++++++----------------------------- 1 file changed, 23 insertions(+), 30 deletions(-) diff --git a/mm/zsmalloc.c b/mm/zsmalloc.c index a61540afbb28..aea50e2aa350 100644 --- a/mm/zsmalloc.c +++ b/mm/zsmalloc.c @@ -172,9 +172,7 @@ enum fullness_group { ZS_INUSE_RATIO_0, ZS_INUSE_RATIO_10, - /* NOTE: 5 more fullness groups here */ - ZS_INUSE_RATIO_70 = 7, - /* NOTE: 2 more fullness groups here */ + /* NOTE: 8 more fullness groups here */ ZS_INUSE_RATIO_99 = 10, ZS_INUSE_RATIO_100, NR_FULLNESS_GROUPS, @@ -621,23 +619,22 @@ static unsigned long zs_can_compact(struct size_class *class); static int zs_stats_size_show(struct seq_file *s, void *v) { - int i; + int i, fg; struct zs_pool *pool = s->private; struct size_class *class; int objs_per_zspage; - unsigned long class_almost_full, class_almost_empty; unsigned long obj_allocated, obj_used, pages_used, freeable; - unsigned long total_class_almost_full = 0, total_class_almost_empty = 0; unsigned long total_objs = 0, total_used_objs = 0, total_pages = 0; unsigned long total_freeable = 0; + unsigned long inuse_totals[NR_FULLNESS_GROUPS] = {0, }; - seq_printf(s, " %5s %5s %11s %12s %13s %10s %10s %16s %8s\n", - "class", "size", "almost_full", "almost_empty", + seq_printf(s, " %5s %5s %9s %9s %9s %9s %9s %9s %9s %9s %9s %9s %9s %13s %10s %10s %16s %8s\n", + "class", "size", "10%", "20%", "30%", "40%", + "50%", "60%", "70%", "80%", "90%", "99%", "100%", "obj_allocated", "obj_used", "pages_used", "pages_per_zspage", "freeable"); for (i = 0; i < ZS_SIZE_CLASSES; i++) { - int fg; class = pool->size_class[i]; @@ -645,16 +642,12 @@ static int zs_stats_size_show(struct seq_file *s, void *v) continue; spin_lock(&pool->lock); - class_almost_full = 0; - class_almost_empty = 0; - /* - * Replicate old behaviour for almost_full and almost_empty - * stats. - */ - for (fg = ZS_INUSE_RATIO_70; fg <= ZS_INUSE_RATIO_99; fg++) - class_almost_full += zs_stat_get(class, fg); - for (fg = ZS_INUSE_RATIO_10; fg < ZS_INUSE_RATIO_70; fg++) - class_almost_empty += zs_stat_get(class, fg); + + seq_printf(s, " %5u %5u ", i, class->size); + for (fg = ZS_INUSE_RATIO_10; fg < NR_FULLNESS_GROUPS; fg++) { + inuse_totals[fg] += zs_stat_get(class, fg); + seq_printf(s, "%9lu ", zs_stat_get(class, fg)); + } obj_allocated = zs_stat_get(class, ZS_OBJS_ALLOCATED); obj_used = zs_stat_get(class, ZS_OBJS_INUSE); @@ -665,14 +658,10 @@ static int zs_stats_size_show(struct seq_file *s, void *v) pages_used = obj_allocated / objs_per_zspage * class->pages_per_zspage; - seq_printf(s, " %5u %5u %11lu %12lu %13lu" - " %10lu %10lu %16d %8lu\n", - i, class->size, class_almost_full, class_almost_empty, - obj_allocated, obj_used, pages_used, - class->pages_per_zspage, freeable); + seq_printf(s, "%13lu %10lu %10lu %16d %8lu\n", + obj_allocated, obj_used, pages_used, + class->pages_per_zspage, freeable); - total_class_almost_full += class_almost_full; - total_class_almost_empty += class_almost_empty; total_objs += obj_allocated; total_used_objs += obj_used; total_pages += pages_used; @@ -680,10 +669,14 @@ static int zs_stats_size_show(struct seq_file *s, void *v) } seq_puts(s, "\n"); - seq_printf(s, " %5s %5s %11lu %12lu %13lu %10lu %10lu %16s %8lu\n", - "Total", "", total_class_almost_full, - total_class_almost_empty, total_objs, - total_used_objs, total_pages, "", total_freeable); + seq_printf(s, " %5s %5s ", "Total", ""); + + for (fg = ZS_INUSE_RATIO_10; fg < NR_FULLNESS_GROUPS; fg++) + seq_printf(s, "%9lu ", inuse_totals[fg]); + + seq_printf(s, "%13lu %10lu %10lu %16s %8lu\n", + total_objs, total_used_objs, total_pages, "", + total_freeable); return 0; }