Ru-Board.club
← Вернуться в раздел «Программы»

» FreeArc (часть 4)

Автор: Profrager
Дата сообщения: 09.02.2011 10:40
ruduk
ну srep ведь прекомпрессор,и низкие значения искомых строк могут ухудшить последующее сжатие более мощным алгоритмом. В любом случае в srep есть минимальная длина искомых строк,меньше которой совпадения не будут обрабатываться, а если встретится блок бОльшего размера вплоть до размера буфера, схожий с каким-либо предыдущим большИм блоком, он будет обрабатываться как один единый блок,т.е. на него отведется всего 16байт (может и ошибаюсь с циферкой,пишу по памяти).
Т.е. ворачиваясь к ежикам, можно объяснить так, допустим имеются 2 ежика, у которых по 2000 иголок, но у второго 1992 иголок такие же как у первого, а 8-другие. Представим это в виде файлов. Имеем 2 файла с практически одинаковым содержимым размером по 2000мб, у второго 8 последних мегабайт отличаются от данных первого файла. Объединим файлы в один, чтобы среп их оба последовательно обработал. Допустим что в первом файле пересекающиеся данные не встречаются, т.е. среп в них не нашел схожие блоки, и т.к. размер буфера в среп 8 мб, то на выходе будем иметь 2000мб+ (2000/8)*16 байт на оглавление среп-файла (плюс еще пару десятков байт на блок, но суть не в этом). т.е. 2000мб+4000байт( ну мож 8кб если посчитать некоторые не указанные тут данные). При начале сканирования второго файла в потоке, среп увидит, что данные схожи с первым, при чем схожесть будет блоками размером с буфер (8мб), т.е. за записи 1992мб схожих с предыдущими понадобится (1992/8)*16 байт=3984байта (как и в предыдущем случае на самом деле будет чуть меньше 8кб) + оставшиеся 8 мб, для которых не найдены совпадения.
Т. е. я хочу сказать, что для записи больших повторов в срепе и так требуется относительно мало байт индексных данных.
Автор: kalpak
Дата сообщения: 13.09.2011 18:36
Bulat_Ziganshin
я пробывал, он писал ошибку про память
но зачем затрагивать DictSize LZMA
это же будет совсем другой способ уже

мне кажется это не совсем равнозначно разбить файл на блок 1гб и сжимать lzma:8mb
и пытаться запустить lzma:>512mb
а он не может если не хватает памяти для загрузки блока его в файл записать и потом этот файл и сжать
так можно будет и с большими блоками сжимать
Автор: ruduk
Дата сообщения: 09.02.2011 13:59
Profrager
Моя идея свести количество индексных данных к минимуму, для более быстрой распаковки.
Возвращаясь к примеру с книгами, допустим Первая книга уже прочитана и "возвращена в библиотеку" (распакована). Начинаем читать Вторую книгу. На 1-й странице написано "Читай 1-ю страницу Первой книги", кладем книгу на стол, идем в библиотеку, читаем 1-ю страницу Первой книги, возвращаем книгу на полку, идем обратно к второй книге, читаем что написано на 2-й странице - "Читай 2-ю страницу Первой книги" -- кладем книгу на стол, идем в библиотеку . . . И так 1999 страниц.
Лучше один раз прийти в библиотеку и прочитать сразу 1999 страниц, т.е. минимизировать переходы туда-сюда. А сжать/распаковать последующим LZMA 1 ссылку на 1999 страниц будет быстрее/проще, чем сжимать 1999 отдельных ссылок на отдельные 1999 страниц, пускай даже они занимают по 16 байт.
Пускай размер файла уменьшится всего на пару килобайт, но возростет скорость распаковки записанного таким способом файла.
Автор: blackofff
Дата сообщения: 21.05.2012 03:49
Огромное СПАСИБО за Bаш архиватор,пользуюсь довольно продолжительное время,
недавно возник вопрос - возможно ли добавить маску для файлов добавляемых в архив без сжатия (аналогично РАРовскому) ?
к примеру имеется папка с игрой ,в которой половина мультимедийных файлов скажем *.bik расширения.
можно ли добавить в профиль это расширение что бы файлы этого типа добавлялись в архив без сжатия?
Автор: 1noObman1
Дата сообщения: 13.09.2011 22:34
Bulat_Ziganshin

Можно ли как-то убрать пароль из зашифрованного архива чтоб не перепаковывать его, то бишь декриптировать архив?
Автор: Profrager
Дата сообщения: 09.02.2011 15:47
ruduk

