воскресенье, 29 августа 2010 г.

Оптимизация - передача сжатых файлов

Для уменьшения нагрузки на систему реализовано автоматическое отключение сжатия передаваемых файлов в зависимости от их расширения.
О том, что выполняется сжатие файла перед отправкой указывает вот эта буковка "Z" как видно из рисунка, мой клиент усиленно старается пожать mp3 (при этом на принимающей стороне клиент должен еще выполнить декомпрессию)


Изменения в коде выглядят так и в случае успешного тестирования они войдут во все ветки наших клиентов

Текущий алгоритм:
  • Список расширений файлов, для передачи которых не будет использоваться сжатие через ZLib находится в конфигурационном файле CustomCompressExt.ini
  • Файл загружается один раз при старте клиента.

Если пользователь пытается с вас скачать файл попадающий под CustomCompressExt.ini, то при отдачи файла не используется zlib фильтр (сжимать уже пожатые файлы не эффективно)

Просьба к пользователям посмотреть файл и дополнить его расширениями которые являются сжатыми, но не описаны
писать можно прямо в блог.
В формате:

.расширение [описание]

r500-beta12 с поддержкой данной функции:

SetupFlylinkDC-x86-r500-beta12-build-4602.exe
SetupFlylinkDC-x64-r500-beta12-build-4602.exe
FlylinkDC-x64-r500-vc2010-beta12-build-4602-29-Aug-2010-23-04.zip
FlylinkDC-src-r500-vc2010-beta12-build-4602-29-Aug-2010-22-50.zip
FlylinkDC-x86-r500-vc2010-beta12-build-4602-29-Aug-2010-22-49.zip


r401-beta1
SetupFlylinkDC-x86-r401-beta1-build-4604.exe
SetupFlylinkDC-x64-r401-beta1-build-4604.exe

 FlylinkDC-r401-beta1-build-4604-30-Aug-2010-00-05.zip
FlylinkDC-r401-src-beta1-build-4604-30-Aug-2010-00-06.zip
FlylinkDC-r401-beta1-x64-build-4604-30-Aug-2010-00-18.zip



51 комментарий:

Анонимный комментирует...

Применение LZMA2 не снизит нагрузку, зато сожмет файл на 30% сильнее. Для сравнения объём файлов 650 мегабайт сжимается
LZMA2 в 350 мегабайт за 46 секунда
ZIP в 430 мегабайт за 34 секунды

LZMA2 не входит в стандарт, но можно реализовать его опционально в флайлинке для обмена между флайлинками. Пользователям на DSL этоб очень пригодилось.

Анонимный комментирует...

http://www.thg.ru/software/archivator_test/archivator_test-02.html

Pavel Pimenov комментирует...

В данной теме речь идет об исключении двойного сжатия.

650м - какого типа файлы?

По сети чаще всего гоняют avi да mp3
зачем их жать(не важно каким методом)?

vsu комментирует...

.tar в этом списке лишний - это несжатый архив.

vsu комментирует...

А вот упомянутого .mp3 явно не хватает, как и прочих звуковых форматов - .ogg, .flac, .ape.

Pavel Pimenov комментирует...

Спасибо.
убрал тар
добавил
// Звуковые файлы
.mp3
.flac
.ogg
.ape
.vqf
.lqt

хотя про ape первый раз слышу

Анонимный комментирует...

насколько я понял - аудио и видео сжимать не надо...
советую аудио форматы подсмотреть в AIMP'е - список наиболее чем полный

Pavel Pimenov комментирует...

Глянул AIMP2 много...

а какие из списка не сжатые?

Например WAV если не ошибаюсь, без сжатия

brain-ripper комментирует...


Например WAV если не ошибаюсь, без сжатия


WAV - это RIFF'овский контейнер, данные могут быть как сжатые так и нет. В общем случае можно считать, что в WAV лежат не сжатые PCM данные.

Анонимный комментирует...

Скорость работы возрасла в разы win 7 64 bit пока работает стабильно

Анонимный комментирует...

А вот ссылку с тестом кинули: http://www.thg.ru/software/archivator_test/archivator_test-02.html

Конешно больше всего передают видео и mp3, тогда стоит ли вообще заморачиваться? Я думаю что около 90% передаваемых файлов несжимаемые. 650 - скорее всего набрали папку из разных популярных файлов, чтобы тест был усреденным, т.к. один архиватор сжимает хорошо одни файлы, другой - другие.
Прикрутить дополнительно lzma - сложная задача? я думал в худьшем случае это не больше часика времени на отладку займет. Зато те, у кого инет лимитирован - будут оооочень благодарны.

--------------------------
Не по теме:
Вот тут интересные вещи пишут, думаю вам будет интересно почитать: http://dchublist.ru/forum/viewtopic.php?f=6&t=429&sid=83c15d43863040856b20b1160c104062&start=50

Анонимный комментирует...

Может лучше по-умолчанию считать файлы сжатыми, а в список исключений добавлять расширения несжатых?

Анонимный комментирует...

слишком большой фильтр получится

Pavel Pimenov комментирует...

Фильтр грузится один раз в хэш таблицу unordered_set
а поиск по ней идет быстро.
Если Вас это беспокоит...

Анонимный комментирует...

Думаю стоит добавить образы дисков ISO и т.д. Обычно в образах уже сжатые файлы.

Анонимный комментирует...

Добавьте видео расширения .mpeg, .divx
Нагрузка на ЦП действительно упала, спасибо.

Анонимный комментирует...

iso - несжатый образ;
isz - сжатый образ (zip'ом).

Pavel Pimenov комментирует...

Добавлено.
http://code.google.com/p/flylinkdc/source/detail?r=4610

Анонимный комментирует...

ISZ - образ ISO сжатый ZIP'ом

Unknown комментирует...

Так вот что такое буковка Z ;)

Кстати что такое [C] и ещё какая-то бывает?

Unknown комментирует...

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

Вообще имхо, в DC сжатие не сильно нужно, кроме как файллист, и жать больше нечего. Много ли объёмного контента летает, который можно пожать? На LZMA не стоит тратить время.

Pavel Pimenov комментирует...

хм. Файл лист передается уже пожатым. (bzip)

Pavel Pimenov комментирует...

Что означают символы [Z] [T] [C], которые стоят в полосе загрузки в столбце Статус?

[T] = TTH check on - идет передача с использованием TTH (проверка TTH включена).
[Z] = zlib on - используется сжатие zlib (метод вроде GZIP).
[R] = rollback performed - скачка с использованием отката (в настройках "Для экспертов" соответсвующий пункт). Про него можно почитать в справке к оригинальному DC++.
[S] = secure transfer - безопасная передача.
[C] = state chunked transfers - передача по запросу куска файла, а не целого.
[P] - partial, т.е. когда с тебя качают файл, который ты качаешь с другого (в предыдущих версиях это называлось "расшаривание скачиваемых файлов").


p.s.
буковка S в ветке r4xx не поддерживается в ней OpenSSL вырезан.

Unknown комментирует...

Спасибо буду знать.
[R] - что-то не нашёл =0 в настройках.

Degit комментирует...

Видео
.3gp Мультимедийный файл беспроводных сетей
.avi Контейнер для видео/аудио потока данных
.divx Movie Encoded with DivX-codec
.flv Flash видео файл
.m4v Видео в формате MPEG-4
.mkv Аудио-видео файл Matroska, контейнер
.mov Видео файл Apple QuickTime
.mp4 Файл видео MPEG-4
.mpg MPEG movie file
.mpeg MPEG movie file
.vob DVD-Video Object
.wmv Видео файл Windows Media

Аудио
.aac Advsnced Audio Codec
.ac3 Dolby Digital AC-3
.ape Monkey's Audio
.fla Free Lossless Audio
.flac Free Lossless Audio
.m4a Apple Lossless Audio Codec
.mp1 MPEG Layer 1
.mp2 MPEG Layer 2
.mp3 MPEG Layer 3
.ogg Ogg Vorbis Audio
.wma Windows Media Audio
.wv WavPack

Архивы
.cab Windows Cabinet Compressed Archive

Pavel Pimenov комментирует...

Спасибо. добавил
http://code.google.com/p/flylinkdc/source/detail?r=4615

