🔒 TouchQuill jest w fazie zamkniętych testów.Chcesz go wypróbować? Napisz do nas →
Benchmarki

Jak to zmierzyliśmy

Każda liczba to realny czas, który czekasz, aż Twoja zmiana dojdzie do serwera albo zmiana kolegi dojdzie do Ciebie. Ta sama operacja, te same pliki, w TouchQuill, Git, Git LFS i Perforce, na łączach od szybkiego biurowego po wolne komórkowe. Mediana z kilku prób. Benchmarki możesz pobrać i powtórzyć te pomiary u siebie.

Realne, end-to-end, po sieci

Czas, który naprawdę czekasz

Każdy słupek to cały czas, który człowiek czeka: zmiana robi pełną drogę do serwera i z powrotem. Systemy ułożone od najszybszego, więc kolejność zmienia się z wykresu na wykres. Wygrywamy w codziennej pracy, przy wysyłaniu i odbieraniu zmian; pierwsze pełne pobranie to miejsce, gdzie mamy jeszcze do nadrobienia.

Wyślij zmianę w jednym wielkim pliku najszybszy
Pojedyncza binarka 60 MB. Zmieniasz w niej ~1 MB i wysyłasz. Słupek to cały czas oczekiwania: lokalny zapis commita, potem wysyłka. Łącze biurowe, 100 Mbit.
★ TouchQuill
597 ms
Git
2.25 s
Perforce
5.22 s
Git LFS
5.53 s
Pobierz zmianę kolegi (ten sam plik) najszybszy
Ktoś zmienił ~1 MB w tym pliku 60 MB. Ty pobierasz jego zmianę. Słupek to pełny czas jej odebrania. Łącze biurowe, 100 Mbit.
★ TouchQuill
609 ms
Git
1.59 s
Perforce
5.18 s
Git LFS
5.46 s
Wyślij zmiany w repo pełnym binarek najszybszy
Repozytorium wielu binarek (2 do 100 MB każda). Ruszasz ~10% zawartości i wysyłasz. Słupek to commit plus wysyłka, od początku do końca. Łącze biurowe, 100 Mbit.
★ TouchQuill
1.81 s
Git
2.77 s
Perforce
5.66 s
Git LFS
6.09 s
Wyślij zmianę w repo assetów najszybszy
200 assetów po 2 MB (razem 400 MB). Zmieniasz ich część i wysyłasz. Słupek to cały zapis i wysyłka. Szybki LAN, 1 Gbit.
★ TouchQuill
252 ms
Git LFS
493 ms
Git
560 ms
Perforce
1.98 s
Pierwsze pobranie repo dużych binarek 3. z 4
Świeży klon repozytorium z dużych plików binarnych: pobranie plus zapis każdego pliku na dysk. Tu wciąż jesteśmy za Perforce i Git LFS, choć przed samym Gitem. Szybki LAN, 1 Gbit.
Perforce
655 ms
Git LFS
897 ms
★ TouchQuill
923 ms
Git
1.80 s
Pierwsze pobranie repo assetów 3. z 4
Świeży klon repozytorium pełnego assetów, z odtworzeniem wszystkich plików lokalnie. Ta sama historia: pierwsze pełne pobranie to miejsce, gdzie mamy najwięcej do zyskania. Światłowód domowy, 300 Mbit.
Perforce
5.27 s
Git LFS
6.68 s
★ TouchQuill
8.58 s
Git
42.1 s
Wyślij cały projekt pierwszy raz 2. z 4
Nowe repozytorium: cały projekt (mieszanka assetów gry, ~170 MB) commitowany i wysyłany na pusty serwer. Słupek to commit plus wysyłka, od początku do końca. Szybki LAN, 1 Gbit.
Git LFS
2.07 s
★ TouchQuill
2.46 s
Perforce
2.76 s
Git
7.54 s
fsmonitor

Sprawdza tylko to, co się zmieniło

Demon nasłuchuje zmian w systemie plików (inotify / FSEvents / ReadDirectoryChangesW), więc status i commit nie obchodzą całego drzewa. Cross-platform, zweryfikowany na Linux i Windows.

Operacjabez fsmonitorz fsmonitor
commit przyrostowy, 5000 płytkich plików60 ms40 ms
status, 5000 plików28 ms21 ms
commit, głębokie drzewo19 ms15 ms
Transfer i sieć

Co idzie po łączu, a co zostaje

Serwer i klient nie przesyłają surowych bajtów. Trzy mechanizmy, kompresja, transfer deltowy i cache biurowy, sprawiają, że przez łącze przechodzi ułamek tego, co widzi dysk. Wszystkie zmierzone na działającym serwerze przez LAN (TLS włączony).

ScenariuszNa dysku / w repoNa łączu
Push korpusu kodu (kompresja zstd)78 MB15 MB (5,2:1)
Re-commit pliku 200 MB po zmianie 1 MB (chunking)200 MB~3 MB

Kompresja. Kod i pliki tekstowe zstd ściska średnio około pięć razy, więc wysłanie 78 MB kodu po sieci lokalnej zajmuje 1,4 s. Pliki, które są już skompresowane, tekstury, dźwięk, wideo, na kompresji nic nie zyskują, więc idą w całości, bez marnowania czasu na próby ich ściskania.

Wysyłanie samych zmian. Kiedy poprawiasz mały wycinek dużego pliku binarnego, powiedzmy jednej tekstury albo modelu ważącego kilkaset megabajtów, TouchQuill nie wysyła całego pliku od nowa. Rozbija go na kawałki i przez łącze (oraz na dysk) idą tylko te, które naprawdę się zmieniły. W pomiarze: zmiana 1 MB w pliku 200 MB to około 3 MB transferu, nie 200 MB.

Równoległe pobieranie. Duże pobrania lecą ośmioma strumieniami naraz, żeby wykorzystać całą przepustowość. Pierwsze ściągnięcie całego repozytorium, 2,1 GB assetów z Unreala, zajmuje około 19 s po sieci 1 GbE.

Edge Proxy dla biura. Zdalny zespół za jednym łączem stawia w LAN proxy, które cache'uje obiekty z centrali. Pierwsza osoba pobiera duży asset z serwera, reszta dostaje go z proxy po lokalnej sieci. Adresowanie treścią sprawia, że cache nigdy nie jest nieświeży: jeśli hash się zgadza, plik jest poprawny.
Wnioski

Uczciwy bilans

✓ Duże binaria

Wysłanie zmiany w dużej binarce jest prawie 4× szybsze niż w Gicie i 9× niż w Git LFS (plik 60 MB, po sieci). To scenariusz, dla którego ten system powstał.

✓ Repo assetów

Wysłanie zmiany w repo assetów jest szybsze niż w Gicie i Perforce (repo 400 MB, po sieci).

✓ Integralność

Hash BLAKE3 na każdym obiekcie pozwala wykryć każde przekłamanie danych. Perforce tej gwarancji nie daje.

≈ Drobne pliki tekstowe

Na tysiącach drobnych plików tekstowych Git nadal jest szybszy: jego binarny indeks dojrzewał 20 lat. Przyjmujemy to świadomie: to profil typowego projektu software, nie gry.