[U-Boot] [PATCH v3 4/6] dlmalloc: add option for skip memset in malloc init
Przemyslaw Marczak
p.marczak at samsung.com
Fri Feb 20 18:08:20 CET 2015
Hello,
On 02/20/2015 01:52 PM, Masahiro Yamada wrote:
> Hi Przemyslaw,
>
>
> On Fri, 20 Feb 2015 12:06:17 +0100
> Przemyslaw Marczak <p.marczak at samsung.com> wrote:
>
>> This commit introduces new config: CONFIG_SYS_MALLOC_INIT_SKIP_ZEROING.
>>
>> Before this change, the all amount of memory reserved for the malloc,
>> was set to zero in mem_malloc_init(). When the malloc reserved memory
>> exceeds few MiB, then the boot process can slow down.
>>
>> So enabling this config, is an option to reduce the boot time.
>>
>> This option can be enabled by Kconfig.
>>
>> Note:
>> After enable this option, only calloc() will return the pointer to zeroed
>> memory area. Previously, without this option, the memory pointed to untouched
>> malloc memory region, was filled with zeros. So it means, that code with
>> malloc() calls should be reexamined.
>>
>> Signed-off-by: Przemyslaw Marczak <p.marczak at samsung.com>
>> Reviewed-by: Simon Glass <sjg at chromium.org>
>>
>> ---
>> Changes v3:
>> - squash the commit with the Kconfig option
>> ---
>> Kconfig | 26 +++++++++++++++++++-------
>> common/dlmalloc.c | 10 +++++++---
>> 2 files changed, 26 insertions(+), 10 deletions(-)
>>
>> diff --git a/Kconfig b/Kconfig
>> index 75bab7f..87d4daf 100644
>> --- a/Kconfig
>> +++ b/Kconfig
>> @@ -76,13 +76,25 @@ config SYS_MALLOC_F_LEN
>> initial serial device and any others that are needed.
>>
>> menuconfig EXPERT
>> - bool "Configure standard U-Boot features (expert users)"
>> - help
>> - This option allows certain base U-Boot options and settings
>> - to be disabled or tweaked. This is for specialized
>> - environments which can tolerate a "non-standard" U-Boot.
>> - Only use this if you really know what you are doing.
>> -
>> + bool "Configure standard U-Boot features (expert users)"
>> + help
>> + This option allows certain base U-Boot options and settings
>> + to be disabled or tweaked. This is for specialized
>> + environments which can tolerate a "non-standard" U-Boot.
>> + Only use this if you really know what you are doing.
>> +
>> +if EXPERT
>> + config SYS_MALLOC_INIT_SKIP_ZEROING
>> + bool "Skip memset at malloc init (reduce boot time)"
>> + help
>> + This avoids zeroing memory reserved for malloc at malloc init.
>> + Significant boot time reduction is visible for configs in which
>> + CONFIG_SYS_MALLOC_LEN value, has more than few MiB.
>> + Useful for bzip2, bmp logo.
>> + Warning:
>> + When enabling this, please check if malloc calls, maybe
>> + should be replaced by calloc - if expects zeroed memory.
>> +endif
>> endmenu # General setup
>>
>> menu "Boot images"
>> diff --git a/common/dlmalloc.c b/common/dlmalloc.c
>> index 6453ee9..63f68ed 100644
>> --- a/common/dlmalloc.c
>> +++ b/common/dlmalloc.c
>> @@ -1535,9 +1535,9 @@ void mem_malloc_init(ulong start, ulong size)
>>
>> debug("using memory %#lx-%#lx for malloc()\n", mem_malloc_start,
>> mem_malloc_end);
>> -
>> - memset((void *)mem_malloc_start, 0, size);
>> -
>> +#ifndef CONFIG_SYS_MALLOC_INIT_SKIP_ZEROING
>> + memset((void *)mem_malloc_start, 0x0, size);
>> +#endif
>> malloc_bin_reloc();
>> }
>>
>> @@ -2948,10 +2948,12 @@ Void_t* cALLOc(n, elem_size) size_t n; size_t elem_size;
>>
>>
>> /* check if expand_top called, in which case don't need to clear */
>> +#ifndef CONFIG_SYS_MALLOC_INIT_SKIP_ZEROING
>> #if MORECORE_CLEARS
>> mchunkptr oldtop = top;
>> INTERNAL_SIZE_T oldtopsize = chunksize(top);
>> #endif
>> +#endif
>> Void_t* mem = mALLOc (sz);
>>
>> if ((long)n < 0) return NULL;
>> @@ -2977,6 +2979,7 @@ Void_t* cALLOc(n, elem_size) size_t n; size_t elem_size;
>>
>> csz = chunksize(p);
>>
>> +#ifndef CONFIG_SYS_MALLOC_INIT_SKIP_ZEROING
>> #if MORECORE_CLEARS
>> if (p == oldtop && csz > oldtopsize)
>> {
>> @@ -2984,6 +2987,7 @@ Void_t* cALLOc(n, elem_size) size_t n; size_t elem_size;
>> csz = oldtopsize;
>> }
>> #endif
>> +#endif
>>
>> MALLOC_ZERO(mem, csz - SIZE_SZ);
>> return mem;
>
>
> You are adding only "ifndef" conditionals.
>
> IMHO,
> Isn't "#ifdef CONFIG_SYS_MALLOC_INIT_ZEROING" better?
> (Generally speaking, CONFIG options that disable a feature are not preferable.)
>
> You also need to add "default y" to the Kconfig
> and add "# CONIFG_SYS_MALLOC_INIT_ZEROING is not set" to your defconfig.
>
>
> Best Regards
> Masahiro Yamada
>
Ok, will change this to positive.
Best regards,
--
Przemyslaw Marczak
Samsung R&D Institute Poland
Samsung Electronics
p.marczak at samsung.com
More information about the U-Boot
mailing list