|
|
|
Экстремально быстрый менеджер памяти BrainMM
|
|||
|---|---|---|---|
|
#18+
Проект на гитхабе: https://github.com/d-mozulyov/BrainMM Скачать архивом: https://github.com/d-mozulyov/BrainMM/archive/master.zip ПредисловиеНесколько лет назад я начал изучать алгоритмы сборки мусора и принципы менеджмента памяти в таких системах. Считается, что редкая дефрагментация и быстрое выделение памяти в конце пула - делают менеджеры памяти с принципом сборки мусора эффективнее традиционных подходов, когда выделение и освобождение памяти требует сложных медленных манипуляций. Однако на самом деле менеджеры памяти с принципом сборки мусора сложно назвать эффективными, потому что: Realloc памяти гарантированно приводит к выделению нового куска памяти и копированию данных в него, что не обязательно происходит в менеджерах с традиционным подходом Происходит перерасход памяти, т.к. в пуле содержатся так же ранее выделенные, но не используемые (освобождённые) куски памяти Дефрагментация приводит к блокировке всех потоков, длительным операциям анализа и копирования данных - что нередко приводит к неприятному эффекту "зависания" приложения Требуются дополнительные ресурсы на синхронизацию и обслуживание указателей, т.к. после дефрагментации данные могут находиться по другому физическому адресу Принцип быстрого выделения памяти в конце пула за редким исключением применим и в традиционных менеджерах памяти С другой стороны популярный менеджер памяти FastMM со временем перестаёт удовлетворять требованиям современных приложений, т.к. работает с блокировками на многопоточных приложениях, не содержит API для выровненных данных и расходует минимум, в зависимости от платформы, 8/16 байт служебной информации, даже на малых кусках памяти. Поэтому я начал работу над проектом BrainMM - менеджером памяти, спроектированным под современные требования приложений. Искренне верю, что со временем проект вырастет до такого уровня, что войдёт в стандартную поставку Delphi/C++ Builder наряду с другими замечательными библиотеками. Для менеджера памяти BrainMM характерно следующее: Экстремально высокая производительность Без блокировок для кусков памяти до 32Кб Поддержка всех операционных систем, предусмотренных в Delphi/C++ Builder Разделяемая с DLL память Гарантированно выровненный адрес на 16 байт. Это полезно для lock-free алгоритмов, SSE-команд и в целом при чтении/записи/копировании памяти Функция RegetMem. По функциональности похожа на ReallocMem, но не гарантирует сохранности данных, поэтому в некоторых случаях может работать быстрее Функция GetMemAligned. Позволяет выделить память с определённым выравниванием. Освобождается такая память стандартно по FreeMem. При изменении размера с помощью ReallocMem/RegetMem выравнивание сохраняется. Исключение составляют ситуации, когда NewSize равен нулю, в этом случае вызывается FreeMem и информация о выравнивании теряется API для выделения блоков памяти. Под блоками памяти BrainMM подразумеваются куски памяти определённой гранулярности, чей размер изменить нельзя. Блоки памяти полезны для узкоспециализированного требовательного к производительности менеджмента памяти. Служебную информацию можно хранить в начале блока и получать доступ к ней, применяя к указателю операцию логического умножения. Менеджмент малыми (до 128 байт) и средними (до 32Кб) кусками памяти в BrainMM, например, осуществляется с помощью блоков размером 64Кб API для работы со страницами памяти Производительность Данный тест был осуществлён на основе статьи Стива Моэна . Исходные коды теста находятся в репозитории, но Вы можете также скачать бинарные файлы . Extended memory API Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.05.2016, 16:56:07 |
|
||
|
Экстремально быстрый менеджер памяти BrainMM
|
|||
|---|---|---|---|
|
#18+
Ты наконец-то занялся чем-то действительно полезным. одобряю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.05.2016, 17:29:38 |
|
||
|
Экстремально быстрый менеджер памяти BrainMM
|
|||
|---|---|---|---|
|
#18+
defecator, Быстрых менеджеров памяти полно. Промышленных парсеров текстов практически нет. По крайней мере с такой платформой, производительностью и поддержкой стольких кодировок. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.05.2016, 17:33:49 |
|
||
|
Экстремально быстрый менеджер памяти BrainMM
|
|||
|---|---|---|---|
|
#18+
сделай ещё супер-быстрый Jpeg кодер-декодер, будет вообще замечательно. А то таскать с собой IJL15.DLL напрягает ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.05.2016, 17:39:28 |
|
||
|
Экстремально быстрый менеджер памяти BrainMM
|
|||
|---|---|---|---|
|
#18+
defecator, Я ещё эти то не доделал. А ты уже про JPEG заговорил ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.05.2016, 17:50:13 |
|
||
|
Экстремально быстрый менеджер памяти BrainMM
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUdefecator, Быстрых менеджеров памяти полно. Промышленных парсеров текстов практически нет. По крайней мере с такой платформой, производительностью и поддержкой стольких кодировок. Вроде ж Янковский писал в теме про FixInsight, что реализовать его статический анализатор стало реально только после появления мощного парсера, не помню названия. Впрочем, хз как там с кодировками и мультиплатформенностью. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.05.2016, 18:30:42 |
|
||
|
Экстремально быстрый менеджер памяти BrainMM
|
|||
|---|---|---|---|
|
#18+
В XE2 не компилируется. [DCC Error] BrainMM.pas(1887): E2003 Undeclared identifier: 'AtomicDecrement' ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.05.2016, 19:07:53 |
|
||
|
Экстремально быстрый менеджер памяти BrainMM
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey, Спасибо. Поправлю при следующих коммитах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.05.2016, 19:10:43 |
|
||
|
Экстремально быстрый менеджер памяти BrainMM
|
|||
|---|---|---|---|
|
#18+
Vizit0rВроде ж Янковский писал в теме про FixInsight, что реализовать его статический анализатор стало реально только после появления мощного парсера, не помню названия. Впрочем, хз как там с кодировками и мультиплатформенностью. Этот парсер от самого Янковского -- DelphiAST . НО со скоростью там, наверное, что-то не до конца решено -- т.к. тот же FixInsight никак не осилит проверку в реальном времени (или близкое к этому). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.05.2016, 19:19:35 |
|
||
|
Экстремально быстрый менеджер памяти BrainMM
|
|||
|---|---|---|---|
|
#18+
Пара мегабайт исходников на мой взгляд - ещё не "промышленный" объём ) Я немного посмотрел его исходники... не особо они оптимизированны. Но и высокая производительность, насколько я понял из задачи, особо не нужна. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.05.2016, 19:36:19 |
|
||
|
Экстремально быстрый менеджер памяти BrainMM
|
|||
|---|---|---|---|
|
#18+
JaDiНО со скоростью там, наверное, что-то не до конца решено -- т.к. тот же FixInsight никак не осилит проверку в реальном времени (или близкое к этому). А вот не нужно путать скорость парсинга со скоростью анализа. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.05.2016, 19:37:53 |
|
||
|
Экстремально быстрый менеджер памяти BrainMM
|
|||
|---|---|---|---|
|
#18+
Kazantsev AlexeyА вот не нужно путать скорость парсинга со скоростью анализа. Кстати, у анализатора нет исходников. Может там вообще RegExp'ом или XPath'ом идет анализ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.05.2016, 19:40:53 |
|
||
|
Экстремально быстрый менеджер памяти BrainMM
|
|||
|---|---|---|---|
|
#18+
JaDiКстати, у анализатора нет исходников. Может там вообще RegExp'ом или XPath'ом идет анализ. А надеюсь это шутка. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.05.2016, 19:51:21 |
|
||
|
Экстремально быстрый менеджер памяти BrainMM
|
|||
|---|---|---|---|
|
#18+
Проверил на версии посвежее. Прогнал свои юнит тесты проходящие проверку на всех версиях дельфей и под всеми ОС. Результат - три теста упали с AV, тест производительности завис (т.е. он может что-то и делает т.к. проц жрёт, но я ждать устал) на массовом освобождении памяти. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.05.2016, 23:06:00 |
|
||
|
Экстремально быстрый менеджер памяти BrainMM
|
|||
|---|---|---|---|
|
#18+
Немного деталей (один из стектрейсов): Код: pascal 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.05.2016, 23:23:42 |
|
||
|
Экстремально быстрый менеджер памяти BrainMM
|
|||
|---|---|---|---|
|
#18+
Проверил два других - они все на этом месте падают. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.05.2016, 23:25:58 |
|
||
|
Экстремально быстрый менеджер памяти BrainMM
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey, Поновее - это который development? Он ещё не готов, но информация в любом случае важная. Добавляйся в скайп - будет что обсудить ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.05.2016, 09:43:16 |
|
||
|
Экстремально быстрый менеджер памяти BrainMM
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUДанный тест был осуществлёнпросьба добавить в соревнование tbbmm и уточнить насчет нексуса, свежевышедшая ли версия? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.05.2016, 11:42:19 |
|
||
|
Экстремально быстрый менеджер памяти BrainMM
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUПоновее - это который development? Версия дельфей поновее, а менеджер из ветки master. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.05.2016, 11:46:54 |
|
||
|
Экстремально быстрый менеджер памяти BrainMM
|
|||
|---|---|---|---|
|
#18+
А еще было бы интересно увидеть в сводной табличке преимущество в % над каждым из конкурентов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.05.2016, 11:52:54 |
|
||
|
Экстремально быстрый менеджер памяти BrainMM
|
|||
|---|---|---|---|
|
#18+
А для чего это вообще ? Что бы TObject.Create был быстрее ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.05.2016, 14:36:38 |
|
||
|
Экстремально быстрый менеджер памяти BrainMM
|
|||
|---|---|---|---|
|
#18+
Valery_B, если для тебя работа с памятью заканчивается в районе создания\освобождения объектов - то не стоит и вникать в нестандартные менеджеры памяти. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.05.2016, 14:39:08 |
|
||
|
Экстремально быстрый менеджер памяти BrainMM
|
|||
|---|---|---|---|
|
#18+
Valery_BЧто бы TObject.Create был быстрее ?Чтобы сотня тысяч создаваемых и удаляемых объектов в замкнутом меньше раз роняло приложение. Например при сборе картинок с видеокамер :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.05.2016, 14:57:52 |
|
||
|
Экстремально быстрый менеджер памяти BrainMM
|
|||
|---|---|---|---|
|
#18+
Feg16, Сбор картинок наверное сложный пример... Изменения в существующий код надо вносить ? Есть пример кода, где BrainMM выигрывает у стандартного манагера ? Поддержу b0rk - насколько BrainMM получается быстрее ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.05.2016, 16:07:02 |
|
||
|
|

start [/forum/topic.php?fid=58&fpage=136&tid=2041987]: |
0ms |
get settings: |
11ms |
get forum list: |
17ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
88ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
79ms |
get tp. blocked users: |
1ms |
| others: | 231ms |
| total: | 450ms |

| 0 / 0 |
