Доступна Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° управлСния ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ jemalloc 5.3.1

Бпустя 4 Π³ΠΎΠ΄Π° послС ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΡˆΠ»ΠΎΠ³ΠΎ обновлСния доступСн Ρ€Π΅Π»ΠΈΠ· Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ управлСния ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ jemalloc 5.3.1, ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽΡ‰Π΅ΠΉ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½ΡƒΡŽ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ malloc, ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ для сниТСния Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ ΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π½Π° многопроцСссорных систСмах. Для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ с Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ°ΠΌΠΈ Π½Π° многоядСрных систСмах Π² jemalloc для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ядра CPU ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ своя изолированная ΠΎΠ±Π»Π°ΡΡ‚ΡŒ распрСдСлСния памяти, Ρ‡Ρ‚ΠΎ позволяСт Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠΉ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΠΎΡΡ‚ΠΈ ΠΏΡ€ΠΈ ростС числа ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ².

Π’ июнС 2025 Π³ΠΎΠ΄Π° Π°Π²Ρ‚ΠΎΡ€ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΏΡ€Π΅ΠΊΡ€Π°Ρ‚ΠΈΠ» сопровоТдСниС ΠΈ ΠΏΠ΅Ρ€Π΅Π²Ρ‘Π» Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ jemalloc Π² Π°Ρ€Ρ…ΠΈΠ²Π½Ρ‹ΠΉ Ρ€Π΅ΠΆΠΈΠΌ, Π½ΠΎ мСсяц Π½Π°Π·Π°Π΄ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ Π²ΠΎΠ·ΠΎΠ±Π½ΠΎΠ²ΠΈΠ»Π° компания Meta, ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‰Π°Ρ jemalloc Π² своСй инфраструктурС. Π˜Π·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π±Ρ‹Π»Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π° для FreeBSD ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² Π΄Π°Π½Π½ΠΎΠΉ ОБ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ с 2005 Π³ΠΎΠ΄Π°. Код Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ написан Π½Π° Π‘ΠΈ ΠΈ распространяСтся ΠΏΠΎΠ΄ Π»ΠΈΡ†Π΅Π½Π·ΠΈΠ΅ΠΉ BSD.

Π‘Ρ€Π΅Π΄ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ:

  • Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° функция pvalloc, которая ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ ΠΏΡ€ΠΈ Π·Π°ΠΌΠ΅Π½Π΅ Π°Π»Π»ΠΎΠΊΠ°Ρ‚ΠΎΡ€Π° памяти libc.
  • Π’ ΠΎΡ‚Π»Π°Π΄ΠΎΡ‡Π½Ρ‹Ρ… сборках Π²ΠΊΠ»ΡŽΡ‡Ρ‘Π½ Ρ€Π΅ΠΆΠΈΠΌ обнаруТСния Π΄Π²ΠΎΠΉΠ½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ free(). Для настройки Ρ€Π°Π·ΠΌΠ΅Ρ€Π° стСка, Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ выполняСтся сканированиС, Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ debug_double_free_max_scan.
  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½Π° сборочная опция Β«β€”enable-pageidΒ» для выставлСния Ρ‚Π΅Π³ΠΎΠ² ΠΏΡ€ΠΈ ΠΌΠ°ΠΏΠΏΠΈΠ½Π³Π΅ памяти, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ prctl с Ρ„Π»Π°Π³ΠΎΠΌ PR_SET_VMA. ПослС Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΌΠ°ΠΏΠΏΠΈΠ½Π³ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ Ρ‡Π΅Ρ€Π΅Π· /proc/<pid>/maps.
  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Β«prof_bt_maxΒ», ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π°Ρ Π²Ρ‹ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½ΡƒΡŽ Π³Π»ΡƒΠ±ΠΈΠ½Ρƒ стСка для профилирования.
  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½Π° сборочная опция Β«β€”enable-force-getenvΒ» для использования Π² ΠΊΠΎΠ΄Π΅ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ getenv() вмСсто Π·Π°Ρ‰ΠΈΡ‰Ρ‘Π½Π½ΠΎΠΉ secure_getenv().
  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½Π° сборочная опция Β«β€”disable-dssΒ» для ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ использования Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sbrk().
  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Β«tcache_ncached_maxΒ» для ограничСния числа элСмСнтов Π² кэшС ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ².
  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Β«calloc_madvise_thresholdΒ» для настройки использования ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° ядра madvise ΠΈΠ»ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ memset для обнулСния памяти, выдСляСмой Ρ‡Π΅Ρ€Π΅Π· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ calloc.
  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½Π° сборочная опция Β«β€”disable-user-configΒ» для ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ настроСк ΠΈΠ· Ρ„Π°ΠΉΠ»Π° /etc/malloc.conf ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ окруТСния MALLOC_CONF.
  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Β«process_madvise_max_batchΒ» для ограничСния числа Π±Π»ΠΎΠΊΠΎΠ² памяти для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ batch-ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ madvise.
  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Β«disable_large_size_classesΒ» для ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π½ΠΎΠ²ΠΎΠ³ΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° расчёта Ρ€Π°Π·ΠΌΠ΅Ρ€Π° выдСляСмой памяти, ΡΠ½ΠΈΠΆΠ°ΡŽΡ‰Π΅Π³ΠΎ Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹Π΅ расходы ΠΏΡ€ΠΈ Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠΈ Π±Π»ΠΎΠΊΠΎΠ², Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ Π±ΠΎΠ»Π΅Π΅ 4 страниц памяти.
  • Π’ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρƒ mallctl Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ ΠΎΠΏΡ†ΠΈΠΈ: opt.prof_bt_max, arena.<i>.name, thread.tcache.max, thread.tcache.ncached_max.write, thread.tcache.ncached_max.read_sizeclass, arenas.hugepage ΠΈ approximate_stats.active.

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

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