Цитата:
Моя идея свести количество индексных данных к минимуму, для более быстрой распаковки.

В твоем случае это просто надо размер буфера с 8 мб увеличить до допустим 512, или же реализовать "запоминание" самых мелких, далеких и часто используемых совпадений в пределах указанной оперативной памяти. Только тогда можно уменьшить обращения в жесткому диску. Хоть в общем то кеширование винды (семерки) в этом и так сильно помогает.

Добавлено:
И в реальных условиях редко очень бывает последовательно одинаковые данные больших размеров. Обычно крошится на много-много мелких кусков в разных частях файла. Это тоже самое что надо различные страницы в разных книгах искать по всей библиотеке, а на столе умещается только определенное количество книг. Все равно за другими бегать придется, всю библиотеку на стол не уместить.
Автор: slech
Дата сообщения: 21.05.2012 09:09
Баг №2
только у меня воспроизводится ?
Автор: VasulNoz
Дата сообщения: 09.02.2011 17:22
При упаковке ФА в режиме "Без сжатия" файлы которые добавляются в архив упорядочиваются или добавляются в случайной последовательности???
Автор: Bulat_Ziganshin
Дата сообщения: 14.09.2011 18:44
ndch
постараюсь посмотреть. кстати, не лучше ли просто сделать gui-шный unarc.exe? взять обычный sfx, но запрашивать в начале работы какой файл будем распаковывать


Цитата:
unarc.dll чтоб в ней самой была добавлена опция -pПАРОЛЬ?

постараюсь посмотреть почему это не работает


Цитата:
а он не может если не хватает памяти для загрузки блока его в файл записать и потом этот файл и сжать

во-первых это надо реализовывать. во-вторых, при распаковке приджётся делать то же самое
Автор: ruduk
Дата сообщения: 09.02.2011 21:44
Profrager

Цитата:
И в реальных условиях редко очень бывает последовательно одинаковые данные больших размеров
режим по-умолчанию -m3 в SREP никто не отменял, он будет работать во всех случаях. Целью создания SREP было создание препроцессора для обработки больших файлов, и в Huge Files Compression Benchmark он показал себя с лучшей стороны. В некоторых случаях, отдельные файлы все-же будут максимально похожи друг на друга (например, текстура окна и текстура окна с маленькой форточкой внутри какого-нибудь *.gcf или *.pack игрового файла). Тогда на них можно будет дополнительно определить совпадения большей длинны.
ЗЫ. Не думал что будет такое бурное обсуждение, это же идея, ее можно проверить если попробовать реализовать

VasulNoz
читай документацию: этот раздел
Цитата:
... задайте опцию –dsgerpn (или какой порядок вам нужен) явно.
Автор: Bulat_Ziganshin
Дата сообщения: 21.05.2012 13:26

Цитата:
1. Запароленный архив:
Открываем разные архивы при помощи FA и на предложение ввести пароль жмём Cancel:
arc - Operation terminated by user!
7z - Prelude.undefined
rar - Prelude.undefined
Последние 2 мне показались не совсем понятными.

с обработкой cancel/^break пока полный бардак


Цитата:
2. Извлечение из архива:
http://freearc.org/download/0.666/FreeArc-portable-0.666-win32.zip
Right Click --> FreeArc --> Open with FreeArc --> заходим в папку share\themes --> выбираем AnachronAna --> Extract --> D:\test1 --> OK  

Цитата:
FILES SUCCESFULLY EXTRACTED FROM D:\FreeArc-portable-0.666-win32.zip

В рузультате папки D:\test1 нет.
1. arc - папка есть
2. zip - папки нет
3. 7z - папки нет

то же самое в http://encode.ru/threads/43-FreeArc?p=28958&viewfull=1#post28958

это из-за того, что -ap через 7z.dll не поддерживается. поэтому он не находит файлов, указанных в комстроке, и сообщает что успешно извлечено 0 найденных файлов. если просто зайти в каталог и заказать распаковку, то он извлечёт весь архив

я за -ap брался прошлой весной и завяз. попробую взяться снова..


Цитата:
3. Извлечение файлов из архива двойной вложенности:
На примере gz я уже писал.
То же у меня сейчас повторилось на arc-arc arc-rar, т.е. скорее всего не зависит от формата архива.

с gz понятно было - из a.tar-1.gz извлекался a.tar-1, и дальше стандартное открытие не работало. с arc-arc, полагаю, то же самое?

Добавлено:

