public inbox for ltp@lists.linux.it
 help / color / mirror / Atom feed
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 14:54:07 +0800	[thread overview]
Message-ID: <2021012714540739834212@chinatelecom.cn> (raw)
In-Reply-To: CAEemH2csSFf7Ujz8H+KV7hTdmDVsxn5_oW2JZbwY=NsJUSat_w@mail.gmail.com

Hi Li, 
Have a question about using macro SAFE_READ_MEMINFO get MemAvailable value,
Some old kernels maybe not privode "MemAvailable" field, which will broken.

 
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/bed16118/attachment-0001.htm>

  parent reply	other threads:[~2021-01-27  6:54 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
2021-01-27  6:54   ` liuxp11 [this message]
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=2021012714540739834212@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox