Przejdź do treści

Benchmarki

Mierz FastFence na sprzęcie i z polityką, których zamierzasz używać. Lokalne sprawdzenie reguły tekstowej, pełne wywołanie bramki i żądanie oceniane przez Layę wykonują różną pracę. Wyniki poniżej wskazują, którą ścieżkę zmierzono.

Pełna ścieżka czatu HTTP — 1.0.3 i kandydat 1.0.4

Wybrane scenariusze niezależnego laboratorium powtórzono dla 2000 tożsamości, 10 tenantów, 64 reguł dosłownych i dwóch żądań na tożsamość. Model zastępował serwer HTTP z opóźnieniem 20 ms; Laya była wyłączona. Każda próba oczekiwała 2800 dozwolonych odpowiedzi i 1200 blokad. Sprawdzono wersje paczek zainstalowanych poza repozytorium; 1.0.4 pochodziła ze zbudowanego wheel kandydata, jeszcze przed publikacją w PyPI.

Paczka Równoległość Próba Poprawne / żądania p95 (ms) Żądania/s
1.0.3 50 initial 3998/4000 842.7 160.5
1.0.3 250 initial 3999/4000 6949.8 65.0
1.0.4 50 initial 4000/4000 752.7 182.6
1.0.4 250 initial 3956/4000 5616.0 150.2
1.0.4 250 repeat 4000/4000 6190.8 122.8
1.0.3 250 repeat 3994/4000 7047.0 61.0

Pokazujemy wszystkie przebiegi, również nieudaną próbę kandydata. Miała 44 błędy: 43 błędy połączenia generatora z aplikacją oraz jedno 502 aplikacji; powtórka przeszła. Wersja bazowa także miała błędy transportu. Ta zmienność nie pozwala uznać dużej współbieżności za naprawioną. Są to wyniki całej ścieżki, a nie pomiar narzutu silnika polityk.

Aplikacja ma pulę 100 połączeń do bramki. Czekanie w tej puli wlicza się do p95, natomiast czekanie na slot współbieżności generatora jest pominięte. Wszystkie procesy działały na tym samym Apple M3 Pro z 18 GiB RAM; limitów gniazd systemowych nie zmieniano. Porównanie nie obejmuje prawdziwej inferencji, długich odpowiedzi ani 1000 równoległych rozmów. Wszystkie przebiegi i ograniczenia.

OFF / deterministyczne / semantyczne — paczka 1.0.2

Rzeczywiste pomiary z publicznej paczki PyPI 1.0.2, wykonane 4 października 2026 na Apple M3 Pro. Wszystkie wiersze używają tej samej krótkiej syntetycznej treści i odpowiedzi narzędzia, współbieżność 1. OFF i kontrole deterministyczne zmierzono razem; Layę w osobnym przebiegu na tej samej maszynie.

Tryb Próbek + rozgrzewka p50 (ms) p95 (ms) p99 (ms)
OFF — odpowiedź syntetyczna 2000 + 100 0.000125 0.000167 0.000208
Kontrole deterministyczne ON 2000 + 100 0.206125 0.247500 0.643750
Laya semantyczne ON — wejście i wyjście 20 + 2 1117.160333 1199.532000 1222.141500

OFF omija wszystkie kontrole, walidację tożsamości, budżety i audyt. Mierzy jedynie stałą odpowiedź funkcji bez I/O; wartości bliskie rozdzielczości timera nie reprezentują opóźnienia rzeczywistego modelu ani API. Nie ekstrapoluj z nich produkcyjnej przepustowości. Pomiary ON obejmują wykonane kontrole; semantyczny dodatkowo dwie rzeczywiste oceny Qwen. Wszystkie trzy warianty pomijają wejściowy transport bramki HTTP/MCP oraz generowanie modelu biznesowego. Pomiar Laya obejmuje komunikację z lokalną Ollamą podczas oceny.

Raport OFF i deterministic ON zachowuje także pomiar współbieżności 8 i rzeczywisty wolniejszy ogon p99. Raport semantic ON ma tylko 20 próbek: p99 jest tu największą obserwacją, nie stabilnym oszacowaniem ogona rozkładu. Szczegóły środowiska i zakresu podano poniżej.

