Сбрасывается ли словарь сжатия блоков rsync для каждого файла?

Это упоминалось в презентации Леннарта Поттеринга в 2013 г., но в 2015 г. его цитировали следующим образом:

systemd also contains the systemd-nspawn container manager. It's a relatively minimal, yet powerful implementation of a container manager. Initially we wrote it for testing purposes, but nowadays we consider it ready for many production uses. In fact CoreOS' rkt container tool makes use of it as the lower level container backend.

Ссылка:Где встречаются systemd и Containers :Вопросы и ответы с Леннартом Поттерингом

6
20.11.2019, 12:47
1 ответ

rsync использует сжатие вtoken.cи, по-видимому, только там. Он поддерживает состояние потока deflate в переменной tx_strmи сбрасывает состояние потока в send_deflated_token, если предыдущий токен равен -1 :

.
        if (last_token == -1) {
                /* initialization */
                if (!init_done) {
                        tx_strm.next_in = NULL;
                        tx_strm.zalloc = NULL;
                        tx_strm.zfree = NULL;
                        if (deflateInit2(&tx_strm, compression_level,
                                         Z_DEFLATED, -15, 8,
                                         Z_DEFAULT_STRATEGY) != Z_OK) {
                                rprintf(FERROR, "compression init failed\n");
                                exit_cleanup(RERR_PROTOCOL);
                        }
                        if ((obuf = new_array(char, OBUF_SIZE)) == NULL)
                                out_of_memory("send_deflated_token");
                        init_done = 1;
                } else
                        deflateReset(&tx_strm);

Используется от match.c, через функцию match, используемую функциями hash_searchи match_sums. Эти функции всегда гарантируют, что они завершат свою обработку вызовом, который оставляет last_tokenустановленным в -1, так что следующий вызов сбросит поток выкачивания. Все это делается файл -за файлом -, поэтому поток дефляции всегда сбрасывается в начале каждого файла.

Это означает, что словарь блочного сжатия гарантированно сбрасывается для каждого файла; он может сбрасываться чаще.

Если бы rsyncиспользовал данные из предыдущих файлов, было бы интереснее распространить обработку хэшей на файлы.

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

6
27.01.2020, 20:27

Теги

Похожие вопросы