Skip to content

bshourse/rails-optimization-task2

Β 
Β 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

9 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Π—Π°Π΄Π°Π½ΠΈΠ΅ β„–2

Π’ этом Π·Π°Π΄Π°Π½ΠΈΠΈ Π½ΡƒΠΆΠ½ΠΎ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ ΠΈΠ· ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ задания, Π½ΠΎ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ с фокусом Π½Π° ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡŽ памяти.

Π‘ΡŽΠ΄ΠΆΠ΅Ρ‚

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΠΎΡ‚Ρ€Π΅Π±Π»ΡΡ‚ΡŒ большС 70Мб памяти ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ Ρ„Π°ΠΉΠ»Π° data_large.txt Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ всСй своСй Ρ€Π°Π±ΠΎΡ‚Ρ‹.

План Ρ€Π°Π±ΠΎΡ‚Ρ‹

Для ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Ρ‡Π°Ρ‚ΡŒ с Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡΡ…ΠΎΠ΄Π½ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ ΠΏΠΎ аллокациям. Π’Π°ΠΌ Π·Π°Π»ΠΎΠΆΠ΅Π½ΠΎ ΠΎΡ‡Π΅Π½ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ нСэффСктивностСй - ΠΌΠΎΠΆΠ½ΠΎ Π½Π° Π½ΠΈΡ… ΠΏΠΎΡ‚Ρ€Π΅Π½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ.

  • дальшС придётся пСрСвСсти ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π½Π° ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½Π° ΠΏΡ€ΠΎΡˆΠ»Π° тСсты
  • ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ²ΡˆΡƒΡŽΡΡ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ рассмотрСнными инструмСнтами ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ Π΅Ρ‰Ρ‘ сильнСС, ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Ρƒ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΉ ΠΏΠΎ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΡƒ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΈΡ… Π² case-study
  • ΠΊΠΎΠ³Π΄Π° Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΡ‚Π΅, сдСлайтС Π·Π°ΠΌΠ΅Ρ€ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹; ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒ Π»ΠΈ быстрСС Ρ‡Π΅ΠΌ ΠΏΡ€ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΠΎ процСссору Π² ΠΏΠ΅Ρ€Π²ΠΎΠΌ Π·Π°Π΄Π°Π½ΠΈΠΈ?

Подсказки

Из Π±ΡŽΠ΄ΠΆΠ΅Ρ‚Π° ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ Π½ΠΈ ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ» Π² ΠΏΠ°ΠΌΡΡ‚ΡŒ Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ, Π½ΠΈ Π½Π°ΠΊΠ°ΠΏΠ»ΠΈΠ²Π°Ρ‚ΡŒ Π² памяти Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ.

Π—Π½Π°Ρ‡ΠΈΡ‚, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΎΡΠΌΡ‹ΡΠ»ΠΈΡ‚ΡŒ ΠΈ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π² "ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²ΠΎΠΌ" стилС - ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ Ρ‡ΠΈΡ‚Π°Π΅ΠΌ исходный Ρ„Π°ΠΉΠ» строку Π·Π° строкой ΠΈ сразу ΠΆΠ΅ Π½Π° Ρ…ΠΎΠ΄Ρƒ пишСм Ρ„Π°ΠΉΠ» с Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°ΠΌΠΈ.

Достаточно, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ совпадал с эталоном ΠΊΠ°ΠΊ json-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Π° Π½Π΅ строка. ΠŸΠΎΡ€ΡΠ΄ΠΎΠΊ ΠΏΠΎΠ»Π΅ΠΉ Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅ Π½Π΅ Π²Π°ΠΆΠ΅Π½.

МоТСм ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ всС сСссии ΡŽΠ·Π΅Ρ€Π° всСгда ΠΈΠ΄ΡƒΡ‚ ΠΎΠ΄Π½ΠΈΠΌ Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½Ρ‹ΠΌ куском. НСт Ρ‚Π°ΠΊΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ сначала ΠΈΠ΄Ρ‘Ρ‚ Ρ‡Π°ΡΡ‚ΡŒ сСссий ΡŽΠ·Π΅Ρ€Π°, ΠΏΠΎΡ‚ΠΎΠΌ сСссии Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ ΡŽΠ·Π΅Ρ€Π°, ΠΈ ΠΏΠΎΡ‚ΠΎΠΌ снова сСссии ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ.