Анонимный комментирует...

http://ru.wikipedia.org/wiki/Сжатие_без_потерь#.D0.A1.D0.B6.D0.B0.D1.82.D0.B8.D0.B5_.D0.B0.D1.83.D0.B4.D0.B8.D0.BE

Анонимный комментирует...

извиняюсь, корявая ссылка
wiki

Fallved комментирует...

.djvu DjVu Document
.djv DjVu Document
.tiff Tagged Image File Format
.tif Tagged Image File Format
.bik Видео в формате Bink
.mka Аудио файл Matroska
.qt Видео файл Apple QuickTime
.rm Видео файл RealMedia

И не забудьте про образы дисков и сжатые изображения

Unknown комментирует...

здесь точнее - смотрим на программу и в какой формат сжимает, и решаем добавлять или нет :)

Fallved комментирует...

Кстати википедия это идея.
Вот нашёл http://en.wikipedia.org/wiki/Template:Compression_formats

Анонимный комментирует...

Отключите сжатие неполных источников. У меня недокачанный фильм в формате .avi раздаётся и сжатие включено.

Анонимный комментирует...

Учитывая что 90% файлов жать не получиться я бы инвертнул список, т.е. по умолчанию файлы не жать, а жать только те что в списке .txt, .xml.
В идеале лучше отказаться от файла конфигурации и проверять файл на жмёться, не жмётся, вообще алгоритмы такие есть?

Анонимный комментирует...

вообще алгоритмы такие есть?

Да, есть, нужно его сжать и посмотреть, сжался ли он!

brain-ripper комментирует...

вообще алгоритмы такие есть?

Ну, теоретически можно распределение символов в файле посмотреть, чем более оно равномерное, тем меньше пожмется файл. Но это в первом приближении, тут более совершенный математический аппарат нужен.
Опять же кто будет составлять статистику и на каких файлах? ;)

Учитывая что 90% файлов жать не получиться

Статистику предоставьте, пожалуйста

я бы инвертнул список, т.е. по умолчанию файлы не жать, а жать только те что в списке .txt, .xml

А я бы не стал этого делать, потому как только у одних текстовых файлов тонна расширений: txt, ini, ion, cpp, и т.д. и т.п. В общем случае любой файл с неизвестным расширением имеет неплохой шанс сильно сжаться.

Насчет того, что эти файли, мол, никто не передает по p2p, опять же - дайте статистику. С видеофайлами, например часто качают субтитры, с mp3 - в каталогах альбомов часто лежит текстовая инфа и т.п.
Ну и дистрибутивы программ, если они идут не одним самораспаковывающимся архивом часто можно пожать, сэкономив мегабайт-другой

Elle Solomina комментирует...
Этот комментарий был удален автором.
Elle Solomina комментирует...

Ну и дистрибутивы программ, если они идут не одним самораспаковывающимся архивом часто можно пожать, сэкономив мегабайт-другой

гигабайт-другой :) К примеру распакованный монстр вроде Adobe CS5 весит раза в 3-4 больше во время инсталляции чем сам инсталлятор, тоже самое касается всяких dll, sys, и других исполняемых файлов, они прекрасно жмутся в несколько раз, особенно если они содержат много ресурсов, exe-шка Флая например жмётся где то до размера 1.5 МБ, т.е. в 2-3 раза

brain-ripper комментирует...

К примеру распакованный монстр вроде Adobe CS5 весит раза в 3-4 больше во время инсталляции чем сам инсталлятор, тоже самое касается всяких dll, sys

Ну это понятно, но распакованные программы как правило не гоняют по p2p. Я имел ввиду именно распространяемые дистрибутивы, которые часто состоят из одного или нескольких архивов и нескольких сопутствующих файлов. А последние как раз можно пожать.
Это к разговору о том, что, мол, 90% файлов и так сжатыми передаются.

Анонимный комментирует...

no-steam игры в .bin расфасовывают, сжимается нехило

Анонимный комментирует...

На лимитированных тарифах провайдеры считают каждый мегабайт.
Нужно смотреть насколько загружен процессор. Если общая нагрузка ниже 20% - то жать абсолютно все файлы по максимуму алгоритмом lzma2
Если нагрузка в пределах от 20 до 30 к примеру, жать все файлы злибом. Если выше - жать злибом только разрешенные в списке файлы.
А тык вы сейчас выиграете в производительности и толку? Освобожденное время процессор попросту будет простаивать.
ИМХО если начали разрабатывать эту тему - нужно разработать её основательно и навсегда.

Pavel Pimenov комментирует...

* Обновил список расширений.

http://code.google.com/p/flylinkdc/source/detail?r=4625#

Pavel Pimenov комментирует...

"На лимитированных тарифах провайдеры считают каждый мегабайт."

а у вас разве локальный траф не бесплатный?

как называется город?

Анонимный комментирует...

Павел, флаем пользуется много пользователей. У всех интернет разный. В крупных городах с ним проблем нет, а вот в деревнях и облостях вообще до сих пор у многих провайдеров сохранились лимитированные тарифы. Также набирает обороты мобильный интернет, у которого большинство тарифов - лимитированные. И многие едут на дачу с ноутбуком и качают там. Между 430 и 350 большая разница и если даже считать 1 мегабайт - рубль, а это далеко не везде, при таком раскладе пользователь сэкономит 80 рублей и может быть целый час времени.

А представьте если кто-то решил устроить раздачу? на магнет порталах их делают всё время! И с одного релизера сразу качает несколько десятков человек, а у него инет 10 мегабит. При таком раскладе 30% - получится большое число, как в трафике, так и во времени. А нагрузкой релизеры готовы пожертвовать, лишь бы файл раздался и разошелся быстрее при меньшем трафике. Никому не хочется держать комп ночью включенным только ради этого.

Анонимный комментирует...

А представьте если кто-то решил устроить раздачу? на магнет порталах их делают всё время! И с одного релизера сразу качает несколько десятков человек, а у него инет 10 мегабит. При таком раскладе 30% - получится большое число, как в трафике, так и во времени

уточните: раздачу чего, офисных документов? так *.docx *.xlsx уже пожаты. расскажите нам, чего у вас такого раздают массово востребованного и непожатого?

brain-ripper комментирует...

расскажите нам, чего у вас такого раздают массово востребованного и непожатого?

Часто раздаются ISO - это непожатый формат. Даже если внутри лежат сжатые файлы, то сам ISO можно неплохо сжать

Анонимный комментирует...

уточните: раздачу чего, офисных документов? так *.docx *.xlsx уже пожаты. расскажите нам, чего у вас такого раздают массово востребованного и непожатого?

Да даже если и офисных документов, чего в этом такого?! Пускай будет и zlib и lzma2, а пользователи уж сами решат что и как им.

Недавно мафию радавали, весит она 6,17 гб
Еслиб флай жал её через lzma - пришлось бы каждому раздать 3,3 гб
При zlib, у тех, кто выставил в настройках девятку - раздавалось 4 гб

Анонимный комментирует...

Недавно мафию радавали, весит она 6,17 гб
Еслиб флай жал её через lzma - пришлось бы каждому раздать 3,3 гб


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

Trojan комментирует...

Доброго времени суток!

Добавьте плиз расширения .deb, .rpm - пакеты в linux и их сжимать нетребуется.
Еще в лосслесс музыка, хоть и не часто, как .flac, .wv и .ape, но встречается в форматах .tak .tta .wma (тоже встречается лосслесс), .mlp, .shn.

Образы iso тоже считаю, что сжимать нельзя, т.к. внутри уже сжатые файлы находятся, хотя и не всегда, иногда исошки неплохо жмутся. Но в .iso также распространяются дистры на основе ядра GNU/Linux и их дополнительно жать толку никакого нет.

LZMA-компрессию неплохо тоже добавить, но по-умолчанию, выставить GZIP, а кому надо - покопается в настройках.

Pavel Pimenov комментирует...

deb и rpm в файле есть

Анонимный комментирует...

Думаю после флая LZMA2 подхватят и другие клиенты, алгоритм действительно хорош

hat3k комментирует...

еще можно добавить контейнеры .TS и .m2ts

это от bluray дисков