Сжатие исполняемых файлов (Философский вопрос)

Для новичков как вообще в Linux, так и в конкретной теме, к которой относится вопрос.

Модератор: Bizdelnick

dergachev
Сообщения: 847
ОС: archlinux

Сжатие исполняемых файлов

Сообщение dergachev »

Вот уже давно изобрели идею сжимать исполняемые файлы (ну в смысле elf'ы и пр.) так, чтобы они оставались исполняемыми, и при вызове на лету распаковывались. Это не только экономит место на диске (и, соответственно в кэше), но и ускоряет холодный старт программ (ибо читать с диска дольше, чем распаковывать). Ну вот upx такая софтинка есть, скажем.

Вопрос - а почему бы просто не применить её тупо к /bin и /usr/bin? Никто не пробовал ли случайно? Почему вообще до сих пор все живут с несжатыми программами? Какие минусы у этой технологии?
Спасибо сказали:
Аватара пользователя
Portnov
Модератор
Сообщения: 1786
Статус: Матёрый линуксоид
ОС: Debian testing/unstable

Re: Сжатие исполняемых файлов

Сообщение Portnov »

upx и другие упаковщики (тысячи их! особенно под винды) работают несколько не так, как вы сказали. Они просто выкидывают из исполнимого файла ненужную/необязательную информацию и переупорядочивают оставшуюся, чтоб файл поменьше был. Ну, например, есть такая штука - выравнивание секций файла. Чтобы ОС/процессору было "удобнее", лучше чтобы все секции elf-файла были по размеру кратны, скажем, 4Кб. Соответственно в файле получается куча нулей. Выравнивание необязательно, upx его убирает. Ну и т.д.

С настоящим сжатием/распаковкой, я думаю, выигрыша не получится - на большинстве файлов выигрыш от ускорения чтения файлов будет съеден затратами на распаковку. Имхо.
Работа: Ubuntu 9.10
Дом: Debian testing/unstable и на всякий случай winxp в virtualbox.
Для разнообразия: моя домашняя страница -http://iportnov.ru
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: Сжатие исполняемых файлов

Сообщение sash-kan »

мы ведь просто размышляем, да?

тогда предлагаю к размышлению такую вводную информацию:
каков средний размер исполняемого файла или библиотеки в двух популярных операционных системах: gnu и win32?
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Warlornhor
Сообщения: 428
ОС: openSUSE 12.3

Re: Сжатие исполняемых файлов

Сообщение Warlornhor »

каков средний размер исполняемого файла или библиотеки в двух популярных операционных системах: gnu и win32?

Килобайты и мегабайты? :)
Может оно и не нужно тогда...
Спасибо сказали:
dergachev
Сообщения: 847
ОС: archlinux

Re: Сжатие исполняемых файлов

Сообщение dergachev »

Они просто выкидывают из исполнимого файла ненужную/необязательную информацию и переупорядочивают оставшуюся, чтоб файл поменьше был.
Разве? о_О А это тогда что значит? (с оффсайта upx):
The main news in version 3 are:
- optional LZMA compression


каков средний размер исполняемого файла или библиотеки в двух популярных операционных системах: gnu и win32?

Код: Выделить всё

$ ls /usr/bin -s | sort -n | tail
3328 ctest
3364 qmake
4076 gimp-2.6
5620 gs
6028 audacity
7908 mencoder
8124 mplayer
8460 xetex
8904 inkview
8928 inkscape


С настоящим сжатием/распаковкой, я думаю, выигрыша не получится - на большинстве файлов выигрыш от ускорения чтения файлов будет съеден затратами на распаковку. Имхо.
Ну вот разработчики обещают обратное:
It achieves an excellent compression ratio and offers very fast decompression.


Кстати, а ведь либы таким образом не сжимаются? Или теоретически можно, но потом надо все программы пересобирать, её требующие?

