Facebook ΠΎΡ‚ΠΊΡ€Ρ‹Π» Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ Ρ…ΡΡˆ-Ρ‚Π°Π±Π»ΠΈΡ† F14

Компания Facebook объявила ΠΎΠ± ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠΈ исходных тСкстов Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ…ΡΡˆ-Ρ‚Π°Π±Π»ΠΈΡ† F14, ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ для эффСктивного потрСблСния памяти. F14 ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² инфраструктурС Facebook Π² качСствС Π·Π°ΠΌΠ΅Π½Ρ‹ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° Ρ‚ΠΈΠΏΠΎΠ² Ρ…ΡΡˆ-Ρ‚Π°Π±Π»ΠΈΡ† ΠΈ позволяСт ΡΠ½ΠΈΠ·ΠΈΡ‚ΡŒ ΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠ΅ памяти Π±Π΅Π· ΠΏΠΎΡ‚Π΅Ρ€ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. F14 Π·Π°ΠΌΠ΅Ρ‚Π½ΠΎ прСвосходит ΠΏΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Ρ…ΡΡˆ-Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ google::sparse_hash_map, Π΄ΠΎ сих ΠΏΠΎΡ€ ΡΡ‡ΠΈΡ‚Π°Π²ΡˆΠΈΠ΅ΡΡ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ эффСктивными ΠΏΠΎ ΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΡŽ памяти. Код ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° написан Π½Π° языкС C++ ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ Π² состав Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Folly.

F14 относится ΠΊ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°ΠΌ с систСмой Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΠΉ Π½Π° основС Π΄Π²ΠΎΠΉΠ½ΠΎΠ³ΠΎ Ρ…ΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ с 14 ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡΠΌΠΈ ΠΏΡ€ΠΎΠ± (Π² ΠΎΠ΄Π½ΠΎΠΉ ячСйкС Ρ…ΡΡˆ-Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ хранится Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠ° ΠΈΠ· 14 слотов, Π° ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π» ΠΌΠ΅ΠΆΠ΄Ρƒ ячСйками вычисляСтся ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Ρ…Π΅Ρˆ-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ). Для ускорСния ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ ячССк Π² Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π²Π΅ΠΊΡ‚ΠΎΡ€Π½Ρ‹Π΅ инструкции SSE2 для систСм x86_64 ΠΈ NEON для Aarch64, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Ρ€Π°ΡΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π²Ρ‹Π±ΠΎΡ€Π° слотов с Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠ°ΠΌΠΈ ΠΊΠ»ΡŽΡ‡Π΅ΠΉ ΠΈ отсСивания ΠΊΠ»ΡŽΡ‡Π΅ΠΉ Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠΈ. Π—Π° Ρ€Π°Π· ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π±Π»ΠΎΠΊΠΈ Π² 14 слотов, Ρ‡Ρ‚ΠΎ являСтся ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ балансом ΠΌΠ΅ΠΆΠ΄Ρƒ ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒΡŽ использования процСссорного кэша ΠΈ числом ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΠΉ.

ΠžΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒΡŽ F14 являСтся возмоТности Π²Ρ‹Π±ΠΎΡ€Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… стратСгий хранСния Π΄Π°Π½Π½Ρ‹Ρ…:

  • F14NodeMap — потрСбляСт мСньшС всСго памяти для ΠΊΠ»ΡŽΡ‡Π΅ΠΉ большого ΠΈ срСднСго Ρ€Π°Π·ΠΌΠ΅Ρ€Π°. ΠžΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°Π΅Ρ‚ косвСнноС сохранСниС элСмСнтов с Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ вставкС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ malloc;
  • F14ValueMap — обСспСчиваСт минимальноС ΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠ΅ памяти для Π½Π΅Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΠΊΠ»ΡŽΡ‡Π΅ΠΉ. Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹ хранятся Π² самих ячСйках (inline). Для срСдних ΠΈ Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΠΊΠ»ΡŽΡ‡Π΅ΠΉ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Π·Π°ΠΌΠ΅Ρ‚Π½Ρ‹ΠΌ Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹ΠΌ расходам памяти;
  • F14VectorMap — Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ быстрСС для Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Ρ‚Π°Π±Π»ΠΈΡ† ΠΈ слоТных ΠΊΠ»ΡŽΡ‡Π΅ΠΉ, Π½ΠΎ ΠΌΠ΅Π΄Π»Π΅Π½Π΅Π΅ для простых ΠΊΠ»ΡŽΡ‡Π΅ΠΉ ΠΈ Π½Π΅Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Ρ‚Π°Π±Π»ΠΈΡ†. Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹ ΡƒΠΏΠ°ΠΊΠΎΠ²Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π² Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½ΠΎ заполняСмом массивС ΠΈ Π°Π΄Ρ€Π΅ΡΡƒΡŽΡ‚ΡΡ 32-разрядным индСксным ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΌ;
  • F14FastMap — комбинированная стратСгия. Если ΠΊΠ»ΡŽΡ‡ мСньшС 24 Π±Π°ΠΉΡ‚ΠΎΠ², Ρ‚ΠΎ выбираСтся F14ValueMap, Π° Ссли большС — F14VectorMap.

Facebook ΠΎΡ‚ΠΊΡ€Ρ‹Π» Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ Ρ…ΡΡˆ-Ρ‚Π°Π±Π»ΠΈΡ† F14

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: opennet.ru