Veiktspējas testi
Repozitorijā ir veiktspējas testu sistēma mapē bin/ un benchmarks/. Tā mēra katru meklēšanas režīmu ar reālām datu kopām (WordPress, Laravel) un ģenerētām sintētiskām datu kopām, apkopo strukturētus pārskatus un ļauj salīdzināt divas pārskatu sērijas.
Testu sistēma ir daļa no repozitorija, nevis Composer pakotnes: tā kā 0.2.3, benchmarks/ un bin/bench* skripti pakotnē nav iekļauti, palaidiet tos no klona (git clone https://github.com/inline0/greph && cd greph && composer install).
Publicētie rezultāti README ir iegūti GitHub Actions izpildes laikā, nekad no lokālām mašīnām. Lokālās izpildes noder izstrādei; CI izpildes ir galvenais informācijas avots.
Datu kopas
Sintētiskās datu kopas (synthetic-1k, synthetic-10k, synthetic-100k-single) pirmajā palaišanas reizē tiek ģenerētas mapē benchmarks/corpora/synthetic/. Reālās datu kopas nav iekļautas: ievietojiet to repozitorija kopiju mapē benchmarks/corpora/wordpress vai benchmarks/corpora/laravel (CI darbplūsma klonē WordPress/WordPress ar --depth=1). Datu kopa, kuras direktorija trūkst, tiek izlaista.
Veiktspējas testu palaišana
# Full benchmark suite, every corpus that is present
./bin/bench
# Specific category (the category names used in benchmarks/suites/)
./bin/bench --category text
./bin/bench --category ast
# Compare against external tools when available
./bin/bench --compare rg,grep
./bin/bench --compare sg
# Choose a corpus
./bin/bench --corpus wordpress
./bin/bench --corpus laravel
./bin/bench --corpus synthetic-1k
# Write the run as JSON
./bin/bench --corpus wordpress --output build/run-1.json
# Measured series: 5 runs after 1 warmup run
./bin/bench-series --repeat 5 --warmup 1 --corpus wordpress --output build/head-series.json
# Aggregate separate runs into one series
./bin/bench-aggregate --output build/head-series.json build/run-*.json
bin/bench-compare base-series.json head-series.json salīdzina divu sēriju failus (bench-series vai bench-aggregate izvadi) un izvada Markdown kopsavilkumu, kas noder, optimizējot intensīvi lietotu koda ceļu. bin/bench-ci aktivizē Benchmark darbplūsmu GitHub Actions, izmantojot gh CLI.
Kategorijas
README publicē astoņas rezultātu grupas, katra mēra konkrētu dzinēja slāni. Katrā grupā ietilpst viena vai vairākas testu sistēmas kategorijas, kas definētas failā benchmarks/suites/.
Skenēšanas režīms: teksts
Vietējā teksta meklēšana pēc burtiskām, regulāro izteiksmju un kombinētām veidnēm. Publicētais bāzes mērījums tiek veikts ar WordPress datu kopu un ietver:
- Burtiska
function - Burtiska, reģistrjutīga
- Burtiska, pilnam vārdam
- Regulārā izteiksme, jauna instance
- Regulāro izteiksmju masīva izsaukums
- Regulārā izteiksme, prefiksa burtiskā virkne
- Regulārā izteiksme, sufiksa burtiskā virkne
- Regulārā izteiksme, precīza rindas burtiskā virkne
- Regulārā izteiksme, burtisko virkņu apvienošana
Skenēšanas režīms: pārlūkošana
Tikai failu pārlūkošana, bez meklēšanas. Mēra gitignore noteikumus ievērojošā pārlūka darbības izmaksas.
Skenēšanas režīms: paralēlais teksts
Fiksētas virknes meklēšana function ar 1, 2 un 4 uzdevumiem. Šai veidnei darbinieku kopums sāk darboties tikai tad, kad failu ir vairāk par jobs * 4_000 (skatiet Paralēlie darbinieki); WordPress datu kopā to ir mazāk, tāpēc visas trīs publicētās rindas darbojas vienā procesā un neparāda kopuma mērogošanu (#8).
Skenēšanas režīms: AST
Vietējā AST meklēšana pēc raksturīgām veidnēm:
new $CLASS()array($$$ITEMS)
Indeksētais teksta režīms
Uzsildīta indeksēta teksta meklēšana pēc tām pašām veidnēm kā skenēšanas režīmā. Ietver burtisku, reģistrjutīgu, pilna vārda, īsa tokena un regulāro izteiksmju vaicājumus.
Indeksētie kopsavilkuma vaicājumi
Uzsildīta indeksēta teksta meklēšana ar rezultātiem, kas uzrāda skaitu, failus ar atbilstībām un failus bez atbilstībām. Tos visvairāk paātrina ierakstu krātuve, jo darbs katram failam ir vismazākais.
Indeksēts / kešots AST
Uzsildīta AST faktu meklēšana un kešota AST meklēšana pēc tām pašām veidnēm kā AST skenēšanas režīmā.
Būvēšanas izmaksas
Trigrammas indeksa, AST faktu indeksa un AST kešatmiņas aukstās būvēšanas izmaksas. Noder, izvēloties, kuru režīmu uzturēt konkrētai darba slodzei.
Publicēto rezultātu lasīšana
README publicē jaunākās CI izpildes momentuzņēmumu katram bāzes mērījumam. Katra sadaļa iegūta konkrētā GitHub Actions izpildē un ir marķēta ar datu kopu, izpildītāju, PHP versiju, kā arī mērījumu un iesildīšanas reižu skaitu. Lai atkārtotu mērījumu, lokāli izmantojiet to pašu konfigurāciju.
Salīdzinājuma kolonnas (rg, grep, sg) tiek apkopotas vienā darbā, uz viena izpildītāja un ar vienu un to pašu datu kopu. Tās netiek ekstrapolētas no ārējiem veiktspējas testiem.
Kā pievienot veiktspējas testu
- Pievienojiet veiktspējas testa definīciju mapē
benchmarks/. - Pievienojiet regresiju testu kopai atbilstošu scenāriju, ja tāda vēl nav (lai tiktu pārbaudīta arī mērītā darbība).
- Palaidiet
./bin/bench --category <yours>, lai pārbaudītu jauno veiktspējas testu. - Salīdziniet ar
main, izmantojot Benchmark darbplūsmu, kas tiek palaista tajos izvilkšanas pieprasījumos, kuros mainītisrc/,benchmarks/vaibin/, un izpildes kopsavilkumā publicē galvenes zara un pamatzara salīdzinājumu. - Atjauniniet README tabulu, kad CI izpilde ar jauno veiktspējas testu ir nonākusi
main.
Veiktspējas filozofija
Greph nemēģina aukstās skenēšanās pārspēt ripgrep vai grep. Ripgrep ir ieviests Rust ar manuāli pielāgotu SIMD burtisko virkņu skenēšanu, un publicētajos rezultātos gan rg, gan GNU grep katrā aukstajā teksta skenēšanā ir ātrāks par Greph. Mērķi ir citi:
- Būt pietiekami ātram, lai interaktīva lietošana un aģentu cikli šķistu dabiski.
- Atbildēt uz atkārtotiem vaicājumiem, izmantojot uzsildītus indeksus: indeksētās regulārās izteiksmes, skaita un failu saraksta vaicājumi ir ātrāki nekā gan
rg, gangrepviena un tā paša koka skenēšana. - Pārspēt
ast-grepindeksētās un kešotās AST darba slodzēs, kur Greph uzsildītās kešatmiņas ļauj izvairīties no koka atkārtotas parsēšanas. Aukstā AST meklēšana dod jauktus rezultātus:new $CLASS()ir ātrāks parsg, betarray($$$ITEMS)ir lēnāks. - Padarīt katru veiktspējas uzlabojumu izmērāmu un atkārtojamu.
Veiktspējas uzlabojumi, ko neapliecina veiktspējas testa pārskats, netiek pieņemti.