Wyniki paczki 1.0.2 — 4 października 2026

Pomiar uruchomiono z wyeksportowanego ZIP na publicznej paczce PyPI 1.0.2, zainstalowanej w nowym środowisku poza checkoutem. Sprawdzono pochodzenie importów, wszystkie oczekiwane decyzje i rozliczenie budżetu.

Apple M3 Pro, 11 logicznych CPU, 18 GiB RAM, macOS 27.0.1 arm64, Python 3.12.12, Pydantic 2.13.5 i detect-secrets 1.5.0. Jeden proces, 2 000 próbek i 100 wywołań rozgrzewki na wiersz: łącznie 12 000 pomiarów i 600 wywołań rozgrzewki. Pomiar wykonano o 00:12 UTC.

Zakres: pełne wywołanie silnika przez API Pythona, detect-secrets, budżety w pamięci i audyt. Kontrola semantyczna wyłączona; syntetyczna odpowiedź narzędzia bez opóźnienia. Bez HTTP/MCP i generowania modelu biznesowego. Wejścia mają 31, 45 i 38 bajtów odpowiednio dla dozwolonego żądania, sygnatury i uprawnień.

Ścieżka Współbieżność p50 (ms) p95 (ms) Żądań/s
Dozwolone żądanie 1 0.204625 0.227500 4757.87
Blokada sygnatury 1 0.031125 0.038167 29740.33
Blokada uprawnień 1 0.012000 0.015167 76225.32
Dozwolone żądanie 8 0.203834 0.228625 4681.31
Blokada sygnatury 8 0.031625 0.037333 27566.10
Blokada uprawnień 8 0.012042 0.014542 63487.61

Pełny raport JSON zawiera także p99, zużycie pamięci procesu i sumy kontrolne obciążeń. Większa współbieżność nie poprawiła tutaj przepustowości; to jeden proces z lokalną pracą CPU. Tych wyników nie należy utożsamiać z czasem domyślnego żądania ocenianego przez Layę.

Rzeczywista ocena Laya: wejście i wyjście

Osobny pomiar na tej samej maszynie i publicznej paczce 1.0.2 użył Laya + qwen3:4b (Q4_K_M). Próg 0.7, limit czasu 60 s, ocena wyjścia włączona. Każdy wiersz obejmuje 20 mierzonych żądań i 2 wywołania rozgrzewki, współbieżność 1. Raport zapisano o 00:13 UTC.

Ścieżka p50 (ms) p95 (ms) Żądań/s Wywołań oceny z rozgrzewką
Dozwolone żądanie, ocena wejścia i wyjścia 1117.160333 1199.532000 0.88 44
Wczesna blokada sygnatury 0.034042 0.042167 24451.13 0
Wczesna blokada uprawnień 0.013000 0.017166 51847.05 0

Dozwolone żądanie wykonuje dwie rzeczywiste oceny modelu. median_ms wyniósł 1119.5705 ms; p50 w tabeli używa metody najbliższej rangi, a nie średniej dwóch środkowych obserwacji. Wczesne blokady nie wywołują modelu.

To krótka próba z powtarzanym, stałym promptem i rozgrzanym modelem; cache prefiksów/KV Ollamy może pomagać. Wynik nie opisuje zimnego startu, zmiennych długich rozmów ani jakości wykrywania ataków. Odpowiedź narzędzia nadal jest syntetyczna. Pełny raport Laya zawiera pełny digest modelu, konfigurację i dowody rozliczenia.

Uruchom pomiar z zainstalowanej paczki

Zainstaluj uv, a następnie pobierz pakiet benchmarków. Pomiar deterministyczny nie wymaga checkoutu FastFence ani działającej bramki.

curl -L https://fastfence.dev/1.0.5/downloads/fastfence-benchmarks.zip -o fastfence-benchmarks.zip
uv run --no-project --python 3.12 python -m zipfile -e fastfence-benchmarks.zip benchmarks
uv run --no-project --python 3.12 python benchmarks/scripts/benchmark_package.py \
  --pypi-version 1.0.2 --samples 2000 --warmup 100 --concurrency 1 8 \
  --output results.json

