public inbox for ltp@lists.linux.it
 help / color / mirror / Atom feed
* [LTP] [PATCH v3] syscalls/madvise04: new test for madvise(MADV_DONTNEED)
@ 2022-10-13 13:47 Zhao Gongyi via ltp
  2022-10-13 13:47 ` [LTP] [PATCH v4 0/4] new test for madvise(MADV_DONTNEED/MADV_REMOVE) Zhao Gongyi via ltp
                   ` (4 more replies)
  0 siblings, 5 replies; 11+ messages in thread
From: Zhao Gongyi via ltp @ 2022-10-13 13:47 UTC (permalink / raw)
  To: ltp

Test cases for madvise(2) system call, verify that MADV_DONTNEED
can be applied to Huge TLB pages after kernel version 5.18.

Signed-off-by: Zhao Gongyi <zhaogongyi@huawei.com>
---
 runtest/syscalls                              |  1 +
 testcases/kernel/syscalls/madvise/.gitignore  |  1 +
 testcases/kernel/syscalls/madvise/madvise04.c | 49 +++++++++++++++++++
 3 files changed, 51 insertions(+)
 create mode 100644 testcases/kernel/syscalls/madvise/madvise04.c

diff --git a/runtest/syscalls b/runtest/syscalls
index c81764df4..eb1910cec 100644
--- a/runtest/syscalls
+++ b/runtest/syscalls
@@ -941,6 +941,7 @@ mincore04 mincore04
 madvise01 madvise01
 madvise02 madvise02
 madvise03 madvise03
+madvise04 madvise04
 madvise05 madvise05
 madvise06 madvise06
 madvise07 madvise07
diff --git a/testcases/kernel/syscalls/madvise/.gitignore b/testcases/kernel/syscalls/madvise/.gitignore
index f4bfdfefe..db8ce47c1 100644
--- a/testcases/kernel/syscalls/madvise/.gitignore
+++ b/testcases/kernel/syscalls/madvise/.gitignore
@@ -1,6 +1,7 @@
 /madvise01
 /madvise02
 /madvise03
+/madvise04
 /madvise05
 /madvise06
 /madvise07
diff --git a/testcases/kernel/syscalls/madvise/madvise04.c b/testcases/kernel/syscalls/madvise/madvise04.c
new file mode 100644
index 000000000..ba15de092
--- /dev/null
+++ b/testcases/kernel/syscalls/madvise/madvise04.c
@@ -0,0 +1,49 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+/*
+ * Copyright (c) Huawei Technologies Co., Ltd. 2022. All rights reserved.
+ * Author: Zhao Gongyi <zhaogongyi@huawei.com>
+ */
+
+/*\
+ * [Description]
+ *
+ * Test cases for madvise(2) system call, advise value as "MADV_MADV_DONTNEED":
+ *   MADV_DONTNEED can be applied to Huge TLB pages after kernel version 5.18.
+ */
+
+#include "tst_test.h"
+
+#define MAP_SIZE (8 * 1024)
+
+static char *addr;
+static int mapsz;
+
+static void run(void)
+{
+	TST_EXP_PASS(madvise(addr, mapsz, MADV_DONTNEED));
+}
+
+static void setup(void)
+{
+	mapsz = tst_get_hugepage_size();
+	addr = SAFE_MMAP(NULL, mapsz,
+			PROT_READ | PROT_WRITE,
+			MAP_PRIVATE | MAP_ANONYMOUS | MAP_HUGETLB,
+			-1, 0);
+}
+
+static void cleanup(void)
+{
+	if (addr)
+		SAFE_MUNMAP(addr, mapsz);
+}
+
+static struct tst_test test = {
+	.test_all = run,
+	.setup = setup,
+	.cleanup = cleanup,
+	.min_kver = "5.18",
+	.needs_root = 1,
+	.hugepages = {1, TST_NEEDS},
+};
+
--
2.17.1


-- 
Mailing list info: https://lists.linux.it/listinfo/ltp

^ permalink raw reply related	[flat|nested] 11+ messages in thread
* Re: [LTP] [PATCH v4 2/4] syscalls/madvise11: new test for madvise(MADV_DONTNEED)
@ 2022-10-26  9:19 zhaogongyi via ltp
  0 siblings, 0 replies; 11+ messages in thread
From: zhaogongyi via ltp @ 2022-10-26  9:19 UTC (permalink / raw)
  To: rpalethorpe@suse.de; +Cc: ltp@lists.linux.it

Hi,

