From patchwork Mon Jan 23 17:37:48 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stefan Roesch X-Patchwork-Id: 47289 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:eb09:0:0:0:0:0 with SMTP id s9csp1743431wrn; Mon, 23 Jan 2023 10:05:45 -0800 (PST) X-Google-Smtp-Source: AMrXdXt4yzZ0W3Qrf0ggXLl2MRMBNGS8Z2FeA4jbeaC1opaYlsc2d7I6O9np4ioGRrxc5QKyaJQE X-Received: by 2002:a05:6402:1770:b0:48e:9afd:de66 with SMTP id da16-20020a056402177000b0048e9afdde66mr26525940edb.34.1674497144986; Mon, 23 Jan 2023 10:05:44 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1674497144; cv=none; d=google.com; s=arc-20160816; b=XbSkSU31KlgR8xYw/AHU2mA1sVb/uNpM3tBno0HonEqXltd0ts1DfLBTS62pANBKkK BMcUB0Haj5rFFl14j7C6BVYMJeP/xMcf9/chRyY1njpRN37hsOp78kxpm05fqyyR61wo Yreym92La/LoUPTM/R7OodFrMzUzWrLaqfUJaLs57HFJO6jits6eyC7WHASqzaiMUtKa b+zfHbA0/hcTJTluwd+VSe+0Y1bcvwurppnrhD2SYy/VQeuapDJDHr3vOrrBQQ31s3m5 u7B3EA/M+uEz60brJuIRNFgaPdRERnZYtcmRBDICKfHmwCRX4ws7H3Xj/noJu+/NvgbA JG3g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=taEcnC/WZm0w3gtaQ6mI5xKRplneQ9QYqvw5OXfWRYE=; b=YKbzyYZZM/AIKb1xJHzJzmGJ8zvkPhV18Wi7xuD0Ki+LseixbTj0r3MczeDf7/Kbmt ljT4Hag25GmVilpbxr0Jsc6D2bJbOzpvT81nrbHhbTpB2rHFO44I4JFW+HRC3kLeUSGn CNHUVnpn97DUGCB7JPpV4fa/P3+cPwdacNNYnemV75dDcoS9eMCWFEemecky8AmCTDn+ hOd2G8JueuPPCdlYl50ILjCqwHo070XKWN2GaqdjRCdP47BaDY1H5vTThm/3w6xTqzaO jfqM5tZoQBrhDRF8zNcrpkeMAHyIoMrIfLRxh1sQIJ6T/XSPv4XFenFmj6B5e5Br1g7j ngkw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id p5-20020a056402500500b00494cb3beb5bsi25874eda.180.2023.01.23.10.05.21; Mon, 23 Jan 2023 10:05:44 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233158AbjAWSAk (ORCPT + 99 others); Mon, 23 Jan 2023 13:00:40 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38610 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233179AbjAWSAU (ORCPT ); Mon, 23 Jan 2023 13:00:20 -0500 Received: from 66-220-144-178.mail-mxout.facebook.com (66-220-144-178.mail-mxout.facebook.com [66.220.144.178]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 2DB4923DA5 for ; Mon, 23 Jan 2023 10:00:17 -0800 (PST) Received: by dev0134.prn3.facebook.com (Postfix, from userid 425415) id 910905616BFB; Mon, 23 Jan 2023 09:37:56 -0800 (PST) From: Stefan Roesch To: linux-mm@kvack.org Cc: shr@devkernel.io, linux-doc@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-trace-kernel@vger.kernel.org Subject: [RESEND RFC PATCH v1 20/20] selftests/vm: add two functions for debugging merge outcome Date: Mon, 23 Jan 2023 09:37:48 -0800 Message-Id: <20230123173748.1734238-21-shr@devkernel.io> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20230123173748.1734238-1-shr@devkernel.io> References: <20230123173748.1734238-1-shr@devkernel.io> MIME-Version: 1.0 X-Spam-Status: No, score=2.4 required=5.0 tests=BAYES_00,RDNS_DYNAMIC, SPF_HELO_PASS,SPF_NEUTRAL,SUSPICIOUS_RECIPS,TVD_RCVD_IP autolearn=no autolearn_force=no version=3.4.6 X-Spam-Level: ** X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1755837518536736716?= X-GMAIL-MSGID: =?utf-8?q?1755837518536736716?= This adds two functions to report the metrics in /proc/self/ksm_stat and /sys/kernel/debug/mm/ksm. The debugging can be enabled with the following command line: make -C tools/testing/selftests TARGETS="vm" --keep-going \ EXTRA_CFLAGS=-DDEBUG=1 Signed-off-by: Stefan Roesch --- tools/testing/selftests/vm/ksm_tests.c | 54 ++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) diff --git a/tools/testing/selftests/vm/ksm_tests.c b/tools/testing/selftests/vm/ksm_tests.c index a0a48ac43b29..9fb21b982dc9 100644 --- a/tools/testing/selftests/vm/ksm_tests.c +++ b/tools/testing/selftests/vm/ksm_tests.c @@ -93,6 +93,55 @@ static int ksm_read_sysfs(const char *file_path, unsigned long *val) return 0; } +#ifdef DEBUG +static void ksm_print_sysfs(void) +{ + unsigned long max_page_sharing, pages_sharing, pages_shared; + unsigned long full_scans, pages_unshared, pages_volatile; + unsigned long stable_node_chains, stable_node_dups; + long general_profit; + + if (ksm_read_sysfs(KSM_FP("pages_shared"), &pages_shared) || + ksm_read_sysfs(KSM_FP("pages_sharing"), &pages_sharing) || + ksm_read_sysfs(KSM_FP("max_page_sharing"), &max_page_sharing) || + ksm_read_sysfs(KSM_FP("full_scans"), &full_scans) || + ksm_read_sysfs(KSM_FP("pages_unshared"), &pages_unshared) || + ksm_read_sysfs(KSM_FP("pages_volatile"), &pages_volatile) || + ksm_read_sysfs(KSM_FP("stable_node_chains"), &stable_node_chains) || + ksm_read_sysfs(KSM_FP("stable_node_dups"), &stable_node_dups) || + ksm_read_sysfs(KSM_FP("general_profit"), (unsigned long *)&general_profit)) + return; + + printf("pages_shared : %lu\n", pages_shared); + printf("pages_sharing : %lu\n", pages_sharing); + printf("max_page_sharing : %lu\n", max_page_sharing); + printf("full_scans : %lu\n", full_scans); + printf("pages_unshared : %lu\n", pages_unshared); + printf("pages_volatile : %lu\n", pages_volatile); + printf("stable_node_chains: %lu\n", stable_node_chains); + printf("stable_node_dups : %lu\n", stable_node_dups); + printf("general_profit : %ld\n", general_profit); +} + +static void ksm_print_procfs(void) +{ + const char *file_name = "/proc/self/ksm_stat"; + char buffer[512]; + FILE *f = fopen(file_name, "r"); + + if (!f) { + fprintf(stderr, "f %s\n", file_name); + perror("fopen"); + return; + } + + while (fgets(buffer, sizeof(buffer), f)) + printf("%s", buffer); + + fclose(f); +} +#endif + static int str_to_prot(char *prot_str) { int prot = 0; @@ -237,6 +286,11 @@ static bool assert_ksm_pages_count(long dupl_page_count) ksm_read_sysfs(KSM_FP("max_page_sharing"), &max_page_sharing)) return false; +#ifdef DEBUG + ksm_print_sysfs(); + ksm_print_procfs(); +#endif + /* * Since there must be at least 2 pages for merging and 1 page can be * shared with the limited number of pages (max_page_sharing), sometimes