LINUX.ORG.RU

haskell: чем грозит library-profiling: True?

 , profiling


0

1

GHC позволяет создавать бинарники со встроенным профайлером. Проблема в том, что все зависимости должны быть пересобраны с флагом --enable-library-profiling.

Чем мне грозит глобальное включение library profiling в .cabal? Вероятно, увеличившимся размером бинарников. Допустим, это не страшно. Будет ли деградация производительности? Не возникнут ли проблемы при сборке? Какие подводные камни?



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

Деградация по производительности будет, причем в разы.

при сборе нужно будет собирать 2 раза, ну в общем кабал тебе расскажет.

P.S. зачем тебе это глобально?

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

Деградация по производительности будет, причем в разы.

Ок, вопрос снят.

Такие вещи правильно делать только с помощью cabal-dev, получается? Можно ли там сделать несколько профилей сборки? (С помощью костылей можно, да.)

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

можно опциями configure --enable-library-profiling, можно make file написать или сразу скрипты которые и выполнять и складывать статистику будут.

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

А зачем это не глобально?
Чтобы собирать каждый раз по педесятсемьтысяч пакетов с профайлингом локально, а глобально держать всё без профайлинга?

dmitry_malikov ★★
()

А как бы этому cabal-dev объяснить, что base, mtl и random нужно переустановить локально?

dmfd
() автор топика
Ответ на: комментарий от dmitry_malikov

USE=«profile» для кого придуман? если куча связанных своих либ извращаться с cabal-dev или патчить cabal-meta.

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

cabal-dev install base --reinstall --force-reinstals ?

у тя ж гента?

echo "*/*::gentoo-haskell profile" >> /etc/portage/package.use/haskell
echo "dev-haskell/* profile" >> /etc/portage/package.use/haskell

emerge -avND @world
qnikst ★★★★★
()
Ответ на: комментарий от qnikst

Ничего не понял.

Юзфлаг profile для глобального профайлинга для всех пакетов. Глобального.

А не глобально зачем оно может пригодиться?

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

cabal-dev install base --reinstall --force-reinstals

Это первое, что приходит в голову, но cabal при этом грозится, что поломаются библиотеки вне сэндбокса. Странно это.

dmfd
() автор топика
Ответ на: комментарий от dmitry_malikov

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

Когда пилишь свой пакет используешь профилировку своего пакета не глобально, с глобальными зависимостями с профилировкой.

qnikst ★★★★★
()
Ответ на: комментарий от qnikst
[~/current/prof-test] % cabal-dev install --enable-library-profiling --enable-executable-profiling --reinstall mtl
Resolving dependencies...
In order, the following would be installed:
mtl-2.1.2 (reinstall)
cabal: The following packages are likely to be broken by the reinstalls:
xmonad-contrib-0.10
xmonad-0.10
resourcet-0.4.4
pool-conduit-0.1.1
persistent-1.1.3.2
persistent-template-1.1.2.1
persistent-sqlite-1.1.2
monad-logger-0.2.3.2
conduit-0.5.6
warp-1.3.7.1
hoogle-4.2.14
wai-1.3.0.1
network-conduit-0.6.2.2
blaze-builder-conduit-0.5.0.3
regex-base-0.93.2
regex-posix-0.95.1
regex-compat-0.95.1
protocol-buffers-2.0.12
protocol-buffers-descriptor-2.0.12
parsec-3.1.3
network-2.3.0.14
simple-sendfile-0.2.10
cgi-3001.1.8.2
HTTP-4000.2.3
fgl-5.4.2.4
cairo-0.12.3.1
aeson-0.6.1.0
MonadCatchIO-mtl-0.3.0.4
Use --force-reinstalls if you want to install anyway.
dmfd
() автор топика
Ответ на: комментарий от dmitry_malikov

А ровные пацаны держат профайлинг отключённым глобально и включают только при необходимости?

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

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

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

так делай --force-reinstalls. cabal-dev не вылезает из песочницы, но ему нужно сделать «оверлей» тех глобальных пакетов, которые он не сможет использовать. А лучше воспользуйся решением с USE.

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

cabal-dev не вылезает из песочницы, но ему нужно сделать «оверлей» тех глобальных пакетов

Понятно, спасибо.

А лучше воспользуйся решением с USE.

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

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

я ж написал, как сделать :) скопирую ещё раз с комментариями:

файл: /etc/porage/package.use файлы в подкаталоге отвечают за добавление юзов пакетам (лично я использую файлы внутри каталога вида category (напр. app-emulation) или логические блоки типа haskell, latex если файлы не укладываются в одну катагорию). Файлы пишутся в формате

<описание-атома> <список-юз-флагов>

где описание атома это стандартное описание атома с поддержкой wildcards, т.е. [rule]?category/package[-version][::overlay] и т.п. полностью можно прочитать в манах портажа или pms.

# всем пакетам из всех категорий из оверлея gentoo-haskell 
# добавить флаг профиль
echo "*/*::gentoo-haskell profile" >> /etc/portage/package.use/haskell
# всем пакетам из категоии dev-haskell добавить флаг profile
echo "dev-haskell/* profile" >> /etc/portage/package.use/haskell
# обновить пакеты из мира, где изменились флаги.
emerge -avND @world
qnikst ★★★★★
()
Ответ на: комментарий от dmfd

Реинстальнуть base нельзя, оно приколочено к ghc. Реинстальнуть mtl и random можно, если перестать пользоваться бесполезными поделками вроде gentoo-haskell. Заодно исчезнут восхитительные предупреждения о поломке 30 пакетов кряду из-за верчения говна в песочницах.

anonymous
()

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

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

это великолепно! а где-нибудь можно получить ваш автограф?

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

Всё, дошло, наконец, как это будет работать.

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

безопасно естественно, насколько помню рекурсивную зависимость хаддокаот себя при +doc с год назад поправили, а хугл будет сигнатуры методов сохратять, если hoogle[+localdb] он их в оффлайне будет пользовать

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

Деградация по производительности будет, причем в разы.

дык только если бинарник собирать с профайлингом.

От того, что глобально все либы собраны с профайлингом, производительность бинарников без профайлинга не пострадает

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

Реинстальнуть base нельзя, оно приколочено к ghc

Шокирующие известия

Реинстальнуть mtl и random можно, если перестать пользоваться бесполезными поделками вроде gentoo-haskell. Заодно исчезнут восхитительные предупреждения о поломке 30 пакетов кряду из-за верчения говна в песочницах.

cabal-dev поставит локальные версии mtl и random с нужными опциями сборки. Те, что поставлены от рута портажом, трогаться не будут.

Поправьте, если не прав.


Ну и да, легко называть g-h бесполезным с планеты дебианопроблем. Аж зависть пробирает.

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

Шокирующие известия

Судя по чарующим советам прожженых мейнтейнеров (haskell: чем грозит library-profiling: True? (комментарий)) не для всех настолько шокирующие, насколько хотелось бы

Те, что поставлены от рута портажом, трогаться не будут.

Хочется верить, что в мире бесполезных бампов версий круглые сутки не настолько все плохо, только это тут ни при чем (?)

дебианопроблем

Может, убунтопроблем?

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

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

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

ну а что можно сказать анониму, который не понял прочитанного, а увидел слова reinstalls, @world и решил высказаться..

qnikst ★★★★★
()

Пересобрал мир, вроде всё работает. Спасибо отписавшимся.

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