P.S.
мы ведь просто размышляем, да?
Да-да, можно в флейм, если что :)
Спасибо сказали:
NickLion
Сообщения: 3408
Статус: аватар-невидимка
ОС: openSUSE Tumbleweed x86_64

Re: Сжатие исполняемых файлов

Сообщение NickLion »

Portnov писал(а):
13.03.2010 08:50
upx и другие упаковщики (тысячи их! особенно под винды) работают несколько не так, как вы сказали. Они просто выкидывают из исполнимого файла ненужную/необязательную информацию и переупорядочивают оставшуюся, чтоб файл поменьше был.

Неправда, они действительно сжимают. Одним переупорядочиванием 40 мб файл до 8 мб не сожмешь (это Photoshop.exe был). Там используется именно сжатие:
dergachev писал(а):
13.03.2010 09:11
The main news in version 3 are:
- optional LZMA compression


А по поводу исходного вопроса: особого смысла нет. Цель упаковщика - экономия места, а не быстрый холодный старт. Загрузка с диска - это ну, может 20% времени, а скорее и того меньше. Основное время занимает собственно инициализация приложения. Думаете OOo грузится так из-за медленного чтения с винта? Или GIMP? Нет, сжатие не ускорит их загрузку.
А что касается экономии места мне под / (х64) хватает 10 гиг (ещё 2 гига свободные - мало ли что поставить понадобится). Так и стоит куча всякой гадости (dev-пакеты, TeX Live, etc).

PS насчёт фотошопа - весь профит был в уменьшении размера. Время запуска не изменилось :)
Спасибо сказали:
Аватара пользователя
Voral
Сообщения: 1205
ОС: Debian Wheezy (amd64)

Re: Сжатие исполняемых файлов

Сообщение Voral »

а кроме того (раз уж философствуем).

Сжатие исполняемых файлов вещь уже очень старая. Очень актуально было в свое время: когда и система и проекты/игры/иной софт должны были разметситься на одной пятидюймовой дискете.....

Но сколько лет прошло, а это не очень то используется широко. Не думаю, что "все такие глупые" что не применили бы это если бы было действительно выгодно.


Не сталкивался давно, но раньше если исполняемый файл сам по себе маленький то его "сжатие" приводило к его увеличению
То что не убивает нас, делает нас сильнее! © Ницше.
When life puts you in tough situations, don’t say "why me". Just say "try me © ?
Спасибо сказали:
Аватара пользователя
Ali1
Сообщения: 2250

Re: Сжатие исполняемых файлов

Сообщение Ali1 »

Voral писал(а):
13.03.2010 10:40
Не думаю, что "все такие глупые"

+1
ЗЫ
Не проще сжимать ФС налету. Но...
JFFS2
DTFS

UPD
BIOS запакована.
Спасибо сказали:
NickLion
Сообщения: 3408
Статус: аватар-невидимка
ОС: openSUSE Tumbleweed x86_64

Re: Сжатие исполняемых файлов

Сообщение NickLion »

Чего-то подумалось: а если упаковщик внести в линкер, а распаковщик в загрузчик ОС? Просто идейка, сомневаюсь, что это что-то даст :)
Спасибо сказали:
Аватара пользователя
Ali1
Сообщения: 2250

Re: Сжатие исполняемых файлов

Сообщение Ali1 »

NickLion писал(а):
13.03.2010 11:01
Чего-то подумалось: а если упаковщик внести в линкер, а распаковщик в загрузчик ОС? Просто идейка, сомневаюсь, что это что-то даст :)

ИМХО дополнительные смены контекста. И ошибки, разумеется.:)
Спасибо сказали:
NickLion
Сообщения: 3408
Статус: аватар-невидимка
ОС: openSUSE Tumbleweed x86_64

Re: Сжатие исполняемых файлов

Сообщение NickLion »

Ali1 писал(а):
13.03.2010 11:04
NickLion писал(а):
13.03.2010 11:01
Чего-то подумалось: а если упаковщик внести в линкер, а распаковщик в загрузчик ОС? Просто идейка, сомневаюсь, что это что-то даст :)