> 
> Hello,
> 
> Zhao Gongyi via ltp <ltp@lists.linux.it> writes:
> 
> > Check that madvise(2) MADV_DONTNEED applied to shared mappings
> will
> > lead to the resident set size(RSS) of the calling process reduced
> immediately.
> >
> > Signed-off-by: Zhao Gongyi <zhaogongyi@huawei.com>
> > ---
> >  runtest/syscalls                              |  1 +
> >  testcases/kernel/syscalls/madvise/.gitignore  |  1 +
> > testcases/kernel/syscalls/madvise/madvise11.c | 82
> +++++++++++++++++++
> >  3 files changed, 84 insertions(+)
> >  create mode 100644 testcases/kernel/syscalls/madvise/madvise11.c
> >
> > diff --git a/runtest/syscalls b/runtest/syscalls index
> > eb1910cec..296af9f9d 100644
> > --- a/runtest/syscalls
> > +++ b/runtest/syscalls
> > @@ -948,6 +948,7 @@ madvise07 madvise07
> >  madvise08 madvise08
> >  madvise09 madvise09
> >  madvise10 madvise10
> > +madvise11 madvise11
> >
> >  newuname01 newuname01
> >
> > diff --git a/testcases/kernel/syscalls/madvise/.gitignore
> > b/testcases/kernel/syscalls/madvise/.gitignore
> > index db8ce47c1..ffd8823d1 100644
> > --- a/testcases/kernel/syscalls/madvise/.gitignore
> > +++ b/testcases/kernel/syscalls/madvise/.gitignore
> > @@ -8,3 +8,4 @@
> >  /madvise08
> >  /madvise09
> >  /madvise10
> > +/madvise11
> > diff --git a/testcases/kernel/syscalls/madvise/madvise11.c
> > b/testcases/kernel/syscalls/madvise/madvise11.c
> > new file mode 100644
> > index 000000000..0132c091c
> > --- /dev/null
> > +++ b/testcases/kernel/syscalls/madvise/madvise11.c
> > @@ -0,0 +1,82 @@
> > +// SPDX-License-Identifier: GPL-2.0-or-later
> > +/*
> > + * Copyright (c) Huawei Technologies Co., Ltd. 2022. All rights reserved.
> > + * Author: Zhao Gongyi <zhaogongyi@huawei.com>  */
> > +
> > +/*\
> > + * [Description]
> > + *
> > + * Check that madvise(2) MADV_DONTNEED applied to shared
> mappings
> > +will lead to
> > + * the resident set size(RSS) of the calling process reduced immediately.
> > + */
> > +
> > +#include <stdio.h>
> > +#include <stdlib.h>
> > +#include "tst_test.h"
> > +
> > +#define MAP_SIZE (8 * 1024)
> > +#define BUF_SIZE 1024
> > +
> > +static FILE *fp;
> > +static char *addr;
> > +
> > +static void run(void)
> > +{
> > +	char cmd[BUF_SIZE];
> > +	char line[BUF_SIZE];
> > +	char vm_area_addr[128];
> > +
> > +	TEST(madvise(addr, MAP_SIZE, MADV_DONTNEED));
> > +	if (TST_RET == -1) {
> > +		tst_brk(TBROK | TTERRNO, "madvise(%p, %d, 0x%x) failed",
> > +			addr, MAP_SIZE, MADV_DONTNEED);
> > +	}
> 
> You have a lot of madvise patches, so why not create SAFE_MADVISE?

Yes, it seems more better, thanks!


> 
> Or there are the TST_EXP_* macros.
> 
> > +
> > +	sprintf(vm_area_addr, "%p", addr);
> > +	sprintf(cmd, "cat /proc/%d/smaps", getpid());
> > +	fp = popen(cmd, "r");
> > +
> > +	/* Find the vm area */
> > +	while (fgets(line, sizeof(line), fp) != NULL) {
> > +		if (strstr(line, &(vm_area_addr[2])))
> 
> AFAICT this could match more than one line by matching the end of the
> preceding range.

Is it only one vma that inlucde the address?

> 
> I think that in general it's better to avoid strstr if memcmp can be easily
> used instead.
> 
> > +			break;
> > +	}
> > +
> > +	/* Find Rss size of the vm area */
> > +	while (fgets(line, sizeof(line), fp) != NULL) {
> > +		if (strstr(line, "Rss:")) {
> 
> Same here although Rss: seems to be unique. Then again it could be added
> to another field in new kernel.
> 
> Perhaps sscanf would be better?

Maybe it will encounter the same problem with sscanf when the field changed?

It seems there is only one way to get the RSS.

Regards,
Gongyi

-- 
Mailing list info: https://lists.linux.it/listinfo/ltp

^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2022-10-26  9:20 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-10-13 13:47 [LTP] [PATCH v3] syscalls/madvise04: new test for madvise(MADV_DONTNEED) Zhao Gongyi via ltp
2022-10-13 13:47 ` [LTP] [PATCH v4 0/4] new test for madvise(MADV_DONTNEED/MADV_REMOVE) Zhao Gongyi via ltp
2022-10-13 13:47 ` [LTP] [PATCH v4 1/4] syscalls/madvise04: new test for madvise(MADV_DONTNEED) Zhao Gongyi via ltp
2022-10-24  7:58   ` Richard Palethorpe
2022-10-13 13:47 ` [LTP] [PATCH v4 2/4] syscalls/madvise11: " Zhao Gongyi via ltp
2022-10-24  9:48   ` Richard Palethorpe
2022-10-13 13:47 ` [LTP] [PATCH v4 3/4] syscalls/madvise12: new test for madvise(MADV_REMOVE) Zhao Gongyi via ltp
2022-10-24 10:47   ` Richard Palethorpe
2022-10-13 13:47 ` [LTP] [PATCH v4 4/4] syscalls/madvise13: " Zhao Gongyi via ltp
2022-10-24 11:01   ` Richard Palethorpe
  -- strict thread matches above, loose matches on Subject: below --
2022-10-26  9:19 [LTP] [PATCH v4 2/4] syscalls/madvise11: new test for madvise(MADV_DONTNEED) zhaogongyi via ltp

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox