Еще раз - никогда не пишите аллокаторов
От: McSeem2 США http://www.antigrain.com
Дата: 27.06.12 18:18
Оценка: :))) :))
Это такое попадалово... Кто-то пропарывает пямять, а софта падает в аллокаторе. А поскольку я его делал, все саппорты валятся ко мне, хотя виноват в этом совсем не я, а заказчик. Ой йоо, как же я теперь ненавижу аллокаторы памяти.
McSeem
Я жертва цепи несчастных случайностей. Как и все мы.
Re: Еще раз - никогда не пишите аллокаторов
От: serra  
Дата: 27.06.12 18:26
Оценка: 3 (1) :))
Ты не туда пишешь.

Писать надо руководителю о необходимости реорганизации

процесса поддержки аллокатора,
создании багтрекера для выявления типовых причин,
выделении людей на сортировку багов,
создания курсов обучения по использованию аллокатора и т.д.

А лично тебе надо руководить вновь создаваемым отделом.
Re: Еще раз - никогда не пишите аллокаторов
От: Michael7 Россия  
Дата: 27.06.12 18:38
Оценка: +4
Здравствуйте, McSeem2, Вы писали:

MS>Это такое попадалово... Кто-то пропарывает пямять, а софта падает в аллокаторе. А поскольку я его делал, все саппорты валятся ко мне, хотя виноват в этом совсем не я, а заказчик. Ой йоо, как же я теперь ненавижу аллокаторы памяти.


У меня дежавю, поиском не нашел, но стойкое ощущение, что ты уже писал об этом и жаловался на свой внутрифирменный аллокатор, который вообще-то очень хорош оказался, но из-за него как пишешь шишки не по делу сыпятся.
Re: Еще раз - никогда не пишите аллокаторов
От: Хон Гильдон Россия  
Дата: 27.06.12 19:08
Оценка:
Здравствуйте, McSeem2, Вы писали:

MS>Это такое попадалово... Кто-то пропарывает пямять, а софта падает в аллокаторе. А поскольку я его делал, все саппорты валятся ко мне, хотя виноват в этом совсем не я, а заказчик. Ой йоо, как же я теперь ненавижу аллокаторы памяти.


Обобщу — не пишете код (и не советуйте библиотеки), который будет чересчур интенсивно использоваться в вашем проекте. Даже если это не аллокатор, а всего лишь rpc или сериализация, в большинстве случаев испорченная память проявится именно в "популярном" коде и разбираться с этим вам
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Re[2]: Еще раз - никогда не пишите аллокаторов
От: ononim  
Дата: 27.06.12 19:25
Оценка: 1 (1)
http://rsdn.org/forum/humour/4542434.aspx?tree=tree
Автор: McSeem2
Дата: 14.12.11

PS мастер гугла 80го уровня..
Как много веселых ребят, и все делают велосипед...
Re: Еще раз - никогда не пишите аллокаторов
От: minorlogic Украина  
Дата: 28.06.12 13:55
Оценка:
Здравствуйте, McSeem2, Вы писали:

MS>Это такое попадалово... Кто-то пропарывает пямять, а софта падает в аллокаторе. А поскольку я его делал, все саппорты валятся ко мне, хотя виноват в этом совсем не я, а заказчик. Ой йоо, как же я теперь ненавижу аллокаторы памяти.


В отладочной сборке хорошо бы аллокатору проверять на валиднолсть свое использование.
... << RSDN@Home 1.2.0 alpha 5 rev. 1539>>
Ищу работу, 3D, SLAM, computer graphics/vision.
Re[2]: Еще раз - никогда не пишите аллокаторов
От: ononim  
Дата: 28.06.12 18:09
Оценка: 6 (2) :))) :)
MS>>Это такое попадалово... Кто-то пропарывает пямять, а софта падает в аллокаторе. А поскольку я его делал, все саппорты валятся ко мне, хотя виноват в этом совсем не я, а заказчик. Ой йоо, как же я теперь ненавижу аллокаторы памяти.
M>В отладочной сборке хорошо бы аллокатору проверять на валиднолсть свое использование.
..и портить память обидчику
Как много веселых ребят, и все делают велосипед...
Re[2]: Еще раз - никогда не пишите аллокаторов
От: McSeem2 США http://www.antigrain.com
Дата: 28.06.12 20:52
Оценка:
Здравствуйте, minorlogic, Вы писали:

M>В отладочной сборке хорошо бы аллокатору проверять на валиднолсть свое использование.


Понятное дело, есть Debug Info, и проверка на пропарывание, если повезет. Скажем, аллокируют 12 байт, а минимальная гранулярность — 16, значит, 4 байта в конце можно проверить, не напорото ли. Ну, просто забиваем хвост числами Фибоначчи или чем-то другим, а в функции Free — проверяем. Но засада в том, что у нас это очень редкая ситуация. Все любят наш аллокатор из за алайментов, но в хвост уже ничего не запишешь, его просто нету. И пропарывание памяти портит следующую аллокацию, из за чего все вылетает на инфу в буккипере, и падает. А я как всегда виноват. Да, условия таковы, что даже в дебаге нельзя аллокировать больше. Память до сих пор страшный дефицит, особенно на всяких Wii и прочих там PSVita.
McSeem
Я жертва цепи несчастных случайностей. Как и все мы.
Re[3]: Еще раз - никогда не пишите аллокаторов
От: minorlogic Украина  
Дата: 28.06.12 21:04
Оценка:
Здравствуйте, McSeem2, Вы писали:

MS> Да, условия таковы, что даже в дебаге нельзя аллокировать больше. Память до сих пор страшный дефицит, особенно на всяких Wii и прочих там PSVita.


Туго , а то можно было бы CRC еще писать всей служебной информации и т.п.
... << RSDN@Home 1.2.0 alpha 5 rev. 1539>>
Ищу работу, 3D, SLAM, computer graphics/vision.
Re[3]: Еще раз - никогда не пишите аллокаторов
От: Michael7 Россия  
Дата: 28.06.12 21:35
Оценка:
Здравствуйте, McSeem2, Вы писали:

> Да, условия таковы, что даже в дебаге нельзя аллокировать больше. Память до сих пор страшный дефицит, особенно на всяких Wii и прочих там PSVita.


Кстати, совершенно непонятно почему, неужели даже при нынешних ценах на память ее дорого добавить?
Re[4]: Еще раз - никогда не пишите аллокаторов
От: McSeem2 США http://www.antigrain.com
Дата: 30.06.12 16:33
Оценка: +1
Здравствуйте, Michael7, Вы писали:

M>Кстати, совершенно непонятно почему, неужели даже при нынешних ценах на память ее дорого добавить?


Извиняюсь за много-букфф.
Есть такая аксиома — памяти много не бывает. А уж что трворят эти флешисты на ActionScript-3 — это просто ужас-ужас. Начинаю ненавидеть Flash.
Да, и я сделал другой аллокатор, не такой эффективный, но зато malloc-friendly. Наш первый гениален, но он требует алаймента на 4K, это стандартная фишка в VirtualAlloc или mmap. Но заказчики всегда хотят подсунуть свой sysAlloc, а от этого алайменты сбиваются и начинаются потери памяти. Мы говорим — не надо делать своих сис-аллоков, пользуйтесь нашими и аллокируйте память тоже через наш и все будет оптимально. Но нет, не хотят. А проблема в том, что аллокатор запрашивает большие куски памяти, типа мегабайта или 16 и потом рубает их по мере необходимости, так работают все аллокаторы. Но если в параллель работает еще один аллокатор, то очевидно, что память, захваченная нашим, для другого уже не доступна, хотя место там есть. И это источник главного возмущения. А наш аллокатор очень эффективен, он работает без хэдеров и очень быстро, быстрее чем dlmalloc. Ну и мы в результаьте плюнули на эффективность и сделали так, чтобы большие аллокации, типа больше 512 байт направлялись непосредственно в SysAlloc. А для мелких, котороых из скриптов прет просто гигантскими количествами — блоки по 4K, но от сис-аллока не требуется алаймета, правда тоже с потерями. Да, и гранулярность там — 8 байт, а не 16. Начальник и приятель Миха придумал схему на грани фола, как это все разрулить, причем, с разными хипами, даже вложенными, с мульти-нитными аренами, и прочими балеринами и преферансом. Но определить, кто реально порет память при этом очень не просто. Мы даже пытались прикрутить Valgrind, но оказалось, что это too much hassle в нашем случае.
McSeem
Я жертва цепи несчастных случайностей. Как и все мы.
Re: Еще раз - никогда не пишите аллокаторов
От: alpha21264 СССР  
Дата: 30.06.12 16:47
Оценка: +1
Здравствуйте, McSeem2, Вы писали:

MS>Это такое попадалово... Кто-то пропарывает пямять, а софта падает в аллокаторе. А поскольку я его делал, все саппорты валятся ко мне, хотя виноват в этом совсем не я, а заказчик. Ой йоо, как же я теперь ненавижу аллокаторы памяти.


Это делается так.
1) Заводим переменную препроцессора СистемАллокатор
2) #ifdef СистемАллокатор то используем стандартные malloc/free new/delete по вкусу
(Внутри твоего аллокатора, чтобы не трогать остальные исходники.)
3) натравливаем стандартный механизм поиска ошибок памяти — valgrind или что там у вас в Виндах.
4) Через полчаса приходим со стеком ошибки к виновнику торжества.
5) Когда тот исправит ошибку, отключаем СистемАллокатор и включаем НашАллокатор.


Течёт вода Кубань-реки куда велят большевики.
Re[2]: Еще раз - никогда не пишите аллокаторов
От: McSeem2 США http://www.antigrain.com
Дата: 30.06.12 18:02
Оценка:
Здравствуйте, alpha21264, Вы писали:

A>1) Заводим переменную препроцессора СистемАллокатор

A>2) #ifdef СистемАллокатор то используем стандартные malloc/free new/delete по вкусу
A> (Внутри твоего аллокатора, чтобы не трогать остальные исходники.)
A>3) натравливаем стандартный механизм поиска ошибок памяти — valgrind или что там у вас в Виндах.
A>4) Через полчаса приходим со стеком ошибки к виновнику торжества.
A>5) Когда тот исправит ошибку, отключаем СистемАллокатор и включаем НашАллокатор.

К сожалению, не катит. У нас аллокатор многохиповый и многотредовый, что очень сильно меняет паттерн. И еще в нем есть call-back по превышению лимита, когда надо запускать GC. Самое гнусное — когда пропарывание не воспроизводится. Я даже делал отладочную версию на основе голого mmap или VirtualAlloc с guard pages, аллокация в самом конце страницы, а следующшая идет голая. Это по идее самый надежный способ. Тормозит жутко и память жрет как миллион китайцев. Пару раз помогло, но из за сбоя таймингов в основном не работает. В общем, огреб я на свою жопу в полный рост.
McSeem
Я жертва цепи несчастных случайностей. Как и все мы.
Re[5]: Еще раз - никогда не пишите аллокаторов
От: vdimas Россия  
Дата: 30.06.12 22:04
Оценка:
Здравствуйте, McSeem2, Вы писали:

MS>А наш аллокатор очень эффективен, он работает без хэдеров и очень быстро,


Делит куски памяти по основанию 2? Адрес страницы вычисляет округлением младших бит?

Просто любопытно... бо, судя по всему, придется попробовать нарисовать аналогичное. Хорошо ли показывает себя для std::string?
Я так понимаю, что надо резервировать выровненные области памяти на всяк случай и потом коммитить по мере надобности?
Re: Еще раз - никогда не пишите аллокаторов
От: Kryon  
Дата: 01.07.12 04:19
Оценка:
Здравствуйте, McSeem2, Вы писали:

MS>Это такое попадалово... Кто-то пропарывает пямять, а софта падает в аллокаторе. А поскольку я его делал, все саппорты валятся ко мне, хотя виноват в этом совсем не я, а заказчик. Ой йоо, как же я теперь ненавижу аллокаторы памяти.


Добро пожаловать в реальный мир
Re: Еще раз - никогда не пишите аллокаторов
От: SilentNoise  
Дата: 01.07.12 05:33
Оценка:
Если так нужны выравнивания, не лучше ли явно отразить это в API и сделать аналог posix_memalign?
Re[5]: Еще раз - никогда не пишите аллокаторов
От: minorlogic Украина  
Дата: 01.07.12 07:50
Оценка:
С другими алокаторами сравнивали ? Заточен на определенный сценарий работы ? Интересно в чем была мотивация свой писать
... << RSDN@Home 1.2.0 alpha 5 rev. 1539>>
Ищу работу, 3D, SLAM, computer graphics/vision.
Re: Еще раз - никогда не пишите аллокаторов
От: 0x8000FFFF Россия  
Дата: 01.07.12 08:58
Оценка: :)
Никогда не пишите библиотек, а решайте основную задачу. Если ограничиваться только своим кусочком — такие ситуации всегда будут.. .
Re[6]: Еще раз - никогда не пишите аллокаторов
От: McSeem2 США http://www.antigrain.com
Дата: 01.07.12 19:04
Оценка:
Здравствуйте, minorlogic, Вы писали:

M>С другими алокаторами сравнивали ? Заточен на определенный сценарий работы ? Интересно в чем была мотивация свой писать


Это была моя ошибка, я повелся на мнение, что аллокатор сильно улучшит систему. Просто до этого нафигачили много кода, не думая об эффективности, типа Array<Array>Array>> ну и т.д. В общем, была гонка. Плюс многотредовость, GC, ref-counters и прочий преферанс с балеринами. Не спас аллокатор, как я и предсказывал. Надо на прикладном уровне грамотно и нежно обращяться с памятью, причем в любом языке. Но некоторые заказчики наш аллокатор очень ценят тем не менее. Моя же позиция в том, что код не должен зависеть от аллокатора, я даже тесселлятор сделал так, что ему пофиг, какой там аллокатор, чисто как proof of concept и пример для подражания. Но как обычно, всем пох. А на функции Realloc, я попотел сильно.
McSeem
Я жертва цепи несчастных случайностей. Как и все мы.
Re[7]: Еще раз - никогда не пишите аллокаторов
От: minorlogic Украина  
Дата: 01.07.12 19:11
Оценка:
Я больше спрашивал , сравнивали ли с всякими хорошо известными реализациями , мне первым http://www.hoard.org/ в голову приходить
... << RSDN@Home 1.2.0 alpha 5 rev. 1539>>
Ищу работу, 3D, SLAM, computer graphics/vision.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.