Skip to content

Commit a4f0927

Browse files
committed
Extend the report with decryption performance analysis.
1 parent 4b603ca commit a4f0927

File tree

1 file changed

+46
-5
lines changed

1 file changed

+46
-5
lines changed

ProjectAnalysisReport.md

Lines changed: 46 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -996,11 +996,11 @@ Naime, vidimo da izvrsavanje traje 4.77 milisekundi, i da je ukupan broj instruk
996996
997997
Na slici ispod, dati su rezultati konverzije u `FlameGraph`.
998998
999-
![AES-128-CTR-FG](/home/akilosaurus/2023_Analysis_zephyr/profiling/psa_encrypt_test/results/psa_encrypt_test_128bit_CTR_flame.svg)
999+
![AES-128-CTR-FG](profiling/psa_encrypt_test/results/psa_encrypt_test_128bit_CTR_flame.svg)
10001000
10011001
Ukoliko se fokusiramo na `main` funkciju, vidimo graf poziva koji se sastoji iz dve primarne faze: generisanje kljuca i petlja za enkripciju. Jasno je da main funkcija (što već znamo i iz implementacije), poziva `generate_key_helper` funkciju (leva strana grafika). S obzirom na činjenicu da ćemo se posvetiti i analizi generisanja ključeva zasebno, dalji fokus nas vodi ka `psa_cipher_encrypt` funkciji, odnosno glavnoj 'meti' ovog testa.
10021002
1003-
![AES-128-CTR-FG-zoom](/home/akilosaurus/2023_Analysis_zephyr/images/AES-128-CTR-FG-zoomed.png)
1003+
![AES-128-CTR-FG-zoom](images/AES-128-CTR-FG-zoomed.png)
10041004
10051005
Prilikom prevlačenja miša preko pojedinačnih pravougaonika, dobijaju se informacije o broju uzoraka koje je perf alat uzeo u toku date funkcije, kao i procenat tih uzoraka u okviru celokupnog izvršavanja programa. Konkretno, funkcija `mbedtls_psa_cipher_encrypt` zauzima četvrtinu (25.74%) celokupnog izvršavanja testa, dok generisanje ključa zauzima oko 6%. Kao što je već rečeno, generisanje ključa biće zasebno analizirano. Znacajno usko grlo u okviru `_cipher_encrypt` je `aes_crypt_ctr`, sto je i ocekivano jer se u okviru nje vrsi osnovna operacija AES sifrovanja. U okviru glavne funkcije za enkripciju, `mbedtls_psa_cipher_update`, `_finish`, `_abort` i `psa_cipher_setup.constprop.0` zauzimaju priblizno po 6%. Jos jedna znacajna funkcija u kontekstu vremena izvrsavanja je i `psa_generate_random_internal` i zauzima gotovo petinu celog izvrsavanja. Napomena je da je prilikom prevodjenja koriscena oznaka za koriscenje simuliranog generatora pseudoslucajnih brojeva sto se vidi i u grafiku poziva - `entropy_native_posix_get_entropy`. U realnim scenarijima, cesto je dostupan hardverski acelerator za kriptografske operacije, pa je izvrsavanje ove funkcije u tim slucajevima verovatno manje.
10061006
@@ -1035,7 +1035,7 @@ Iako je struktura grafika slicna, glavni posao se sada obavlja u okviru `mbedtls
10351035
10361036
Zumirana `FlameGraph` slika data je ispod:
10371037
1038-
![AES-128-GCM-FG-zoom](/home/akilosaurus/2023_Analysis_zephyr/images/AES-128-GCM-FG-zoomed.png)
1038+
![AES-128-GCM-FG-zoom](images/AES-128-GCM-FG-zoomed.png)
10391039
10401040
Glavna razlika izmedju ova dva moda izvrsavanja je u broju instrukcija. U slucaju GCM enkripcije, bilo je potrebno preko 1.5 miliona instrukcija vise (blizu 30% razlike) u odnosu na CTR enkripciju. Ovo je ocekivano
10411041
Funkcije poput `mbedtls_gcm_mult`, odnosno mnozenje u Galoa poljima imaju znacajan udeo u celokupnom izvrsavanju. Iako je GCM slucaj zavrsio malo brze, uzrok je najverovatnije razlika u implementaciji samog procesora i verovatno je broj instrukcija po ciklusu (eng. Instructions per Cycle) (2.93 nasuprot 2.55). Oslonicemo se na broj instrukcija kao stabilniju metriku poredjenja efikasnosti.
@@ -1071,10 +1071,51 @@ GCM vs CTR: GCM je konzistentno skuplji od CTR režima, zahtevajući 7-30% više
10711071
10721072
Ukupno vreme izvršavanja (task-clock) može biti varljivo zbog faktora kao što su IPC i stanje sistema, te je broj izvršenih instrukcija pouzdanija metrika za poređenje računarske složenosti ovih kriptografskih operacija.
10731073
1074-
#### Testiranje performansi dekripcije
1074+
#### Testiranje performansi dekripcije
1075+
1076+
Analogno testovima enkripcije, implementirana je i standalone aplikacija za testiranje performansi dekripcije. Aplikacija prvo prolazi kroz identičan proces generisanja i čuvanja ključa, a zatim `NUM_REPETITIONS` puta poziva funkciju dekripcije nad unapred pripremljenim šifratom. Analiza je fokusirana na funkciju `psa_cipher_decrypt` i njene podvarijante za AES algoritme sa 128 i 256-bitnim ključevima u CTR i GCM režimima rada.
1077+
1078+
**AES-128-CTR** rezultati
1079+
1080+
Izlaz perf stat za dekripciju u CTR režimu pokazuje izvršavanje od 4.80 milisekundi i ukupan broj od oko 7.25 miliona instrukcija.
1081+
1082+
```bash
1083+
4,80 msec task-clock # 0,918 CPUs utilized
1084+
7245691 instructions # 3,31 insn per cycle
1085+
```
1086+
1087+
**AES-128-GCM** rezultati
1088+
1089+
Za GCM dekripciju, zabeleženo je vreme od 4.23 milisekunde i oko 7.16 miliona instrukcija.
1090+
1091+
```bash
1092+
4,23 msec task-clock # 0,888 CPUs utilized
1093+
7160751 instructions # 3,41 insn per cycle
1094+
```
1095+
1096+
Broj instrukcija je vrlo sličan između CTR i GCM režima za 128-bitnu dekripciju. Ovo je pomalo neočekivano jer GCM dekripcija, pored same dekripcije (koja je u osnovi CTR), podrazumeva i verifikaciju autentikacionog taga, što je računski zahtevno. Iz tog razloga, manji broj instrukcija u GCM slučaju predstavlja iznenađenje. Razlog ovome nije očigledan iz perf stat izlaza.
1097+
1098+
**AES-256-CTR** rezultati
1099+
1100+
Dekripcija sa 256-bitnim ključem u CTR režimu zahtevala je 5.93 milisekunde i oko 5.29 miliona instrukcija.
1101+
1102+
```bash
1103+
5,93 msec task-clock # 0,919 CPUs utilized
1104+
5289077 instructions # 2,52 insn per cycle
1105+
```
1106+
1107+
**AES-256-GCM** rezultati
1108+
1109+
Konačno, za AES-256-GCM dekripciju, perf stat beleži 4.54 milisekunde i 5.51 milion instrukcija.
1110+
1111+
```bash
1112+
4,54 msec task-clock # 0,917 CPUs utilized
1113+
5513989 instructions # 7,91 insn per cycle
1114+
```
1115+
1116+
I u ovom slučaju, dobijeni su neintuitivni rezultati, odnosno GCM izvršavanje deluje bolje optimizovano. Izuzetno visok IPC od 7.91 u GCM testu ukazuje na specifično stanje procesora i keša tokom ovog merenja, što čini direktno poređenje ukupnog vremena izvršavanja nepouzdanim.
10751117
10761118
#### Testiranje performansi generisanja kljuca
10771119
10781120
#### Testiranje performansi ucitavanja kljuca
10791121
1080-
#### Testiranje performansi funkcija za hesiranje

0 commit comments

Comments
 (0)