ΠΠΏΡΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½Ρ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ ΠΎΡΠ΅Π½ΠΊΠΈ Π²Π»ΠΈΡΠ½ΠΈΡ Π½Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΏΠ΅ΡΠ΅ΡΠ±ΠΎΡΠΊΠΈ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ² Π΄Π»Ρ Ubuntu Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠΌΠΈ ΠΎΠΏΡΠΈΡΠΌΠΈ ΠΈ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡΠΌΠΈ ΡΡΠ½ΠΊΡΠΈΠΉ Π²ΡΠ΄Π΅Π»Π΅Π½ΠΈΡ ΠΏΠ°ΠΌΡΡΠΈ. ΠΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠ°ΡΠΎΡΡ ΡΠ΄Π°Π»ΠΎΡΡ Π½Π° 90% (Π² 1.9 ΡΠ°Π·Π°) ΠΏΠΎΠ²ΡΡΠΈΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΏΠ°ΠΊΠ΅ΡΠ° jq Ρ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠ΅ΠΌ Π΄Π»Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ Π΄Π°Π½Π½ΡΡ Π² ΡΠΎΡΠΌΠ°ΡΠ΅ JSON, ΠΏΡΡΡΠΌ ΠΎΠ±ΡΡΠ½ΠΎΠΉ ΠΏΠ΅ΡΠ΅ΡΠ±ΠΎΡΠΊΠΈ ΠΈΠ· ΡΠΎΠ³ΠΎ ΠΆΠ΅ ΠΏΠ°ΠΊΠ΅ΡΠ° Ρ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΌ ΠΊΠΎΠ΄ΠΎΠΌ, Π±Π΅Π· Π²Π½Π΅ΡΠ΅Π½ΠΈΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² ΡΠ°ΠΌ ΠΊΠΎΠ΄. ΠΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΎΡΠ΅Π½ΠΈΠ²Π°Π»Π°ΡΡ ΡΠ΅ΡΠ΅Π· ΠΈΠ·ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΠΈΠΏΠΎΠ²ΠΎΠ³ΠΎ ΡΠΈΠ»ΡΡΡΡΡΡΠ΅Π³ΠΎ Π·Π°ΠΏΡΠΎΡΠ° Π½Π°Π΄ Π΄Π°Π½Π½ΡΠΌΠΈ GeoJSON, ΡΠ°Π·ΠΌΠ΅ΡΠΎΠΌ 500ΠΠ.
ΠΡΠΎΠ³ΠΈ ΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠ°:
- ΠΠ°ΡΠΈΠ°Π½Ρ, ΡΠΎΠ±ΡΠ°Π½Π½ΡΠΉ Π² GCC ΠΈΠ· ΡΠ΅Ρ ΠΆΠ΅ ΠΈΡΡ ΠΎΠ΄Π½ΡΡ ΡΠ΅ΠΊΡΡΠΎΠ² Ρ ΡΠ»Π°Π³Π°ΠΌΠΈ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΎΠΊΠ°Π·Π°Π»ΡΡ Π±ΡΡΡΡΠ΅Π΅ Π±ΠΈΠ½Π°ΡΠ½ΠΎΠ³ΠΎ ΠΏΠ°ΠΊΠ΅ΡΠ° Ubuntu Π½Π° 2-4%.
- ΠΠ΅ΡΠ΅ΡΠ±ΠΎΡΠΊΠ° Π² Clang 18 Ρ ΡΡΠΎΠ²Π½Π΅ΠΌ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈΒ»-O3β³, Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ Π½Π° ΡΡΠ°ΠΏΠ΅ ΡΠ²ΡΠ·ΡΠ²Π°Π½ΠΈΡ (Β«-fltoΒ») ΠΈ ΠΎΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΎΡΠ»Π°Π΄ΠΎΡΠ½ΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ (Β«-DNDEBUGΒ») ΠΏΡΠΈΠ²Π΅Π»Π° ΠΊ ΡΡΠΊΠΎΡΠ΅Π½ΠΈΡ Π½Π° 20%.
- ΠΠ΅ΡΠ΅ΡΠ±ΠΎΡΠΊΠ° Ρ ΡΠΈΡΡΠ΅ΠΌΠΎΠΉ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΏΠ°ΠΌΡΡΠΈ TCMalloc (Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Β«-L/usr/lib/x86_64-linux-gnu -ltcmalloc_minimalΒ» Π² LDFLAGS) ΠΏΡΠΈΠ²Π΅Π»Π° ΠΊ ΡΡΠΊΠΎΡΠ΅Π½ΠΈΡ Π½Π° 40%.
- ΠΠ°ΠΌΠ΅Π½Π° ΡΡΠ½ΠΊΡΠΈΠΉ malloc Π½Π° ΡΠΈΡΡΠ΅ΠΌΡ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΏΠ°ΠΌΡΡΠΈ tcmalloc, jemalloc ΠΈ mimalloc ΡΠ΅ΡΠ΅Π· Β«LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libβ¦.soΒ» ΠΏΡΠΈΠ²Π΅Π»Π° ΠΊ ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ Π½Π° 27%, 29% ΠΈ 44%. ΠΡΠΈ Π·Π°ΠΏΡΡΠΊΠ΅ Ρ mimalloc, ΠΏΠΎΠΊΠ°Π·Π°Π²ΡΠ΅ΠΌ ΡΡΠΊΠΎΡΠ΅Π½ΠΈΠ΅ Π½Π° 44%, Π²ΡΡΡΠ°Π²Π»ΡΠ»Π°ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ Β«MIMALLOC_LARGE_OS_PAGES=1Β».
- ΠΠ΅ΡΠ΅ΡΠ±ΠΎΡΠΊΠ° ΠΏΠ°ΠΊΠ΅ΡΠ° Ρ mimalloc Π² LDFLAGS Π²ΠΌΠ΅ΡΡΠΎ ΡΠ²ΡΠ·ΡΠ²Π°Π½ΠΈΡ ΡΠ΅ΡΠ΅Π· LD_PRELOAD ΠΏΡΠΈΠ²Π΅Π»Π° ΠΊ ΡΡΠΊΠΎΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΡ ΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΡΠ΅ΡΡΠ° Π½Π° 90%. ΠΡΡΠ³ΠΎΠΉ ΡΠ΅ΡΡ ΠΏΠΎ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ΅ 2.2GB JSON-Π΄Π°Π½Π½ΡΡ Π² 13000 ΡΠ°ΠΉΠ»Π°Ρ ΡΠ°ΠΊΠΆΠ΅ ΠΏΠΎΠΊΠ°Π·Π°Π» ΠΏΡΠΈΡΠΎΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ Π² Π΄Π²Π° ΡΠ°Π·Π°.
ΠΡΡΠΎΡΠ½ΠΈΠΊ: opennet.ru