public inbox for ltp@lists.linux.it
 help / color / mirror / Atom feed
* [LTP] [PATCH v2] lib/mem.c: handle the case oom0{3, 5} exit with 'EAGAIN' situation
@ 2015-09-16  9:55 Li Wang
  2015-09-16 12:12 ` Jan Stancek
  0 siblings, 1 reply; 5+ messages in thread
From: Li Wang @ 2015-09-16  9:55 UTC (permalink / raw)
  To: ltp

v1 --> v2
	1. limited the number of loops
	2. added the usleep(300) to wait resource freed

Sometimes oom0{3,5} failed as the following results:

oom05       0  TINFO  :  start OOM testing for mlocked pages.
oom05       0  TINFO  :  expected victim is 3371.
oom05       0  TINFO  :  thread (3fff788ff1c0), allocating 3221225472 bytes.
...
oom05       5  TFAIL  :  mem.c:153: victim unexpectedly ended with retcode: 11, expected: 12

In the OOM test, that tries to consume all memory. But the test doesn't retry to mlock, it simply
exits with errno returned by mlock. At the moment testcase is expecting either ENOMEM or getting
killed by kernel.

Here do retry the function if mlock() fail with 'EAGAIN' errno.

Signed-off-by: Li Wang <liwang@redhat.com>
---
 testcases/kernel/mem/lib/mem.c | 12 ++++++++++--
 1 file changed, 10 insertions(+), 2 deletions(-)

diff --git a/testcases/kernel/mem/lib/mem.c b/testcases/kernel/mem/lib/mem.c
index 8fe4bf0..b8a55e2 100644
--- a/testcases/kernel/mem/lib/mem.c
+++ b/testcases/kernel/mem/lib/mem.c
@@ -30,6 +30,7 @@ static int alloc_mem(long int length, int testcase)
 {
 	char *s;
 	long i, pagesz = getpagesize();
+	int loop = 10;
 
 	tst_resm(TINFO, "thread (%lx), allocating %ld bytes.",
 		(unsigned long) pthread_self(), length);
@@ -39,8 +40,15 @@ static int alloc_mem(long int length, int testcase)
 	if (s == MAP_FAILED)
 		return errno;
 
-	if (testcase == MLOCK && mlock(s, length) == -1)
-		return errno;
+	if (testcase == MLOCK) {
+		while (mlock(s, length) == -1 && loop > 0) {
+			if (EAGAIN != errno)
+				return errno;
+			usleep(300);
+			loop--;
+		}
+	}
+
 #ifdef HAVE_MADV_MERGEABLE
 	if (testcase == KSM && madvise(s, length, MADV_MERGEABLE) == -1)
 		return errno;
-- 
1.8.3.1


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

* [LTP] [PATCH v2] lib/mem.c: handle the case oom0{3, 5} exit with 'EAGAIN' situation
  2015-09-16  9:55 [LTP] [PATCH v2] lib/mem.c: handle the case oom0{3, 5} exit with 'EAGAIN' situation Li Wang
@ 2015-09-16 12:12 ` Jan Stancek
  2015-09-17  3:10   ` Li Wang
  0 siblings, 1 reply; 5+ messages in thread
From: Jan Stancek @ 2015-09-16 12:12 UTC (permalink / raw)
  To: ltp





----- Original Message -----
> From: "Li Wang" <liwang@redhat.com>
> To: ltp@lists.linux.it
> Sent: Wednesday, 16 September, 2015 11:55:32 AM
> Subject: [LTP] [PATCH v2] lib/mem.c: handle the case oom0{3,	5} exit with 'EAGAIN' situation
> 
> v1 --> v2
> 	1. limited the number of loops
> 	2. added the usleep(300) to wait resource freed
> 
> Sometimes oom0{3,5} failed as the following results:
> 
> oom05       0  TINFO  :  start OOM testing for mlocked pages.
> oom05       0  TINFO  :  expected victim is 3371.
> oom05       0  TINFO  :  thread (3fff788ff1c0), allocating 3221225472 bytes.
> ...
> oom05       5  TFAIL  :  mem.c:153: victim unexpectedly ended with retcode:
> 11, expected: 12
> 
> In the OOM test, that tries to consume all memory. But the test doesn't retry
> to mlock, it simply
> exits with errno returned by mlock. At the moment testcase is expecting
> either ENOMEM or getting
> killed by kernel.
> 
> Here do retry the function if mlock() fail with 'EAGAIN' errno.
> 
> Signed-off-by: Li Wang <liwang@redhat.com>
> ---
>  testcases/kernel/mem/lib/mem.c | 12 ++++++++++--
>  1 file changed, 10 insertions(+), 2 deletions(-)
> 
> diff --git a/testcases/kernel/mem/lib/mem.c b/testcases/kernel/mem/lib/mem.c
> index 8fe4bf0..b8a55e2 100644
> --- a/testcases/kernel/mem/lib/mem.c
> +++ b/testcases/kernel/mem/lib/mem.c
> @@ -30,6 +30,7 @@ static int alloc_mem(long int length, int testcase)
>  {
>  	char *s;
>  	long i, pagesz = getpagesize();
> +	int loop = 10;
>  
>  	tst_resm(TINFO, "thread (%lx), allocating %ld bytes.",
>  		(unsigned long) pthread_self(), length);
> @@ -39,8 +40,15 @@ static int alloc_mem(long int length, int testcase)
>  	if (s == MAP_FAILED)
>  		return errno;
>  
> -	if (testcase == MLOCK && mlock(s, length) == -1)
> -		return errno;
> +	if (testcase == MLOCK) {
> +		while (mlock(s, length) == -1 && loop > 0) {
> +			if (EAGAIN != errno)
> +				return errno;
> +			usleep(300);

usleep is in microseconds, so this wouldn't give system much time.

Other than that it looks good to me.

Regards,
Jan

> +			loop--;
> +		}
> +	}
> +
>  #ifdef HAVE_MADV_MERGEABLE
>  	if (testcase == KSM && madvise(s, length, MADV_MERGEABLE) == -1)
>  		return errno;
> --
> 1.8.3.1
> 
> 
> --
> Mailing list info: http://lists.linux.it/listinfo/ltp
> 

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

* [LTP] [PATCH v2] lib/mem.c: handle the case oom0{3, 5} exit with 'EAGAIN' situation
  2015-09-16 12:12 ` Jan Stancek
@ 2015-09-17  3:10   ` Li Wang
  2015-09-22  7:50     ` Li Wang
  0 siblings, 1 reply; 5+ messages in thread
From: Li Wang @ 2015-09-17  3:10 UTC (permalink / raw)
  To: ltp

Hi,

On Wed, Sep 16, 2015 at 8:12 PM, Jan Stancek <jstancek@redhat.com> wrote:

>
>
>
>
> ----- Original Message -----
> > From: "Li Wang" <liwang@redhat.com>
> > To: ltp@lists.linux.it
> > Sent: Wednesday, 16 September, 2015 11:55:32 AM
> > Subject: [LTP] [PATCH v2] lib/mem.c: handle the case oom0{3,  5} exit
> with 'EAGAIN' situation
> >
> > v1 --> v2
> >       1. limited the number of loops
> >       2. added the usleep(300) to wait resource freed
> >
> > Sometimes oom0{3,5} failed as the following results:
> >
> > oom05       0  TINFO  :  start OOM testing for mlocked pages.
> > oom05       0  TINFO  :  expected victim is 3371.
> > oom05       0  TINFO  :  thread (3fff788ff1c0), allocating 3221225472
> bytes.
> > ...
> > oom05       5  TFAIL  :  mem.c:153: victim unexpectedly ended with
> retcode:
> > 11, expected: 12
> >
> > In the OOM test, that tries to consume all memory. But the test doesn't
> retry
> > to mlock, it simply
> > exits with errno returned by mlock. At the moment testcase is expecting
> > either ENOMEM or getting
> > killed by kernel.
> >
> > Here do retry the function if mlock() fail with 'EAGAIN' errno.
> >
> > Signed-off-by: Li Wang <liwang@redhat.com>
> > ---
> >  testcases/kernel/mem/lib/mem.c | 12 ++++++++++--
> >  1 file changed, 10 insertions(+), 2 deletions(-)
> >
> > diff --git a/testcases/kernel/mem/lib/mem.c
> b/testcases/kernel/mem/lib/mem.c
> > index 8fe4bf0..b8a55e2 100644
> > --- a/testcases/kernel/mem/lib/mem.c
> > +++ b/testcases/kernel/mem/lib/mem.c
> > @@ -30,6 +30,7 @@ static int alloc_mem(long int length, int testcase)
> >  {
> >       char *s;
> >       long i, pagesz = getpagesize();
> > +     int loop = 10;
> >
> >       tst_resm(TINFO, "thread (%lx), allocating %ld bytes.",
> >               (unsigned long) pthread_self(), length);
> > @@ -39,8 +40,15 @@ static int alloc_mem(long int length, int testcase)
> >       if (s == MAP_FAILED)
> >               return errno;
> >
> > -     if (testcase == MLOCK && mlock(s, length) == -1)
> > -             return errno;
> > +     if (testcase == MLOCK) {
> > +             while (mlock(s, length) == -1 && loop > 0) {
> > +                     if (EAGAIN != errno)
> > +                             return errno;
> > +                     usleep(300);
>
> usleep is in microseconds, so this wouldn't give system much time.
>

Hmm, it has 10 times to attempt.  Anyway, Feel free to modify the time to a
proper size.


>
> Other than that it looks good to me.
>

Thanks.


>
> Regards,
> Jan
>
> > +                     loop--;
> > +             }
> > +     }
> > +
> >  #ifdef HAVE_MADV_MERGEABLE
> >       if (testcase == KSM && madvise(s, length, MADV_MERGEABLE) == -1)
> >               return errno;
> > --
> > 1.8.3.1
> >
> >
> > --
> > Mailing list info: http://lists.linux.it/listinfo/ltp
> >
>



-- 
Regards,
Li Wang
Email: liwang@redhat.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.linux.it/pipermail/ltp/attachments/20150917/dd3e64e5/attachment-0001.html>

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

* [LTP] [PATCH v2] lib/mem.c: handle the case oom0{3, 5} exit with 'EAGAIN' situation
  2015-09-17  3:10   ` Li Wang
@ 2015-09-22  7:50     ` Li Wang
  2015-09-22  8:08       ` Jan Stancek
  0 siblings, 1 reply; 5+ messages in thread
From: Li Wang @ 2015-09-22  7:50 UTC (permalink / raw)
  To: ltp

Hi,


On Thu, Sep 17, 2015 at 11:10 AM, Li Wang <liwang@redhat.com> wrote:

> Hi,
>
> On Wed, Sep 16, 2015 at 8:12 PM, Jan Stancek <jstancek@redhat.com> wrote:
>
>>
>>
>>
>>
>> ----- Original Message -----
>> > From: "Li Wang" <liwang@redhat.com>
>> > To: ltp@lists.linux.it
>> > Sent: Wednesday, 16 September, 2015 11:55:32 AM
>> > Subject: [LTP] [PATCH v2] lib/mem.c: handle the case oom0{3,  5} exit
>> with 'EAGAIN' situation
>> >
>> > v1 --> v2
>> >       1. limited the number of loops
>> >       2. added the usleep(300) to wait resource freed
>> >
>> > Sometimes oom0{3,5} failed as the following results:
>> >
>> > oom05       0  TINFO  :  start OOM testing for mlocked pages.
>> > oom05       0  TINFO  :  expected victim is 3371.
>> > oom05       0  TINFO  :  thread (3fff788ff1c0), allocating 3221225472
>> bytes.
>> > ...
>> > oom05       5  TFAIL  :  mem.c:153: victim unexpectedly ended with
>> retcode:
>> > 11, expected: 12
>> >
>> > In the OOM test, that tries to consume all memory. But the test doesn't
>> retry
>> > to mlock, it simply
>> > exits with errno returned by mlock. At the moment testcase is expecting
>> > either ENOMEM or getting
>> > killed by kernel.
>> >
>> > Here do retry the function if mlock() fail with 'EAGAIN' errno.
>> >
>> > Signed-off-by: Li Wang <liwang@redhat.com>
>> > ---
>> >  testcases/kernel/mem/lib/mem.c | 12 ++++++++++--
>> >  1 file changed, 10 insertions(+), 2 deletions(-)
>> >
>> > diff --git a/testcases/kernel/mem/lib/mem.c
>> b/testcases/kernel/mem/lib/mem.c
>> > index 8fe4bf0..b8a55e2 100644
>> > --- a/testcases/kernel/mem/lib/mem.c
>> > +++ b/testcases/kernel/mem/lib/mem.c
>> > @@ -30,6 +30,7 @@ static int alloc_mem(long int length, int testcase)
>> >  {
>> >       char *s;
>> >       long i, pagesz = getpagesize();
>> > +     int loop = 10;
>> >
>> >       tst_resm(TINFO, "thread (%lx), allocating %ld bytes.",
>> >               (unsigned long) pthread_self(), length);
>> > @@ -39,8 +40,15 @@ static int alloc_mem(long int length, int testcase)
>> >       if (s == MAP_FAILED)
>> >               return errno;
>> >
>> > -     if (testcase == MLOCK && mlock(s, length) == -1)
>> > -             return errno;
>> > +     if (testcase == MLOCK) {
>> > +             while (mlock(s, length) == -1 && loop > 0) {
>> > +                     if (EAGAIN != errno)
>> > +                             return errno;
>> > +                     usleep(300);
>>
>> usleep is in microseconds, so this wouldn't give system much time.
>>
>
Sorry, Ping.

Would you mind if I sent V3 with usleep(300000)? or any other advice?


-- 
Regards,
Li Wang
Email: liwang@redhat.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.linux.it/pipermail/ltp/attachments/20150922/f2c4849b/attachment-0001.html>

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

* [LTP] [PATCH v2] lib/mem.c: handle the case oom0{3, 5} exit with 'EAGAIN' situation
  2015-09-22  7:50     ` Li Wang
@ 2015-09-22  8:08       ` Jan Stancek
  0 siblings, 0 replies; 5+ messages in thread
From: Jan Stancek @ 2015-09-22  8:08 UTC (permalink / raw)
  To: ltp





----- Original Message -----
> From: "Li Wang" <liwang@redhat.com>
> To: "Jan Stancek" <jstancek@redhat.com>
> Cc: ltp@lists.linux.it
> Sent: Tuesday, 22 September, 2015 9:50:39 AM
> Subject: Re: [LTP] [PATCH v2] lib/mem.c: handle the case oom0{3, 5} exit with 'EAGAIN' situation
> 
> Hi,
> 
> 
> On Thu, Sep 17, 2015 at 11:10 AM, Li Wang <liwang@redhat.com> wrote:
> 
> > Hi,
> >
> > On Wed, Sep 16, 2015 at 8:12 PM, Jan Stancek <jstancek@redhat.com> wrote:
> >
> >>
> >>
> >>
> >>
> >> ----- Original Message -----
> >> > From: "Li Wang" <liwang@redhat.com>
> >> > To: ltp@lists.linux.it
> >> > Sent: Wednesday, 16 September, 2015 11:55:32 AM
> >> > Subject: [LTP] [PATCH v2] lib/mem.c: handle the case oom0{3,  5} exit
> >> with 'EAGAIN' situation
> >> >
> >> > v1 --> v2
> >> >       1. limited the number of loops
> >> >       2. added the usleep(300) to wait resource freed
> >> >
> >> > Sometimes oom0{3,5} failed as the following results:
> >> >
> >> > oom05       0  TINFO  :  start OOM testing for mlocked pages.
> >> > oom05       0  TINFO  :  expected victim is 3371.
> >> > oom05       0  TINFO  :  thread (3fff788ff1c0), allocating 3221225472
> >> bytes.
> >> > ...
> >> > oom05       5  TFAIL  :  mem.c:153: victim unexpectedly ended with
> >> retcode:
> >> > 11, expected: 12
> >> >
> >> > In the OOM test, that tries to consume all memory. But the test doesn't
> >> retry
> >> > to mlock, it simply
> >> > exits with errno returned by mlock. At the moment testcase is expecting
> >> > either ENOMEM or getting
> >> > killed by kernel.
> >> >
> >> > Here do retry the function if mlock() fail with 'EAGAIN' errno.
> >> >
> >> > Signed-off-by: Li Wang <liwang@redhat.com>
> >> > ---
> >> >  testcases/kernel/mem/lib/mem.c | 12 ++++++++++--
> >> >  1 file changed, 10 insertions(+), 2 deletions(-)
> >> >
> >> > diff --git a/testcases/kernel/mem/lib/mem.c
> >> b/testcases/kernel/mem/lib/mem.c
> >> > index 8fe4bf0..b8a55e2 100644
> >> > --- a/testcases/kernel/mem/lib/mem.c
> >> > +++ b/testcases/kernel/mem/lib/mem.c
> >> > @@ -30,6 +30,7 @@ static int alloc_mem(long int length, int testcase)
> >> >  {
> >> >       char *s;
> >> >       long i, pagesz = getpagesize();
> >> > +     int loop = 10;
> >> >
> >> >       tst_resm(TINFO, "thread (%lx), allocating %ld bytes.",
> >> >               (unsigned long) pthread_self(), length);
> >> > @@ -39,8 +40,15 @@ static int alloc_mem(long int length, int testcase)
> >> >       if (s == MAP_FAILED)
> >> >               return errno;
> >> >
> >> > -     if (testcase == MLOCK && mlock(s, length) == -1)
> >> > -             return errno;
> >> > +     if (testcase == MLOCK) {
> >> > +             while (mlock(s, length) == -1 && loop > 0) {
> >> > +                     if (EAGAIN != errno)
> >> > +                             return errno;
> >> > +                     usleep(300);
> >>
> >> usleep is in microseconds, so this wouldn't give system much time.
> >>
> >
> Sorry, Ping.
> 
> Would you mind if I sent V3 with usleep(300000)? or any other advice?

No need. I changed it (along with small changes to description) and pushed.

Regards,
Jan

> 
> 
> --
> Regards,
> Li Wang
> Email: liwang@redhat.com
> 

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

end of thread, other threads:[~2015-09-22  8:08 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-09-16  9:55 [LTP] [PATCH v2] lib/mem.c: handle the case oom0{3, 5} exit with 'EAGAIN' situation Li Wang
2015-09-16 12:12 ` Jan Stancek
2015-09-17  3:10   ` Li Wang
2015-09-22  7:50     ` Li Wang
2015-09-22  8:08       ` Jan Stancek

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