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

Π˜Π½ΠΆΠ΅Π½Π΅Ρ€ ΠΎΡ‚ 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. */

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: linux.org.ru

ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ πŸ”₯ ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ | ProHoster