LINUX.ORG.RU

Новая оптимизация функции memset() в glibc

 , , ,


0

2

Инженер из Intel, Ноах Голдштейн, оптимизировал функцию memset() в библиотеке glibc. Данная оптимизация даёт прирост в производительности порядка 7.5% на десктопных версиях процессоров архитектур Skylake-X и Ice Lake. У серверных версий прирост в производительности немного ниже, прежде всего из-за более низкой общей производительности одиночного ядра.

В прежней реализации функции memset() использовалась ассемблерная инструкция rep stosb. До недавнего времени эта инструкция работала достаточно быстро, за счёт внутрипроцессорной оптимизации zero-over-zero writeback. Однако в этой оптимизации была найдена потенциальная уязвимость, которая может привести к атаке по побочному каналу. В результате оптимизация zero-over-zero writeback была отменена, что и привело к ухудшению производительности rep stosb. В новой версии memset() инструкция rep stosb всё ещё используется, но при выполнении более строгих условий.

Что именно изменилось, можно понять по изменению следующего комментария в коде, который описывает подробности реализации memset()

Прежняя версия описания:

/* memset is implemented as:
   1. Use overlapping store to avoid branch.
   2. If size is less than VEC, use integer register stores.
   3. If size is from VEC_SIZE to 2 * VEC_SIZE, use 2 VEC stores.
   4. If size is from 2 * VEC_SIZE to 4 * VEC_SIZE, use 4 VEC stores.
   5. On machines ERMS feature, if size is greater or equal than
      __x86_rep_stosb_threshold then REP STOSB will be used.
   6. If size is more to 4 * VEC_SIZE, align to 4 * VEC_SIZE with
      4 VEC stores and store 4 * VEC at a time until done.  */

Новая версия описания:

/* memset is implemented as:
   1. Use overlapping store to avoid branch.
   2. If size is less than VEC, use integer register stores.
   3. If size is from VEC_SIZE to 2 * VEC_SIZE, use 2 VEC stores.
   4. If size is from 2 * VEC_SIZE to 4 * VEC_SIZE, use 4 VEC stores.
   5. If size is more to 4 * VEC_SIZE, align to 1 * VEC_SIZE with
      4 VEC stores and store 4 * VEC at a time until done.
   6. On machines ERMS feature, if size is range
	  [__x86_rep_stosb_threshold, __x86_memset_non_temporal_threshold)
	  then REP STOSB will be used.
   7. If size >= __x86_memset_non_temporal_threshold, use a
	  non-temporal stores.  */

>>> Подробности



Проверено: Zhbert ()
Последнее исправление: Wizard_ (всего исправлений: 2)

Ответ на: комментарий от zg

Ладно, ради хорошей новости сделаю тебе скидку.

А почему не Ной?

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

> А если он американец - то его имя передаётся в соответствии с правилами для английских имён. Т.е. Ноа. Как, например, Gabriel будет Гэбриэлом, а не Гавриилом. И не Габриэлем

А дурачок ты - потому что

1 не читаешь то, что тебе пишут
2 не проверяешь свою позицию на ошибки, когда тебе о них говорят

Попробуй следовать этим двум пунктам - возможно чуть-чуть отрастишь айсикью.

LamerOk ★★★★★
()
Ответ на: комментарий от ip

Оказывается, Карл, Маркс, Фридрих и Энгельс не четыре человека, а два. А Слава КПСС - вообще не человек.

dataman ★★★★★
()
Ответ на: комментарий от dataman

А Слава КПСС - вообще не человек.

понятно, что рэп - кал, но что уж сразу не человек.

mrjaggers
()
Ответ на: комментарий от LamerOk

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

И много ты знаешь англичан, а не Голдштейнов, с таким именем?

А дурачок ты

По традиции ламерок - это дурачок. В отличии от тебя, оскорбляющего, я лишь следую твоим же рекомендациям правильного перевода.

не читаешь то, что тебе пишут

С кем же ты тогда общаешься?

не проверяешь свою позицию на ошибки, когда тебе о них говорят

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

zg
() автор топика
Ответ на: комментарий от MoldAndLimeHoney

https://www.youtube.com/watch?v=SmE0z8PDZmk

https://www.youtube.com/watch?v=OT1kliTw0ko (лишь первые 40 секунд)

Джонатан Шучак из Беркли. Шучак? Серьёзно? Ты бы его так называл? Как-то с ним переписывался, он мне написал, что любит борщ, хотя ни по-русски ни на мове не разговаривает.

zg
() автор топика
Последнее исправление: zg (всего исправлений: 1)
Ответ на: комментарий от zg

Джонатан Шучак из Беркли. Шучак? Серьёзно?

Чак Полагнюк вкатился в тред.

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

Судя по отсутствию акцента и имени Джонатан, скорее всего он там и родился. Я даже не уверен, что он знает, что на самом деле Шевчук, может он и сам себя называет Шучак :)

MoldAndLimeHoney
()
Последнее исправление: MoldAndLimeHoney (всего исправлений: 2)
Ответ на: комментарий от zg

выше ссылка как произносит расовый американец имя расового Ноа и даже Гольдштейна.

mrjaggers
()
Ответ на: комментарий от MoldAndLimeHoney

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

Его предки ничего не меняли. Скажи сам как бы ты прочёл Shewchuk.

zg
() автор топика
Ответ на: комментарий от zg

Shewchuk

Фамилия уникальна для региона и я знаю как она произносится. Если бы такие фамилии были распространены на половине земного шара, как библейские имена, то я бы произносил в традиции региона, где живу.

Было бы потешно, если бы этого чела кто-нибудь назвал Шевчуком, а он поправил на Шучак лол.

MoldAndLimeHoney
()
Ответ на: комментарий от MoldAndLimeHoney

А библейские имена сильно распространены? Когда ты последний раз общался с Иисусом?

zg
() автор топика
Ответ на: комментарий от MoldAndLimeHoney

Было бы потешно, если бы этого чела кто-нибудь назвал Шевчуком, а он поправил на Шучак лол.

Вот и мне потешно от всех ваших Ной, Ноа.

zg
() автор топика
Ответ на: комментарий от zg

библейские имена сильно распространены?

а ты смишной виртуал.

mrjaggers
()
Ответ на: комментарий от zg

Когда ты последний раз общался с Иисусом?

Это распространённое имя у испаноязычных.

А библейские имена сильно распространены?

Половина европейских имен библейские:

Иван - John - десятки других вариаций;
Яков – Jacob;
Матфей – Matthew;
Семен – Сэм;
Петр – Питер;

В общем, их дохрена, мне сейчас лень вспоминать и перечислять.

MoldAndLimeHoney
()
Последнее исправление: MoldAndLimeHoney (всего исправлений: 2)

мож оставим ГУМУНИТАРИЮ - ГУМУНИТАРИЯМ ??
эт вам не технарство, точных опреде3лений там не имут.

pfg ★★★★★
()
Ответ на: комментарий от zg

Noah Goldstein
Engineer at Intel
United States

Так это американец?! Что ты нам тогда мозги компостируешь со своим еврейским произношением? Ноа или Ной – никаких Ноахов тут и близко нет. Я думал мы хотя бы израильского еврея обсуждаем. Устроил цирк на пустом месте.

/thread

MoldAndLimeHoney
()
Последнее исправление: MoldAndLimeHoney (всего исправлений: 1)

Я узнал старика по слезам на щеках его дряблых:
Это Пётр-старик — он апостол, а я остолоп.
Вот и кущи-сады, в коих прорва мороженых яблок…
Но сады сторожат и стреляют без промаха в лоб.
🪗

mrjaggers
()
Ответ на: комментарий от MoldAndLimeHoney

Почему ты решил, что это именно он? Даже если это он, почему ты решил, что его родители назвали его именно Ноа? Шучак тебя научит, а ты правильно говори.

