Size: a a a

Compiler Development

2020 January 20

DS

Doge Shibu in Compiler Development
Alexander Tchitchigin
"Стандартный системный аллокатор" (в Linux, по крайней мере) рассчитан на максимально широкий круг задач (типов нагрузки). GC тоже ни под какой конкретно тип нагрузки специально не оптимизирован. Гипотезу о быстром умирании и тот, и другой могут использовать и используют. Так что аргумент не принимается. 😊
Ну может и рассчитан, но на практике выходит, что он куда хуже справляется с нагрузками с кучей мелких аллокацией, чем бамп аллокаторы и гц.

Почему он из коробки не умеет с такими нагрузками работать хорошо - тут я, увы, не знаю, надо спрашивать знатоков внутреннего устройства и истории ОС.
источник

AT

Alexander Tchitchigin in Compiler Development
Doge Shibu
Ну может и рассчитан, но на практике выходит, что он куда хуже справляется с нагрузками с кучей мелких аллокацией, чем бамп аллокаторы и гц.

Почему он из коробки не умеет с такими нагрузками работать хорошо - тут я, увы, не знаю, надо спрашивать знатоков внутреннего устройства и истории ОС.
В первую очередь - потому что он не может перемещать, очевидно, но с фрагментацией кучи тоже должен как-то бороться. И плюс он тюнится на каком-то наборе примеров, которые разработчики считают наиболее репрезентативными - видимо, этому случаю уделяется меньше внимания.
источник

AT

Alexander Tchitchigin in Compiler Development
C'est la vie. 🤷‍♀️
источник

МБ

Михаил Бахтерев in Compiler Development
Doge Shibu
Он не пытается это спрятать от разработчика, в отличие от языков с гц.

Но тут разные ниши и соответственно разные трейдоффы.
Ага. Просто вместо GC это от разработчиков прячет операционная система и виртуальная память :)
источник

DS

Doge Shibu in Compiler Development
Михаил Бахтерев
Ага. Просто вместо GC это от разработчиков прячет операционная система и виртуальная память :)
Понятно, что здесь много уровней абстракции от кода до непосредственно физической памяти.

Вопрос в том, какие уровни абстракции скрывает язык.
источник

BD

Berkus Decker in Compiler Development
Doge Shibu
Проблема в том, что на данный момент кастомный аллокатора к стандартным боксам не приделать.
можно глобальный аллокатор поменять
источник

BD

Berkus Decker in Compiler Development
на тот же jemalloc например
источник

BD

Berkus Decker in Compiler Development
сейчас то std дефолтный
источник

DS

Doge Shibu in Compiler Development
Berkus Decker
можно глобальный аллокатор поменять
Да, но тут хотелось бы именно bump allocator, типа того же bumpalo, но только для желаемых мной типов и даже боксов.
источник

DS

Doge Shibu in Compiler Development
Не уверен, что в той ситуации, которую мы сейчас обсуждаем, jemalloc смог бы вытянуть.
источник

BD

Berkus Decker in Compiler Development
Doge Shibu
Да, но тут хотелось бы именно bump allocator, типа того же bumpalo, но только для желаемых мной типов и даже боксов.
пока вроде никаких телодвижений активных в эту сторону нету, но _технически_ как я понимаю это не проблема. вопрос организационный.
источник

BD

Berkus Decker in Compiler Development
Doge Shibu
Не уверен, что в той ситуации, которую мы сейчас обсуждаем, jemalloc смог бы вытянуть.
ну можно на wee_alloc его поменять, одноразовый )
источник

DS

Doge Shibu in Compiler Development
Berkus Decker
пока вроде никаких телодвижений активных в эту сторону нету, но _технически_ как я понимаю это не проблема. вопрос организационный.
Ну вот и ждём пока всё стд в расте будет аллокатором параметризовано.

Я этого давно жду.
источник

МБ

Михаил Бахтерев in Compiler Development
Doge Shibu
Понятно, что здесь много уровней абстракции от кода до непосредственно физической памяти.

Вопрос в том, какие уровни абстракции скрывает язык.
Это неверный вопрос. Верный вопрос: на каком языке можно написать более эффективный код. Пока одни будут вести героическую войну с malloc/free, Питер Норвиг на питончике нафигачит изощрённый алгоритм, который будет жрать в 100 раз меньше памяти :) Как-то так
источник

M

MaxGraey in Compiler Development
Berkus Decker
ну можно на wee_alloc его поменять, одноразовый )
wee_alloc медленный, он был создан для wasm и главная задача его быть компактным
источник

DS

Doge Shibu in Compiler Development
Михаил Бахтерев
Это неверный вопрос. Верный вопрос: на каком языке можно написать более эффективный код. Пока одни будут вести героическую войну с malloc/free, Питер Норвиг на питончике нафигачит изощрённый алгоритм, который будет жрать в 100 раз меньше памяти :) Как-то так
Ну при разработке на расте с malloc/free бороться не надо за редчайщими исключениями.
источник

МБ

Михаил Бахтерев in Compiler Development
Doge Shibu
Ну при разработке на расте с malloc/free бороться не надо за редчайщими исключениями.
Надо. В любом более или менее нетривиальном алгоритме.
источник

AT

Alexander Tchitchigin in Compiler Development
Doge Shibu
Не уверен, что в той ситуации, которую мы сейчас обсуждаем, jemalloc смог бы вытянуть.
Да у меня, вроде, он и был изначально - не панацея... 😊
источник

DS

Doge Shibu in Compiler Development
Alexander Tchitchigin
Да у меня, вроде, он и был изначально - не панацея... 😊
Задача просто чуть ли не самая неудачная для стандартных аллокаторов.

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

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

I

Ioann_V in Compiler Development
Doge Shibu
Не уверен, что в той ситуации, которую мы сейчас обсуждаем, jemalloc смог бы вытянуть.
джем много чего вытянет. Я как-то его полностью разобрал и даже на Хабру пытался все это запостить. Мелкие аллокации он б доожен легко разруливать.
источник