CAI Qian wrote:
> 
> ----- Original Message -----
>> Qian Cai wrote:
>>> On 2011-4-4, at 0:47, Bian Naimeng <[email protected]> wrote:
>>>
>>>> There are some problem in ksm tests.
>>>>
>>>> 1. We should break the test when checking is failure.
>>> No, this is not the intention. The design here is to run all tests
>>> to check for all stats to give a full picture even if the a single
>>> failure has been observed. This type of the failures do not prevent
>>> the rest of the tests from running, so there is no need to stop the
>>> tests now which also give more insight to track down root causes.
>> Various reason can make checking failure, someone can make the test
>> hangup.
>> I did this test on RHEL5, i found ksmd stopped before doing "echo 2 >
>> /sys/kernel/mm/ksm/run",
>> so group_check will be hanged on "new_num < old_num * 3".
>>
>> So, i think we should break the test if "run" is not expecting.
> What happened if you run the tests for a recent upstream kernel? There
> are some patches for ksm recently merged upstream. If the problem still
> persistent, please paste the EXACT OUTPUT from the ksm01 test. If it is
> hung, please upload sysrq-t output somewhere.
> 

Maybe there are some bugs in the RHEL6's kernel, but the purpose of this patch
is not to workround these bugs, i want to fix the test's bug.

Would you explain to me why we do this loop "while (new_num < old_num * 3)" in
group_check, i think "while (new_num < old_num + 3)" is better.

Some time ago, the following patch insert this loop.
http://sourceforge.net/mailarchive/forum.php?thread_name=AANLkTi%3Dg%3DojJu0m%2B556rnekYenRTXtX%2BVBOj%3DrPmnjSw%40mail.gmail.com&forum_name=ltp-list

The changelog of this patch said "we should wait 3~5 increments of the
/sys/kernel/mm/ksm/full_scans before checking ksm* testcases's results", but
it do "while (new_num < old_num * 3)" actually.

Regards
 Bian

> CAI Qian
>  
>>>> 2. The condition "new_num < old_num * 3" seems uncomfortable, i
>>>> think
>>>>   it should be "new_num < old_num + 3"
>>> I don't understand. What error did you see from the testing output?
>> Sometimes, the old_num is a big number, so it takes long time in this
>> loop,
>> i don't understand the purpose.
>> Would you explain to me why we expect this condition "new_num <
>> old_num * 3".
>>
>>>> 3. After stopping ksm(echo 2 > /sys/kernel/mm/ksm/run), the ksmd
>>>>   will stop scaning pages, so looping in "new_num < old_num * 3"
>>>>   is wrong.
>>> Ditto.
>>>
>> After stopping ksm, looping in "new_num < old_num * 3" will make the
>> process hang up,
>> because new_num does not be increased.
>>
>> Regards
>> Bian
>>
>>
>>> CAI Qian
>>>> Signed-off-by: Bian Naimeng <[email protected]>
>>>>
>>>> ---
>>>> testcases/kernel/mem/include/mem.h | 2 +-
>>>> testcases/kernel/mem/lib/mem.c | 19 ++++++++++---------
>>>> 2 files changed, 11 insertions(+), 10 deletions(-)
>>>>
>>>> diff --git a/testcases/kernel/mem/include/mem.h
>>>> b/testcases/kernel/mem/include/mem.h
>>>> index 778d403..b640a63 100644
>>>> --- a/testcases/kernel/mem/include/mem.h
>>>> +++ b/testcases/kernel/mem/include/mem.h
>>>> @@ -42,7 +42,7 @@ void check(char *path, long int value);
>>>> void verify(char value, int proc, int start, int end, int start2,
>>>> int end2);
>>>> void group_check(int run, int pages_shared, int pages_sharing,
>>>>        int pages_volatile, int pages_unshared, int sleep_millisecs,
>>>> - int pages_to_scan);
>>>> + int pages_to_scan, int scans);
>>>> void create_same_memory(int size, int num, int unit);
>>>> void check_ksm_options(int *size, int *num, int *unit);
>>>> void write_cpusets(void);
>>>> diff --git a/testcases/kernel/mem/lib/mem.c
>>>> b/testcases/kernel/mem/lib/mem.c
>>>> index 12e61e9..db1a7dd 100644
>>>> --- a/testcases/kernel/mem/lib/mem.c
>>>> +++ b/testcases/kernel/mem/lib/mem.c
>>>> @@ -284,7 +284,7 @@ void check(char *path, long int value)
>>>>
>>>>    tst_resm(TINFO, "%s is %ld.", path, atol(buf));
>>>>    if (atol(buf) != value)
>>>> - tst_resm(TFAIL, "%s is not %ld.", path, value);
>>>> + tst_brkm(TFAIL, tst_exit, "%s is not %ld.", path, value);
>>>> }
>>>>
>>>> void verify(char value, int proc, int start, int end, int start2,
>>>> int end2)
>>>> @@ -312,7 +312,8 @@ void verify(char value, int proc, int start,
>>>> int end, int start2, int end2)
>>>>
>>>> void group_check(int run, int pages_shared, int pages_sharing,
>>>>        int pages_volatile, int pages_unshared,
>>>> - int sleep_millisecs, int pages_to_scan)
>>>> + int sleep_millisecs, int pages_to_scan,
>>>> + int scans)
>>>> {
>>>>    int fd;
>>>>    char buf[BUFSIZ];
>>>> @@ -332,7 +333,7 @@ void group_check(int run, int pages_shared, int
>>>> pages_sharing,
>>>>    old_num = new_num = atoi(buf);
>>>>    if (lseek(fd, 0, SEEK_SET) == -1)
>>>>        tst_brkm(TBROK|TERRNO, cleanup, "lseek");
>>>> - while (new_num < old_num * 3) {
>>>> + while (new_num < old_num + scans) {
>>>>        sleep(1);
>>>>        if (read(fd, buf, BUFSIZ) < 0)
>>>>            tst_brkm(TBROK|TERRNO, cleanup, "read");
>>>> @@ -587,7 +588,7 @@ void create_same_memory(int size, int num, int
>>>> unit)
>>>>        if (kill(child[k], SIGCONT) == -1)
>>>>            tst_brkm(TBROK|TERRNO, cleanup, "kill child[%d]", k);
>>>>    }
>>>> - group_check(1, 2, size * num * 256 - 2, 0, 0, 0, size * 256 *
>>>> num);
>>>> + group_check(1, 2, size * num * 256 - 2, 0, 0, 0, size * 256 *
>>>> num, 3);
>>>>
>>>>    tst_resm(TINFO, "wait for child 1 to stop.");
>>>>    if (waitpid(child[1], &status, WUNTRACED) == -1)
>>>> @@ -599,7 +600,7 @@ void create_same_memory(int size, int num, int
>>>> unit)
>>>>    tst_resm(TINFO, "resume child 1.");
>>>>    if (kill(child[1], SIGCONT) == -1)
>>>>        tst_brkm(TBROK|TERRNO, cleanup, "kill");
>>>> - group_check(1, 3, size * num * 256 - 3, 0, 0, 0, size * 256 *
>>>> num);
>>>> + group_check(1, 3, size * num * 256 - 3, 0, 0, 0, size * 256 *
>>>> num, 3);
>>>>
>>>>    tst_resm(TINFO, "wait for child 1 to stop.");
>>>>    if (waitpid(child[1], &status, WUNTRACED) == -1)
>>>> @@ -613,7 +614,7 @@ void create_same_memory(int size, int num, int
>>>> unit)
>>>>        if (kill(child[k], SIGCONT) == -1)
>>>>            tst_brkm(TBROK|TERRNO, cleanup, "kill child[%d]", k);
>>>>    }
>>>> - group_check(1, 1, size * num * 256 - 1, 0, 0, 0, size * 256 *
>>>> num);
>>>> + group_check(1, 1, size * num * 256 - 1, 0, 0, 0, size * 256 *
>>>> num, 3);
>>>>
>>>>    tst_resm(TINFO, "wait for all children to stop.");
>>>>    for (k = 0; k < num; k++) {
>>>> @@ -627,7 +628,7 @@ void create_same_memory(int size, int num, int
>>>> unit)
>>>>    tst_resm(TINFO, "resume child 1.");
>>>>    if (kill(child[1], SIGCONT) == -1)
>>>>        tst_brkm(TBROK|TERRNO, cleanup, "kill");
>>>> - group_check(1, 1, size * num * 256 - 2, 0, 1, 0, size * 256 *
>>>> num);
>>>> + group_check(1, 1, size * num * 256 - 2, 0, 1, 0, size * 256 *
>>>> num, 3);
>>>>
>>>>    tst_resm(TINFO, "wait for child 1 to stop.");
>>>>    if (waitpid(child[1], &status, WUNTRACED) == -1)
>>>> @@ -647,7 +648,7 @@ void create_same_memory(int size, int num, int
>>>> unit)
>>>>        tst_brkm(TBROK|TERRNO, cleanup, "open");
>>>>    if (write(fd, "2", 1) != 1)
>>>>        tst_brkm(TBROK|TERRNO, cleanup, "write");
>>>> - group_check(2, 0, 0, 0, 0, 0, size * 256 * num);
>>>> + group_check(2, 0, 0, 0, 0, 0, size * 256 * num, 0);
>>>>
>>>>    tst_resm(TINFO, "wait for all children to stop.");
>>>>    for (k = 0; k < num; k++) {
>>>> @@ -668,7 +669,7 @@ void create_same_memory(int size, int num, int
>>>> unit)
>>>>    if (write(fd, "0", 1) != 1)
>>>>        tst_brkm(TBROK|TERRNO, cleanup, "write");
>>>>    close(fd);
>>>> - group_check(0, 0, 0, 0, 0, 0, size * 256 * num);
>>>> + group_check(0, 0, 0, 0, 0, 0, size * 256 * num, 0);
>>>>    while (waitpid(-1, &status, WUNTRACED | WCONTINUED) > 0)
>>>>        if (WEXITSTATUS(status) != 0)
>>>>            tst_resm(TFAIL, "child exit status is %d",
>>>> --
>>>> 1.7.1
>>>>
>>>>
>>>
>>
>> ------------------------------------------------------------------------------
>> Xperia(TM) PLAY
>> It's a major breakthrough. An authentic gaming
>> smartphone on the nation's most reliable network.
>> And it wants your games.
>> http://p.sf.net/sfu/verizon-sfdev
>> _______________________________________________
>> Ltp-list mailing list
>> [email protected]
>> https://lists.sourceforge.net/lists/listinfo/ltp-list
> 
> 


------------------------------------------------------------------------------
Xperia(TM) PLAY
It's a major breakthrough. An authentic gaming
smartphone on the nation's most reliable network.
And it wants your games.
http://p.sf.net/sfu/verizon-sfdev
_______________________________________________
Ltp-list mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ltp-list

Reply via email to