Received: by 2002:a05:6358:9144:b0:117:f937:c515 with SMTP id r4csp8218697rwr; Wed, 10 May 2023 20:42:09 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ7M6uze4UW/n+Px383nlVAYio8myKj7pHVvA3ZKJN3hm0sNxgpSFy28l2oGv48Ob3lzTzKu X-Received: by 2002:a17:903:25d5:b0:1ac:a661:a4bd with SMTP id jc21-20020a17090325d500b001aca661a4bdmr7142643plb.20.1683776529681; Wed, 10 May 2023 20:42:09 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1683776529; cv=none; d=google.com; s=arc-20160816; b=JCVgWN+FVKv24P8YJUj5ORKpvkpAUQx/6+YR4c84uz4CI9MTu6/BjKH5goHqm6FNgQ C9KEAZ0CDCvlN83ALvgYys6XIw/9ZaNduVxudrid+NjepdDTUkVsE9ZYzQQkjKhbhE+h xOlWqhT6q53JYP/JCYVRhgyZ2y3SoFMq+EGuA0H2XiO3p2jeG1nKRle5KkzUVleLwJ2F bnpEBxhHa9USezn6XixRQUoq9Y9l5zRX0nTtQWm+DpS18CqfLPDVD2iC8rAGXCiBxY8W d8xLrv7Od3DjmnbghLFvyt45G5lo5GXM7xY8IgN7o6n1miqUSj/rkqc5jeoswSjgrvSB 5zsg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:message-id:date:references :in-reply-to:subject:cc:to:from:dkim-signature; bh=9VphvYDUUTpJa6Y51rDbdnX2+VZhjxsrx/SPIlypOzg=; b=FmEGTaswz3ee+Tzqt0ruTxMEhPaRUdcG8xSn58SJDIb4ddgcsThfoc/uxSRiNVEqAk P+jjL5cbpeKvyhJgRnjBe9oUoTRezTJ13Meow02TIe4Xnf0iykH5v5RkqQGhK1OqsJuL JbfQsrM5QxzQj+QzEPmKGHZ56lTEKvlNh2awJ0VvKBzQrSmtjGvumRGp6SyZ6wq6U8pk YeZ2fH9T2iwhRnLj3fsqZudG9oqOZZmrzBZ9kHbWlf/HoHsFTGgaVCeK+ot7GZSZ7sc1 tncrioRu3QXtLuhF8qY1kV7wfbmuqRMpbc71hls+SFOZuW0EaCCglvbKmO/grjkFpYh3 gD5Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@ellerman.id.au header.s=201909 header.b=NJNN2mxn; 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 Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id jj9-20020a170903048900b001a64a25c7fbsi5357696plb.23.2023.05.10.20.41.55; Wed, 10 May 2023 20:42:09 -0700 (PDT) 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; dkim=pass header.i=@ellerman.id.au header.s=201909 header.b=NJNN2mxn; 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 S232005AbjEKDVk (ORCPT + 99 others); Wed, 10 May 2023 23:21:40 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36010 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229799AbjEKDVi (ORCPT ); Wed, 10 May 2023 23:21:38 -0400 Received: from gandalf.ozlabs.org (gandalf.ozlabs.org [150.107.74.76]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A8533E63; Wed, 10 May 2023 20:21:34 -0700 (PDT) Received: from authenticated.ozlabs.org (localhost [127.0.0.1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by mail.ozlabs.org (Postfix) with ESMTPSA id 4QGxy40qx8z4x2c; Thu, 11 May 2023 13:21:32 +1000 (AEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ellerman.id.au; s=201909; t=1683775292; bh=9VphvYDUUTpJa6Y51rDbdnX2+VZhjxsrx/SPIlypOzg=; h=From:To:Cc:Subject:In-Reply-To:References:Date:From; b=NJNN2mxnfu/5QYe7146XafzWTY72GFa0FBjWrl2NLrxKyugO0NAVfnvefKNqSd6pa yQzeAxhIemK5n1/e0B8WFeiOUkigosZGcXEkcK8l8kQ1qQNk/OQ+4+PdoZoVutNUq9 mFkl2ewnLvfRjTL9efoWJN5c14AkgYpUrfyPElVTvbpr1OCax+7l8CPQkZUET5fBE4 F488/tp145G5ISsXEhhYnOw7qJ/ZbGXVDqj45X75FmW0Ifq6CcdC0EH4JPwMlatPi1 COCqhjngty6kkF+aWLnfOykGPX2ig66VE9Wvld7fRyrnldUEGBEihtrS6EaG3QRXWi 7BQRutfI41uWQ== From: Michael Ellerman To: Nhat Pham , akpm@linux-foundation.org Cc: hannes@cmpxchg.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org, bfoster@redhat.com, willy@infradead.org, linux-api@vger.kernel.org, kernel-team@meta.com, linuxppc-dev@lists.ozlabs.org Subject: Re: [PATCH v13 3/3] selftests: Add selftests for cachestat In-Reply-To: <20230503013608.2431726-4-nphamcs@gmail.com> References: <20230503013608.2431726-1-nphamcs@gmail.com> <20230503013608.2431726-4-nphamcs@gmail.com> Date: Thu, 11 May 2023 13:21:28 +1000 Message-ID: <877ctfa6yv.fsf@mail.lhotse> MIME-Version: 1.0 Content-Type: text/plain X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,SPF_HELO_PASS,SPF_PASS, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 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 Nhat Pham writes: > Test cachestat on a newly created file, /dev/ files, and /proc/ files. > Also test on a shmem file (which can also be tested with huge pages > since tmpfs supports huge pages). > > Signed-off-by: Nhat Pham ... > diff --git a/tools/testing/selftests/cachestat/test_cachestat.c b/tools/testing/selftests/cachestat/test_cachestat.c > new file mode 100644 > index 000000000000..c3823b809c25 > --- /dev/null > +++ b/tools/testing/selftests/cachestat/test_cachestat.c > @@ -0,0 +1,258 @@ > +// SPDX-License-Identifier: GPL-2.0 > +#define _GNU_SOURCE > + > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > + > +#include "../kselftest.h" > + > +static const char * const dev_files[] = { > + "/dev/zero", "/dev/null", "/dev/urandom", > + "/proc/version", "/proc" > +}; > +static const int cachestat_nr = 451; > + > +void print_cachestat(struct cachestat *cs) > +{ > + ksft_print_msg( > + "Using cachestat: Cached: %lu, Dirty: %lu, Writeback: %lu, Evicted: %lu, Recently Evicted: %lu\n", > + cs->nr_cache, cs->nr_dirty, cs->nr_writeback, > + cs->nr_evicted, cs->nr_recently_evicted); > +} > + > +bool write_exactly(int fd, size_t filesize) > +{ > + char data[filesize]; On kernels with 64K pages (powerpc at least), this tries to allocate 64MB on the stack which segfaults. Allocating data with malloc avoids the problem and allows the test to pass. Looks like this commit is still in mm-unstable, so maybe Andrew can squash the incremental diff below in, if it looks OK to you. The diff is a bit big because I unindented the body of the function. cheers diff --git a/tools/testing/selftests/cachestat/test_cachestat.c b/tools/testing/selftests/cachestat/test_cachestat.c index 9be2262e5c17..54d09b820ed4 100644 --- a/tools/testing/selftests/cachestat/test_cachestat.c +++ b/tools/testing/selftests/cachestat/test_cachestat.c @@ -31,48 +31,59 @@ void print_cachestat(struct cachestat *cs) bool write_exactly(int fd, size_t filesize) { - char data[filesize]; - bool ret = true; int random_fd = open("/dev/urandom", O_RDONLY); + char *cursor, *data; + int remained; + bool ret; if (random_fd < 0) { ksft_print_msg("Unable to access urandom.\n"); ret = false; goto out; - } else { - int remained = filesize; - char *cursor = data; + } - while (remained) { - ssize_t read_len = read(random_fd, cursor, remained); + data = malloc(filesize); + if (!data) { + ksft_print_msg("Unable to allocate data.\n"); + ret = false; + goto close_random_fd; + } - if (read_len <= 0) { - ksft_print_msg("Unable to read from urandom.\n"); - ret = false; - goto close_random_fd; - } + remained = filesize; + cursor = data; - remained -= read_len; - cursor += read_len; + while (remained) { + ssize_t read_len = read(random_fd, cursor, remained); + + if (read_len <= 0) { + ksft_print_msg("Unable to read from urandom.\n"); + ret = false; + goto out_free_data; } - /* write random data to fd */ - remained = filesize; - cursor = data; - while (remained) { - ssize_t write_len = write(fd, cursor, remained); + remained -= read_len; + cursor += read_len; + } - if (write_len <= 0) { - ksft_print_msg("Unable write random data to file.\n"); - ret = false; - goto close_random_fd; - } + /* write random data to fd */ + remained = filesize; + cursor = data; + while (remained) { + ssize_t write_len = write(fd, cursor, remained); - remained -= write_len; - cursor += write_len; + if (write_len <= 0) { + ksft_print_msg("Unable write random data to file.\n"); + ret = false; + goto out_free_data; } + + remained -= write_len; + cursor += write_len; } + ret = true; +out_free_data: + free(data); close_random_fd: close(random_fd); out: