Learn how easy it is to sync an existing GitHub or Google Code repo to a SourceForge project! See Demo

Close

Is lzma2 stable regardless of thread count?

Dr.Golova
2013-05-25
2013-05-25
  • Dr.Golova
    Dr.Golova
    2013-05-25

    Hello,

    Is it realy guaranteed that lzma2 compressor will produce bit-by-bit identical compressed stream regardless of number of used threads?

     
  • Dr.Golova
    Dr.Golova
    2013-05-25

    Few details but in Russian:
    У нас есть продукт с толстой базой данных, она сжата lzma и подписана
    Регулярно мы отправляем клиентам так называемые дельта-апдейты (дифы) + новую подпись.
    Т.е. на стороне клиента БД распаковывается, патчится, сжимается обратно, и к ней клеется новая ЭЦП. Соответственно если у клиента обновленная БД сожмется не так, как ожидалось, и ЭЦП не совпадет, то апдейтер посчитает сеанс дельта-апдейта неудавшимся и начнет качать всю многомегабайтную БД как есть, клиенты нагонят трафика и мы попадем на огромные бабки.
    Так и было, когда я попробовал обновиться с 4х до 9х - lzmasdk 9х при тех же опция сжимало чуть лучше, а на клиентах было 4х - подписи отваливали, трафик зашкаливал. печалька. =)
    Сейчас готовится мажорный релиз, тут можно поменять апдейтер, и я задумал перейти на lzma2, разгонять апдейты у клиентов на основе количества физических ядер, но еть ли гарантия что сжатый поток будет одинаковым и на 1 ядре и на 32?

     
    Last edit: Dr.Golova 2013-05-25
  • Igor Pavlov
    Igor Pavlov
    2013-05-25

    For normal/max compression (-mx5 - -mx9):

    LZMA can produce 2 different streams:
    1) 1-thread mode
    2) 2-threads mode

    LZMA2 can produce 3 different streams:
    1) 1-thread mode
    2) 2-threads mode (or 3-threads mode)
    3) 4-threads (and more) mode

    Sometimes there is no difference between 1-thread and 2-threads modes.

    In your case you can always specify -mmt2 switch with LZMA. That will always use 2 threads.

    Or maybe you must redesign your signature scheme.

     
    Last edit: Igor Pavlov 2013-05-25