On [Wed, 28.11.2007 23:39], Alexander Bokovoy wrote: > Kirill A. Shutemov пишет: > > On [Wed, 28.11.2007 21:56], Alexander Bokovoy wrote: > >> Обратной стороной является некоторое падение производительности: до > >> 3% процентов в общем случае при использовании glibc's malloc() в > >> качестве "драйвера" для talloc(3). Для специфических ситуаций вроде > >> распределения большого количества малых фрагментов памяти -- > >> коротких строк, конкатенации большого количества малых фрагментов и > >> тому подобное, можно выбрать другие распределители. Например, можно > >> использовать распределитель, основанный на анонимной mmap-памяти, > >> написанный Andrew Tridgell-ом: > >> http://samba.org/~tridge/junkcode/alloc_mmap/. Этот распределитель > >> снижает расход памяти в Samba4 приблизительно на 10-15% на > >> соединение и работает быстрее. > > > > Это за счёт фрагментации? glibc'ный malloc ведь тюнить можно. > > Сталкнувшись с фрагментацией на проекте, сделал > > mallopt(M_MMAP_THRESHOLD, 32) -- т.е. для кусков > 32 использовать > > mmap для распределения. Помогло. Единственное, что озадачивает > > M_MMAP_THRESHOLD равный 128k по умолчанию. Зачем так много? > шаблоны распределения памяти могут достаточно сильно варьироваться от > программы к программе и поэтому к системному распределителю > предъявляются консервативные требования вести себя хорошо на большинстве > ситуаций. Это понятно. Вот только 128k, по крайней мере на первый взгляд, кажутся взятыми с потолка. Хотя и мои 32 тоже с потолка взяты. ;) -- Regards, Kirill A. Shutemov + Belarus, Minsk + Velesys LLC, http://www.velesys.com/ + ALT Linux Team, http://www.altlinux.com/