Zašto Dish izgleda kao žica.
Kašnjenje je jedina metrika koja je bitna kod kontrolera. Dish je oko nje izgrađen od prvog dana.
Budžet kašnjenja
Žičani Xbox kontroler pol-uje na 250 Hz na Windowsu. To znači da vaša igra može pročitati pritisak dugmeta do 4 ms nakon što se desio, samo od polling rate-a. Stavite 60 fps frejm na to i najgori slučaj prsta-do-piksela na žičanom kontroleru je oko 20 ms.
Dish je napravljen da skoro ništa ne doda tom budžetu na običnom Wi-Fi 6 LAN-u. Evo gdje svaka milisekunda ode:
| Faza | Tipično vrijeme |
|---|---|
| Touch / button događaj se pojavljuje u OS-u | < 1 ms |
| Dish pravi + šifrira 12-byte paket | < 0.1 ms |
| UDP slanje + Wi-Fi airtime + UDP prijem | 1–4 ms (5 GHz) |
| Satellite verifikuje + ubacuje preko ViGEmBus-a | < 0.5 ms |
| Igra pol-uje novo stanje kontrolera | 0–4 ms (zavisi od igre) |
| Frejm prikazan na monitoru | 0–16 ms (zavisi od fps) |
| S kraja na kraj (tipično) | ~6–25 ms |
Za poređenje, Bluetooth kontroleri obično dodaju 8 do 15 ms preko svojih žičanih braće. Najgori slučaj Dish-a na zdravom LAN-u je otprilike najbolji slučaj Bluetooth kontrolera.
Kako ga držimo čvrstim
- Bez reda, bez async runtime-a. Handler ulaznog događaja poziva
sendtoinline. Bez producer/consumer reda, bez event loop skoka, bez Combine, bez Kotlin coroutine. Input thread je network thread. - Sirovi UDP. Ne TCP, ne WebSockets, ne gRPC, ne QUIC, čak ni
NWConnectionna Apple platformama. Sirovi POSIX socketi tako da možemo sami postavitiIP_TOS. - DSCP EF označavanje. Odlazni paketi su označeni DSCP klasom EF (0xB8). QoS-svjesni ruteri i access pointi ih preskaču ispred masovnog saobraćaja.
- Sitni paketi. 12 byte-a payloada, oko 50 byte-a na žici jednom kada su UDP, IP i 802.11 header-i unutra. Jedan Wi-Fi frejm.
- Nula alokacija na vrućoj putanji. Baferi su na stacku ili preliminarno alocirani. Nikakva GC pauza ne može produžiti slanje paketa.
- Direktno kernel ubacivanje. Satellite poziva
DeviceIoControldirektno u ViGEmBus. Bez DLL marshalling-a, bez IPC-a, bez service round-trip-a. Vruća putanja prijemnika je tri sistemska poziva sa nulom alokacija:recvfrom()→memcpy()→DeviceIoControl(). - Time-critical receive thread. Satellite pinuje svoj UDP receive thread na
THREAD_PRIORITY_TIME_CRITICALna Windowsu i na core 0 affinity, tako da raspomahani tab pretraživača ne može gladovati vaše ulaze.
Šta jede kašnjenje u praksi
Svaki „Dish izgleda spor“ izvještaj koji smo vidjeli vodi nazad ka jednom od ovih. Nijedan nije Dish-ova greška, svi imaju rješenje:
- 2.4 GHz Wi-Fi. Smetnja mikrotalasne pećnice, zagušenje od komšija, niži propusni opseg. Rješenje: stavite i svoj telefon i svoj gaming PC na 5 GHz ili 6 GHz.
- Wi-Fi power-save na Androidu. Neki Android telefoni odlažu odlazne pakete za 30 do 100 ms kada ekran miruje. Dish drži otkucaj svake 2 sekunde: dovoljno mali da bude besplatan na radiju, dovoljno čest da spriječi OS da uspava Wi-Fi čip.
- Mesh repetitori. Svaki hop dodaje 1 do 3 ms. Stavite Satellite na čvor koji je žično povezan na glavni ruter ako možete.
- USB-C dock sa Ethernetom na Thunderbolt hub-u. Neki jeftini dockovi baferuju. Koristite ugrađeni Wi-Fi laptopa ili passthrough adapter umjesto toga.
- 120 Hz vs 60 Hz. 120 Hz monitor smanjuje najgori dio frame-time-a budžeta na pola. Besplatno 8 ms.
Želite sami mjeriti?
Satellite web UI na localhost:9877 prikazuje uživo RTT po vezi, posljednje mikrosekunde petlje, vršne mikrosekunde petlje, brojače uspjeha i neuspjeha submita, i brojeve odbačenih replay-eva. /debug stranica je pun ispis performansi prijemnika. Ako vidite išta iznad 10 ms RTT na istom Wi-Fi-ju, nešto drugo na vašoj mreži se loše ponaša. Otvorite issue sa screenshotom debug stranice i pomoći ćemo vam da iskopate.