ИМХО дополнительные смены контекста. И ошибки, разумеется.:)

не, смен контекста не будет - распаковка будет производиться загрузчиком, т.е. в памяти уже будет распакованный исходный образ. А вот ошибки - это да, возможно :) Просто практика показывает, что чистый код сжимается не очень хорошо.
Спасибо сказали:
Аватара пользователя
diesel
Бывший модератор
Сообщения: 5989
ОС: OS X, openSuSE, ROSA, Debian

Re: Сжатие исполняемых файлов

Сообщение diesel »

Код: Выделить всё

diesel@eifel:~$ du -hs /bin/ /usr/bin/ /lib /usr/lib
4.6M    /bin/
126M    /usr/bin/
97M    /lib
1.1G    /usr/lib

было бы чего паковать.
Спасибо сказали:
IMB
Сообщения: 2567
ОС: Debian

Re: Сжатие исполняемых файлов

Сообщение IMB »

На полноценных PC наверно смысла особого нет, а вот для встраиваемых решений это может иметь смысл.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 21279
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Сжатие исполняемых файлов

Сообщение Bizdelnick »

diesel писал(а):
13.03.2010 11:32
1.1G /usr/lib

Ни фига ж себе. У меня

Код: Выделить всё

$ du -hs /bin/ /usr/bin/ /lib /usr/lib
12M     /bin/
249M    /usr/bin/
162M    /lib
280M    /usr/lib

Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
iglezz
Сообщения: 43
ОС: Debian testing

Re: Сжатие исполняемых файлов

Сообщение iglezz »

У упаковки исполняемых файлов есть один (не|)большой минус — повышеное потребление оперативной памяти...
Спасибо сказали:
Аватара пользователя
Frank
Сообщения: 1059
ОС: Ubuntu, Debian

Re: Сжатие исполняемых файлов

Сообщение Frank »

Код: Выделить всё

frank@frank-desktop:~$ du -hs /bin/ /usr/bin/ /lib /usr/lib
6,6M    /bin/
343M    /usr/bin/
496M    /lib
2,8G    /usr/lib

:D
Ну а по теме: лучше сжатие на уровне ФС, причём опциональное. И оно таки есть в этих самых некоторых ФС.
Изображение
Спасибо сказали:
Аватара пользователя
diesel
Бывший модератор
Сообщения: 5989
ОС: OS X, openSuSE, ROSA, Debian

Re: Сжатие исполняемых файлов

Сообщение diesel »

Bizdelnick писал(а):
13.03.2010 13:24
diesel писал(а):
13.03.2010 11:32
1.1G /usr/lib

Ни фига ж себе. У меня

Код: Выделить всё

$ du -hs /bin/ /usr/bin/ /lib /usr/lib
12M     /bin/
249M    /usr/bin/
162M    /lib
280M    /usr/lib


это debian stable со всеми потрохами метапакета gnome-desktop-environment
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: Сжатие исполняемых файлов

Сообщение sash-kan »

diesel писал(а):
13.03.2010 15:47
это debian stable
жму руку.

вот почему так получается?
опытные пользователи ставят stable.
а новички (которых на каждом углу от этого предостерегают), не задумываясь, громоздят себе если не unstable, то вообще какую-нибудь гремучую смесь.
почему?

вопрос риторический.
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
IMB
Сообщения: 2567
ОС: Debian

Re: Сжатие исполняемых файлов

Сообщение IMB »

Ну зачем обобщать? ;)
Я не считаю себя опытным пользователям, но тем не менее всегда использую только stable, да и перехожу на него обычно только после r1-r2.
Если система всем устраивает, то зачем что-то менять?
P.S. Хотя надо признать, что несколько пакетов из backports всё же стоят.
P.P.S. Ответ тоже риторический.
Спасибо сказали:
Аватара пользователя
rm_
Сообщения: 3340
Статус: It's the GNU Age
ОС: Debian

