[LTP] [PATCH] memcg_control_test.sh:incorrect test result and a pipe issue

Shuang Qiu shuang.qiu@oracle.com
Thu Nov 17 10:04:09 CET 2016


On 11/03/2016 10:08 PM, Shuang Qiu wrote:
> Hi Cyril,
> Thanks for review.
> On 11/03/2016 07:00 PM, Cyril Hrubis wrote:
>> Hi!
>>> * The test result flag FAILED_CNT is handled in a sub-shell,which will
>>> make the test result passed even the test actually failed,update the
>>> scripts to not running in sub-shell.
>>> * Sometimes the mem_process process is killed after more than 5
>>> seconds,increase the sleep time to 15 sceconds.And if the mem_process
>>> process is killed after 5 sceconds,the pipe may blocked while writing
>>> it(echo m > $STATUS_PIPE;echo x > $STATUS_PIPE),then the whole LTP
>>> testing will hang.Adding a sub-shell to handle to pipe.
>>>
>>> Signed-off-by: Shuang Qiu <shuang.qiu@oracle.com>
>>> ---
>>>   .../memcg/control/memcg_control_test.sh            |   15 
>>> +++++++++++----
>>>   1 files changed, 11 insertions(+), 4 deletions(-)
>>>
>>> diff --git 
>>> a/testcases/kernel/controllers/memcg/control/memcg_control_test.sh 
>>> b/testcases/kernel/controllers/memcg/control/memcg_control_test.sh
>>> index 1d15872..668e74d 100644
>>> --- a/testcases/kernel/controllers/memcg/control/memcg_control_test.sh
>>> +++ b/testcases/kernel/controllers/memcg/control/memcg_control_test.sh
>>> @@ -64,11 +64,15 @@ test_proc_kill()
>>>         #Instruct the test process to start acquiring memory
>>>       echo m > $STATUS_PIPE
>>> -    sleep 5
>>> +    sleep 15
>>>         #Check if killed
>>>       ps -p $! > /dev/null 2> /dev/null
>>>       if [ $? -eq 0 ]; then
>>> +        (sleep 30
>>> +        ps -p $! > /dev/null 2> /dev/null
>>> +        [ $? -ne 0 -a -e $STATUS_PIPE ] && cat $STATUS_PIPE && \
>>> +        rm -f $STATUS_PIPE) &
>>>           echo m > $STATUS_PIPE
>>>           echo x > $STATUS_PIPE
>>>       else
>> This is plain wrong. Sparkling code with sleeps never solves anything
>> and only slows down the testrun.
>>
>> What should have been done here instead is checking if the process was
>> killed in a loop something as twice a second with some reasonable
>> timeout, trying it 60 times would give it max 30 seconds to run.
> The added code here is intent on read the pipe after sleeps to avoid 
> the parent process blocked here when writing the pipe.
> I agree that it is better to check if the process was killed in a loop 
> instead of just sleeping.
>>
>>> @@ -86,7 +90,8 @@ testcase_1()
>>>       echo "$TOT_MEM_LIMIT" > 
>>> $TST_PATH/mnt/$TST_NUM/memory.memsw.limit_in_bytes
>>>         mkdir sub
>>> -    (cd sub
>>> +    basedir=$PWD
>>> +    cd sub
>>>       KILLED_CNT=0
>>>       test_proc_kill
>>>   @@ -94,7 +99,8 @@ testcase_1()
>>>           result $FAIL "Test #1: failed"
>>>       else
>>>           result $PASS "Test #1: passed"
>>> -    fi)
>>> +    fi
>>> +    cd $basedir
>>>       rmdir sub
>>>   }
>>>   @@ -145,7 +151,8 @@ FAILED_CNT=0
>>>   TST_NUM=1
>>>   while [ $TST_NUM -le $TST_TOTAL ]; do
>>>       mkdir $TST_PATH/mnt/$TST_NUM
>>> -    (cd $TST_PATH/mnt/$TST_NUM && testcase_$TST_NUM)
>>> +    cd $TST_PATH/mnt/$TST_NUM && testcase_$TST_NUM
>>> +    cd $TMP
>>                 ^
>>            trailing whitespace
>>>       rmdir $TST_PATH/mnt/$TST_NUM
>>>       : $((TST_NUM += 1))
>>>   done
>> Moreover I was looking at the test recently and I would say that the
>> best solution would be to remove it completely, since the same function
>> should be covered by the memcg functional testcases. So the best bet
>> here would be to check that it's covered by functional tests, if not add
>> missing pieces to functional tests and get rid of this mess.
> Ok,I will also check the functional test.
I think this testcase can be covered by memcg_use_hierarchy in 
functional testcases.
Maybe we can add a sub case in memcg_use_hierarchy test that check the 
parent limit for memsw.limit_in_bytes.

Thanks
Shuang
>
> Thanks
> Shuang
>>
>
>



More information about the ltp mailing list