zg
() автор топика
Ответ на: комментарий от MoldAndLimeHoney

Иван - John - десятки других вариаций;

Лично знал русского Ивана, с наколками православных куполов, который перешёл в полностью ортодоксальный иудаизм, надел кипу и стал Йоханоном. Кстати, очень хороший человек был. Местные радетили русской словестности наверное так же упорствовали бы в его первоначальном имени, делая человеку неприятно.

zg
() автор топика
Ответ на: комментарий от IRASoldier

Красиво рассуждаете. Остаётся только один вопрос. Почему Гейзенберг а не Хайзенберг, почему Фрейд а не Фройд, и почему Поттеринг а не Пёттеринг? Или это тоже всё невежды коверкают имена?

Gentooshnik ★★★★★
()
Последнее исправление: Gentooshnik (всего исправлений: 1)
Ответ на: комментарий от zg

знаю одного Ивана, который сменил имя на Ян.
с определенной точки зрения имя даже не поменялось. сменился вариант транслитерации :)

pfg ★★★★★
()
Ответ на: комментарий от Gentooshnik

почему Ватсон а не Уотсон ?? :)
бесило что в разных переводах используют разные варианты, ну и Уотсон слух режет. Ватсон как-то приятнее звучит :)

кроме прямой транслитерации, слово еще и адаптируют под привычные звукоформы.
куча статей есть как адаптировали иностранные имена и насколь хорошо или плохо это получалось.

pfg ★★★★★
()
Ответ на: комментарий от zg

«Ассимиляция в другую культуру, существование в локальной культуре, погруженной в глобальную? Не, не слышал!»

IRASoldier ★★
()
Ответ на: комментарий от zg

«Использовать другой язык, кроме русского, заимствовать без искажения? Не, не слышал!»

IRASoldier ★★
()
Ответ на: комментарий от Gentooshnik

Закрепление в традиции ошибки, причём долговременное. Вообще говоря, язык не мёртвая вещь - постепенно можно переходить и на нормальное произношение и транслитерацию, когда они вполне себе произносимы и для русскоговорящего. Да, Хайзенберг, Фройд, Хессе, Ляйпциг, и так далее. Ничего же сложного. Говорили же когда-то «Ивангое», а потом исправились и вот, нормальный Айвенго. И не померли от того, что исправились же.

IRASoldier ★★
()
Ответ на: комментарий от gns

У нас традиционно британских королей отчего-то на немецкий манер называли. Но вообще-то пора бы и Чарльз. Без посредничества немцев )

IRASoldier ★★
()
Ответ на: комментарий от IRASoldier

Ну пора бы, да. И французских звать Анри, а английских — Генри :) Хотя мы их всех Генрихами называем. Ну у нас же тут «собственная гордость» :)

gns ★★★★★
()
Ответ на: комментарий от gns

Как немка Екатерина Великая научила, так и зовёте. Вот и все традиции. Традиции вам ещё Пётр первый сбрил.

zg
() автор топика
Ответ на: комментарий от IRASoldier

Ну вот видишь как всякие Ламерки своей агрессивной филологией запутать могут.

zg
() автор топика

Инженер из Intel, Ноах Голдштейн, оптимизировал функцию memset() в библиотеке glibc.

Нафига вообще это нужно? Ведь очевидно же, что самый оптимальный мемсет должен генерить gcc, и инлайнить его в код. Он и длину довольно часто может ещё на этапе компиляции вычислить, и все выравнивания ему известны, и вызов функции делать не придётся. Сколько ни оптимизируй библиотечный мемсет, а гццшный интринсик ему не обогнать.

anonmyous ★★
()
Ответ на: комментарий от IRASoldier

британских королей отчего-то на немецкий манер называли.

Историографическая традиция 19-ого века. Не только британских, а вообще всех европейских монархов.

LamerOk ★★★★★
()
Ответ на: комментарий от anonmyous

