LINUX.ORG.RU

Покритикуйте либу логгинга памяти

 , ,


1

4

https://github.com/codemeow/svadilfari - субж

Маскирует malloc/calloc/realloc/free с помощью макросов чтобы не менять синтаксис.

Можно переназначит стандартные системные функции чтобы юзать например какие-нибудь raspberry_malloc_ex()

Есть опции, можно включить например автозамену malloc на calloc и автовыход\авторепорт коллбеком в случае фейла

Есть система коллбеков на репорт ошибок

Можно получить инфу по каждому поинтеру - когда, в каком файле и на какой строке он был аллоцирован.

В случае необходимости можно сконвертить либовый поинтер в системный и заюзать какой-нибудь внешний free.

Юзает локи.

Либа с типами (bixi) юзает только один системный хэдер: <time.h>, остальное реализует сама. Может быть полезно на урезанных системах. Тот же хэдер использует svadilfari, кроме него используется <stddef.h> для size_t. Плюс используется <stdlib.h> для дефотного назначения malloc/calloc/realloc/free. Тестовая прога в комплекте использует <stdio.h> чтобы выводить на экран.

Можно: детектить лики, смотреть кто где много жрет, получать инфу о размере аллоцированного поинтера.

★★★

Для начала неплохо бы услышать ваше обоснование, чем ваша либа лучше уже имеющихся библиотек для выявления проблем работы с памятью.

vodz ★★★★★ ()
Ответ на: комментарий от vodz

Минимальные системные зависимости.

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

PPP328 ★★★ ()
Ответ на: комментарий от SZT

Да что вы все заладили? Давайте вообще блин ничего не писать никогда! Нафиг линукс, ведь уже есть винда которая появилась раньше. Нафиг gnome/kde/xfce/lxde ведь есть божественный twm.

PPP328 ★★★ ()
#include "../memory/svamalloc.h"

за такие относительные инклуды надо руки отрывать от жопы.

anonymous ()
Ответ на: комментарий от anonymous

Вообще-то такие относительные инклуды позволяют делать файлы в разных каталогах с одинаковым именем. И позволяют нормально парсить сорцы для построения export-header.

PPP328 ★★★ ()
Ответ на: комментарий от PPP328

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

На этой планете, если вы хотите, чтобы на вас обратили своё драгоценное внимание, кроме как поржать (для этого можно и самим чуть напрячься), это ВАМ надо вначале сравнить и показать, чем вы достойны на трату на вас времени.

vodz ★★★★★ ()
Ответ на: комментарий от PPP328

Да что вы все заладили? Давайте вообще блин ничего не писать никогда!

Зачем делать свой кривой велосипед для решения узкой задачи, когда есть куча некривых велосипедов, которые эту задачу решают, и притом решают в более общем виде и качественней, при этом под свободными лицензиями?

Нафиг линукс, ведь уже есть винда которая появилась раньше.

Ядро линукса появилось раньше нормальной винды (винды 1.0 2.0 95 98 я нормальными не считаю, более-менее нормальной можно считать NT-винды и первая такая винда появилась в 1993 году, т.е. ПОЗЖЕ линукса. А окружение GNU было еще раньше). И винда вообще говоря не является клоном и/или заменой GNU/Linux, так что мимо.

Нафиг gnome/kde/xfce/lxde ведь есть божественный twm.

Они отличаются по разным характеристикам, притом какие-то wm/de подходят одной категории пользователей, какие-то другие - другой. Твой же велосипед вообще ниочем

SZT ★★★★★ ()
Ответ на: комментарий от PPP328

Оно на богомерзком с++.

Перепиши GCC и Clang/LLVM на божественный C тогда (кого это волнует?)

SZT ★★★★★ ()
Последнее исправление: SZT (всего исправлений: 1)

нормальной системы сборки нет

реализация мутекса кривая

рандом ... ну тебя говорили уже.

описалово в README писал надмозг.

в гудок.

anonymous ()

Маскирует malloc/calloc/realloc/free с помощью макросов чтобы не менять синтаксис.
Use of system functions directly
p1 = (malloc)(20);

Препроцессору все равно, что подставлять вместо malloc.

andreyu ★★★★★ ()
Ответ на: комментарий от andreyu

Препроцессору все равно, что подставлять вместо malloc.

Причем здесь препроцессор? (malloc) не развернется, malloc развернется в sva_malloc

PPP328 ★★★ ()
Ответ на: комментарий от anonymous

за такие относительные инклуды надо руки отрывать от жопы.

Потому, что... А почему собственно?

andreyu ★★★★★ ()
Ответ на: комментарий от PPP328

Причем здесь препроцессор?

При том, что «Маскирует malloc/calloc/realloc/free с помощью макросов чтобы не менять синтаксис.»

(malloc) не развернется, malloc развернется в sva_malloc

Препроцессору нет разницы, в скобки вы взяли malloc или оставили без скобок.

andreyu ★★★★★ ()
struct pass * get_pass( struct tuple *t, void *( *allocate)(size_t) )
{
....
    res = allocate(size);
....
    return res;
}
....

var = get_pass(&t, malloc);

я так понимаю с твоим заинклуженным костылем даже не соберется?

anonymous ()
Ответ на: комментарий от andreyu

Препроцессору нет разницы, в скобки вы взяли malloc или оставили без скобок.

Я тебя расстрою, но (malloc) не развернется. Этому трюку 30+ лет.

PPP328 ★★★ ()
Ответ на: комментарий от anonymous

malloc здесь не будет развернут - будет системный вызов, так что соберется.

PPP328 ★★★ ()
Ответ на: комментарий от anonymous

Звезды на форуме — это звезды на форуме. А вот любовь непреодолимая тяга к C++, как правило, указывает на космических масштабов пробелы в фундаментальных знаниях.

kawaii_neko ★★★★ ()
Ответ на: комментарий от PPP328

Я тебя расстрою, но (malloc) не развернется.

Новые знания и устранение пробелов меня не расстраивают.

Этому трюку 30+ лет.

Век живи, век учись.

andreyu ★★★★★ ()
Ответ на: комментарий от SZT

Так ведь в FreeBSD железо почти не поддерживается по сравнению с линуксом, тут ответ очевиден.

Поддерживается ровно также (вибирать надо и там и там, и там и там можно найти железо для решения своих задач, и там и там можно не найти). А так-то десктоп, например, я покупал вообще не думая - и под FreeBSD всё замечательно работает.

slovazap ★★★★★ ()

Покритикуйте либу логгинга памяти

Уже сказали, что ты забыл про posix_memalign() и компанию?

i-rinat ★★★★★ ()
Ответ на: комментарий от i-rinat

http://man7.org/linux/man-pages/man3/posix_memalign.3.html

The obsolete function memalign() allocates size bytes and returns a pointer to the allocated memory. The memory address will be a multiple of alignment, which must be a power of two.

The function aligned_alloc() is the same as memalign(), except for the added restriction that size should be a multiple of alignment.

The obsolete function valloc() allocates size bytes and returns a pointer to the allocated memory. The memory address will be a multiple of the page size. It is equivalent to memalign(sysconf(_SC_PAGESIZE),size).

The obsolete function pvalloc() is similar to valloc(), but rounds the size of the allocation up to the next multiple of the system page size.

PPP328 ★★★ ()
Ответ на: комментарий от PPP328

Кажется, ты не понял. C89 тоже obsolete. Но это не мешает на него целиться. Так что само по себе «obsolete» ничего не значит для существующих проектов, находящихся в стадии поддержки.

Представь себе, что у тебя есть программа. Ты хочешь использовать на ней какой-то инструмент, а этот инструмент начинает тебе диктовать, какие части твоей программы obsolete, а какие нет. Что ты будешь делать с этим инструментом?

i-rinat ★★★★★ ()
Ответ на: комментарий от anonymous

Молодой человек, это не для вас написано.

Давно не слышал, что бы ко мне так обращались. Спасибо.

andreyu ★★★★★ ()
Ответ на: комментарий от PPP328

Причем здесь препроцессор?

А кто разворачивает define'ы?

LamerOk ★★★★★ ()
Ответ на: комментарий от i-rinat

Что ты будешь делать с этим инструментом?

Зависит от. Если советы дельные, то можно и прислушаться.

DarkEld3r ★★★★★ ()
Ответ на: комментарий от crarkie

Valgrind бешено замедляет приложение. А с этой либой можно встроить функционал чтобы приложение печатало состояние оккупированых блоков памяти по запросу\по таймеру.

PPP328 ★★★ ()
Ответ на: комментарий от PPP328

Так вообще-то valgrind и не предназначен для бытового использования. Помоему вполне логично, что дебаггинг в любом виде замедляет приложение. Твоё дело - отдебажить его, пусть и на «медленном valgrind'e» и убрать все места, где память течёт. Зачем кому-то печатать занятые блоки памяти в продакшене - не пойму. А кому надо - тот сам сделает простой враппер или аллокатор.

crarkie ()
Ответ на: комментарий от crarkie

Если уж на то пошло - кто-то может использовать кастомный аллокатор, который вообще не юзает malloc, а, к примеру, обращается за памятью напрямую к mmap. И тогда придётся либу переделывать отдельно.

crarkie ()
Ответ на: комментарий от crarkie

Если уж на то пошло - кто-то может использовать кастомный аллокатор, который вообще не юзает malloc, а, к примеру, обращается за памятью напрямую к mmap. И тогда придётся либу переделывать отдельно.

Анонс не читали, да? Либа поддерживает кастомные аллокаторы.

А кому надо - тот сам сделает простой враппер или аллокатор.

Или просто возьмет уже готовую либу.

Зачем кому-то печатать занятые блоки памяти в продакшене - не пойму

Когда демон после 2х недель работы начал показывать рост - это критично. Подключился по telnet, спросил, получил инфу. Нет такого тестирования которое позволило бы ждать 2 недели.

PPP328 ★★★ ()
Ответ на: комментарий от PPP328

Тогда другой вопрос. А насколько замедляет ваша версия приложения? Есть бенчмарки? На продакшене, знаете ли, замедление в, 2-3х раза тоже может быть смерти подобно.

crarkie ()
Ответ на: комментарий от PPP328

так тебе же пытаются донести, что не в замедлении дело, а в том, что оно тебе носом натыкает, где ты налажал. Ты со своими принтами в продакшн потянешь приложение?

anonymous ()
Ответ на: комментарий от PPP328

Замедляет выполнение всего приложения в несколько раз

А твои обертки выделения памяти думаешь не замедляют?

Требует -O0.

4.2

Все ясно в общем.

invy ★★★★★ ()
Ответ на: комментарий от PPP328

Рукалицо. Оптимизатор выкинул malloc и вообще все. Естественно там не будет никаких утечек и вообще ничего.

invy ★★★★★ ()
Ответ на: комментарий от anonymous

Ты со своими принтами в продакшн потянешь приложение?

У нас на каждом приложении есть возможность связаться с ним, авторизоваться и выяснить что происходит в кишках. Если у вас через месяц использования вдруг распухнет потребление до 1 гига вместо 1 метра, что вы будете делать? Говорить «как хорошо, что я вырезал принты»?

PPP328 ★★★ ()
Ответ на: комментарий от PPP328

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

i-rinat ★★★★★ ()
Ответ на: комментарий от i-rinat

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

PPP328 ★★★ ()
Ответ на: комментарий от PPP328

Не представляю, что за софт, о котором ты говоришь. Если собрать, скажем, nginx с отладкой, то при нормальной нагрузке он логами съест всё место на диске за десятки минут. Ну и скорость у него просядет в десяток раз, если не больше. Какие там месяц-два-три, я просто не представляю.

Если ты можешь логировать каждый вызов malloc/free, не выжирая место и не проседая по скорости, вряд ли тебе вообще нужна трассировка.

i-rinat ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.