diff mbox series

syscalls/mallinfo01: Disable free fastbin blocks

Message ID 1620896054-26151-1-git-send-email-xuyang2018.jy@fujitsu.com
State Rejected
Headers show
Series syscalls/mallinfo01: Disable free fastbin blocks | expand

Commit Message

xuyang2018.jy@fujitsu.com May 13, 2021, 8:54 a.m. UTC
When using malloc to allocate small space, it will use fastbin block firstly if
we have free fastbin free blocks, it is more quickly.
In here, we just test oldblks free chunks, it is the number of ordinary
(i.e. non-fastbin) free blocks. So use mallopt(M_MXFAST, 0) to disable
free fastbin block.

Signed-off-by: Yang Xu <xuyang2018.jy@fujitsu.com>
---
 testcases/kernel/syscalls/mallinfo/mallinfo01.c | 2 ++
 1 file changed, 2 insertions(+)

Comments

Martin Doucha May 13, 2021, 9:05 a.m. UTC | #1
Hello,

On 13. 05. 21 10:54, Yang Xu wrote:
> When using malloc to allocate small space, it will use fastbin block firstly if
> we have free fastbin free blocks, it is more quickly.
> In here, we just test oldblks free chunks, it is the number of ordinary
> (i.e. non-fastbin) free blocks. So use mallopt(M_MXFAST, 0) to disable
> free fastbin block.
> 
> Signed-off-by: Yang Xu <xuyang2018.jy@fujitsu.com>
> ---
>  testcases/kernel/syscalls/mallinfo/mallinfo01.c | 2 ++
>  1 file changed, 2 insertions(+)
> 
> diff --git a/testcases/kernel/syscalls/mallinfo/mallinfo01.c b/testcases/kernel/syscalls/mallinfo/mallinfo01.c
> index 48fce0132..4e10e352e 100644
> --- a/testcases/kernel/syscalls/mallinfo/mallinfo01.c
> +++ b/testcases/kernel/syscalls/mallinfo/mallinfo01.c
> @@ -64,6 +64,8 @@ static void setup(void)
>  {
>  	if (sizeof(info1.arena) != sizeof(int))
>  		tst_res(TFAIL, "The member of mallinfo struct is not int");
> +	if (mallopt(M_MXFAST, 0) == 0)
> +		tst_res(TFAIL, "mallopt(M_MXFAST, 0) failed");
>  
>  	info1 = mallinfo();
>  	print_mallinfo("Start", &info1);
> 

Sorry but this does not fix the problem. The failing subtest assumes that:
- malloc() will never increase ordblks
- free() will allways increase ordblks

mallinfo01 is failing because both of these assumptions are wrong.
Disabling fastbin block usage will not fix the failure.
Cyril Hrubis May 13, 2021, 9:47 a.m. UTC | #2
Hi!
>   I don't have a proper fix. So you can remove it from runtest file.

I've pushed a patch that removes it from the runtest file, thanks.
xuyang2018.jy@fujitsu.com May 13, 2021, 10 a.m. UTC | #3
Hi Martin
  I don't have a proper fix. So you can remove it from runtest file.

Best Regards
Yang Xu
> Hello,
>
> On 13. 05. 21 10:54, Yang Xu wrote:
>> When using malloc to allocate small space, it will use fastbin block firstly if
>> we have free fastbin free blocks, it is more quickly.
>> In here, we just test oldblks free chunks, it is the number of ordinary
>> (i.e. non-fastbin) free blocks. So use mallopt(M_MXFAST, 0) to disable
>> free fastbin block.
>>
>> Signed-off-by: Yang Xu<xuyang2018.jy@fujitsu.com>
>> ---
>>   testcases/kernel/syscalls/mallinfo/mallinfo01.c | 2 ++
>>   1 file changed, 2 insertions(+)
>>
>> diff --git a/testcases/kernel/syscalls/mallinfo/mallinfo01.c b/testcases/kernel/syscalls/mallinfo/mallinfo01.c
>> index 48fce0132..4e10e352e 100644
>> --- a/testcases/kernel/syscalls/mallinfo/mallinfo01.c
>> +++ b/testcases/kernel/syscalls/mallinfo/mallinfo01.c
>> @@ -64,6 +64,8 @@ static void setup(void)
>>   {
>>   	if (sizeof(info1.arena) != sizeof(int))
>>   		tst_res(TFAIL, "The member of mallinfo struct is not int");
>> +	if (mallopt(M_MXFAST, 0) == 0)
>> +		tst_res(TFAIL, "mallopt(M_MXFAST, 0) failed");
>>
>>   	info1 = mallinfo();
>>   	print_mallinfo("Start",&info1);
>>
>
> Sorry but this does not fix the problem. The failing subtest assumes that:
> - malloc() will never increase ordblks
> - free() will allways increase ordblks
>
> mallinfo01 is failing because both of these assumptions are wrong.
> Disabling fastbin block usage will not fix the failure.
>
diff mbox series

Patch

diff --git a/testcases/kernel/syscalls/mallinfo/mallinfo01.c b/testcases/kernel/syscalls/mallinfo/mallinfo01.c
index 48fce0132..4e10e352e 100644
--- a/testcases/kernel/syscalls/mallinfo/mallinfo01.c
+++ b/testcases/kernel/syscalls/mallinfo/mallinfo01.c
@@ -64,6 +64,8 @@  static void setup(void)
 {
 	if (sizeof(info1.arena) != sizeof(int))
 		tst_res(TFAIL, "The member of mallinfo struct is not int");
+	if (mallopt(M_MXFAST, 0) == 0)
+		tst_res(TFAIL, "mallopt(M_MXFAST, 0) failed");
 
 	info1 = mallinfo();
 	print_mallinfo("Start", &info1);