Цитата:
к примеру имеется папка с игрой ,в которой половина мультимедийных файлов  скажем *.bik расширения.
можно ли добавить в профиль это расширение что бы файлы этого типа добавлялись в архив без сжатия?

включить их в группу compressed в arc.groups И добавить в комстроку опцию -m$compressed=storing или скажем -m$compressed=rep:256m
Автор: VasulNoz
Дата сообщения: 10.02.2011 07:44
ruduk

Цитата:
... задайте опцию –dsgerpn (или какой порядок вам нужен) явно

Что и где надо прописать в arc.ini чтобы это опция была по умолчанию, объясните подробно.
Автор: kalpak
Дата сообщения: 14.09.2011 18:49
Bulat_Ziganshin
а вообще по идее это верно?
мне кажется просто что то что он меняет DictSize не совсем верное
хотя может другим так не кажется
Автор: Profrager
Дата сообщения: 10.02.2011 09:42
ruduk
Я все это и так знаю. Я тебе говорю, что совпадения длиной больше размера буфера очень редко встречаются. Я тебе алгоритм работы как раз режима -m3 парой постов раньше описал. Ты посмотри вовнутрь алгоритма и внутрь среднестатистического среп-файла, длины совпадений размером хотя бы в буфер я еще не встречал.
Ты говоришь теоретически, не представляя как все это есть сейчас и как это можно реализовать программно. Я тебе примеры возможной реализации уже описал.
Плюс ты не понимаешь, что 99% потери времени занимает доступ к мелким совпадениям, а не крупным (они и так будут читаться блоками по 8мб, и ускорения от убирания границ 8-ми мегабайтного буфера будут микросекунды на гигабайтном файле).
Автор: Bulat_Ziganshin
Дата сообщения: 14.09.2011 18:56
мне вообще непонятно, что ты хочешь? как по-твоему fa должен себя вести?
Автор: ruduk
Дата сообщения: 10.02.2011 12:18
Profrager
мы с тобой говорим, как-будто я хочу испортить SREP. Это ведь только идея. Ты считаешь, что она плохая. Нужно узнать, что думает по этому поводу Булат.

VasulNoz
если через Arc.ini, то в раздел [Default options] в самом верху, или в строку упаковки.
если через GUI, то просто выбрать желаемую сортировку на закладке "Архив"
Автор: slech
Дата сообщения: 21.05.2012 14:11

Цитата:
с gz понятно было - из a.tar-1.gz извлекался a.tar-1, и дальше стандартное открытие не работало. с arc-arc, полагаю, то же самое?

Уже не наюблюдается этой проблемы.
arc-zip, arc-acr - всё ок.
С баг 1 дело видать непростое.
Баг 2 доставляет неудобства.
Автор: Bulat_Ziganshin
Дата сообщения: 10.02.2011 13:11

Цитата:
При упаковке ФА в режиме "Без сжатия" файлы которые добавляются в архив упорядочиваются или добавляются в случайной последовательности???

они идут в том порядке, в котором записаны в каталоге на диске. для ntfs это сортировка по каталогу и имени файла получается

и прочти наконец доку. раздел с описанием arc.ini там есть

Добавлено:
ruduk
на мой взгляд тут обсуждать даже нечего

но глядя на этот флейм я вроде допёр как улучшить сжатие связки (s)rep+lzma. если мы при запуске srep знаем с каким словарём будет lzma, то надо просто пропускать тело совпадений при дистанции меньше lzma:dict - поскольку точно известно что их и lzma cожмёт, причём куда эффективней

правда, при очень больших совпадениях эффект от уменьшения файла и соответственно дистанций для lzma всё же перевесит. т.е. получается что оптимальным может быть такой вариант:
при дистанции <64 мб и длине совпадения <4 кб - пропускаем эти данные на выход (не ища в них других совпадений!)
при дистанции <64 мб и длине совпадения >4 кб - кодируем
при дистанции >64 мб и длине совпадения >32 байт - кодируем


Добавлено:
правда копирование по 32 байта на больших дистанциях будет тем ещё цирком - даже если хватит памяти для сжатия...
Автор: ndch
Дата сообщения: 14.09.2011 19:57
Bulat_Ziganshin

Цитата:
постараюсь посмотреть. кстати, не лучше ли просто сделать gui-шный unarc.exe? взять обычный sfx, но запрашивать в начале работы какой файл будем распаковывать

