ΠΠΎΠΌΠΏΠ°Π½ΠΈΡ AMD ΠΎΠΏΡΠ±Π»ΠΈΠΊΠΎΠ²Π°Π»Π° ΠΎΡΡΡΡ Ρ Π°Π½Π°Π»ΠΈΠ·ΠΎΠΌ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ PSF (Predictive Store Forwarding), ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠΉ Π² ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ°Ρ ΡΠ΅ΡΠΈΠΈ Zen 3. Π Ρ ΠΎΠ΄Π΅ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ ΡΠ΅ΠΎΡΠ΅ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠΆΠ΄Π΅Π½Π° ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠΌΠΎΡΡΡ ΠΊ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ PSF ΠΌΠ΅ΡΠΎΠ΄Π° Π°ΡΠ°ΠΊΠΈ Spectre-STL (Spectre-v4), Π²ΡΡΠ²Π»Π΅Π½Π½ΠΎΠ³ΠΎ Π² ΠΌΠ°Π΅ 2018 Π³ΠΎΠ΄Π°, Π½ΠΎ Π½Π° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ΅ ΡΠΏΠΎΡΠΎΠ±Π½ΡΡ ΠΏΡΠΈΠ²Π΅ΡΡΠΈ ΠΊ Π°ΡΠ°ΠΊΠ΅ ΡΠ°Π±Π»ΠΎΠ½ΠΎΠ² ΠΊΠΎΠ΄Π° ΠΏΠΎΠΊΠ° Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½ΠΎ ΠΈ ΠΎΠ±ΡΠ°Ρ ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡ ΠΎΡΠ΅Π½Π΅Π½Π° ΠΊΠ°ΠΊ Π½Π΅Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½Π°Ρ.
ΠΠ°ΠΏΠΎΠΌΠ½ΠΈΠΌ, ΡΡΠΎ Π°ΡΠ°ΠΊΠ° Spectre-v4 (Speculative Store Bypass) ΠΎΡΠ½ΠΎΠ²ΡΠ²Π°Π΅ΡΡΡ Π½Π° Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΈ Π΄Π°Π½Π½ΡΡ , ΠΎΡΠ΅Π²ΡΠΈΡ Π² ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ½ΠΎΠΌ ΠΊΡΡΠ΅ ΠΏΠΎΡΠ»Π΅ ΠΎΡΠ±ΡΠ°ΡΡΠ²Π°Π½ΠΈΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ° ΡΠΏΠ΅ΠΊΡΠ»ΡΡΠΈΠ²Π½ΠΎΠ³ΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ ΠΏΡΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ΅ ΡΠ΅ΡΠ΅Π΄ΡΡΡΠΈΡ ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ Π·Π°ΠΏΠΈΡΠΈ ΠΈ ΡΡΠ΅Π½ΠΈΡ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΊΠΎΡΠ²Π΅Π½Π½ΠΎΠΉ Π°Π΄ΡΠ΅ΡΠ°ΡΠΈΠΈ. ΠΠΎΠ³Π΄Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ ΡΡΠ΅Π½ΠΈΡ ΡΠ»Π΅Π΄ΡΠ΅Ρ Π·Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ΅ΠΉ Π·Π°ΠΏΠΈΡΠΈ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, mov [rbx + rcx], 0x0; mov rax, [rdx + rsi]), ΡΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ Π°Π΄ΡΠ΅ΡΠ° Π΄Π»Ρ ΡΡΠ΅Π½ΠΈΡ ΡΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎ ΠΈΠ·-Π·Π° Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΠΎΡ ΠΎΠΆΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ (ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΡΡΠ΅Π½ΠΈΡ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠ°ΡΠ΅ ΠΈ ΡΡΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΎ ΠΈΠ· ΠΊΡΡΠ°) ΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡ ΠΌΠΎΠΆΠ΅Ρ ΡΠΏΠ΅ΠΊΡΠ»ΡΡΠΈΠ²Π½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΡΡΠ΅Π½ΠΈΠ΅ ΡΠ°Π½ΡΡΠ΅ Π·Π°ΠΏΠΈΡΠΈ, Π½Π΅ Π΄ΠΎΠΆΠΈΠ΄Π°ΡΡΡ ΠΏΠΎΠΊΠ° Π±ΡΠ΄Π΅Ρ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΎ ΡΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΡΠ²Π΅Π½Π½ΠΎΠΉ Π°Π΄ΡΠ΅ΡΠ°ΡΠΈΠΈ Π΄Π»Ρ Π·Π°ΠΏΠΈΡΠΈ.
ΠΠ°Π½Π½Π°Ρ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ ΡΡΠ΅Π½ΠΈΡ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ ΡΡΠ°ΡΠΎΠΌΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠΎ Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠΌΡ Π°Π΄ΡΠ΅ΡΡ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΏΠΎΠΊΠ° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΡ Π΅ΡΡ Π½Π΅ Π·Π°Π²Π΅ΡΡΠ΅Π½Π°. ΠΡΠΈ ΠΎΡΠΈΠ±ΠΊΠ΅ ΠΏΡΠΎΠ³Π½ΠΎΠ·ΠΈΡΠΎΠ²Π°Π½ΠΈΡ, Π½Π΅ΡΠ΄Π°ΡΠ½Π°Ρ ΡΠΏΠ΅ΠΊΡΠ»ΡΡΠΈΠ²Π½Π°Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ Π±ΡΠ΄Π΅Ρ ΠΎΡΠ±ΡΠΎΡΠ΅Π½Π°, Π½ΠΎ ΡΠ»Π΅Π΄Ρ Π΅Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΎΡΡΠ°Π½ΡΡΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ½ΠΎΠΌ ΠΊΡΡΠ΅ ΠΈ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½Ρ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· ΡΠΏΠΎΡΠΎΠ±ΠΎΠ² ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ³ΠΎ ΠΊΡΡΠ° Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ Π°Π½Π°Π»ΠΈΠ·Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ ΠΏΡΠΎΠΊΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌ ΠΈ Π½Π΅ ΠΏΡΠΎΠΊΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌ Π΄Π°Π½Π½ΡΠΌ.
ΠΠΎΠ±Π°Π²Π»Π΅Π½Π½Π°Ρ Π² ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΡ AMD Zen 3 ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΡ PSF ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΡΠ΅Ρ ΠΌΠ΅ΡΠΎΠ΄ STLF (Store-To-Load-Forwarding), ΡΠΏΠ΅ΠΊΡΠ»ΡΡΠΈΠ²Π½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΠΈΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΡΡΠ΅Π½ΠΈΡ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΠΏΡΠ΅Π΄ΡΠΊΠ°Π·Π°Π½ΠΈΡ Π²Π·Π°ΠΈΠΌΠΎΡΠ²ΡΠ·ΠΈ ΠΌΠ΅ΠΆΠ΄Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡΠΌΠΈ ΡΡΠ΅Π½ΠΈΡ ΠΈ Π·Π°ΠΏΠΈΡΠΈ. ΠΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΠΊΠ»Π°ΡΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ STLF ΠΏΡΠΎΡΠ΅ΡΡΠΎΡ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ «load» Ρ Π΄Π°Π½Π½ΡΠΌΠΈ, Π½Π°ΠΏΡΡΠΌΡΡ ΠΏΠ΅ΡΠ΅Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½Π½ΡΠΌΠΈ ΠΈΠ· ΠΏΡΠΎΡΠ»ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ «store», Π½Π΅ Π΄ΠΎΠΆΠΈΠ΄Π°ΡΡΡ ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠΉ Π·Π°ΠΏΠΈΡΠΈ Π² ΠΏΠ°ΠΌΡΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°, Π½ΠΎ ΡΠ΄ΠΎΡΡΠΎΠ²Π΅ΡΠΈΠ²ΡΠΈΡΡ, ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Π½ΡΠ΅ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ «load» ΠΈ «store» Π°Π΄ΡΠ΅ΡΠ° ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡΡ. ΠΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ PSF Π΄Π΅Π»Π°Π΅Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΡ Π°Π΄ΡΠ΅ΡΠΎΠ² ΡΠΏΠ΅ΠΊΡΠ»ΡΡΠΈΠ²Π½ΠΎΠΉ ΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ «load» Π΄ΠΎ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎΠ± Π°Π΄ΡΠ΅ΡΠ°Ρ , Π΅ΡΠ»ΠΈ Π΄ΠΎ ΡΡΠΎΠ³ΠΎ Π±ΡΠ»Π° Π²ΡΠΏΠΎΠ»Π½Π΅Π½Π° ΠΏΠ°ΡΠ° store/load, ΠΌΠ°Π½ΠΈΠΏΡΠ»ΠΈΡΡΡΡΠ°Ρ ΠΎΠ΄Π½ΠΈΠΌ Π°Π΄ΡΠ΅ΡΠΎΠΌ. Π ΡΠ»ΡΡΠ°Π΅ ΠΎΡΠΈΠ±ΠΊΠΈ ΠΏΡΠΎΠ³Π½ΠΎΠ·Π° ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΎΡΠΊΠ°ΡΡΠ²Π°Π΅ΡΡΡ Π½Π°Π·Π°Π΄, Π½ΠΎ Π΄Π°Π½Π½ΡΠ΅ ΠΎΡΡΠ°ΡΡΡΡ Π² ΠΊΡΡΠ΅.
ΠΡΠ°ΠΊΠ° Π½Π° PSF ΠΎΡΡΡΠ΅ΡΡΠ²ΠΈΠΌΠ° ΡΠΎΠ»ΡΠΊΠΎ Π² ΡΠ°ΠΌΠΊΠ°Ρ ΠΏΡΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΠΉ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΡΠΎΠ²Π½Ρ, ΠΎΡ Π²Π°ΡΡΠ²Π°Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ΅ΠΊΡΡΠΈΠΉ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠ° ΠΈ Π±Π»ΠΎΠΊΠΈΡΡΠ΅ΡΡΡ ΠΌΠ΅ΡΠΎΠ΄Π°ΠΌΠΈ ΠΈΠ·ΠΎΠ»ΡΡΠΈΠΈ Π°Π΄ΡΠ΅ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠ»ΠΈ Π°ΠΏΠΏΠ°ΡΠ°ΡΠ½ΡΠΌΠΈ sandbox-ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠ°ΠΌΠΈ. ΠΡΠΈ ΡΡΠΎΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ sandbox-ΠΈΠ·ΠΎΠ»ΡΡΠΈΠΈ Π² ΠΏΡΠΎΡΠ΅ΡΡΠ°Ρ ΠΏΠΎΡΠ΅Π½ΡΠΈΠ°Π»ΡΠ½ΠΎ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ Π·Π°ΡΡΠΎΠ½ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΎΠΉ. ΠΡΠ°ΠΊΠ° ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡ Π΄Π»Ρ ΡΠΈΡΡΠ΅ΠΌ, ΡΠ°ΠΊΠΈΡ ΠΊΠ°ΠΊ Π±ΡΠ°ΡΠ·Π΅ΡΡ, Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΡ ΠΌΠ°ΡΠΈΠ½Ρ Π΄Π»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΊΠΎΠ΄Π° ΠΈ JIT, ΠΊΠΎΡΠΎΡΡΠ΅ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΡΡΠΎΡΠΎΠ½Π½ΠΈΠΉ ΠΊΠΎΠ΄ Π²Π½ΡΡΡΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ° (Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ Π°ΡΠ°ΠΊΠΈ Π½Π΅Π·Π°ΡΠ»ΡΠΆΠΈΠ²Π°ΡΡΠΈΠΉ Π΄ΠΎΠ²Π΅ΡΠΈΡ ΠΈΠ·ΠΎΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ Π΄ΡΡΠ³ΠΈΠΌ Π΄Π°Π½Π½ΡΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠ°).
ΠΠΎΠΌΠΏΠ°Π½ΠΈΡ AMD ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΠ»Π° ΡΡΠ΄ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² Π΄Π»Ρ ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ Π²ΡΠ±ΠΎΡΠΎΡΠ½ΠΎΠ³ΠΎ ΠΎΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ PSF, Π½ΠΎ Ρ ΡΡΡΡΠΎΠΌ Π½Π΅Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠΈΡΠΊΠ° Π΄Π»Ρ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΠΎΠ²Π°Π»Π° Π½Π΅ ΠΎΡΠΊΠ»ΡΡΠ°ΡΡ Π΄Π°Π½Π½ΡΡ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ. ΠΠ»Ρ Π²ΡΠ±ΠΎΡΠΎΡΠ½ΠΎΠΉ Π·Π°ΡΠΈΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ², ΠΈΠ·ΠΎΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΉ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΠΈΡ
Π½Π΅ Π·Π°ΡΠ»ΡΠΆΠΈΠ²Π°ΡΡΠΈΠΉ Π΄ΠΎΠ²Π΅ΡΠΈΡ ΠΊΠΎΠ΄, ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΎ ΠΎΡΠΊΠ»ΡΡΠ°ΡΡ PSF ΡΠ΅ΡΠ΅Π· ΡΡΡΠ°Π½ΠΎΠ²ΠΊΡ MSR-Π±ΠΈΡΠΎΠ² «SSBD» ΠΈ «PSFD», Π² ΡΠΎΠΌ ΡΠΈΡΠ»Π΅ Π΄Π»Ρ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ
ΠΏΠΎΡΠΎΠΊΠΎΠ². ΠΠ»Ρ ΡΠ΄ΡΠ° Linux ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²Π»Π΅Π½Ρ ΠΏΠ°ΡΡΠΈ c ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠ΅ΠΉ ΠΎΠΏΡΠΈΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ «psfd» ΠΈ «nopsfd», ΡΠΏΡΠ°Π²Π»ΡΡΡΠΈΡ
Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΈ Π²ΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ΠΌ PSF.
ΠΡΡΠΎΡΠ½ΠΈΠΊ: opennet.ru