Skrypt instaluje dokładnie wskazaną publiczną paczkę PyPI w nowym środowisku tymczasowym, sprawdza, że fastfence importuje się z zainstalowanej paczki, i uruchamia dołączone obciążenie poza Twoim projektem. Tworzy osobne syntetyczne polityki i tożsamości; nie korzysta z konfiguracji Twojej bramki i jej nie zmienia. Obok czasów zapisuje rzeczywiste wersje zależności, sprzęt, oczekiwane decyzje i kontrole rozliczania budżetu. Pierwsze uruchomienie może pobierać zależności Pythona; instalacja paczki nie wchodzi do mierzonego czasu.

Domyślny pomiar używa ścieżki deterministycznej i syntetycznej odpowiedzi narzędzia bez oczekiwania. Mierzy lokalną pracę kontroli; nie reprezentuje domyślnej ścieżki produktu z włączoną Layą. Współbieżność 1 i 8 to osobne pomiary, nie test skalowania poziomego.

Aby dodatkowo zmierzyć rzeczywistą Layę, uruchom Ollamę i wykonaj polecenie, gdy model nie obsługuje innych zadań:

uv run --no-project --python 3.12 python benchmarks/scripts/benchmark_package.py \
  --pypi-version 1.0.2 --semantic --samples 20 --warmup 2 --concurrency 1 \
  --output semantic-results.json

Ten pomiar przygotowuje skonfigurowane środowisko oceny i model w osobnym katalogu roboczym. Wywołania modelu, rozgrzewka i mierzone żądania mogą zużyć dużo czasu i pamięci. Odpowiedź docelowego narzędzia pozostaje syntetyczna, więc mierzymy kontrolę semantyczną z lokalnym wywołaniem, nie generowanie przez model biznesowy. Dwadzieścia próbek daje jedynie wstępny obraz opóźnień; zachowaj metadane modelu i środowiska oraz zwiększ liczbę próbek do rzetelnego porównania wolniejszych odpowiedzi.

Jak czytać pomiary

  • p50 to 50. percentyl opóźnienia (w raportach: metoda najbliższej rangi): połowa zmierzonych żądań zakończyła się w tym czasie lub szybciej.
  • p95 to czas, w którym zakończyło się 95% zmierzonych żądań. Opisuje wolniejsze żądania lepiej niż średnia.
  • p99 to 99. percentyl; małe próbki nie pozwalają wiarygodnie opisać tak rzadkich opóźnień.
  • Przepustowość to liczba zakończonych żądań podzielona przez rzeczywisty czas pomiaru, wyrażona w żądaniach na sekundę. Większa współbieżność może zwiększyć przepustowość i jednocześnie wydłużyć pojedyncze żądanie.
  • Rozgrzewka przygotowuje środowisko, ale jej wywołania nie wchodzą do próbki opóźnień. Nadal wpływają na cache, audyt i budżety.

Benchmark silnika mierzy pełne wywołania wewnątrz procesu, w tym skonfigurowane kontrole, rezerwację i rozliczanie budżetu w pamięci oraz ograniczony bufor audytu. Pomija transport HTTP/MCP, start procesu i odczyt konfiguracji. Wariant bez oczekiwania zwraca stałą syntetyczną odpowiedź; wariant z opóźnieniem celowo czeka 15 ms. Żaden z nich nie mierzy modelu biznesowego.

Ocena Laya wymaga osobnych pomiarów z rzeczywistym skonfigurowanym modelem. Włączenie kontroli semantycznych dodaje czas inferencji i może zmienić ścieżkę decyzji. Żądanie odrzucone przez regułę deterministyczną może całkowicie ominąć model. Raportuj te ścieżki osobno; szybka blokada wejścia nie określa czasu dozwolonego wywołania modelu.

Weryfikacja zachowania poza pomiarem szybkości