Re: Сжатие исполняемых файлов

Сообщение rm_ »

iglezz писал(а):
13.03.2010 15:07
У упаковки исполняемых файлов есть один (не|)большой минус — повышеное потребление оперативной памяти...

Прямо в точку, причём многократно повышенное, и именно поэтому сжатие не получило широкого распространения.
Оно даёт экономию в занимаемом месте на диске, но проигрыш в виде повышенного расхода памяти и в некоторых случаях - времени при запуске файла.
Если несжатый бинарник можно тупо примапить в оперативку (google://memory-mapped file) и начать исполнять, даже не считывая его весь, то сжатый нужно не просто сначала прочитать, но ещё и зарезервировать в ОЗУ место, куда он будет распакован. Соотв-но при последующей нехватке ОЗУ придётся скидывать это в своп, тогда как страницы несжатого файла можно просто сдискардить, т.к. на диске-то они всеравно есть (и являются как бы "read-only продолжением" свопа).
Спасибо сказали:
Аватара пользователя
Ali1
Сообщения: 2250

Re: Сжатие исполняемых файлов

Сообщение Ali1 »

rm_ писал(а):
13.03.2010 19:13
iglezz писал(а):
13.03.2010 15:07
У упаковки исполняемых файлов есть один (не|)большой минус — повышеное потребление оперативной памяти...

Прямо в точку, причём многократно повышенное, и именно поэтому сжатие не получило широкого распространения.
Оно даёт экономию в занимаемом месте на диске, но проигрыш в виде повышенного расхода памяти и в некоторых случаях - времени при запуске файла.
Если несжатый бинарник можно тупо примапить в оперативку (google://memory-mapped file) и начать исполнять, даже не считывая его весь, то сжатый нужно не просто сначала прочитать, но ещё и зарезервировать в ОЗУ место, куда он будет распакован. Соотв-но при последующей нехватке ОЗУ придётся скидывать это в своп, тогда как страницы несжатого файла можно просто сдискардить, т.к. на диске-то они всеравно есть (и являются как бы "read-only продолжением" свопа).

А теперь считаем такты, переключения контекстов, промахи кешей, сбросы TLB....
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: Сжатие исполняемых файлов

Сообщение sash-kan »

IMB писал(а):
13.03.2010 18:00
всегда использую только stable, да и перехожу на него обычно только после r1-r2.
а кто-то только что сказал, что «неопытный» (подмигиваю)
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
watashiwa_daredeska
Бывший модератор
Сообщения: 4038
Статус: Искусственный интеллект (pre-alpha)
ОС: Debian GNU/Linux

Re: Сжатие исполняемых файлов

Сообщение watashiwa_daredeska »

sash-kan писал(а):
13.03.2010 17:39
опытные пользователи ставят stable.
а новички (которых на каждом углу от этого предостерегают), не задумываясь, громоздят себе если не unstable, то вообще какую-нибудь гремучую смесь.
Потому что мне интересно :) Да-да, я неопытный.
Спасибо сказали:
Аватара пользователя
Nazyvaemykh
Сообщения: 438
Статус: Подопытный участник

Re: Сжатие исполняемых файлов

Сообщение Nazyvaemykh »

Новичков очень часто переполняют (необоснованные) надежды, что вот еще чуть-чуть и Linux перестанет тормозить, глючить, станет всеми любимым и повсюду распространенным. Естественно, все это они ожидают увидеть не в позапрошлых дистрибутивах, а в самых новых.

С опытом надежды тают, баги становятся фичами…
¡ Страсть к разрушению есть творческая страсть!
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: Сжатие исполняемых файлов

Сообщение sash-kan »

watashiwa_darede... писал(а):
15.03.2010 18:08
Потому что мне интересно
скорее потому, что ты можешь написать баг-репорт мэйнтейнерам.

watashiwa_darede... писал(а):
15.03.2010 18:08
Да-да, я неопытный.
да-да, мы все в это верим (улыбка)
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали: