Jest to logiczna kontynuacja naszej metodologii testów porównawczych , tym razem zastosowana do konkretnego wskaźnika. Aby uzyskać szczegółowe informacje na temat architektury naszych funkcji Edge, zobacz nasz podstawowy artykuł na tematarchitektury Rust Aurabaselub nasze porównanie Wasmtime vs Wasmer pod kątem różnic architektonicznych pomiędzy dwoma środowiskami wykonawczymi.
Najważniejsze
Zimny start zestawu WebAssembly dodaje kilka faz (ładowanie, zatwierdzanie, kompilacja lub łączenie, tworzenie instancji, pierwsze wywołanie), a dwie liczby, które nie obejmują tych samych faz, nie są porównywalne, nawet jeśli wyświetlają tę samą jednostkę. Wasmer reklamuje Instaboot jako bezpośrednią reakcję marketingową na ten temat, ale jego osoby publiczne nie są tu uwzględnione bez zdezagregowanej metodologii. Aurabase uruchamia wasmtime w wersji 43 jako zależność produkcyjną dla swoich funkcji Edge (zweryfikowanych w aura-functions/Cargo.toml), ale do tej pory nie opublikował żadnych powtarzalnych testów porównawczych zimnego startu. W tym artykule nie podano żadnych danych dotyczących Aurabase: tematem jest metoda.
Dlaczego zimny start WebAssembly po raz kolejny stał się kwestionowanym argumentem marketingowym
Zimny start po raz kolejny stał się osią komercyjnego zróżnicowania środowisk wykonawczych WebAssembly, a nie tylko przedmiotem badań akademickich. Wasmer wyraźnie podkreśla tę zaletę, oferując funkcję o nazwie Instaboot, przedstawioną jako bezpośrednia odpowiedź na problem zimnego rozruchu.
Odruch ten dokładnie przypomina dynamikę udokumentowaną już w naszym artykule na temat metodologii testów porównawczych backendu: kilku konkurujących dostawców wyświetla dane dotyczące wydajności na swoich stronach produktów, nie zawsze określając protokół, który je wygenerował. Wartość zimnego startu bez metody nie dowodzi niczego więcej niż wartość opóźnienia bez metody.
Liczba zimnego startu opublikowana na stronie marketingowej, bez materiału, bez nakładu pracy i bez jasnego określenia punktu początkowego i końcowego pomiaru, jest nie do odróżnienia od sloganu. Dotyczy to wszystkich środowisk wykonawczych cytowanych w tym artykule, w tym Aurabase w dniu publikacji figurki.
Co właściwie mierzy zimny start i dlaczego definicja zmienia wszystko
Zimny start nie jest pojedynczą operacją: jest to suma odrębnych faz, a dwóch dostawców niekoniecznie mierzy te same fazy pod tą samą nazwą.
| Załadunek | Odzyskiwanie modułu .wasm: sieciowego, dysku lub już obecnego w pamięci |
|---|---|
| Walidacja | Sprawdzanie struktury kodu bajtowego zestawu WebAssembly przed wykonaniem |
| Kompilacja lub linkowanie | JIT w locie (Cranelift, LLVM) lub łączenie już prekompilowanego artefaktu (AOT) |
| Instancja | Alokacja pamięci liniowej, tabel i globali, wykonanie ewentualnej funkcji startu |
| Pierwsze połączenie | Samo rozpatrzenie wniosku, czasem uwzględnione w ogłoszonej kwocie, czasem wyłączone |
Liczba, która liczy tylko instancję modułu już załadowanego i już wkompilowanego w pamięć, będzie mechanicznie wyglądać lepiej niż figura obejmująca ładowanie i kompilację sieci. Żadne z nich nie jest samo w sobie fałszywe: problem pojawia się, gdy je porównamy, nie określając, który z nich został zmierzony.
Co pokazuje literatura akademicka i dlaczego jej liczby nie są ze sobą porównywalne
W pracach akademickich opublikowanych w ostatnich latach jako wydruk wstępny w arXiv zmierzono czas tworzenia instancji modułów WebAssembly w różnych środowiskach wykonawczych. Punktem wspólnym tych prac nie jest liczba zbieżna: jest to znacząca różnica w zależności od testowanego czasu działania, wielkości modułu i użytego sprzętu.
Dobrowolnie nie zamieszczamy w tym artykule żadnych dokładnych danych liczbowych zaczerpniętych z tych publikacji. Bez dokładnego sprawdzenia metodologii każdego artykułu w momencie jego pisania, ponowne opublikowanie pojedynczej liczby dokładnie odtworzyłoby problem dokumentowany w tym artykule: liczbę bez kontekstu, który pozwoliłby nam dowiedzieć się, co tak naprawdę mierzy.
Z drugiej strony to, czego uczy się ta wariancja, jest bezpośrednio przydatne: zimny start silnie zależy od kontekstu pomiaru, dokładnie tak, jak przypomina dyscyplina parzystości środowiska opisana w naszym artykule dotyczącym ogólnej metodologii (identyczny sprzęt, ten sam region, ten sam stan pamięci podręcznej dla wszystkich porównywanych systemów).
Wasmtime, Wasmer, WasmEdge: różne priorytety kompilacji
Trzy niezależne środowiska wykonawcze WebAssembly, najczęściej cytowane w tej debacie, nie równoważą w ten sam sposób szybkości kompilacji i wydajności wykonania, co częściowo wyjaśnia, dlaczego ich dane dotyczące zimnego startu nie są porównywalne w poszczególnych terminach.
| Czas Was | Zaplecze kompilacji Cranelift, z historycznie możliwą trasą prekompilacji przed wdrożeniem | Używany w produkcji przez Aurabase dla funkcji Edge |
|---|---|---|
| Wasmer | Od dawna dokumentował kilka wymiennych backendów, w tym backend zaprojektowany pod kątem szybkości kompilacji, a nie wydajności w czasie wykonywania | Markets Instaboot, ponowne uruchomienie poprzez migawkę już zainicjowanej instancji |
| WasmEdge | Pozycjonowanie publiczne skupiało się na szybkim starcie i posiadało własny argument konkurencyjny | Alternatywne środowisko uruchomieniowe jest również aktywne w tym obszarze marketingowym |
Architektury te są publicznie dokumentowane w samych projektach. Na potrzeby tego artykułu nie weryfikowaliśmy ich ponownie wersja po wersji i nie stanowią one rankingu wydajności. Wyjaśniają jedynie, dlaczego trzy wartości zimnego rozruchu wyświetlane dla trzech różnych czasów pracy mogą być dokładne, a jednocześnie nieporównywalne ze sobą.
Aby zapoznać się ze wszystkimi szczegółami architektonicznymi pomiędzy dwoma środowiskami wykonawczymi, które są najczęściej przeciwstawiane w dyskusjach bezserwerowych, zobacz nasze dedykowane porównanie Wasmtime vs Wasmer.
Co pokazuje Instaboot, a czego sama strona produktu nie dowodzi
Zgodnie z pozycją produktu, którą Wasmer komunikuje publicznie, Instaboot przywraca instancję już zainicjowaną przez mechanizm migawki, zamiast ponownie uruchamiać pełne uruchomienie przy każdym żądaniu. To prawdziwy wybór architektoniczny, zgodny z problemem, którego dotyczy.
Artykuł ten nie zawiera jednak powtórzenia parametrów wydajności wyświetlanych na stronie produktu Wasmer. Nie wiedząc, jaki sprzęt, przy jakim obciążeniu pracą i jaki protokół pomiarowy wygenerował tę liczbę, ponowna jej publikacja popełniłaby dokładnie błąd opisany powyżej: traktowanie liczby marketingowej jako niezależnego wyniku testu porównawczego.
Liczba taka jak „zimny start krótszy niż 1 ms” została już opublikowana publicznie, w tym w poprzedniej zawartości Aurabase, bez poparcia powtarzalnym punktem odniesienia. Jest teraz traktowany wewnętrznie jako nieobsługiwany. Ta sama zasada dotyczy wszelkich liczb wyświetlanych przez konkurencyjne środowisko wykonawcze, w tym Instaboot, o ile nie towarzyszy temu żadna zdezagregowana metodologia.
Co Aurabase może dzisiaj powiedzieć o swoim własnym zimnym rozruchu, a czego nie może
Aurabase uruchamia funkcje Edge na platformie Wasmtime w fazie produkcyjnej, a nie w ramach projektu pilotażowego. Oto dokładnie, na co pozwala złożenie wniosku i gdzie kończy się to roszczenie.
Zależność jest deklarowana jako twarda, z aktywowanymi funkcjami async i cranelift w zależnościach produkcyjnych usługi, a nie w dev-dependency ani komentarzu:
Czego ten plik nie mówi: w repozytorium dla tego środowiska wykonawczego nie istnieją obecnie żadne dane dotyczące zimnego startu zmierzone zgodnie z protokołem opisanym w naszej metodologii testów porównawczych . Do czasu opublikowania datowanego pomiaru ze zdezagregowanymi percentylami, sprzętem i obciążeniem pracą nie należy podawać żadnych wartości Aurabase jako zmierzonej cechy produktu. Ogólną architekturę platformy można znaleźć w naszym artykule filarowym Architektura Aurabase Rust. Konkretne porównanie pomiędzy WASM uruchamianym na zimno a kontenerem uruchamianym na zimno, niezależnie od poruszanej tutaj kwestii metodologicznej, można znaleźć w naszym dedykowanym artykule WASM vskontenery.
Jak odczytać numer zimnego startu, zanim w to uwierzysz
Siedem pytań, które należy zadać każdemu, kto zaczyna grę na zimno, łącznie z naszymi w dniu premiery.
- Jakie fazy są uwzględnione? Ładowanie sieci, sprawdzanie poprawności, kompilacja, tworzenie instancji, pierwsze wywołanie: liczba, która liczy tylko część, nie jest porównywalna z liczbą, która liczy je wszystkie.
- Czy moduł był naprawdę „zimny”? Moduł znajdujący się już w pamięci lub pamięci podręcznej dysku nie testuje tego samego, co moduł ładowany po raz pierwszy.
- Kompilacja JIT czy prekompilowany artefakt (AOT)? Obie strategie mają strukturalnie różne koszty początkowe.
- Jednocyfrowa czy dystrybucja? Najlepszy wynik w dziesięciu nie ma takiej samej wartości jak p95 w tysiącu przebiegów.
- Określono sprzęt i region? Rysunek bez specyfikacji sprzętowej nie może być reprodukowany przez osoby trzecie.
- Porównanie przy równym obciążeniu i topologii? Porównanie własnego środowiska wykonawczego z usługą zarządzaną bez raportowania tego zniekształca odczyt.
- Data i wersja przetestowanego środowiska wykonawczego? Niedatowana liczba w projekcie, który szybko się rozwija, po kilku miesiącach nic nie znaczy.
Często zadawane pytania
Cytowane źródła zewnętrzne: publiczna dokumentacja produktu Wasmer (Instaboot), publiczna dokumentacja projektu Wasmtime (Bytecode Alliance), z którą konsultowano się w ramach przygotowań do tego artykułu, bez niezależnego podwójnego sprawdzania przedstawionych w nich danych dotyczących wydajności.