From: Nhat Pham <nphamcs@gmail.com>
To: Michael Ellerman <mpe@ellerman.id.au>
Cc: akpm@linux-foundation.org, 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
Date: Thu, 11 May 2023 12:33:05 -0700 [thread overview]
Message-ID: <CAKEwX=MX+2Y-Qt5xSS_DF66X6aqrkOAUVi2vSt68K4y1_s4Lqw@mail.gmail.com> (raw)
In-Reply-To: <877ctfa6yv.fsf@mail.lhotse>
On Wed, May 10, 2023 at 8:21 PM Michael Ellerman <mpe@ellerman.id.au> wrote:
>
> Nhat Pham <nphamcs@gmail.com> 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 <nphamcs@gmail.com>
> ...
> > 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 <stdio.h>
> > +#include <stdbool.h>
> > +#include <linux/kernel.h>
> > +#include <linux/mman.h>
> > +#include <sys/mman.h>
> > +#include <sys/shm.h>
> > +#include <sys/syscall.h>
> > +#include <unistd.h>
> > +#include <string.h>
> > +#include <fcntl.h>
> > +#include <errno.h>
> > +
> > +#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:
>
Oh this is nice! I had to make a similar fix in another test
of mine, but forgot about it in this context.
LGTM. For verification, I have applied the diff and test on
my own local setup. Things still pass.
Acked-by: Nhat Pham <nphamcs@gmail.com>
prev parent reply other threads:[~2023-05-11 19:33 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-05-03 1:36 [PATCH v13 0/3] cachestat: a new syscall for page cache state of files Nhat Pham
2023-05-03 1:36 ` [PATCH v13 1/3] workingset: refactor LRU refault to expose refault recency check Nhat Pham
2023-05-03 14:31 ` Johannes Weiner
2023-05-03 1:36 ` [PATCH v13 2/3] cachestat: implement cachestat syscall Nhat Pham
2023-05-03 15:04 ` Johannes Weiner
2023-05-04 2:25 ` Nhat Pham
2023-05-04 17:26 ` Geert Uytterhoeven
2023-05-04 18:06 ` Nhat Pham
2023-05-05 20:34 ` Andrew Morton
2023-05-06 17:35 ` Arnd Bergmann
2023-05-10 23:20 ` Nhat Pham
2023-05-03 1:36 ` [PATCH v13 3/3] selftests: Add selftests for cachestat Nhat Pham
2023-05-03 15:22 ` Johannes Weiner
2023-05-11 3:21 ` Michael Ellerman
2023-05-11 19:33 ` Nhat Pham [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to='CAKEwX=MX+2Y-Qt5xSS_DF66X6aqrkOAUVi2vSt68K4y1_s4Lqw@mail.gmail.com' \
--to=nphamcs@gmail.com \
--cc=akpm@linux-foundation.org \
--cc=bfoster@redhat.com \
--cc=hannes@cmpxchg.org \
--cc=kernel-team@meta.com \
--cc=linux-api@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=linuxppc-dev@lists.ozlabs.org \
--cc=mpe@ellerman.id.au \
--cc=willy@infradead.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).