URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID3
Нить номер: 90383
[ Назад ]

Исходное сообщение
"Релиз Gzip 1.6"

Отправлено opennews , 10-Июн-13 23:52 
Представлен (http://savannah.gnu.org/forum/forum.php?forum_id=7623) релиз популярной программы сжатия Gzip 1.6 (http://www.gnu.org/software/gzip/), в котором внесено 35 изменений. Наиболее заметным новшеством является реализация опции "--keep" ("-k"), при указании которой при сжатии  и распаковке сохраняются исходные файлы, по аналогии с реализацией данной опции в xz, lzip и bzip2. Работа утилиты zmore приближена к more.  Кроме того исправлена интересная ошибка, проявляющаяся при определённом сочетании опций оптимизации компилятора на некоторых платформах в восприятии интерактивного ответа "n"  как "y" при обработке запроса перетирания существующего файла.

URL: http://savannah.gnu.org/forum/forum.php?forum_id=7623
Новость: http://www.opennet.me/opennews/art.shtml?num=37143


Содержание

Сообщения в этом обсуждении
"Релиз Gzip 1.6"
Отправлено Аноним , 10-Июн-13 23:52 
> интересная ошибка, проявляющаяся при определённом сочетании опций оптимизации компилятора на некоторых платформах в восприятии интерактивного ответа "n" как "y" при обработке запроса перетирания существующего файла.

Это круто. Такое специально трудно сделать, если вообще возможно.


"Релиз Gzip 1.6"
Отправлено pkunk , 11-Июн-13 00:05 
> проявляющаяся при определённом сочетании опций оптимизации компилятора на некоторых платформах

Compiling with -O2 ... can be seen in Arch Linux and Fedora 18 x86_64 builds


"Релиз Gzip 1.6"
Отправлено Аноним , 11-Июн-13 00:11 
Ну тогда все ок. Юзерам арча, федоры и убунты такие шутки уже привычны.

"Релиз Gzip 1.6"
Отправлено Аноним , 11-Июн-13 00:17 
где ты увидел слово убунту?

"Релиз Gzip 1.6"
Отправлено Аноним , 11-Июн-13 01:28 
Подобный баг вполне вписывается в ее фирменный стиль :)

"Релиз Gzip 1.6"
Отправлено Аноним , 11-Июн-13 14:47 
> где ты увидел слово убунту?

Когда я говорю программе "не затирай этот файл", а она все равно затирает - как еще это назвать, если не убунту?


"Релиз Gzip 1.6"
Отправлено Аноним , 11-Июн-13 01:31 
> -O2
> x86_64

А это точно баг gzip, а не компилятора?


"Релиз Gzip 1.6"
Отправлено pavlinux , 11-Июн-13 02:16 
> А это точно баг gzip, а не компилятора?

Оба виноваты.


"Релиз Gzip 1.6"
Отправлено Аноним , 11-Июн-13 04:35 
> Это круто. Такое специально трудно сделать, если вообще возможно.

Услужливый оптимизатор кода всегда поможет вам принять правильное решение. Соптимизировав заодно и занимаемое всяким крапом дисковое пространство :)


"Релиз Gzip 1.6"
Отправлено Аноним , 11-Июн-13 14:41 
> крапом

Опять ты со своими баззвордами?



"Релиз Gzip 1.6"
Отправлено YetAnotherOnanym , 11-Июн-13 00:32 
> реализация опции "--keep"

Вах, всего-то джвадцать лет понадобилось!


"Релиз Gzip 1.6"
Отправлено Mr. Cake , 11-Июн-13 07:17 
Он уже может в поточную архивацию?

"Релиз Gzip 1.6"
Отправлено Andrey Mitrofanov , 11-Июн-13 10:01 
> Он уже может в поточную архивацию?

Здрассте! А в tar-е он как по-твоему используется?..

pv </dev/zero |gzip >/dev/null


"Релиз Gzip 1.6"
Отправлено Аноним , 11-Июн-13 17:18 
> pv </dev/zero

Есть подозрение, что pv не сможет корректно оценить размер входного файла. Как минимум по двум причинам.


"Релиз Gzip 1.6"
Отправлено Аноним , 11-Июн-13 20:44 
Это не мешает pv работать. Он даже бегунок покажет, снующий туда-сюда.

"Релиз Gzip 1.6"
Отправлено Andrey Mitrofanov , 11-Июн-13 21:04 
>> pv </dev/zero
> Есть подозрение, что pv не сможет корректно оценить размер

