From: SHASHANK B. <sha...@gm...> - 2013-07-16 10:58:05
|
Dear all, I was running mtest01w test on a target board which has 80 MB or RAM and 2GB of swap space. And this test keeps waiting forever, please find the console logs below, -8<--------------------------------------------------------- <<<test_start>>> tag=mtest01w stime=2336 cmdline="mtest01 -p80 -w" contacts="" analysis=exit <<<test_output>>> [ 2351.111281] rmon:L mtest01 0 TINFO : Total memory already used on system = 22796 kbytes mtest01 0 TINFO : Total memory used needed to reach maximum = 1750246 kbytes mtest01 0 TINFO : Filling up 80% of ram which is 1727450 kbytes mtest01 1 TBROK : stopped at 716177408 bytes: errno=ENOMEM(12): Cannot allocate memory * When the malloc fails the child process seems to be calling tst_exit(). mtest01.c ..... ..... if (pid == 0) { bytecount = chunksize; while (1) { if ((mem = malloc(chunksize)) == NULL) { tst_resm(TBROK | TERRNO, "stopped at %lu bytes", bytecount); free(pid_list); tst_exit(); } ..... ..... * but in this case i can see the child process in the process list(ps -ax) in sleep state. 333 ttyAM0 S 0:00 mtest01 -p80 -w 334 ttyAM0 Z 0:14 [mtest01] <defunct> 335 ttyAM0 S 0:13 mtest01 -p80 -w Here is my query , why tst_exit() isn't ending the child process? Somebody pls help!! Regards , Shashank JB |
From: <ch...@su...> - 2013-07-16 12:27:41
|
Hi! > <<<test_start>>> > tag=mtest01w stime=2336 > cmdline="mtest01 -p80 -w" > contacts="" > analysis=exit > <<<test_output>>> > [ 2351.111281] rmon:L > mtest01 0 TINFO : Total memory already used on system = 22796 kbytes > mtest01 0 TINFO : Total memory used needed to reach maximum = > 1750246 kbytes > mtest01 0 TINFO : Filling up 80% of ram which is 1727450 kbytes > mtest01 1 TBROK : stopped at 716177408 bytes: errno=ENOMEM(12): > Cannot allocate memory > > > * When the malloc fails the child process seems to be calling tst_exit(). > mtest01.c > ..... > ..... > if (pid == 0) { > bytecount = chunksize; > while (1) { > if ((mem = malloc(chunksize)) == NULL) { > tst_resm(TBROK | TERRNO, > "stopped at %lu bytes", bytecount); > free(pid_list); > tst_exit(); > } > > ..... > ..... > > * but in this case i can see the child process in the process list(ps -ax) > in sleep state. > > 333 ttyAM0 S 0:00 mtest01 -p80 -w > 334 ttyAM0 Z 0:14 [mtest01] <defunct> > 335 ttyAM0 S 0:13 mtest01 -p80 -w > > Here is my query , why tst_exit() isn't ending the child process? Using tst_exit() and any other tst interface from child is a mistake but tst_exit() should end the child process. However there may be other childrens still running as tst_exit() is just equivalent to exit() (it does flush output buffers and exits the process with result as return value but nothing more). So my guess is that the rest of the childrens continue to fill the chunks and then waits to be reaped by the parent. Which may hang the machine if there is not enough memory. -- Cyril Hrubis ch...@su... |
From: SHASHANK B. <sha...@gm...> - 2013-07-17 11:51:56
|
Dear all, I have one more query, when i run mtest01w on my target, it gives a message "stopped at 731906048 bytes: errno=ENOMEM(12): Cannot allocate memory". Should this be considered as a test case failure, If not, why? Regards, Shashank J Bilgi On Tue, Jul 16, 2013 at 5:59 PM, <ch...@su...> wrote: > Hi! > > <<<test_start>>> > > tag=mtest01w stime=2336 > > cmdline="mtest01 -p80 -w" > > contacts="" > > analysis=exit > > <<<test_output>>> > > [ 2351.111281] rmon:L > > mtest01 0 TINFO : Total memory already used on system = 22796 > kbytes > > mtest01 0 TINFO : Total memory used needed to reach maximum = > > 1750246 kbytes > > mtest01 0 TINFO : Filling up 80% of ram which is 1727450 kbytes > > mtest01 1 TBROK : stopped at 716177408 bytes: errno=ENOMEM(12): > > Cannot allocate memory > > > > > > * When the malloc fails the child process seems to be calling tst_exit(). > > mtest01.c > > ..... > > ..... > > if (pid == 0) { > > bytecount = chunksize; > > while (1) { > > if ((mem = malloc(chunksize)) == NULL) { > > tst_resm(TBROK | TERRNO, > > "stopped at %lu bytes", > bytecount); > > free(pid_list); > > tst_exit(); > > } > > > > ..... > > ..... > > > > * but in this case i can see the child process in the process list(ps > -ax) > > in sleep state. > > > > 333 ttyAM0 S 0:00 mtest01 -p80 -w > > 334 ttyAM0 Z 0:14 [mtest01] <defunct> > > 335 ttyAM0 S 0:13 mtest01 -p80 -w > > > > Here is my query , why tst_exit() isn't ending the child process? > > Using tst_exit() and any other tst interface from child is a mistake but > tst_exit() should end the child process. > > However there may be other childrens still running as tst_exit() is just > equivalent to exit() (it does flush output buffers and exits the process > with result as return value but nothing more). > > So my guess is that the rest of the childrens continue to fill the > chunks and then waits to be reaped by the parent. Which may hang the > machine if there is not enough memory. > > -- > Cyril Hrubis > ch...@su... > |
From: <ch...@su...> - 2013-07-17 13:55:51
|
Hi! > I have one more query, when i run mtest01w on my target, it gives a message > "stopped at 731906048 bytes: errno=ENOMEM(12): Cannot allocate memory". > > Should this be considered as a test case failure, If not, why? That is hard to say without further analysis. Generally malloc() is allowed to return ENOMEM when machine memory was used up. But conditions under this happens depends on ulimits, memory overcommit settings, size and availability of swap etc. -- Cyril Hrubis ch...@su... |
From: SHASHANK B. <sha...@gm...> - 2013-07-30 13:17:11
|
Hi, In my case 2 child processes from mtest01w try to allocate 1GB each and third one allocates around 100 MB. Both of the first 2 child processes throws this error "errno=ENOMEM(12): Cannot allocate memory" around 700MB. And third successfully finishes its job. Here are some details. * Actual physical memory: 80MB * Swap space is 2GB * /proc/sys/vm/overcommit_memory is 1 * /proc/sys/vm/overcommit_ratio is 50 Regards, Shashank J Bilgi On Wed, Jul 17, 2013 at 7:27 PM, <ch...@su...> wrote: > Hi! > > I have one more query, when i run mtest01w on my target, it gives a > message > > "stopped at 731906048 bytes: errno=ENOMEM(12): Cannot allocate memory". > > > > Should this be considered as a test case failure, If not, why? > > That is hard to say without further analysis. > > Generally malloc() is allowed to return ENOMEM when machine memory was > used up. > > But conditions under this happens depends on ulimits, memory overcommit > settings, size and availability of swap etc. > > -- > Cyril Hrubis > ch...@su... > |
From: SHASHANK B. <sha...@gm...> - 2013-07-30 13:18:22
|
Hi, In my case 2 child processes from mtest01w try to allocate 1GB each and third one allocates around 100 MB. Both of the first 2 child processes throws this error "errno=ENOMEM(12): Cannot allocate memory" around 700MB. And third successfully finishes its job. Here are some details. * Actual physical memory: 80MB * Swap space is 2GB * /proc/sys/vm/overcommit_memory is 1 * /proc/sys/vm/overcommit_ratio is 50 Can somebody please tell me why this might be happening? Regards, Shashank J Bilgi On Tue, Jul 30, 2013 at 6:47 PM, SHASHANK BILGI <sha...@gm...>wrote: > Hi, > > In my case 2 child processes from mtest01w try to allocate 1GB each and > third one allocates around 100 MB. > Both of the first 2 child processes throws this error "errno=ENOMEM(12): > Cannot allocate memory" around 700MB. And third successfully finishes its > job. > Here are some details. > * Actual physical memory: 80MB > * Swap space is 2GB > * /proc/sys/vm/overcommit_memory is 1 > * /proc/sys/vm/overcommit_ratio is 50 > > Regards, > Shashank J Bilgi > > > On Wed, Jul 17, 2013 at 7:27 PM, <ch...@su...> wrote: > >> Hi! >> > I have one more query, when i run mtest01w on my target, it gives a >> message >> > "stopped at 731906048 bytes: errno=ENOMEM(12): Cannot allocate memory". >> > >> > Should this be considered as a test case failure, If not, why? >> >> That is hard to say without further analysis. >> >> Generally malloc() is allowed to return ENOMEM when machine memory was >> used up. >> >> But conditions under this happens depends on ulimits, memory overcommit >> settings, size and availability of swap etc. >> >> -- >> Cyril Hrubis >> ch...@su... >> > > |
From: <ch...@su...> - 2013-07-30 15:56:38
|
Hi! > In my case 2 child processes from mtest01w try to allocate 1GB each and > third one allocates around 100 MB. > Both of the first 2 child processes throws this error "errno=ENOMEM(12): > Cannot allocate memory" around 700MB. And third successfully finishes its > job. > Here are some details. > * Actual physical memory: 80MB > * Swap space is 2GB > * /proc/sys/vm/overcommit_memory is 1 > * /proc/sys/vm/overcommit_ratio is 50 > > Can somebody please tell me why this might be happening? Hmm, are you aware that in this case you RAM + SWAP is lesser than the memory the program is trying to allocate, which will not work no matter what. -- Cyril Hrubis ch...@su... |