linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
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>


      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).