Я вполне понимаю ваш офтопичный наброс, и, да, я в курсе, и, да, корректнее, в контексте демонстрации работоспособности gzip в конвейере, было поставить pv после gzip. </было бы, о чём говорить>


"Релиз Gzip 1.6"
Отправлено Аноним , 11-Июн-13 21:54 
> оставить pv после gzip.

А что, в этом случае pv сможет правильно оценить размер входного файла?


"Релиз Gzip 1.6"
Отправлено Andrey Mitrofanov , 11-Июн-13 22:47 
>> оставить pv после gzip.
> А что, в этом случае pv сможет правильно оценить размер входного файла?

Я т-те второй раз внимательно повторяю: я в курсе. Без размера он показывает скорость и наличие движения вообще. И это его [другой, да??] штатный режим работы. Не возбуждайся так на размер /dev/zro, прими холодный душ.


"Релиз Gzip 1.6"
Отправлено Аноним , 12-Июн-13 00:08 
> Не возбуждайся так на размер /dev/zro

Сложно не возбуждаться. Ведь такой... огромный.


"Релиз Gzip 1.6"
Отправлено Аноним , 11-Июн-13 14:38 
> Он уже может в поточную архивацию?

Вообще-то да. И уже давно.


"Релиз Gzip 1.6"
Отправлено AMD Man , 11-Июн-13 03:13 
Таки в gzip'e скорее всего была ошибка: You are correct.   More searching shows yesno declared as returning bool in one place and int in the other.

"Релиз Gzip 1.6"
Отправлено pavlinux , 11-Июн-13 12:23 
> Таки в gzip'e скорее всего была ошибка: You are correct.  
> More searching shows yesno declared as returning bool in one place
> and int in the other.

Ваще-то по стандарту, компулятор С обязан правильно обрабатывать неявные преобразования типов. Для С++ - это бага, для С - фича. :)


"Релиз Gzip 1.6"
Отправлено Аноним , 11-Июн-13 14:44 
> Ваще-то по стандарту, компулятор С обязан правильно обрабатывать неявные преобразования типов.

А предупреждения в таких случаях писать он случайно не обязан?


"Релиз Gzip 1.6"
Отправлено Нанобот , 11-Июн-13 14:54 
не обязан. хотя, по доброте душевной, обычно всё таки пишет.

"Релиз Gzip 1.6"
Отправлено dq0s4y71 , 11-Июн-13 15:22 
Компилятор - нет. Потому что в данном случае у одной и той же функции разные прототипы, и  компилятор об этом не знает. А вот линковщик мог бы и выдать предупреждение. Но я не уверен, должен ли знать сишный (не С++) линковщик что-то о типах и что именно.

"Релиз Gzip 1.6"
Отправлено dq0s4y71 , 11-Июн-13 15:16 
Здесь дело не в неявном преобразовании типов, а в том, что в одном месте yesno() описана как возвращающая bool (1 байт), а в другом - как int (4 байта). Когда yesno() возвращает, допустим, false, она кладёт 0 в %al. При этом в старших байтах %eax может на тот момент содержаться всё что угодно. А вызывающая функция думает, что yesno() возвращает int и делает test %eax, %eax, и, естественно, мусор содержащийся в старших байтах, даёт ненулевой результат. Я так ДУМАЮ :)

"Релиз Gzip 1.6"
Отправлено pavlinux , 11-Июн-13 21:34 
В С99, _Bool - это unsigned int;

6.3.1.2 Boolean type

Note that, although _Bool is technically an integer type, conversion to _Bool does not always
work the same as conversion to other integer types. Consider, for example, that the expression
(_Bool)0.5 evaluates to 1, whereas (int)0.5 evaluates to 0. The first result is correct: it
simply says that 0.5 is non-zero; but it may be somewhat counter-intuitive unless a _Bool is
thought of as a “truth value” rather than as a one-bit integer.



"Релиз Gzip 1.6"
Отправлено dq0s4y71 , 13-Июн-13 13:20 
Нет, и ваша цитата, вообще-то, это подтверждает :)

Ещё можете для общего развития сравнить выдачу от printf("%u\n", sizeof(_Bool)); и printf("%u\n", sizeof(unsigned int));


"Релиз Gzip 1.6"
Отправлено pavlinux , 15-Июн-13 18:17 
> Нет, и ваша цитата, вообще-то, это подтверждает :)

Уверен, что читать умеешь?

"_Bool is technically an integer type"

> ещё можете для общего развития сравнить выдачу от printf("%u\n", sizeof(_Bool)); и printf("%u\n", sizeof(unsigned int));

