Search
Write a publication
Pull to refresh
107
0
Олег Большаков @ob1

Разработчик

Send message

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

Можете рассказать подробнее, какие проблемы решаете при помощи мутекса на примере следующего кода?

    pthread_mutex_lock( &gpio_mutex );
    error = devctl( fd, DCMD_GPIO_WRITE, &cfg, sizeof(gpio_write_t), NULL );
    pthread_mutex_unlock( &gpio_mutex );

Судя по остальным ОС и версии ядра это Slackware 3.1 (Slackware 96).

Это согласно мануалу:

ZSTD_NBTHREADS can be used to set the number of threads zstd will attempt to use during compression. If the value of ZSTD_NBTHREADS is not a valid unsigned integer, it will be ignored with a warning message. ZSTD_NBTHREADS has a default value of max(1, min(4, nbCores/4)),

А ещё я посмотрел htop. На четырёхядерной системе zstd активно работает в один поток, а на восьмиядерной — в два. Наверное, активно работающие потоки это как раз те потоки, которые используются для компрессии. Что соответствует приведённой формуле.

Спасибо, что напомнили про zstd. В заметке, кстати, его отметил. Опцию -O не нахожу в документации на установленную у меня версию zstd.

Что касается количества потоков, которые создаёт zstd при своей работе. Если действительно часто приходится сжимать большие объёмы данных, то вместо явного указания опций zstd удобнее установить переменные окружения ZSTD_NBTHREADS и ZSTD_CLEVEL, например, в пользовательском профиле. По умолчанию, кстати, zstd работает не в 2 потока, а в в зависимости от количества процессорных ядер от 1 до 4.

На мой взгляд, важность опций zstd для указания количества потоков и коэффициента сжатия переоценена. Провёл небольшой эксперимент эксперимент (измерения проводил несколько раз):

❯ sudo du -sh /usr
2,1G	/usr
❯ =time -p sudo tar -C / --zstd -cf /dev/shm/1.tar.zst usr
real 5.54
user 0.00
sys 0.00
❯ ll /dev/shm/1.tar.zst
-rw-r--r-- 1 root root 917M апр  8 21:38 /dev/shm/1.tar.zst
❯ =time -p sudo ZSTD_NBTHREADS=8 tar -C / --zstd -cf /dev/shm/1.tar.zst usr
real 5.47
user 0.00
sys 0.00
❯ =time -p sudo ZSTD_CLEVEL=19 ZSTD_NBTHREADS=8 tar -C / --zstd -cf /dev/shm/1.tar.zst usr
real 167.41
user 0.00
sys 0.00
❯ ll /dev/shm/1.tar.zst
-rw-r--r-- 1 root root 810M апр  8 21:44 /dev/shm/1.tar.zst

С маленьким коэффициентом сжатия количество потоков zstd не оказывают существенного влияния на общую скорость работы. С высоким коэффициентом сжатия архив становится меньше примерно на 11%, но время сжатия возрастает прям существенно, более чем в 30 раз. На маленьких объёмах данных практической разницы не будет. На больших объёмах данных надо будет подбирать параметры компрессии, это займёт значительно больше времени, чем само сжатие. И в любом случае нет гарантии, что удастся существенно увеличить коэффициент сжатия. Обычному пользователю редко это всё может понадобиться.

Если у Вас другие экспериментальные данные, то поделитесь, пожалуйста.

Да, это вариант tarpipe. Ниже о нём вспоминали.

Да, tarpipe иногда полезен. В чистом виде не часто используется, т.к. команда cp позволяет как сохранять атрибуты файлов, так и корректно обрабатывать специальные файлы (в зависимости от реализации, конечно). К тому же для сохранения владельцев нужно запускать tar от root-а.

Чаще, на мой взгляд, tarpipe применяется при передаче по сети, например, при помощи netcat. Создаётся сетевой канал и с одной стороны распаковывается поток, а с другой запаковывать tar-ом.

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

tar cfv /dev/st0 файлы

Точно так же с помощью tar можно было переносить файлы с одной машины на другую без файловой системы на дискете.

Спасибо за ссылку, добавил в заметку в раздел «Поддержка стандартов языка Си в компиляторах».

Спасибо. Это верное замечание, отметил в заметке.

Спасибо за замечание. Добавил упоминание restrict в нововведения C99.

Прошу прощения, почему-то у меня мелкая фотка сохранилась изначально. Заменил на уменьшенную оригинальную.

Не могу не написать тут для тех, кто в материале.

Русские физики выбирают Slackware.

Теорию в школе можно изучать в 16, практику проходить и сдавать экзамен в ГИБДД в 17, потом за правами подойти в 18.

Хотели назвать Я.Плачу. Но получилось неоднозначно. Практически ЯПлакалъ.

Покупая продукцию вы вкладываетесь в развитие производства, т.к. рачительный производитель заинтересован в развитии и будет часть прибыли вкладывать в развитие.

Если IT предпринимательство это сборка, продажа и настройка, то пользы промышленности это принесёт мало.

В статье говорилось о К1801ВМ1, потенциал которого не был раскрыт в своё время полностью. И дальнейшее развитие он не получил. Вместо этого был переход на x86.

А я поздно к фидо подключился, т.к. долго комп (а потом и модем) не мог себе позволить. Потом долго не хотел регать ноду over 1000, т.к. зашквар. В итоге — 2:5030/1368. Жаль, что это время прошло.

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

Такая конструкция 

if (val = 10 ) doSmth=1;

незаметно собирается и вызовет трагедию во время исполнения.

gcc -Wall -Wextra -pedantic -Werror хотя бы по умолчанию. Хотя -pedantic по желанию.

Есть же консольная игра FIDO. Гуглится, да и на Хабре были статьи.

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

1
23 ...

Information

Rating
Does not participate
Location
Санкт-Петербург, Санкт-Петербург и область, Россия
Works in
Date of birth
Registered
Activity

Specialization

System Software Engineer
Lead