From: liuxp11@chinatelecom.cn <liuxp11@chinatelecom.cn>
To: ltp@lists.linux.it
Subject: [LTP] [PATCH 1/2] syscalls/ioctl: ioctl_sg01.c: ioctl_sg01 invoked oom-killer
Date: Wed, 27 Jan 2021 13:42:41 +0800 [thread overview]
Message-ID: <202101271342412253283@chinatelecom.cn> (raw)
In-Reply-To: CAEemH2csSFf7Ujz8H+KV7hTdmDVsxn5_oW2JZbwY=NsJUSat_w@mail.gmail.com
ok?thanks for your direction!
From: Li Wang
Date: 2021-01-27 12:27
To: Xinpeng Liu
CC: LTP List
Subject: Re: [LTP] [PATCH 1/2] syscalls/ioctl: ioctl_sg01.c: ioctl_sg01 invoked oom-killer
Hi Xinpeng,
On Wed, Jan 27, 2021 at 11:28 AM Xinpeng Liu <liuxp11@chinatelecom.cn> wrote:
Kernel version is 5.4.81+,the available RAM is less than free,as follow:
[root@liuxp mywork]# head /proc/meminfo
MemTotal: 198101744 kB
MemFree: 189303148 kB
MemAvailable: 188566732 kB
So use available RAM to avoid OOM killer.
Signed-off-by: Xinpeng Liu <liuxp11@chinatelecom.cn>
---
lib/tst_memutils.c | 29 ++++++++++++++++++++++++++---
1 file changed, 26 insertions(+), 3 deletions(-)
diff --git a/lib/tst_memutils.c b/lib/tst_memutils.c
index dd09db4..21df9a8 100644
--- a/lib/tst_memutils.c
+++ b/lib/tst_memutils.c
@@ -10,14 +10,33 @@
#define TST_NO_DEFAULT_MAIN
#include "tst_test.h"
+#include "tst_safe_stdio.h"
#define BLOCKSIZE (16 * 1024 * 1024)
+static unsigned long get_available_ram(void)
+{
+ char buf[60]; /* actual lines we expect are ~30 chars or less */
+ unsigned long available_kb = 0;
+ FILE *fp;
+
+ fp = SAFE_FOPEN("/proc/meminfo","r");
+ while (fgets(buf, sizeof(buf), fp)) {
+ if (sscanf(buf, "MemAvailable: %lu %*s\n", &available_kb) == 1){
+ break;
+ }
+ }
+ SAFE_FCLOSE(fp);
+
+ return 1024 * available_kb;
+}
+
void tst_pollute_memory(size_t maxsize, int fillchar)
{
size_t i, map_count = 0, safety = 0, blocksize = BLOCKSIZE;
void **map_blocks;
struct sysinfo info;
+ unsigned long available_ram = get_available_ram();
LTP provides SAFE_READ_MEMINFO() macro to be used in /proc/meminfo reading.
See: https://github.com/linux-test-project/ltp/blob/master/testcases/kernel/mem/swapping/swapping01.c#L85
SAFE_SYSINFO(&info);
safety = MAX(4096 * SAFE_SYSCONF(_SC_PAGESIZE), 128 * 1024 * 1024);
@@ -26,15 +45,19 @@ void tst_pollute_memory(size_t maxsize, int fillchar)
if (info.freeswap > safety)
safety = 0;
+ /*"MemAvailable" field maybe not exist, or freeram less than available_ram*/
+ if(available_ram == 0 || info.freeram < available_ram)
+ available_ram = info.freeram;
+
/* Not enough free memory to avoid invoking OOM killer */
- if (info.freeram <= safety)
+ if (available_ram <= safety)
return;
if (!maxsize)
maxsize = SIZE_MAX;
- if (info.freeram - safety < maxsize / info.mem_unit)
- maxsize = (info.freeram - safety) * info.mem_unit;
+ if (available_ram - safety < maxsize / info.mem_unit)
+ maxsize = (available_ram - safety) * info.mem_unit;
blocksize = MIN(maxsize, blocksize);
map_count = maxsize / blocksize;
--
1.8.3.1
--
Mailing list info: https://lists.linux.it/listinfo/ltp
--
Regards,
Li Wang
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.linux.it/pipermail/ltp/attachments/20210127/1e9d01f7/attachment-0001.htm>
next prev parent reply other threads:[~2021-01-27 5:42 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-01-25 10:24 [LTP] [PATCH 1/2] syscalls/ioctl: ioctl_sg01.c: ioctl_sg01 invoked oom-killer Xinpeng Liu
2021-01-25 10:24 ` [LTP] [PATCH 2/2] syscalls/ioctl: ioctl_sg01.c:TBROK: Test killed! Xinpeng Liu
2021-01-27 4:41 ` Li Wang
2021-01-27 4:27 ` [LTP] [PATCH 1/2] syscalls/ioctl: ioctl_sg01.c: ioctl_sg01 invoked oom-killer Li Wang
2021-01-27 5:42 ` liuxp11 [this message]
2021-01-27 6:54 ` liuxp11
2021-01-27 7:58 ` Li Wang
2021-01-27 8:05 ` Li Wang
2021-01-27 9:24 ` Cyril Hrubis
2021-01-27 10:03 ` Li Wang
2021-01-27 8:49 ` liuxp11
2021-01-27 9:50 ` Cyril Hrubis
2021-01-27 9:39 ` Cyril Hrubis
2021-01-27 9:53 ` Martin Doucha
2021-01-27 10:07 ` liuxp11
2021-01-27 10:04 ` liuxp11
2021-01-27 11:28 ` Martin Doucha
2021-01-27 11:41 ` liuxp11
2021-01-27 11:46 ` Martin Doucha
2021-01-27 11:50 ` liuxp11
2021-03-04 7:52 ` Li Wang
2021-03-05 5:52 ` liuxp11
2021-03-05 9:02 ` Li Wang
2021-03-24 9:26 ` liuxp11
2021-04-11 5:01 ` Li Wang
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=202101271342412253283@chinatelecom.cn \
--to=liuxp11@chinatelecom.cn \
--cc=ltp@lists.linux.it \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.