Wyniki

Niniejsza sekcja przedstawia wyniki eksperymentów przeprowadzonych na \textbf{dwóch niezależnych platformach sprzętowych}: P1~— Intel Core i7-6700 (Skylake, 2015, Ubuntu 24.04.4 LTS) oraz P2~— Intel Xeon E-2176G (Coffee Lake, 2018, Ubuntu 24.04.3 LTS). Obie platformy użyły identycznych wersji runtimeów (Node.jsv24.15.0, Deno2.8.1, Bun1.3.14) i identycznego protokołu pomiarowego: powtórzeń per konfiguracja po30 iteracjach rozgrzewki. Platforma P2 dodatkowo eksponuje domenę RAPL DRAM (intel-rapl:0:2), niedostępną na P1. Łącznie zebrano pomiarów głównych. Sekcja zorganizowana jest według pytań badawczych: RQ1 ([→]), RQ2–RQ3 ([→]), RQ4 ([→]), RQ5 ([→]), RQ6 — walidacja cross-platform ([→]).

RQ1: Protokół Pomiaru Energii — Warm-up JIT i Skoki GC

Eksperyment JE-EXP-2 zbadał wpływ rozgrzewki JIT na stabilność pomiarów energii, mierząc 100 kolejnych wywołań workloadu CPU-bound (SHA-256 hashing) bez restartu procesu.

