A Far-то поправился :(

Хотите говорить о Far и не знаете, куда обратиться?
User avatar
HaRT
Moderator
Posts: 10823
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

Re: A Far-то поправился :(

Post by HaRT »

Latest post of the previous page:

DrKnS wrote:в 1.7 цвет занимал 1 байт, сейчас - 24
Откуда 24? :?
#{ ForeGround, BackGround } * #{ Red, Green, Blue, Alpha } * 1 byte/channel == 8
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

Re: A Far-то поправился :(

Post by DrKnS »

int64 Flags + int32 Foreground + int32 Background + void* Reserved (+ structure alignment на x86).
Maximus5
Posts: 3295
Joined: Sun 11 Nov, 2007 02:03
Been thanked: 10 times
Contact:

Re: A Far-то поправился :(

Post by Maximus5 »

Есть сомнение что "reserved" когда-нибудь заюзается. Флагов, имхо, на все случаи хватит.
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

Re: A Far-то поправился :(

Post by DrKnS »

Ну сомнения надо было раньше высказывать, поезд уже уехал.
Впрочем, цвета всё равно хешируются, так что амортизированный размер равен размеру указателя (что, однако, всё равно в 4 (или 8) раз больше, чем в 1.7).
Marty
Posts: 170
Joined: Sun 29 Jan, 2006 12:29

Re: A Far-то поправился :(

Post by Marty »

DrKnS wrote:Как уже отмечено, юникод. В большинстве мест это означает двукратное увеличение по сравнению с 1.7, в некоторых - внезапно, 256-кратное.
Увеличение в 256 раз - да уж, внезапно ;) Полагаю, это могут быть какие-то таблицы атрибутов символов, так? Их много где нужно больше одной? И, если такие таблицы часто используются , то может завести одну какую-то общую с основными возможными атрибутами, и предоставлять ее через Far API?
DrKnS wrote: Поддержка True Color тоже не бесплатна: в 1.7 цвет занимал 1 байт, сейчас - 24.
Это копейки - Far же по знакоместам работает, не по пикселям. Ну, настройки на пару килобайт еще выросли может.
DrKnS wrote: Размеры бинарников, в целом, беспокоят очень мало.
Беспокоят производительность и потребляемая память. Если у вас есть предложения по делу (а не просто "я тут заметил, что стало больше чем было") - welcome.
По поводу размеров бинарников - да, согласен, я погорячился. Хотя тут все же могут быть ситуации, когда это может влиять - детали не очень хорошо помню, так что строго не судите. Если dll-ка загружается не по своему базовому адресу, то она настраивается на другой базовый адрес и часть ее страниц копируется и изменяется. На вскидку я не помню, как много будет модифицироваться, но возможно, что и вся dll-ка. Также, если в разных процессах одна и та же dll-ка не может быть настроена на одни и те же адреса (кто-то другой в соседнем процессе их занял), то в памяти будут две копии кода. Это и время (на настройку dll'ек), и память.

Вот какая картина сейчас с плагинами:

Code: Select all

Имя DLL        Image base Size(bytes)
[b]Не плагины[/b]
lpeg.dll          64480000    32782
lua5.1.dll        6E940000     9216
lua51.dll         66D80000   371275
luafar3.dll       10000000   324096

[b]Плагины из поставки Far[/b]                             
Align.dll         10000000    11264
7z.dll            10000000   941568
arclite.dll       64000000   686080
AutoWrap.dll      10000000    10752
Brackets.dll      10000000    50176
Compare.dll       10000000    16896
ConEmu.dll        10000000   289112
DrawLine.dll      10000000     7680
EditCase.dll      10000000    37888
EMenu.dll         10000000    69120
FARCmds.dll       10000000    27136
colorer.dll       10000000    1906K
FileCase.dll      10000000    12800
HlfViewer.dll     10000000    14848
LuaMacro.dll      10000000    39936
NetBox.dll        10000000    2528K
Network.dll       10000000    34304
Proclist.dll      10000000   110592
SameFolder.dll    10000000     9728
TmpPanel.dll      10000000    30720

[b]Прочие плагины[/b]
ImpExW.dll        10000000   167936
Как видно, никто из плагино-писателей не парится по этому поводу (кроме arclite, но и у него подозрительно круглый адрес). Не буду говорить, что именно это сильно все портит, но имхо, подобные мелочи накладываются и в сумме уже могут играть заметную роль. А всего-то надо как минимум где-то в достаточно заметном месте обозначить рекомендации не использовать дефолтный Image Base - и тут можно либо давать ссылку на рекомендации Microsoft по выбору базового адреса на основании имени DLL, либо выработать самим такие рекомендации - к примеру, чтобы попусту адресное пространство не расходовать, можно несколько аналогичных областей предусмотреть, только в одной - DLL до 64K, в другой - до 256K, и тд. В идеале - вообще сервис простенький сделать с базой - автор вводит имя своей dll, размер в байтах, ему выдается адрес для образа. И в базу запись, что занято. Если перерос пороговый размер - получи новый адрес, а старый в базе освободят. И поместить этот сервис на плагринге, или есть где-то страничка для разработчиков плагинов? Я кстати, не видел. Хидеры в поставке идут, какая-то появилась энциклопедия в поставке - а онлайн она есть?

К слову, видно, что разработчики сторонних DLL заморочились этим вопросом. Да, кстати, если суммировать размеры DLL-ек c дефолтным base, то это больше 6Мб, и это я еще не округлял на 64К (а вроде надо бы). И, если верить Рихтеру и другим, то это таки +6Мб на каждый процесс

Пара ссылок для справки:
Назначение базового адреса DLL - http://msdn.microsoft.com/ru-ru/library ... s.90).aspx
/BASE (базовый адрес) - http://msdn.microsoft.com/ru-ru/library/f7f5138s.aspx
Вот тут еще интересно, хотя не понятно, ASLR добавляет таки релокаций или нет, и как с разными процессами поступает - https://ru.wikipedia.org/wiki/Address_S ... domization
По поводу ASLR на stackoverflow - http://stackoverflow.com/questions/3617 ... ng-of-dlls
Там кстати, пишут, что при релокации dll каждый процесс получает свою приватную копию модуля. Да и Рихтер пишет, что: "Невозможность загрузить модуль по предпочтительному базовому адресу создает две крупные проблемы:
* Загрузчику приходится обрабатывать все записи раздела переадресации и модифицировать уйму кода в модуле. Это сильнейшим образом сказывается на быстродействии и может резко увеличить время инициализации приложения.
* Из-за того что загрузчик модифицирует в оперативной памяти страницы с кодом модуля, системный механизм копирования при записи создает их копии в страничном файле."

Так что не все так просто с бинарниками, как кажется.

Больше пока конкретики конечно нет - я не знаком с ядром фара. Даже новое АПИ пока не успел изучить :(
Но, возможно, мои размышления наведут кого-нибудь из более компетентных товарищей на какие-нибудь полезные идеи :)
Last edited by Marty on Fri 10 Oct, 2014 09:37, edited 1 time in total.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Re: A Far-то поправился :(

Post by John Doe »

Marty wrote:Назначение базового адреса DLL - http://msdn.microsoft.com/ru-ru/library ... s.90).aspx
Такие адреса надо оборачивать в [url]:
http://msdn.microsoft.com/ru-ru/library ... s.90).aspx
Maximus5
Posts: 3295
Joined: Sun 11 Nov, 2007 02:03
Been thanked: 10 times
Contact:

Re: A Far-то поправился :(

Post by Maximus5 »

Не нужно путать слонов с бегемотами. Все dll собранные в 10000000 имеют DYNAMIC_BASE.
Marty
Posts: 170
Joined: Sun 29 Jan, 2006 12:29

Re: A Far-то поправился :(

Post by Marty »

Maximus5 wrote:Не нужно путать слонов с бегемотами. Все dll собранные в 10000000 имеют DYNAMIC_BASE.
В каком SP для XP включили поддержку ASLR?

Посмотрю на семерке, может там фар меньше памяти занимает :)

Остался вопрос, насколько ASLR влияет на производительность, и нужно ли это фару
Marty
Posts: 170
Joined: Sun 29 Jan, 2006 12:29

Re: A Far-то поправился :(

Post by Marty »

Провел эксперимент под семеркой. Запускаю такой же фар, как и под XP, в консоли, без конему.
Сразу после запуска - 7.5Мб
"Поредактировал" полсотни файлов - 16.6Мб

Вывод - ASLR (видимо) работает довольно эффективно, юникодный фар поправился примерно раза в два по сравнению с 1.7, что очень неплохо.
Но под XP результат таки плачевен. Раз уж заявлена поддержка, то почему бы немного не оттюнить под старые системы? XP и так обычно на старом железе крутится, а тут еще фар такой толстый ворочается. Тем более, что задание /BASE вроде не отключает действие /DYNAMICBASE.
Как минимум - просто подправить те плагины, что с фаром в поставке идут. Имхо, дел на полчаса с перекурами. Если нет XP под рукой, могу потестить у себя :)
Maximus5
Posts: 3295
Joined: Sun 11 Nov, 2007 02:03
Been thanked: 10 times
Contact:

Re: A Far-то поправился :(

Post by Maximus5 »

Почему бы вам не взять rebase в руки и потестить полчаса с перекурами?
Marty
Posts: 170
Joined: Sun 29 Jan, 2006 12:29

Re: A Far-то поправился :(

Post by Marty »

Maximus5 wrote:Почему бы вам не взять rebase в руки и потестить полчаса с перекурами?
Под рукой нет, и думаю, что поставить студию, или SDK, где он есть, не получится в ближайшее время.
Dzirt2005
Posts: 326
Joined: Fri 29 Feb, 2008 12:11
Been thanked: 10 times

Re: A Far-то поправился :(

Post by Dzirt2005 »

Marty wrote:Под рукой нет
На, тестируй. Других отмазок нет? ;)
rebase.7z
(43.09 KiB) Downloaded 112 times
Marty
Posts: 170
Joined: Sun 29 Jan, 2006 12:29

Re: A Far-то поправился :(

Post by Marty »

Dzirt2005 wrote:
Marty wrote:Под рукой нет
На, тестируй. Других отмазок нет? ;)
rebase.7z
В понедельник на работе попробую. У него зависимостей нет никаких, запустится?
User avatar
HaRT
Moderator
Posts: 10823
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

Re: A Far-то поправился :(

Post by HaRT »

Marty wrote:В понедельник на работе попробую. У него зависимостей нет никаких, запустится?
Dependency Walker.
Фар есть инструмент, а не нянька. © 2009 DrKnS
Marty
Posts: 170
Joined: Sun 29 Jan, 2006 12:29

Re: A Far-то поправился :(

Post by Marty »

Да, я в курсе. в понедельник сначала поищу зависимости у rebase. Правда, если он не запустится, злые языки скажут, что я отмазался ;)
Marty
Posts: 170
Joined: Sun 29 Jan, 2006 12:29

Re: A Far-то поправился :(

Post by Marty »

Maximus5 wrote:Почему бы вам не взять rebase в руки и потестить полчаса с перекурами?
Кстати, немного оффтоп, но хочу спросить - это ты вроде автор ConEmu?
Штука отличная, но есть баги, как мне показалось, по крайней мере. Тех поддержку где-то на твоем сайте искать надо?
Post Reply

Return to “Обсуждение Far Manager”