Во ты лошара  :-D


#include <stdio.h>
#include <stdbool.h>

#ifdef __bool_true_false_are_defined

int main(void) {

        printf("%zu %zu\n", sizeof(true), sizeof(false)); // %zu - sizeof возвращает size_t

  return 0;
}
#else
        #error "Not true boolean system"
#endif



"Релиз Gzip 1.6"
Отправлено dq0s4y71 , 17-Июн-13 15:43 
> Уверен, что читать умеешь?
> "_Bool is technically an integer type"

Я - да. И поэтому я прочитал предложение полностью, а не выдрал одну фразу из контекста.

>[оверквотинг удален]
> int main(void) {
>         printf("%zu %zu\n", sizeof(true), sizeof(false));
> // %zu - sizeof возвращает size_t
>   return 0;
> }
> #else
>         #error "Not true boolean
> system"
> #endif
>

И что ты этим хотел сказать? Что sizeof возвращает size_t?


"Релиз Gzip 1.6"
Отправлено pavlinux , 15-Июн-13 18:46 
Ах да, в догонку _Бууль может быть как singned char, так и enum.
И ваще, изначально это формулировалось так: Bool могёт быть представлен
любым целым типом, позволяющим вместить 0 или 1. (как-то так)

#ifdef Someting
#    define _Bool signed char
#else
     typedef enum { false = 0, true = 1 } _Bool;
#endif

Когда оно было енум, то вываливалась очень полезный варнинг: "Еnumerated type mixed with another type".



"Релиз Gzip 1.6"
Отправлено dq0s4y71 , 17-Июн-13 15:52 
Ты догадался, что у компиляторов, не поддерживающих _Bool, _Bool может быть вообще чем угодно? Ты умница! :)

А теперь поставь нормальный компилятор, поддерживающий С99, и посмотри, что он скажет на твой говнокод :)


"Релиз Gzip 1.6"
Отправлено dq0s4y71 , 11-Июн-13 15:31 
> Таки в gzip'e скорее всего была ошибка

Да. Оптимизатор только изменяет вероятность её срабатывания :)


"Релиз Gzip 1.6"
Отправлено Аноним , 11-Июн-13 08:16 
Интересно, сколько ещё лет пройдёт пока запилят задействование всех ядер процессора, как в pigz…

"Релиз Gzip 1.6"
Отправлено Аноним , 11-Июн-13 12:19 
> Интересно, сколько ещё лет пройдёт пока запилят задействование всех ядер процессора, как
> в pigz…

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


"Релиз Gzip 1.6"
Отправлено Аноним , 11-Июн-13 14:39 
> Чо, терабайт порева нечем по-шустрому заархивить, пока мамка не увидала и ремня не всыпала?

Считай, что так. Ты же все равно не поверишь, что на компе можно хранить что-то еще, кроме порева.


"Релиз Gzip 1.6"
Отправлено pavlinux , 11-Июн-13 12:28 
> Интересно, сколько ещё лет пройдёт пока запилят задействование всех ядер процессора, как
> в pigz…

А ты в курсе, что не все алгоритмы позволяют себя распараллелить?
И уж тем более знаешь, что добавление одного ядра добавляет к производительности
всего 22%, а не 100. (и то, это в теории) Удвоение достигается где-то около 32 ядер.
Отседа следует, что существует такой макс. размер файла, который полюбасу обработается
быстрее линейно, чем с динамическим распарралеливанием.

У меня lzma даёт профит, на 4-х ядрах, только при размере сжимаемого файл от 70 мегов.


"Релиз Gzip 1.6"
Отправлено Аноним , 11-Июн-13 12:59 
Может не стоит так троллить

"Релиз Gzip 1.6"
Отправлено Аноним , 11-Июн-13 14:43 
> Может не стоит так троллить

Да нет, он все правильно сказал. Составление словаря проще делать на одном ядре. А уже потом можно побить данные по чанкам и раскидывать их по ядрам.


"Релиз Gzip 1.6"
Отправлено Аноним , 11-Июн-13 20:49 
> не "не позволяют", а "программисты ниасилили"

О, у нас тут образец "я видел программы, которые умеют параллельную обработку, значит я знаю, как они работают. Все слушайте меня!"


"Релиз Gzip 1.6"
Отправлено pavlinux , 11-Июн-13 21:56 
>>А ты в курсе, что не все алгоритмы позволяют себя распараллелить?
> не "не позволяют", а "программисты ниасилили"

Ну исполни параллельно нахождение корней полинома 5-ой степени.


