Suorituskyvyn mittaaminen
Benchmark-moduuli.
Suorituskyvyn mittaaminen on ilmainen Ruby Academy-oppitunti CoddyKitissä. Tämä on oppitunti 1/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu Ruby Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Ruby Academy-kurssilla on yhteensä 4 oppituntia.
Miksi mitata
Optimointi ilman mittaamista on arvailua. Rubyn vakiokirjaston Benchmark-moduuli mittaa koodin suoritusajan tarkasti.
- Etsikää hitaat osat ennen niiden muuttamista
- Vertailkaa toteutuksia objektiivisesti
- Välttäkää ennenaikaista optimointia
require 'benchmark'
time = Benchmark.realtime do
1_000_000.times { |i| i * 2 }
end
puts "Took #{time.round(4)}s"Benchmark.measure
Benchmark.measure palauttaa raportin käyttäjäajasta, järjestelmäajasta ja todellisesta ajasta.
- Käyttäjäaika on oman koodinne suorittamiseen käytetty suoritinaika
- Todellinen aika on kellon mukaan kulunut aika
require 'benchmark'
result = Benchmark.measure do
500_000.times { |i| i.to_s }
end
puts resultBenchmark.bm
Benchmark.bm suorittaa useita lohkoja ja merkitsee ne taulukkoon.
- Antakaa otsakkeille leveys kohdistamista varten
- Jokainen
x.reportmuodostaa yhden rivin
require 'benchmark'
Benchmark.bm(10) do |x|
x.report('to_s:') { 100_000.times { |i| i.to_s } }
x.report('inspect:') { 100_000.times { |i| i.inspect } }
endBenchmark.bmbm
Benchmark.bmbm suorittaa ensin harjoitusajon välimuistien ja GC:n lämmittämiseksi, mikä tuottaa vertailukelpoisempia tuloksia.
- Ensimmäisen ajon tulokset hylätään
- Toinen ajo on varsinainen mittaus
require 'benchmark'
Benchmark.bmbm do |x|
x.report('sum:') { (1..100_000).sum }
x.report('reduce:') { (1..100_000).reduce(:+) }
endrealtime nopeaan mittaukseen
Benchmark.realtime palauttaa liukulukuina vain kellon mukaan kuluneet sekunnit.
- Yksinkertaisin tapa mitata yhden lohkon suoritusaika
- Sopii hyvin yksittäisiin tarkistuksiin
require 'benchmark'
elapsed = Benchmark.realtime do
arr = Array.new(100_000) { rand }
arr.sort
end
puts "Sorted in #{elapsed.round(4)}s"Monotoninen kello
Käyttäkää tarkkaan mittaukseen, johon järjestelmäkellon muutokset eivät vaikuta, Process.clock_gettime-menetelmää monotonisen kellon kanssa.
- Ei reagoi NTP-korjauksiin
- Tarkin sisäänrakennettu vaihtoehto
start = Process.clock_gettime(Process::CLOCK_MONOTONIC)
200_000.times { |i| i * i }
finish = Process.clock_gettime(Process::CLOCK_MONOTONIC)
puts "Elapsed: #{(finish - start).round(4)}s"Kahden lähestymistavan vertailu
Vertailutestit ovat parhaimmillaan, kun vertaillaan vaihtoehtoja. Suorittakaa molemmat samanlaisella kuormalla.
- Pitäkää syötteen koko riittävän suurena, jotta erot ovat mitattavissa
- Toistakaa mittaus kohinan vähentämiseksi
require 'benchmark'
arr = (1..100_000).to_a
Benchmark.bm(8) do |x|
x.report('map:') { arr.map { |n| n * 2 } }
x.report('each:') { r = []; arr.each { |n| r << n * 2 } }
endVarokaa mikrovertailutestejä
Pienet vertailutestit voivat johtaa harhaan.
- JIT ja välimuistit eivät välttämättä vastaa todellisia työkuormia
- GC voi käynnistyä kesken mittauksen
- Mitatkaa realistisen kokoisilla tietomäärillä
require 'benchmark'
# Too small to be meaningful
t = Benchmark.realtime { 10.times { |i| i + 1 } }
puts "Misleadingly tiny: #{t}s"It iteraatiota sekunnissa
Usein haluatte mitata suorituskykyä: montako operaatiota sekunnissa suoritetaan. benchmark-ips-gem ilmoittaa tämän, mutta voitte arvioida arvon myös manuaalisesti.
- Laskekaa iteraatiot kiinteän mittausjakson aikana
- Suurempi ips-arvo tarkoittaa nopeampaa suoritusta
deadline = Process.clock_gettime(Process::CLOCK_MONOTONIC) + 0.2
count = 0
while Process.clock_gettime(Process::CLOCK_MONOTONIC) < deadline
count += 1
'hello'.upcase
end
puts "Iterations in 0.2s: #{count}"GC:n hallinta
Garbage collector voi vääristää tuloksia. Voitte poistaa sen tilapäisesti käytöstä vakaampien lukujen saamiseksi.
- Kutsukaa ensin
GC.disableja lopuksiGC.enable - Käyttäkää tätä varoen muistin kasvun välttämiseksi
require 'benchmark'
GC.disable
t = Benchmark.realtime { 100_000.times { |i| i.to_s } }
GC.enable
puts "Without GC: #{t.round(4)}s"Useiden ajokertojen keskiarvo
Suorittakaa vertailutesti useita kertoja ja laskekaa keskiarvo vaihtelun tasoittamiseksi.
- Hylätkää tarvittaessa hitain poikkeava tulos
- Ilmoittakaa vakauden vuoksi mediaani
require 'benchmark'
times = 3.times.map do
Benchmark.realtime { (1..50_000).map { |n| n * n } }
end
avg = times.sum / times.size
puts "Average: #{avg.round(4)}s"Pikatarkistus
Testatkaa vertailutestejä koskeva osaamisenne.
Kertaus
Opitte mittaamaan suorituskykyä:
Benchmark-moduuli mittaa koodin suoritusajan tarkastirealtime,measure,bmjabmbmpalvelevat eri tarpeita- Käyttäkää tarkkoihin mittauksiin monotonista kelloa
- Välttäkää harhaanjohtavia mikrovertailutestejä ja huomioikaa GC
- Suorittakaa useita ajokertoja ja laskekaa niiden keskiarvo kohinan vähentämiseksi
Seuraavaksi käytätte erillisiä profilointityökaluja.
Opi Ruby tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 29
- Oppitunnit
- 109
Usein kysytyt kysymykset
Onko oppitunti ”Suorituskyvyn mittaaminen” ilmainen?
Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Ruby Academy-oppimispolun 3 oppituntia, myös oppitunnin “Suorituskyvyn mittaaminen”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Ruby Academy-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”Suorituskyvyn mittaaminen”?
Benchmark-moduuli. Harjoittelet Ruby Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni Ruby Academy-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin Ruby Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 1/4.
Kuinka kauan ”Suorituskyvyn mittaaminen”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä Ruby Academy-oppitunnilla?
Kyllä. Jokainen Ruby Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- Suorituskyvyn mittaaminen
- Profilointityökalut
- Muistin optimointi
- Yleiset pullonkaulat