ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Ubuntu-ΠΏΠ°ΠΊΠ΅Ρ‚Π° jq ΡƒΠ΄Π°Π»ΠΎΡΡŒ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ Π² 1.9 Ρ€Π°Π·Π° ΠΏΡƒΡ‚Ρ‘ΠΌ пСрСсборки

ΠžΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½Ρ‹ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ ΠΎΡ†Π΅Π½ΠΊΠΈ влияния Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ пСрСсборки ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² для 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

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