Аргументы за gui-шный unarc:
Антивирусы не бросятся бешено на большой по размеру sfx. Очень полезно.
Небольшой (надеюсь на то что он не будет использовать gtk, qt и т.п.)
Безбоязненно бы ассоциировал его с *.arc (средствами windows)

Аргументы за расширение функционала sfx:
Банальная лень и забывчивость. Т.е. sfx не надо устанавливать, если уже есть существующие sfx-ы (т.е можно драг-н-дропнуть).
И всё же в "конкурентах/аналогах" у sfx-ов есть функционал "а ля" unarc, для перетаскиваемых (драг-н-дроп) архивов.

Конечно же лучше "и то и другое". Но кто это будет делать сейчас ?

Возможно. Вы автор вам виднее, судьба Вашего детища в Ваших руках, но могу рассказать про практику использования freearc:
раньше, а делал и sfx и просто архивы. Иногда было много мелких "заметок" (да, есть множество удобных блокнотиков, но до них обычно у меня руки не доходят), некоторое количество *.bat, и прочей "мелочевки". Для меня, по привычке было странно делать из 10 кб архива 150-ти килобайтный sfx.
Также делал архивы большого размера. Вот именно их я изначально делал sfx-ами.
В итоге получалось так, что на флешке или в локалке обязательно был sfx freearc.
Но с другой стороны, по мере использования, заметил что некоторые антивирусы над ними очень усердно задумываются.

Смысла в гуёвом freearc я на данный момент, честно говоря, особого не вижу (пакую из far - через пользовательскую менюшку и т.д.), кроме вышеописанной задумчивости антивирусов. К gtk у меня нелюбовь с давних времён, но это мои заморочки. Вот поэтому и не стоит гуёвины.

Не могли бы Вы рассказать, если не сложно, почему выбрано gtk, а не qt ? Понял. Gtk2Hs.
Автор: VasulNoz
Дата сообщения: 10.02.2011 14:53
Какой тип сортировки посоветуете? (GUI)
Автор: insorg
Дата сообщения: 21.05.2012 18:00
Странно, но то ли я делаю что-то неправильно, то ли действительно srep вообще не работает.

Создаю архивы при помощи комманды из ТоталКоммандера
<...>arc.exe ? a "_%O.arc" %S -m9x -i2 -lc- -ld- -di -mc:rep/srep:mem256mb -ag
(где %O и %S - переменные ТК, имя файла и список выделеных файлов, соответственно).

Так вот, что интересно, наличие "-mc:rep/srep:mem256mb" или отсутствие ровным счётом не даёт ничего (проверил уже на разных папках (софт, игры, документы) разных размеров), а в результате я получаю два одинаковых архива (пакую: 1-й - с параметром, 2-й - без).

Srep.exe, srep32i.exe, srep64i.exe (все 3.0.1) лежат возле Arc.exe (альфа 20.05.2012, прошлая - такая же).
Автор: ruduk
Дата сообщения: 10.02.2011 15:12
Bulat_Ziganshin

Цитата:
глядя на этот флейм я вроде допёр как улучшить сжатие связки (s)rep+lzma

ежики незря, значит, приснились . Правду говорю
Автор: Bulat_Ziganshin
Дата сообщения: 21.05.2012 18:16

Цитата:
Баг 2 доставляет неудобства.

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


Цитата:
-m9x

не использует rep, поэтому замещать нечего. советую использовать -di и -di+$ для получения информации об алгоритмах. в данном случае можешь попробовать -mc$default+srep:256m, но учти что srep будет использовать 256 мб и lzma столько же
Автор: Profrager
Дата сообщения: 10.02.2011 15:25
Bulat_Ziganshin

Цитата:
правда копирование по 32 байта на больших дистанциях будет тем ещё цирком - даже если хватит памяти для сжатия...
32 еще куда ни шло) а вот 16 или 8 длина поиска - это да) на 4 гб файле у меня часа 2 винт будет мучить)

P.S. на сколько увеличивается скорость обработки подобного большого файла с маленьким размером строки поиска, если hdd сменить на ssd? Стоит ли оно того? Помню ты писал чего-то про ssd, но уже не помню какая разница была.


Цитата:
если мы при запуске srep знаем с каким словарём будет lzma, то надо просто пропускать тело совпадений при дистанции меньше lzma:dict - поскольку точно известно что их и lzma cожмёт, причём куда эффективней
гуд идея, но по-моему ты уже где-то писал пободное)