\centering \small Wyniki protokołu warm-up JIT (#JE-EXP-2). $N_{\text{warm-up iteracji do stabilizacji energetycznej; GC — liczba wykrytych skoków; GC~[%] — procentowy wpływ na medianę bez filtrowania.}


| Runtime | | Wykryte skoki GC | Wpływ GC na medianę [%] |

| Node.js v24.15.0 | 30 | 5 | 0{,}1 | | Deno 2.8.1 | 30 | 3 | 0{,}0 | | Bun 1.3.14 | 30 | 5 | 0{,}0 |

Wyniki (Tabela~[→]) wskazują, że wszystkie trzy środowiska uruchomieniowe wymagają~ iteracji przed stabilizacją zużycia energii. Jest to wartość wyższa niż sugerowane w literaturze dla V8 w warunkach mikro-benchmarków~1, co wynika z faktu, że workload SHA-256 z buforem 64~KB aktywuje wyższy poziom optymalizacji JIT (Turbofan tier) dopiero po wielokrotnym wykonaniu. Wpływ skoków GC na medianę energii jest znikomy () dla wszystkich runtimeów — co wskazuje na niski poziom presji na Garbage Collector przy izolowanym workloadzie bez alokacji długożyjących obiektów.

Odpowiedź na RQ1: Rzetelny pomiar energii JS runtimeów wymaga co najmniej iteracji rozgrzewania dla V8 (Node.js, Deno) i JavaScriptCore (Bun) przy workloadach intensywnych obliczeniowo. Wpływ skoków GC jest pomijalny dla badanych workloadów, ale protokół filtrowania (IQR~) pozostaje rekomendowany jako środek ostrożności dla workloadów z dużą alokacją obiektów.

RQ2–RQ3: Porównanie Energetyczne Node.js, Deno i Bun

Eksperyment JE-EXP-1 zmierzył zużycie energii pakietu CPU (domena RAPL Package) dla 6kategorii workloadów serverless przy 50 powtórzeniach per konfiguracja. Domena PP0 Core stanowiła konsekwentnie energii pakietu we wszystkich konfiguracjach, co wskazuje na dominujący udział rdzeni obliczeniowych; domena Uncore (PP1) zwróciła wartość zerową na badanej platformie(i7-6700, Skylake), ponieważ procesor ten nie eksponuje oddzielnego licznika Uncore w sysfs (intel-rapl:0:1~=0J we wszystkich pomiarach).

\centering \small \caption{Mediana energii pakietu CPU~[J] per workload i runtime (#JE-EXP-1, ). Pogrubiono wartość minimalną (najlepszą) w każdym wierszu. — różnica względna Bun vs Node.js [%].}


| Workload | Node.js~[J] | Deno~[J] | Bun~[J] | ~[%] |

| CPU-bound | 44{,}05 | 43{,}48 | **29{,**85} | | | I/O-bound | 17{,}36 | 14{,}07 | **4{,**52} | | | Mixed REST | 2{,}20 | 1{,}81 | **1{,**59} | | | Memory | 135{,}37 | **112{,**20} | 133{,}04 | | | SSR | **1{,**50} | 1{,}62 | 1{,}74 | | | Cold start | 0{,}60 | 0{,}64 | **0{,**31} | |

Tabela~[→] zbiera mediany energii dla wszystkich konfiguracji. Wszystkie różnice między parami runtimeów są istotne statystycznie (, test Mann-Whitney U, ) z dużym rozmiarem efektu (Cohen’s dla wszystkich par we wszystkich workloadach). Przy 18konfiguracjach i2testach parami wykonano łącznie 36porównań; korekta Bonferroniego daje próg , który jest spełniony przez wszystkie pary (), co potwierdza robustność wniosków wobec wielokrotnych porównań.

Workload CPU-bound. Bun zużył J mediany energii pakietu, co stanowi redukcję o względem Node.js (J) i względem Deno (~J). Różnica między Node.js a Deno jest mniejsza — wynosi — i jest statystycznie istotna (), lecz nieistotna praktycznie. Wynik potwierdza hipotezę H1: JavaScriptCore (Bun) jest energetycznie bardziej efektywny niż V8 (Node.js, Deno) dla synchronicznych workloadów obliczeniowych.

Workload I/O-bound. Najsilniejsza z obserwowanych różnic: Bun zużył J, czyli o mniej niż Node.js (J) i mniej niż Deno (J). Deno z kolei jest o lepszy od Node.js (). Tak duże różnice przy workloadzie I/O-bound wskazują, że implementacja asynchronicznego we/wy przez JavaScriptCore+~natywne API systemowe w Bun jest energetycznie znacznie efektywniejsza niż warstwa libuv w Node.js, zaś asynchroniczny runtime Tokio/Rust w Deno osiąga pośredni wynik.

Workload Memory-bound. Wynik odbiega od ogólnego trendu: Deno (J) jest o lepszy od Node.js (~J), natomiast Bun (~J) jest porównywalny do Node.js (, różnica ). Wynik sugeruje, że implementacja operacji na dużych tablicach w V8 (Node.js, Deno) wykazuje zróżnicowaną efektywność: Deno korzysta prawdopodobnie z agresywniejszych optymalizacji JIT dla operacji tablicowych przy długich sesjach, podczas gdy Bun nie uzyskuje tutaj przewagi JavaScriptCore.

Workload SSR. Jedyna kategoria, w której Node.js jest liderem energetycznym: ~J vs J (Deno, ) vs J (Bun, ). Workload SSR obejmuje renderowanie szablonów zintensywnym przetwarzaniem ciągów znakowych, w którym silnik V8 (Node.js) osiąga przewagę nad JavaScriptCore przy długich łańcuchach transformacji — co koresponduje z wynikami benchmarków wydajnościowych Laakso2.

Cold start. Bun zużył J na zimny start — o mniej niż Node.js (J) i mniej niż Deno (~J). Niższa energia zimnego startu Bun wynika z krótszego czasu inicjalizacji silnika JavaScriptCore w trybie AOT (Ahead-of-Time baseline JIT).

\centering figures/exp1_energy_boxplot.pdf{ \includegraphics[width=\linewidth]{figures/exp1_energy_boxplot}}{ \fbox{0.95\linewidth{\centering \textit{[Rysunek: boxploty energii per (runtime workload) — zostanie dodany po generacji wykresów]} }}} \caption{Rozkłady energii pakietu CPU~[J] per (runtime workload), powtórzeń. Dolne/górne krawędzie pudełka: Q1/Q3; wąsy: ; krzyżyki: wartości odstające. Wykresy na osi Y są niezależnie skalowane per workload.}

Rysunek~[→] prezentuje rozkłady energii. Niskie IQR (~J) i brak nakładania się rozkładów między runtimeami potwierdzają wysoką powtarzalność pomiarów i istotność różnic.

Odpowiedź na RQ2: Bun jest środowiskiem uruchomieniowym o najniższym zużyciu energii dla workloadów CPU-bound ( vs Node.js), I/O-bound (), Mixed REST () i cold start (). Deno przewyższa energetycznie Bun wyłącznie przy workloadach memory-bound ( vs Node.js).

Odpowiedź na RQ3: Typ workloadu determinuje wybór środowiska uruchomieniowego. Nie istnieje środowisko dominujące we wszystkich kategoriach: Bun wygrywa w 4z6kategorii, Node.js w1~(SSR), Deno w1(memory).

RQ4: Amortyzacja JIT — Energia w Funkcji Liczby Iteracji

Eksperyment JE-EXP-4 zbadał energię per iterację w~funkcji rozmiaru zadania (liczby iteracji ) dla workloadów CPU-bound i Mixed REST, per konfiguracja.

\centering \small \caption{Energia per iterację~[mJ/iter] dla workloadu CPU-bound w funkcji ~iteracji (#JE-EXP-4, ). Pogrubiono wartości dla , po stabilizacji JIT.}


| iteracji | Node.js~[mJ/iter] | Deno~[mJ/iter] | Bun~[mJ/iter] |

| 1 | 1017{,}9 | 1128{,}0 | 692{,}0 | | 5 | 211{,}5 | 231{,}9 | 140{,}8 | | 10 | 109{,}4 | 118{,}9 | 73{,}3 | | 50 | 63{,}1 | 67{,}3 | 37{,}7 | | 100 | 55{,}1 | 57{,}0 | 34{,}1 | | 500 | **45{,**1} | **45{,**8} | **30{,**4} | | 1000 | **43{,**7} | **43{,**6} | **30{,**0} | | 5000 | **42{,**0} | **41{,**7} | **29{,**4} |

Tabela~[→] oraz Rysunek~[→] ujawniają wyraźny efekt amortyzacji JIT dla V8~(Node.js, Deno): energia per iterację spada zok. mJ przy do ok.mJ przy — redukcja o. Plateau efektywności energetycznej osiągane jest wzakresie (zmiana między a wynosi ), co wyznacza \textbf{próg amortyzacji JIT} na poziomie ok.~~wywołań.

\centering figures/exp4_jit_amortisation.pdf{ \includegraphics[width=\linewidth]{figures/exp4_jit_amortisation}}{ \fbox{0.95\linewidth{\centering \textit{[Rysunek: krzywe amortyzacji JIT energia/iter vs N — zostanie dodany po generacji wykresów]} }}} \caption{Energia per iterację~[mJ/iter] w funkcji liczby iteracji~ (skala log) dla workloadów CPU-bound i Mixed REST. Linie pionowe oznaczają próg amortyzacji JIT ( dla V8).}

Bun osiąga plateau energetyczne szybciej — już przy (zmiana z~ do wynosi ), co wynika z braku wielopoziomowego kompilatora JIT w JavaScriptCore (brak odpowiednika Turbofan). Przy Bun jest o~ i~ efektywniejszy niż odpowiednio Node.js iDeno, natomiast przy różnica stabilizuje się na — zbieżna z wynikami workloadu CPU-bound z~#JE-EXP-1. Wynik ma bezpośrednie implikacje dla środowisk FaaS: funkcje serverless wywoływane rzadziej niż ok.~500 razy per instancja (typowe dla niskiej intensywności ruchu) są energetycznie znacznie droższe dla V8 niż wynikałoby z pomiarów steady-state.

Odpowiedź na RQ4: Próg amortyzacji JIT dla V8 (Node.js, Deno) wynosi wywołań, po którym energia per iterację stabilizuje się wodległości od asymptoty. Bun (JavaScriptCore bez Turbofan) osiąga plateau przy , ale zachowuje stałą przewagę energetyczną () nad V8 niezależnie od.

RQ4 (cd.): Idle Power i Parametry Keep-alive (#JE-EXP-5)

Eksperyment JE-EXP-5 wyznaczył parametry modelu energetycznego keep-alive dla środowisk FaaS: moc w stanie spoczynku i~energię inicjalizacji instancji , per konfiguracja.

Uwaga terminologiczna: w tym eksperymencie oznacza całkowity koszt energetyczny uruchomienia ciepłej instancji — obejmuje spawn procesu, załadowanie modułów i~wykonanie wywołań rozgrzewkowych do ustabilizowania JIT. Wartość ta (J) jest ok.10-krotnie wyższa niż energia pierwszego zimnego żądania HTTP zTab.[→] (~J), ponieważ JE-EXP-1 mierzył wyłącznie energię spawnu procesu do pierwszej odpowiedzi HTTP, natomiast w modelu LACE-RL obejmuje pełen koszt doprowadzenia instancji do stanu steady-state JIT.

\centering \small *Parametry energetyczne keep-alive (#JE-EXP-5, ). P_{\text{idle* mocy przy braku obciążenia~[W]; E_{cold}\lambda_{idle} = P_{idle} / P_{active}P_{sys} = 3{,}10$~W (baseline systemowy).}


| Runtime | [J] | [W] | ~[W] | |

| Node.js v24.15.0 | 3{,}49 | 3{,}05 | 14{,}90 | 0{,}205 | | Deno 2.8.1 | 3{,}58 | 3{,}01 | 14{,}92 | 0{,}202 | | Bun 1.3.14 | 3{,}49 | 3{,}15 | 15{,}31 | 0{,}206 |

| System (brak rt) | — | 3{,}10 | — | — |

Wyniki (Tabela~[→]) ujawniają zaskakującą jednorodność: dla wszystkich trzech runtimeów mieści się w przedziale W ijest niemal identyczna z poziomem systemowym (~W). Oznacza to, że uruchomiony, ale nieaktywny proces runtimes nie generuje mierzalnego narzutu energetycznego ponad baseline systemu. Współczynnik jest zbieżny z domyślną wartością założoną w modelu LACE-RL (, Sun et al.~2026), co empirycznie waliduje założenia modelu dla wszystkich trzech badanych runtimeów.

Energia zimnego startu J jest porównywalna dla Node.js iBun, nieco wyższa dla Deno (~J). Przy mocy aktywnej ~W i ~W, próg amortyzacji zimnego startu (liczba żądań obsługiwana przez ciepłą instancję zamiast zimnego startu, przy założeniu czasu obsługi żądania ~s) wynosi ~żądania, co praktycznie oznacza, że utrzymywanie ciepłej instancji (keep-alive) jest energetycznie korzystne już od pierwszego żądania.

RQ5: Model Decyzyjny TOPSIS — Energia vs Latencja

Eksperyment JE-EXP-3 zastosował model TOPSIS do porównania rekomendacji runtimeów przy optymalizacji energetycznej~(, , ) z~podejściem latency-only.

\centering \small \caption{Rekomendacje TOPSIS vs latency-only per workload (#JE-EXP-3). Pogrubiono przypadki rozbieżności.}


| Workload | TOPSIS (energia latencja) | Latency-only |

| CPU-bound | Bun | Bun | | I/O-bound | Bun | Bun | | Mixed REST | Bun | Deno | | Memory | Deno | Deno | | SSR | Node.js | Node.js | | Cold start | Bun | Bun |

Model TOPSIS (Tabela~[→]) daje rekomendację odmienną od latency-only w~z kategorii workloadów (): dla workloadu Mixed REST TOPSIS wskazuje Bun (energetycznie tańszy o~), podczas gdy latency-only preferuje Deno (szybszy o~~ms — remis w medianach). Analiza wrażliwości wykazała, że ta rozbieżność jest stabilna: dla każdej badanej kombinacji wag odsetek odmiennych rekomendacji wynosi niezmiennie , co wskazuje, że rozbieżność wynika ze struktury danych (bardzo zbliżone mediany latencji Bun i Deno przy Mixed REST), a nie z przyjętych wag.

Wynik nie osiągnął zakładanego progu różnych rekomendacji sformułowanego whipotezie EXP-3. Świadczy to, że dla badanego zestawu workloadów serverless i dwóch kryteriów (energia, latencja) obydwa podejścia prowadzą do zbieżnych rekomendacji wz przypadkach. Jest to wynik istotny: optymalizacja wyłącznie latencji prowadzi do energetycznie optymalnego wyboru w~ kategorii — co ogranicza uzasadnienie dla złożonego modelu MCDM w prostych scenariuszach wdrożeniowych, choć nie eliminuje go dla środowisk wielokryterialnych.

Odpowiedź na RQ5: Model TOPSIS z wagami energetycznymi różni się od latency-only w~ kategorii workloadów ( z~). Ranking TOPSIS jest stabilny na zmiany wag, adominującym środowiskiem w rankingu wielokryterialnym pozostaje Bun (4z6 workloadów) — identycznie jak woptimizacji latencji.

RQ6: Walidacja Cross-Platform — Stabilność Rankingów

Eksperyment JE-EXP-1 powtórzono wcałości na platformie P2 (Intel Xeon E-2176G, Coffee Lake, 6C/12T, TDP80W). Cel: zweryfikować, czy rankingi energetyczne uzyskane naP1 (Skylake, 4C/8T, TDP65W) są specyficzne dla mikroarchitektury, czy~też odzwierciedlają właściwości silników JS niezależne od sprzętu.

\centering\small \caption{Stabilność rankingów energetycznych między platformami. N~=Node.js, D=Deno, B=~Bun (posortowane rosnąco). = zmiana mediany lidera: P2 vs P1.}


| Workload | Ranking P1 | Ranking P2 | Zgodny | ~[%] |

| CPU-bound | B D N | B D N | \checkmark | | | I/O-bound | B D N | B D N | \checkmark | | | Memory-bound | D B N | D B N | \checkmark | | | SSR | N D B | N D B | \checkmark | | | Mixed REST | B D N | B D N | \checkmark | | | Cold Start | B N D | B N D | \checkmark | |

| 3{l}{Ranking zgodny w 6/6 workloadów} | | |

Tabela~[→] pokazuje, że wszystkie sześć rankingów jest identycznych na obu platformach ( stabilność). Wartości bezwzględne energii są wyższe na P2 (), co wynika zwyższego TDP procesora (80W vs 65W) iwiększej liczby rdzeni (6C vs 4C). Proporcje między runtimeami zachowują się jednak spójnie: Bun pozostaje liderem energetycznym przy I/O-bound ( vs Node.js na P2, na P1), a~Node.js przewodzi przy SSR na obu platformach ( vs Bun na P2).

\centering figures/cross_platform_bars.pdf{ \includegraphics[width=\linewidth]{figures/cross_platform_bars}}{ \fbox{0.95\linewidth{\centering \textit{[Rysunek: wykres słupkowy porównania P1 vs P2 — zostanie dodany po generacji wykresów]} }}} \caption{Porównanie median energii pakietu CPU [J] na platformach P1 (i7-6700) i~P2 (E-2176G). Rankingi wewnętrzne (kolejność słupków) identyczne na obu platformach.}

Platforma P2 udostępnia domenę RAPL DRAM (intel-rapl:0:2), niedostępną naP1. Analiza wykazała, że energia DRAM stanowi energii pakietu CPU wzależności od workloadu, z~najwyższym udziałem przy operacjach memory-bound (). Potwierdza to, że brak domeny DRAM na P1 mógł prowadzić do niedoszacowania całkowitego kosztu energetycznego workloadów pamięciocentrycznych.

Odpowiedź na RQ6: Rankingi energetyczne Node.js/Deno/Bun są \textbf{w100% stabilne} między mikroarchitekturami Skylake (2015) i Coffee Lake (2018). Wartości bezwzględne skalują się zTDP platformy, lecz proporcje między runtimeami różnią się o~mniej niż punkty procentowe między platformami, co potwierdza generalizowalność wyników P1 na klasy platformy x86-64.

Podsumowanie Wyników

\centering \small Zbiorcze odpowiedzi na pytania badawcze.


| Pytanie badawcze | Odpowiedź |

RQ1 Metodologia pomiaru & dla V8 i JavaScriptCore; wpływ GC na medianę . \ \addlinespace RQ2 Który runtime jest energetycznie najlepszy? & Bun (4 z 6 workloadów); Node.js najlepszy przy SSR; Deno przy memory-bound. \ \addlinespace RQ3 Zależność od typu workloadu? & Silna: Bun vs Node.js przy I/O-bound, ale przy SSR. Żaden runtime nie dominuje we wszystkich kategoriach. \ \addlinespace RQ4 Amortyzacja JIT & Próg amortyzacji V8: wywołań. Bun plateau przy . Przy różnice między runtimeami odwracają się względem steady-state. \ \addlinespace RQ5 Model decyzyjny & — identyczne dla wszystkich 3 runtimeów. TOPSIS różni się od latency-only w przypadków (workload Mixed REST). \ \addlinespace RQ6 Walidacja cross-platform & Rankingi 100% stabilne (6/6 workloadów) między Skylake (P1) a Coffee Lake (P2). Proporcje między runtimeami różnią się p.p. między platformami. \


Bibliografia

Footnotes

  1. Pereira et al. (2017). Energy Efficiency Across Programming Languages: How Do Energy, Time, and Memory Relate?. Proceedings of the 10th ACM SIGPLAN International Conference on Software Language Engineering (SLE 2017).

  2. Laakso (2025). The Next Generation of Server-Side JavaScript Runtimes: Node.js, Deno and Bun. Turku University of Applied Sciences.