ΠΠΎΠΌΠΏΠ°Π½ΠΈΡ Google Π½ΠΎΠ²Π° Π²Π΅ΡΡΠΈΡ Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ° Π·Π° ΡΠ°Π·ΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° ΠΏΠ°ΠΌΠ΅ΡΡΠ° , ΠΊΠΎΡΡΠΎ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π² ΠΌΠ½ΠΎΠ³ΠΎ Π²ΡΡΡΠ΅ΡΠ½ΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠΈ Π½Π° Google. ΠΠΎΠ΄ΡΡ TCMalloc Π΅ Π½Π°ΠΏΠΈΡΠ°Π½ Π½Π° C++ ΠΈ ΠΏΠΎΠ΄ Π»ΠΈΡΠ΅Π½ΡΠΈΡ Apache. ΠΠ° ΡΠ°Π±ΠΎΡΠ° Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌ ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡ Ρ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° C++17 Π·Π° Π΅Π·ΠΈΠΊΠ° C++, ΠΈ C11 Π·Π° Π΅Π·ΠΈΠΊΠ° C (gcc 9.2+ ΠΈΠ»ΠΈ clang 9.0+). ΠΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΈ ΡΠΈΡΡΠ΅ΠΌΠΈ ΡΠ°ΠΌΠΎ Linux (x86, PPC).
ΠΠ°Π±Π΅Π»Π΅ΠΆΠΈΡΠ΅Π»Π½ΠΎ Π΅, ΡΠ΅ ΠΎΡ 2005 Π³ΠΎΠ΄ΠΈΠ½Π° ΡΡΡΠ΅ΡΡΠ²ΡΠ²Π° ΠΎΡΠ΅ Π΅Π΄Π½Π° Π²Π΅ΡΡΠΈΡ Π½Π° tcmalloc, ΠΊΠΎΡΡΠΎ Π²ΠΊΠ»ΡΡΠ²Π° ΠΏΠ°ΠΊΠ΅ΡΠ° (Google Performance Tools). Π’ΠΎΠ²Π° ΡΠ° Π΄Π²Π° ΠΏΡΠΎΠ΅ΠΊΡΠ°, ΠΊΠΎΠΈΡΠΎ ΠΈΠΌΠ°Ρ ΠΎΠ±ΡΠΈ ΠΊΠΎΡΠ΅Π½ΠΈ. ΠΠΎΠ²ΠΈΡΡ TCMalloc Π΅ ΠΏΠΎ-ΡΠΊΠΎΡΠΎ ΠΎΠΏΠΈΡ Π·Π° ΠΎΡΠ²Π°ΡΡΠ½Π΅ Π½Π° ΠΊΠΎΠ΄Π° Π½Π° Π°ΠΊΡΡΠ°Π»Π½ΠΈΡΠ΅ Π²ΡΡΡΠ΅ΡΠ½ΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ Π½Π° Google, Π½ΠΎ Π² ΠΌΠΎΠΌΠ΅Π½ΡΠ° Π½Π΅ Π΅ Π½Π°ΡΠΎΡΠ΅Π½ ΠΊΡΠΌ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΡΠ½Π΅ΡΠΎ Π½Π° ΡΡΠ°Π±ΠΈΠ»Π΅Π½ ABI ΠΈ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° ΡΠΈΡΠΎΠΊ ΡΠΏΠ΅ΠΊΡΡΡ ΠΎΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΈ ΡΠΈΡΡΠ΅ΠΌΠΈ. ΠΠΎΠ΄Π΄ΡΡΠΆΠΊΠ°ΡΠ° Π½Π° ΡΡΠ°ΡΠΈΡ tcmalloc ΠΎΡ gperftools ΡΠ΅ ΠΏΡΠΎΠ΄ΡΠ»ΠΆΠΈ, Π½ΠΎ Π½ΠΎΠ²ΠΈΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π½ΠΎΡΡΠΈ, ΠΊΠ°ΡΠΎ ΠΏΡΠΈΠ²ΡΡΠ·Π²Π°Π½Π΅ Π½Π° ΠΊΠ΅ΡΠ° ΠΊΡΠΌ CPU, Π½Π΅ ΡΠ΅ ΠΏΠ»Π°Π½ΠΈΡΠ° Π΄Π° Π±ΡΠ΄Π°Ρ ΠΏΡΠ΅Π½Π΅ΡΠ΅Π½ΠΈ Π² Π½Π΅Π³ΠΎ.
TCMalloc Π²ΠΊΠ»ΡΡΠ²Π° ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠΈΡ Π½Π° C ΡΡΠ½ΠΊΡΠΈΡΡΠ° malloc() ΠΈ C++ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° Β«newΒ», ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠ°Π½ΠΈ Π·Π° ΠΏΠΎΡΡΠΈΠ³Π°Π½Π΅ Π½Π° Π²ΠΈΡΠΎΠΊΠ° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡ ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π² ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. TCMalloc ΡΡΡΠΎ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Ρ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π·Π° ΠΈΠ½ΡΡΠΎΡΠΏΠ΅ΠΊΡΠΈΡ ΠΈ ΠΏΡΠΎΡΠΈΠ»ΠΈΡΠ°Π½Π΅, ΠΊΠΎΠ΅ΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ Π΄Π° ΠΏΠΎΠ»ΡΡΠΈ ΠΏΠΎΠ΄ΡΠΎΠ±Π½Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° ΠΏΠ°ΠΌΠ΅Ρ Π² ΠΊΡΠΏΡΠΈΠ½Π°ΡΠ°. Π ΠΊΠΎΠ΄Π° ΡΠ΅ ΠΏΡΠΈΠ»Π°Π³Π°Ρ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ, ΠΎΡΠ½ΠΎΠ²Π°Π½ΠΈ Π½Π° ΡΡΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΈΡΠ΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π½Π° Π΅Π·ΠΈΠΊΠ° C++, ΠΊΠ°ΡΠΎ
ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° delete Ρ ΠΎΡ C++14 ΠΈ Π·Π°Π΄Π΅Π»ΡΠ½Π΅ Π½Π° ΠΏΠ°ΠΌΠ΅Ρ Ρ ΠΎΡ C++17.
TCMalloc ΠΎΡ ΡΡΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°: ΡΡΠΎΠ½ΡΠ΅Π½Π΄ Ρ ΠΊΠ΅Ρ Π·Π° Π±ΡΡΠ·ΠΎ Π·Π°Π΄Π΅Π»ΡΠ½Π΅ ΠΈ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Π²Π°Π½Π΅ Π½Π° ΠΏΠ°ΠΌΠ΅Ρ, ΠΏΡΠΎΡΠ»ΠΎΠΉΠΊΠ° Π·Π° Π·Π°ΠΏΡΠ»Π²Π°Π½Π΅ Π½Π° ΠΊΠ΅ΡΠ° Π½Π° ΡΡΠΎΠ½ΡΠ΅Π½Π΄Π° ΠΈ Π±Π΅ΠΊΠ΅Π½Π΄, ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΊΠ°ΡΠΎ ΠΏΠΎΠ»ΡΡΠ°Π²Π°Π½Π΅ Π½Π° ΠΏΠ°ΠΌΠ΅Ρ ΠΎΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½Π°ΡΠ° ΡΠΈΡΡΠ΅ΠΌΠ°, ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° Π³ΠΎΠ»Π΅ΠΌΠΈ Π±Π»ΠΎΠΊΠΎΠ²Π΅ Π½Π΅ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π° ΠΏΠ°ΠΌΠ΅Ρ ΠΈ Π²ΡΡΡΠ°Π½Π΅ Π½Π° ΠΈΠ·Π»ΠΈΡΠ½Π°ΡΠ° ΠΏΠ°ΠΌΠ΅Ρ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ Π² ΠΠ‘. ΠΠ΅ΡΡΡ Π΅ ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄Π΅Π½ ΠΎΡ Π·Π°ΠΊΠ»ΡΡΠ²Π°Π½ΠΈΡ ΠΈ ΡΠ°Π±ΠΎΡΠΈ Π² ΠΏΡΠΈΠ²ΡΡΠ·ΠΊΠ° Ρ ΡΠ΄ΡΠ°ΡΠ° Π½Π° CPU, Π½ΠΎ ΡΠ΅ Π²ΡΡΡΠ° Π½Π° ΠΌΠΎΠ΄Π΅Π»Π° Π·Π° ΠΊΠ΅ΡΠΈΡΠ°Π½Π΅ Π² ΠΏΡΠΈΠ²ΡΡΠ·ΠΊΠ° Ρ Π½ΠΈΡΠΊΠΈΡΠ΅ Π² ΡΠ»ΡΡΠ°ΠΉ Π½Π° Π»ΠΈΠΏΡΠ° Π½Π° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠ°ΡΠ° ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π½ΠΎΡΡ Π² ΡΠ΄ΡΠΎΡΠΎ Π½Π° ΠΠ‘ (ΠΏΡΠΈΠ²ΡΡΠ·Π²Π°Π½Π΅ΡΠΎ Π½Π° ΠΊΠ΅ΡΠ° ΠΊΡΠΌ CPU ΡΠ°Π±ΠΎΡΠΈ ΡΠ°ΠΌΠΎ Π² Π½ΠΎΠ²ΠΈ ΡΠ΄ΡΠ° Π½Π° Linux). ΠΠ΅ΠΊΠ΅Π½Π΄ΡΡ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ° ΡΠ°Π±ΠΎΡΠ°ΡΠ° ΠΊΠ°ΠΊΡΠΎ Ρ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈ ΡΡΡΠ°Π½ΠΈΡΠΈ ΠΏΠ°ΠΌΠ΅Ρ, ΡΠ°ΠΊΠ° ΠΈ Ρ ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈ ΡΡΡΠ°Π½ΠΈΡΠΈ (hugepage).
ΠΡΠ½ΠΎΠ²Π½ΠΈ Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠΈ Π½Π° TCMalloc:
- ΠΡΡΠ·ΠΎ Π·Π°Π΄Π΅Π»ΡΠ½Π΅ ΠΈ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Π²Π°Π½Π΅ Π½Π° ΠΏΠ°ΠΌΠ΅Ρ Ρ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° ΠΊΠ΅ΡΠΈΡΠ°Π½Π΅. ΠΠΎΠ²Π΅ΡΠ΅ΡΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π·Π° Π·Π°Π΄Π΅Π»ΡΠ½Π΅ Π½Π° ΠΏΠ°ΠΌΠ΅Ρ Π½Π΅ ΠΈΠ·ΠΈΡΠΊΠ²Π°Ρ Π±Π»ΠΎΠΊΠΈΡΠ°Π½Π΅, ΠΊΠΎΠ΅ΡΠΎ ΠΎΡΠΈΠ³ΡΡΡΠ²Π° Π΄ΠΎΠ±ΡΠ° ΠΌΠ°ΡΠ°Π±ΠΈΡΡΠ΅ΠΌΠΎΡΡ Π·Π° ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Ρ Π²ΠΈΡΠΎΠΊ ΠΏΠ°ΡΠ°Π»Π΅Π»ΠΈΠ·ΡΠΌ Π½Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° Π·Π°Π΄Π°ΡΠΈΡΠ΅;
- ΠΡΠ²ΠΊΠ°Π²ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° ΠΏΠ°ΠΌΠ΅ΡΡΠ°, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π°ΡΠΎ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄Π΅Π½ΠΈΡΠ΅ ΠΎΠ±Π»Π°ΡΡΠΈ Π·Π° ΠΎΠ±Π΅ΠΊΡΠΈ Ρ ΡΠ°Π·Π»ΠΈΡΠ΅Π½ ΡΠ°Π·ΠΌΠ΅Ρ ΠΈΠ»ΠΈ Π²ΡΡΡΠ°Π½Π΅ Π½Π° ΠΏΠ°ΠΌΠ΅ΡΡΠ° ΠΎΠ±ΡΠ°ΡΠ½ΠΎ Π½Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½Π°ΡΠ° ΡΠΈΡΡΠ΅ΠΌΠ°;
- ΠΠΈΡΠΊΠΈ ΡΠ°Π·Ρ ΠΎΠ΄ΠΈ Π·Π° Π²ΡΠ΅ΠΊΠΈ ΠΎΠ±Π΅ΠΊΡ Π±Π»Π°Π³ΠΎΠ΄Π°ΡΠ΅Π½ΠΈΠ΅ Π½Π° Π·Π°Π΄Π΅Π»ΡΠ½Π΅ΡΠΎ Π½Π° ΡΡΡΠ°Π½ΠΈΡΠΈ Ρ Π΅Π΄Π½Π°ΠΊΡΠ² ΡΠ°Π·ΠΌΠ΅Ρ Π½Π° ΠΎΠ±Π΅ΠΊΡΠΈΡΠ΅ ΠΈ Π΅ΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΡΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΡΠ½Π΅ Π½Π° ΠΌΠ°Π»ΠΊΠΈ ΠΎΠ±Π΅ΠΊΡΠΈ. ΠΠΎΠ΄ΠΎΠ±Π½ΠΎ Π½Π° Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈ ΡΡΡΠ°Π½ΠΈΡΠΈ Ρ ΡΠ°Π·ΠΌΠ΅ΡΠΈ 4KiB, 8KiB, 32KiB ΠΈ 256KiB. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΠΎΠ³Π°ΡΠΎ ΡΠ΅ ΠΏΠΎΠΈΡΠΊΠ°Ρ Π±Π»ΠΎΠΊΠΎΠ²Π΅ ΠΎΡ 512 Π±Π°ΠΉΡΠ° ΠΏΠ°ΠΌΠ΅Ρ, ΡΠ΅ Π±ΡΠ΄Π΅ Π·Π°Π΄Π΅Π»Π΅Π½Π° ΡΡΠ»Π° ΡΡΡΠ°Π½ΠΈΡΠ° ΠΎΡ 4KiB Π·Π° 512-Π±Π°ΠΉΡΠΎΠ²ΠΈ ΠΎΠ±Π΅ΠΊΡΠΈ, Π² ΠΊΠΎΡΡΠΎ ΡΠ΅ ΡΠ΅ ΠΏΠΎΠΌΠ΅ΡΡΡΡ 8 ΡΠ°ΠΊΠΈΠ²Π° ΠΎΠ±Π΅ΠΊΡΠ°;
- ΠΡΠ·ΠΌΠΎΠΆΠ½Π° Π΅ ΠΏΡΠ΅ΡΠΈΠ·Π½Π° Π½Π°ΡΡΡΠΎΠΉΠΊΠ° ΡΡΠ΅Π· ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ Π·Π° ΡΠ°Π·ΠΌΠ΅ΡΠ° Π½Π° ΠΊΠ΅ΡΠ° ΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΡΠ΅ Π·Π° ΠΈΠ½ΡΠ΅Π½Π·ΠΈΠ²Π½ΠΎΡΡ Π½Π° Π²ΡΡΡΠ°Π½Π΅ Π½Π° ΠΏΠ°ΠΌΠ΅ΡΡΠ° Π² ΠΠ‘;
- ΠΡΠ΅Π΄ΠΎΡΡΠ°Π²ΡΠ½Π΅ Π½Π° Π΄Π΅ΡΠ°ΠΉΠ»Π½Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π·Π° Π°Π½Π°Π»ΠΈΠ·Π° Π½Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° ΠΏΠ°ΠΌΠ΅Ρ ΠΎΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ.
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: opennet.ru