"Релиз Gzip 1.6"
Отправлено Аноним , 12-Июн-13 02:11 
4 ядра, текстовый файл 283 МБ

time gzip -c l0611000.log > gzip.gz

real    0m2.452s
user    0m2.380s
sys     0m0.064s


time pigz -c l0611000.log > pigz.gz

real    0m0.858s
user    0m2.948s
sys     0m0.140s

и результат

4112090 gzip.gz
4192434 pigz.gz
283379154 l0611000.log

В ТРЖИ раза (ну почти), получается у меня 48 ядер?


"Релиз Gzip 1.6"
Отправлено Аноним , 12-Июн-13 02:25 
А теперь повтори для файла размером ~1 Мб. Ke-ke-ke.

"Релиз Gzip 1.6"
Отправлено Аноним , 15-Июн-13 05:25 
lz4 быстрее

"Релиз Gzip 1.6"
Отправлено pavlinux , 15-Июн-13 20:30 
> lz4 быстрее

Неа, правда данные из /dev/urandom (но это похоже на видео)


16M:
PIGZ: 0.65 2.33 0.09
LZ4:  1.46 1.39 0.06

32M:
PIGZ: 1.09 2.38 0.11
LZ4:  2.61 2.49 0.10

64M:
PIGZ: 1.25 4.60 0.28
LZ4:  5.15 4.96 0.18

128M:
PIGZ: 2.24 8.34 0.41
LZ4: 10.20 9.82 0.35

256M:
PIGZ: 4.08 15.40 0.64
LZ4: 20.41 19.67 0.67



"Релиз Gzip 1.6"
Отправлено pavlinux , 15-Июн-13 18:48 
user    0m2.380s
user    0m2.948s

второй раз тормознее, аж на 0.6 сек!


"Релиз Gzip 1.6"
Отправлено pavlinux , 15-Июн-13 20:01 
> В ТРЖИ раза (ну почти), получается у меня 48 ядер?

Да, ты обогнал скорость света.

Смотрите как LZMA процессор утюжит! :)


1M:
PIGZ: 0.07 0.14 0.01
GZIP: 0.13 0.12 0.00
LZMA: 0.79 0.66 0.12

2M:
PIGZ: 0.07 0.19 0.01
GZIP: 0.27 0.25 0.01
LZMA: 0.94 0.84 0.09

4M:
PIGZ: 0.12 0.30 0.02
GZIP: 0.20 0.20 0.00
LZMA: 1.74 1.60 0.13

8M:
PIGZ: 0.19 0.66 0.03
GZIP: 0.41 0.39 0.01
LZMA: 3.65 3.46 0.17

16M:
PIGZ: 0.36 1.30 0.07
GZIP: 0.82 0.79 0.02
LZMA: 8.18 7.85 0.29

32M:
PIGZ: 0.69 2.55 0.14
GZIP: 1.64 1.57 0.06
LZMA: 19.61 18.93 0.62

64M:
PIGZ: 1.25 4.67 0.22
GZIP: 3.33 3.20 0.10
LZMA: 51.77 50.36 1.19

128M:
PIGZ: 2.51 8.28 0.40
GZIP: 6.58 6.34 0.21
LZMA: 124.39 122.22 1.62

256M:
PIGZ: 4.19 15.47 0.74
GZIP: 13.25 12.74 0.44
LZMA: 266.72 263.13 2.38



"Релиз Gzip 1.6"
Отправлено Аноним , 11-Июн-13 14:46 
> Интересно, сколько ещё лет пройдёт пока запилят задействование всех ядер процессора, как в pigz…

У pigz, afaik, немного другая ниша - работа с довольно большими файлами (например, образами блочных устройств). Как тут верно подметили, распараллеливание эффективно только на больших файлах.


"Релиз Gzip 1.6"
Отправлено Андрей , 11-Июн-13 09:06 
а что за новое слово "перетирания"
... я спокойно отношусь к жаргону и шуткам, но только если однозначно ясен смысл, а тут можно только из контекста догадаться что это значит

"Релиз Gzip 1.6"
Отправлено pavel_simple , 11-Июн-13 12:50 
>  а что за новое слово "перетирания"
>  ... я спокойно отношусь к жаргону и шуткам, но только если
> однозначно ясен смысл, а тут можно только из контекста догадаться что
> это значит

пере (ибо много) тирания... ну ты понил.


"Релиз Gzip 1.6"
Отправлено Аноним , 11-Июн-13 14:40 
> а тут можно только из контекста догадаться что это значит
> перетирания

Очевидно, для перетираемого файла - ничего хорошего.