Publiczna paczka 1.0.2 przeszła 143/143 istniejących parametryzowanych regresji bezpieczeństwa, bez pominiętych przypadków. Testy uruchomiono w nowym środowisku poza checkoutem; połączenia sieciowe blokowano, a granice usług i oceny semantycznej były kontrolowane przez testy. To weryfikacja uprawnień, blokad, redakcji, budżetów, sygnatur i kompozycji kontroli — nie 143 nowych ataków ani pomiar skuteczności modelu. Raport testów paczki.

Osobne uruchomienie rzeczywistej paczki przez jedną komendę sprawdziło Layę, OCR i zmianę aktywnej polityki bez restartu: ALLOW v1 → BLOCK v2 → ALLOW v3 → blokada budżetu v4 → ALLOW v5 w tej samej instancji. Powtórny start zachował prywatny stan. Raport rzeczywistego przebiegu zawiera wyłącznie wyniki; bez promptów, odpowiedzi modelu i poświadczeń.

Zapisane pomiary z 3 października 2026

To historyczne pomiary rozwojowe, nie wyniki aktualnego wydania paczki. Raport transportu wskazuje FastFence 0.1.0. Raporty mikrobenchmarków nie określają wydania paczki; poniżej są linki do surowych raportów i kodu.

Raporty silnika i transportu zapisują Apple M3 Pro, 11 logicznych CPU, 18 GiB RAM, macOS 27.0.1 arm64 i Python 3.12.12. Użyto jednego procesu; wybrane wiersze poniżej mają współbieżność 1. Nie kontrolowano aplikacji w tle ani stanu energetycznego CPU.

Zmierzona ścieżka Próbek p50 (ms) p95 (ms) Żądań/s
Silnik, dozwolone żądanie, detect-secrets włączone, odpowiedź bez oczekiwania 2,000 0.131875 0.141625 7,530.61
Bramka HTTP, dozwolone żądanie, symulowany backend 15 ms 100 25.022 29.191 39.041
Jedna reguła dosłowna, wejście 128 bajtów, brak dopasowania 2,000 0.001083 0.001250 Nie mierzono
64 reguły dosłowne, wejście 65,536 bajtów, brak dopasowania 2,000 0.276750 0.317000 Nie mierzono
Odwracalny token AES-GCM, syntetyczny email, zamiana i przywrócenie 1,000 0.035250 0.035875 Nie mierzono

Wiersz silnika obejmuje 100 wyłączonych z pomiaru wywołań rozgrzewki; HTTP ma ich 20, reguły 100, a token 100. Pomiary reguł pomijają kontrole prywatności, budżety, audyt i transport. Pomiar tokenu pomija inicjalizację kluczy, dopasowywanie w większych danych, transport i modele; dotyczy symetrycznych tokenów FFR1, nie kopert RSA.

Pełne surowe raporty: silnik z detect-secrets, transport HTTP/MCP, dosłowne reguły tekstowe, bezstanowe tokeny. Zawierają zakres pomiaru i dodatkowe przypadki; wybór tych wierszy nie czyni obciążeń równoważnymi.

Powtarzalne porównania

Zachowaj surowy raport JSON z wersją paczki, Pythona i zależności, CPU/systemem/RAM, liczbą próbek, rozgrzewką, współbieżnością, rozmiarem danych i aktywnymi regułami. Dla pomiarów z modelem zapisz też model, czy był już załadowany oraz które etapy oceny wejścia i wyjścia wykonano. Porównuj takie samo obciążenie i współbieżność na tej samej maszynie.

Użyj odpowiedniej liczby próbek, aby zaobserwować wolniejsze żądania. p95 z dziesięciu próbek dostarcza bardzo mało informacji o najwolniejszych odpowiedziach. Powtarzaj pomiary i zachowuj błędy oraz nieoczekiwane decyzje; poprawna odpowiedź HTTP może nadal oznaczać blokadę żądania. Przerwij porównanie, jeżeli oczekiwane decyzje lub rozliczenie budżetu nie przechodzą walidacji.

Te liczby są obserwacjami na jednej maszynie deweloperskiej, nie SLA ani gwarancją wydajności. Nie odejmuj czasu endpointu health od chronionego żądania, aby wyznaczyć czysty narzut bezpieczeństwa: te endpointy wykonują różną pracę. Pomiar przepustowości nie mierzy również jakości wykrywania zagrożeń.