Цитата:
получается что оптимальным может быть такой вариант:
...
хорошо, если можно было бы все эти параметры условий задавать вручную,а не юзать статичную модель.
Автор: kalpak
Дата сообщения: 14.09.2011 20:23
Bulat_Ziganshin
ну вот я как раз и спрашиваю тот вариант который я написал
он вписывается в работу архиватора?
или этот вариант не верен

ведь по идее чтобы размер архива при использовании архива не сильно вырос, то надо менять
BlockSize у 4x4, но если памяти не хватает то лучше сразу написать невозможно, не хватает памяти,
чем изменять размер словаря у метода
ведь пользователь даже не будет подозревать, что у него уже другой размер используется

и вообще в каких ситуациях архиватор меняет неявно параметры метода (т.е. когда вроде прописал один метод,
а архиватор делает другой, не считая случаи когда слишком большой размер блока/словаря в методе)
Автор: insorg
Дата сообщения: 21.05.2012 19:50
Bulat_Ziganshin
т.е, это
Цитата:
-mc$default+srep:256m
нужно ВМЕСТО "-m9x", я правильно понял?
Автор: Bulat_Ziganshin
Дата сообщения: 10.02.2011 22:26
подобное есть в моём lzp, но не то. там просто по типу "строки от 32 байт с большой дистанцией, от 512 с маленькой". а вот в таколм виде мне почему-то казалось сложно сделать. и вообще это надо для начала в rep, там проблем с мелкими совпадениями не будет

что касается hdd->ssd, то чтение маленьких блоков данных быстрее примерно на два порядка. но ради одного srep я не вижу смысла на ssd переходить - ибо у тебя-то упакуется быстро, а вот потом как распаковывать? достаточно иметь озу на 2-4 гига больше чем у своих пользователей

Добавлено:
вообще в srep есть что улучшить. я например знаю как увеличить скорость сжатия в несколько раз, но кому и зачем это нужно?

реальные проблемы srep - как избавиться от временных файлов при распаковке и нагрузки на кеш (или как-то ограничить её сверху)

например, у меня была такая идея - если сделать srep первым алгоритмом в цепочке сжатия, то при распаковке он будет последним. тогда получится что временный файл при распаковке не нужен - можно данные копировать напрямую из ранее распакованных файлов. проблем две - первое, тогда из архива нельзя распаковать только часть файлов (или можно, записывая данные пропускаемых файлов всё же во временный файл). второе - цепочка srep+precomp+lzma жмёт хуже, нежели precomp+srep+lzma

ещё была идея - сделать LZ наоборот. сейчас precomp, как и положено LZ, записывает откуда из истории надо скопировать данные на текущее место. тут же наоборот - при декодировании данных сразу будут определяться места в выходном файле куда их надо записать. эта идея должна была разрешить проблемы с нагрузкой на кеш диска при распаковке, но тут тоже потенциальные проблемы - во-первых, архиватор при распаковке обычно считает crc распаковываемых файлов для проверки целостности, здесь это придётся делать отдельным проходом. во-вторых, при кусках данных в 512 байт запись такого куска в выходной файл, я боюсь, может потребовать сначала чтения целого кластера (4кб, а на ssd и все 128 кб)
Автор: ALExey1995
Дата сообщения: 17.09.2011 17:24
Как прикрутить к фриарку лзма х64? С английским очень плохо . Прочитал readme прописал в arc.ini ничего не выходит(((
Автор: Profrager
Дата сообщения: 10.02.2011 23:02
Bulat_Ziganshin

Цитата:
что касается hdd->ssd, то чтение маленьких блоков данных быстрее примерно на два порядка. но ради одного srep я не вижу смысла на ssd переходить - ибо у тебя-то упакуется быстро, а вот потом как распаковывать? достаточно иметь озу на 2-4 гига больше чем у своих пользователей
загрузка винды/основных прог + своп-файл + srep = ssd Оперативки 8 гб. Винда кеширует 4гига где-то) Все равно мало)

По теме топика.
Возможно ли реализовать фильтр в ФА с динамически меняющимся размером блока? Т.е. на входе надо детектить необходимый заголовок и соответственно подстраивать текущий блоксайз. А то с постоянной его величиной геморно как-то создать задуманное)
З.Ы. мож это все и расписано в исходниках, но я тока мельком реп смотрел, так что сильно не бить!
Автор: Bulat_Ziganshin
Дата сообщения: 21.05.2012 19:56
insorg
нет. может тебе прочесть наконец доку + описание -mc?

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275

Предыдущая тема: Punto Switcher (часть 3)


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.