Message ID | 20240418071422.10221-1-wegao@suse.com |
---|---|
State | Superseded |
Headers | show |
Series | [v1] swapping01.c: Add sleeps in the loop that dirties the memory | expand |
Hi! > https://bugzilla.suse.com/show_bug.cgi?id=1217850#c34 If I'm counting right this is 10ms * 1024 which is 10s, I would be happier with 1ms sleep instead. Or if we did 10ms sleep once every 10 memsets() instead. Also since this was proposed by Vlastimil in the bugzilla he should ideally give his ack here as well (now in CC). > Signed-off-by: Wei Gao <wegao@suse.com> > --- > testcases/kernel/mem/swapping/swapping01.c | 10 +++++++++- > 1 file changed, 9 insertions(+), 1 deletion(-) > > diff --git a/testcases/kernel/mem/swapping/swapping01.c b/testcases/kernel/mem/swapping/swapping01.c > index a0030a75f..338881c8e 100644 > --- a/testcases/kernel/mem/swapping/swapping01.c > +++ b/testcases/kernel/mem/swapping/swapping01.c > @@ -47,6 +47,7 @@ > #define COE_DELTA 1 > /* will try to alloc 1.3 * phy_mem */ > #define COE_SLIGHT_OVER 0.3 > +#define MEM_SIZE 1024 * 1024 > > static void init_meminfo(void); > static void do_alloc(int allow_raise); > @@ -101,6 +102,13 @@ static void init_meminfo(void) > swap_free_init, mem_over_max); > } > > +static void memset_blocks(char *ptr, int mem_count, int sleep_time_ms) { > + for (int i = 0; i < mem_count / 1024; i++) { > + memset(ptr + (i * MEM_SIZE), 1, MEM_SIZE); > + usleep(sleep_time_ms * 1000); > + } > +} > + > static void do_alloc(int allow_raise) > { > long mem_count; > @@ -115,7 +123,7 @@ static void do_alloc(int allow_raise) > if (allow_raise == 1) > tst_res(TINFO, "try to allocate: %ld MB", mem_count / 1024); > s = SAFE_MALLOC(mem_count * 1024); > - memset(s, 1, mem_count * 1024); > + memset_blocks(s, mem_count, 10); > > if ((allow_raise == 1) && (raise(SIGSTOP) == -1)) { > tst_res(TINFO, "memory allocated: %ld MB", mem_count / 1024); > -- > 2.35.3 > > > -- > Mailing list info: https://lists.linux.it/listinfo/ltp
On 4/18/24 6:34 PM, Cyril Hrubis wrote: > Hi! >> https://bugzilla.suse.com/show_bug.cgi?id=1217850#c34 > > If I'm counting right this is 10ms * 1024 which is 10s, I would be > happier with 1ms sleep instead. Or if we did 10ms sleep once every 10 > memsets() instead. Yeah I proposed you can try to reduce the sleep time/frequency to basically to lowest value (with some margin) that resolves the issue reliably in your testing. That 10ms per MB was just a possible starting point. > Also since this was proposed by Vlastimil in the bugzilla he should > ideally give his ack here as well (now in CC). > >> Signed-off-by: Wei Gao <wegao@suse.com> Acked-by: Vlastimil Babka <vbabka@suse.cz> >> --- >> testcases/kernel/mem/swapping/swapping01.c | 10 +++++++++- >> 1 file changed, 9 insertions(+), 1 deletion(-) >> >> diff --git a/testcases/kernel/mem/swapping/swapping01.c b/testcases/kernel/mem/swapping/swapping01.c >> index a0030a75f..338881c8e 100644 >> --- a/testcases/kernel/mem/swapping/swapping01.c >> +++ b/testcases/kernel/mem/swapping/swapping01.c >> @@ -47,6 +47,7 @@ >> #define COE_DELTA 1 >> /* will try to alloc 1.3 * phy_mem */ >> #define COE_SLIGHT_OVER 0.3 >> +#define MEM_SIZE 1024 * 1024 >> >> static void init_meminfo(void); >> static void do_alloc(int allow_raise); >> @@ -101,6 +102,13 @@ static void init_meminfo(void) >> swap_free_init, mem_over_max); >> } >> >> +static void memset_blocks(char *ptr, int mem_count, int sleep_time_ms) { >> + for (int i = 0; i < mem_count / 1024; i++) { >> + memset(ptr + (i * MEM_SIZE), 1, MEM_SIZE); >> + usleep(sleep_time_ms * 1000); >> + } >> +} >> + >> static void do_alloc(int allow_raise) >> { >> long mem_count; >> @@ -115,7 +123,7 @@ static void do_alloc(int allow_raise) >> if (allow_raise == 1) >> tst_res(TINFO, "try to allocate: %ld MB", mem_count / 1024); >> s = SAFE_MALLOC(mem_count * 1024); >> - memset(s, 1, mem_count * 1024); >> + memset_blocks(s, mem_count, 10); >> >> if ((allow_raise == 1) && (raise(SIGSTOP) == -1)) { >> tst_res(TINFO, "memory allocated: %ld MB", mem_count / 1024); >> -- >> 2.35.3 >> >> >> -- >> Mailing list info: https://lists.linux.it/listinfo/ltp >
Hi! > Yeah I proposed you can try to reduce the sleep time/frequency to basically > to lowest value (with some margin) that resolves the issue reliably in your > testing. That 10ms per MB was just a possible starting point. The usuall practice we do in LTP is to measure the minimal value required for the test to pass and then double that for the final value. But even with that I suppose that the value should be less than 10s. Wei can you please try to measure how long are the shortest sleeps we need in order to make the test pass?
On Fri, Apr 19, 2024 at 10:36:19AM +0200, Cyril Hrubis wrote: > Hi! > > Yeah I proposed you can try to reduce the sleep time/frequency to basically > > to lowest value (with some margin) that resolves the issue reliably in your > > testing. That 10ms per MB was just a possible starting point. > > The usuall practice we do in LTP is to measure the minimal value > required for the test to pass and then double that for the final value. > But even with that I suppose that the value should be less than 10s. > > Wei can you please try to measure how long are the shortest sleeps we > need in order to make the test pass? > Run 500 times on same build for each measurement. 1) No any sleep, 17 case will failed https://openqa.suse.de/tests/14111469#next_previous 2) sleep 1ms, no failed case happen https://openqa.suse.de/tests/14110476#next_previous 3) sleep 0.5ms, 1 failed case happen https://openqa.suse.de/tests/14110476#next_previous So currently 1ms is good candidate. I will sent second patch. > -- > Cyril Hrubis > chrubis@suse.cz
diff --git a/testcases/kernel/mem/swapping/swapping01.c b/testcases/kernel/mem/swapping/swapping01.c index a0030a75f..338881c8e 100644 --- a/testcases/kernel/mem/swapping/swapping01.c +++ b/testcases/kernel/mem/swapping/swapping01.c @@ -47,6 +47,7 @@ #define COE_DELTA 1 /* will try to alloc 1.3 * phy_mem */ #define COE_SLIGHT_OVER 0.3 +#define MEM_SIZE 1024 * 1024 static void init_meminfo(void); static void do_alloc(int allow_raise); @@ -101,6 +102,13 @@ static void init_meminfo(void) swap_free_init, mem_over_max); } +static void memset_blocks(char *ptr, int mem_count, int sleep_time_ms) { + for (int i = 0; i < mem_count / 1024; i++) { + memset(ptr + (i * MEM_SIZE), 1, MEM_SIZE); + usleep(sleep_time_ms * 1000); + } +} + static void do_alloc(int allow_raise) { long mem_count; @@ -115,7 +123,7 @@ static void do_alloc(int allow_raise) if (allow_raise == 1) tst_res(TINFO, "try to allocate: %ld MB", mem_count / 1024); s = SAFE_MALLOC(mem_count * 1024); - memset(s, 1, mem_count * 1024); + memset_blocks(s, mem_count, 10); if ((allow_raise == 1) && (raise(SIGSTOP) == -1)) { tst_res(TINFO, "memory allocated: %ld MB", mem_count / 1024);
In our test env this case failed sporadically, we suspect swapout speed not fast enough in some situation. Detail info please check following comments; https://bugzilla.suse.com/show_bug.cgi?id=1217850#c34 Signed-off-by: Wei Gao <wegao@suse.com> --- testcases/kernel/mem/swapping/swapping01.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-)