Нафига вообще это нужно? Ведь очевидно же, что самый оптимальный мемсет должен генерить gcc, и инлайнить его в код. Он и длину довольно часто может ещё на этапе компиляции вычислить, и все выравнивания ему известны, и вызов функции делать не придётся. Сколько ни оптимизируй библиотечный мемсет, а гццшный интринсик ему не обогнать.

https://gcc.gnu.org/onlinedocs/gcc/Other-Builtins.html

The ISO C94 functions iswalnum, iswalpha, iswcntrl, iswdigit, iswgraph, iswlower, iswprint, iswpunct, iswspace, iswupper, iswxdigit, towlower and towupper are handled as built-in functions except in strict ISO C90 mode (-ansi or -std=c90).

The ISO C90 functions abort, abs, acos, asin, atan2, atan, calloc, ceil, cosh, cos, exit, exp, fabs, floor, fmod, fprintf, fputs, free, frexp, fscanf, isalnum, isalpha, iscntrl, isdigit, isgraph, islower, isprint, ispunct, isspace, isupper, isxdigit, tolower, toupper, labs, ldexp, log10, log, malloc, memchr, memcmp, memcpy, memset, modf, pow, printf, putchar, puts, realloc, scanf, sinh, sin, snprintf, sprintf, sqrt, sscanf, strcat, strchr, strcmp, strcpy, strcspn, strlen, strncat, strncmp, strncpy, strpbrk, strrchr, strspn, strstr, tanh, tan, vfprintf, vprintf and vsprintf are all recognized as built-in functions unless -fno-builtin is specified (or -fno-builtin-function is specified for an individual function). All of these functions have corresponding versions prefixed with _builtin.

zg
() автор топика

Однако в этой оптимизации была найдена потенциальная уязвимость, которая может привести к атаке…В новой версии…всё ещё используется, но при выполнении более строгих условий.

Я правильно понял, что уязвимость используется…?

Shprot ★★
()
Ответ на: комментарий от anonmyous

Там всё по делу. Тебе слово builtin перевести?

zg
() автор топика
Ответ на: комментарий от Shprot

Нет, уязвимость исправили в процессоре, от чего инструкция rep stosb стала работать медленее. Теперь это замедление в memset() сократили.

zg
() автор топика

Т.е. он так все поправил что теперь, если я сделаю mitigations=off, у меня нифига лучше не станет? Правильно понял?

hbars ★★★★★
()
Ответ на: комментарий от firkax

Мне дома по боку эти дыры, но нужно что бы встройка нормально видео крутила. На пример. Вот там mitigations=off помогает.

hbars ★★★★★
()
Ответ на: комментарий от hbars

а какая связь между mitigations и «встройка нормально видео крутила»

mrjaggers
()
Ответ на: комментарий от hbars

Нет.

Видео хадварно декодируется специализированными алгоритмами с очень низкими затратами, и всё это касается сугубо видяхи, проц тут ни при чём, он при прочих равных почти не напрягается, пусть хоть 4К видео будет.

у тебя может в чём-то ином неэффективность, но mitigations тут никаким боком.

mrjaggers
()
Ответ на: комментарий от zg

если речь идёт о ныне живущем человеке по имени

שלמה

то и по-русски его имя записывается и произносится именно Шломо и никак иначе

Допустим. А вот типа из шапки зовут Noah. Разницу видишь?

t184256 ★★★★★
()
Ответ на: комментарий от mrjaggers

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

Проверено на HP Compaq Elite 6300 Desktop : Intel Core i3–3rd Gen.

С mitigations=off железка работает шустрее.

hbars ★★★★★
()
Ответ на: комментарий от hbars

Для хардварного декодирования да.

в 2024 году нет причин использовать какое-либо другое.

даже на таком железе. У родителей i3-2100 в компе - 4К хардварно он наверное не умеет, но mitigations=off ему эту возможность не предоставит. А fullhd он отлично декодирует встройкой.

mrjaggers
()

Спасибо за новость. Знатоков английского, русского и иврита добавил в игнор.

mkam
()
Последнее исправление: mkam (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.