nedmalloc

Denis F. Latypoff denis at gostats.ru
Thu Jul 16 18:59:20 MSD 2009


Hello Igor,

Thursday, July 16, 2009, 7:30:51 PM, you wrote:

> On Thu, Jul 16, 2009 at 05:03:26PM +0700, Denis F. Latypoff wrote:

>> Hello Kirill,
>> 
>> Thursday, July 16, 2009, 4:23:29 PM, you wrote:
>> 
>> > At Thu, 16 Jul 2009 04:38:23 +0400,
>> > Sergey Shepelev <temotor at gmail.com> wrote:
>> >> 
>> >> Набрёл на nedmalloc.
>> >> 
>> >> Автор заявляет, что аллокатор наибыстрейший в мире+лучше всех
>> >> скалируется на ядра.
>> >> 
>> >> http://www.nedprod.com/programs/portable/nedmalloc/
>> >> 
>> >> Мало ли, интересно будет.
>> 
>> > спасибо, интересно.
>> 
>> > Для nginx работа аллокатора на нескольких ядрах не интересна. Но в
>> > свою коллекцию включу :)
>> 
>> Я попробывал их пулы, стало страшно:
>> 
>>   PID USER      PR  NI %CPU    TIME+  %MEM  VIRT  RES  SHR S COMMAND
>> 29142 root      20   0 67.0   0:03.50  1.1  407m 8696  572 R cag_rss_server
>> 
>> С пулами из nginx'a все в порядке:
>> 
>> 29641 root      20   0 60.7   0:03.47  1.0  9460 7548  548 R cag_rss_server

> А в nedmalloc есть пулы помимо malloc/free ?

nedmalloc - это поделка, нормальные пулы есть в dlmalloc:

typedef void* mspace;

mspace  create_mspace(size_t capacity, int locked);
size_t  destroy_mspace(mspace msp);
int     mspace_track_large_chunks(mspace msp, int enable);
void   *mspace_malloc(mspace msp, size_t bytes);
void    mspace_free(mspace msp, void *mem);
void   *mspace_realloc(mspace msp, void *mem, size_t newsize); /*(!)*/
void   *mspace_calloc(mspace msp, size_t n_elements, size_t elem_size);
void   *mspace_memalign(mspace msp, size_t alignment, size_t bytes);
size_t  mspace_footprint(mspace msp);



int     mspace_track_large_chunks (mspace msp, int enable);
/*
   без этого большие чанки текут, цена включения опции - увеличение
   фрагментации:
   By default large chunks are not tracked,
   which reduces fragmentation. However, such chunks are not
   necessarily released to the system upon destroy_mspace.  Enabling
   tracking by setting to true may increase fragmentation, but avoids
   leakage when relying on destroy_mspace to release all memory
   allocated using this space
*/

void    mspace_free(mspace msp, void *mem);
 /*
   в nginx'е освобождаются только large_block's, здесь - все блоки,
   из-за этого футпринт в nginx'е маленько больше :)
 */

-- 
Best regards,
 Denis                            mailto:denis at gostats.ru






More information about the nginx-ru mailing list