Как ΠΈΠ·ΠΌΠ΅Ρ€ΡΡ‚ΡŒ ΠΊΠΎΠ»-Π²ΠΎ использованной памяти

Π’ Ρ„ΠΈΠ΄Π±Π΅ΠΊ-Π»ΡƒΠΏΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ ΠΊΠΎΠ»-Π²ΠΎ памяти Π² ΠΊΠΎΠ½Ρ†Π΅ выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹:

puts "MEMORY USAGE: %d MB" % (`ps -o rss= -p #{Process.pid}`.to_i / 1024)"

Second thread

Π Π°Π΄ΠΈ интСрСса ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π²Ρ‚ΠΎΡ€ΠΎΠΉ Thread, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π· Π² сСкунду ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΡ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ процСсса ΠΈ Π³Ρ€ΠΎΡ…Π°Ρ‚ΡŒ вСсь процСсс ΠΏΡ€ΠΈ ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ΅Π½ΠΈΠΈ Π±ΡŽΠ΄ΠΆΠ΅Ρ‚Π°.

Π’Π°ΠΊ ΠΆΠ΅ этот Ρ‚Ρ€Π΅Π΄ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π»ΠΎΠ³Π°Ρ‚ΡŒ ΠΊΠΎΠ»-Π²ΠΎ потрСбляСмой памяти Π² Ρ„Π°ΠΉΠ», Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ ΠΊΠ°ΠΊ ΠΎΠ½Π° измСняСтся со Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ.

РаньшС ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π»ΠΎΡΡŒ Π·Π°ΡŽΠ·Π°Ρ‚ΡŒ для этих Ρ†Π΅Π»Π΅ΠΉ Valgrind Massif Visualiser, Π½ΠΎ каТСтся с Π½ΠΈΠΌ ΠΎΡ‡Π΅Π½ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ Π²ΠΎΠ·Π½ΠΈ, Π° ΠΏΠΎΠ»ΡŒΠ·Ρ‹ Π½Π΅ Ρ‚Π°ΠΊ ΡƒΠΆ ΠΌΠ½ΠΎΠ³ΠΎ. РСально интСрСснСС ΠΈ ΠΏΠΎΠ»Π΅Π·Π½Π΅Π΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π²Ρ‚ΠΎΡ€ΠΎΠΉ Ρ‚Ρ€Π΅Π΄.

Π‘Π΄Π°Ρ‡Π° задания

Надо, ΠΊΠ°ΠΊ ΠΈ всСгда, ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ MR Π² этот Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ ΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ Π½Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ.

Π’ MR Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

  • внСсСны ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ Π² task2.rb;
  • Ρ„Π°ΠΉΠ» case-study.md с описаниСм ΠΏΡ€ΠΎΠ΄Π΅Π»Π°Π½Π½ΠΎΠΉ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ;

Checklist

  • ΠŸΠΎΡ‚Ρ€Π΅Π½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ с memory_profiler
  • ΠŸΠΎΡ‚Ρ€Π΅Π½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ с ruby-prof Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ CallTree c Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ Π² QCachegrind;
  • ΠŸΠΎΡ‚Ρ€Π΅Π½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ с stackprof + CLI ΠΈ Speedscope
  • ΠŸΠΎΡ‚Ρ€Π΅Π½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ со Π²Ρ‚ΠΎΡ€Ρ‹ΠΌ Ρ‚Ρ€Π΅Π΄ΠΎΠΌ для ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π° памяти

Π€ΠΎΡ€ΠΌΠ°Ρ‚ шагов case-study

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ шаг ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ Π² case-study Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΡ…:

  • ΠΊΠ°ΠΊΠΎΠΉ ΠΎΡ‚Ρ‡Ρ‘Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Π» Π³Π»Π°Π²Π½ΡƒΡŽ Ρ‚ΠΎΡ‡ΠΊΡƒ роста
  • ΠΊΠ°ΠΊ Π²Ρ‹ Ρ€Π΅ΡˆΠΈΠ»ΠΈ Π΅Ρ‘ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ
  • ΠΊΠ°ΠΊ измСнилась ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠ°
  • ΠΊΠ°ΠΊ измСнился ΠΎΡ‚Ρ‡Ρ‘Ρ‚ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊΠ°

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Ruby 100.0%