Мышечный гей минг за сотку
Привет бложик.
Я не особо любитель золотых проводов, но работая с беспроводной мышкой или клавиатурой ощущаю что "чот как-то не так" - где-то текст выделится не так, окно дропнется не туда, количество пробелов высрется не то, вот такого плана. Я предпочитаю купить самый дешевый логитек, но с проводом.
Я недавно в интернете вступил в спор с одним джентльменом который утверждал что разницы в латенси между проводной и беспроводной нет, или что её невозможно почувствовать. Предмет спора сформулирован был следующим образом "Латенси для беспроводной мышки в интервале между 0.01 и 99.99 персентилями будет укладываться в 10мс".
Не абсолютное значение а именно интервал - под абсолютное значение мышечная память быстро приспособится.
10мс было выбрано исходя из того что я знаю что 15мс это 1 фрейм, 1фрейм это вполне настоящее окошко ввода в некоторых файтингах и в играх типа осу или степмании. Люди вполне себе делают такие инпуты. Ну и я ничем не хуже, даже краше может - сидя в офисе на очке 40 часов в неделю себе мышечную память натренировал текст выделять.
Не суть важна сама беседа, но вобщем джентльмен изъявил желание отдать мне сотен если я докажу что интервал латенси больше 10, или я отдал бы ему сотен если бы латенси был меньше.
В качестве жертвы была взята вот такая мышь https://www.amazon.com/dp/B08W9CJKZP по настоянию моего визави, за 20 рефурбишд потому что изначально он предложил какую-то вундервафлю за 60 чем я был весьма возмущён.
В качестве бейзлайна была взята какая-то ноунейм проводная мышка которую мне с али прислали в комплекте с НВРом для видеокамер - чтобы видеть что эксперимент не совсем всрат, и мы чот правдоподобное измеряем.
Способ измерения был выбран следующий:
Элеторный ключ нажимает кнопку, юзерспейс ОС ловит нажатие как умеет.
Была собрана вот такая лаба из жёлудей:
Был написан вот такой скрипт:
https://paste2.org/J0ah4KXy
один тред щелкает мышкой через гпио, второй слушает и отмеряет когда услышал через evdev. К сожалению у меня компьютера с линупсом не оказалось под это дело, пришлось взять рпи, но зато у него удобный интерфейс сразу имеется чтобы нажимать.
первый прогон дал вот такое распределение:
p99 24.05773; p1 1.11318. 99.99 даже смысле небыло измерять.
Для проводной я даже не делал график - там был чот в районе 15-20 на глаз. Сделал бы чарт если бы были +- похожие результаты по распределению, но так даже смысла не увидел.
С этими результатами я пришел за своим стольником. Мой визави не испытал восторга от перспективы морального унижения и возможности расстаться с деньгами, сказал что: "результаты ему не сильно нравятся". Я с пониманием решил отнестись к этой ситуации - мне бы тоже не понравились.
Он принёс https://www.rtings.com/mouse/1-2/graph#18873/12584 вот такой тест.
Я внимательно посмотрел что они делают и немного удивился - делают они вот так:
Т.е. они измеряет время между нажатием соленоида на пластинку. С одной стороны я понимаю их логику - они типа тестируют "эргономичность", с другой мне видится это очень спорным - связь между нажатием на пластинку и нажатием физической кнопки чот как-то слишком условная, это же физический мир - кнопка внутри мышки нажмётся гарантированно не одновременно, плюс как они там измеряют или избавляются от дрожания - даже с транзистором в реальном мире там не такой уж сильно бинарный сигнал если разобраться, а уж с касанием соленоидом контакта чот многовато переменных.
Но из важного я понял что у них измеряется время от тычка соленоидом до прихода сигнала в свисток где они снимают его усб дебагером, т.е. без ОС и юзерспейса.
У них результат стабильно меньше 5мс, у меня до 25мс - что же ещё может 20мс отожрать? Это дохера так-то.
Потыкал юзерспейс - успевает ли он там проснуться и обработать ивент. Успевает - если просто лупом читать там за 1мс успевает раз 300 проснуться и обработать.
Поискал чо там в ядре - нашел параметр usbhid.mousepoll=1
Для 70к ивентов:
Проводная мышка переехала в 10-15
Беспроводная показала вот такое распределение:
То что у распределения два пика была заметно ещё на прошлом эксперименте, но тут это прям очень явно.
Я решил посмотреть спектроанализатором:
Важно отметить что я живу в частном доме, да ещё и с металлическим сайдингом, так что у меня относительно мало шума на этих частотах, плюс свисток висел вполтную к скелету мышки.
Судя по всему она использует два относительно узких канала, и судя по всему иногда переезжает по своему усмотрению. Если внимательно посмотреть на распределение то заметно что для беспроводной мышки ивенты чередуются по латенси, пример:
1.95 быстрый
8.82 медленный
1.72 быстрый
9.64 медленный
1.53 быстрый
9.39 медленный
1.31 быстрый
Я бы списал это на кривой скрипт или плохой сетап эксперимента, но на проводной мышке таких спецэффектов нет.
Если подёргать свисток пару раз и сделать так чтобы оба канала попали "поправее" то получается недолго сделать распределение ~1-8мс.
Моя теория что там стоят два чипа и один из них подтупливает и один из этих каналов как-раз виноват в "медленной" части ивентов.
Алсо ради интереса я пробовал насрать в эфир с помощью sdr, распределение уехало в 0.5-15. К сожалению насколько сильно я насрал и что там мышка делала я затрудняюсь сказать - у меня радио не умеет в полный дуплекс.
Если просто произвольным файфаем эфир забить то мышка догадывается переехать, правда не особо оптимально:
По-честному в тепличных условиях моего дома получилось
0.01 0.52мс
99.99 11.13мс
т.е. 10.61мс.
По-хорошему если бы дальше разбираться, надо бы:
- попробовать вторую такую-же мышку (желательно не рефурбишед), не дефектная ли эта т.к. первую которую мне прислал амазон пришлось сдать - она была сломанная и не хотела спариваться со свистком
- внимательно почитать что там за чип на плате и посмотреть на его спеки детальнее
Но я решил сворачивать эксперимент т.к. за 10.5 сотку я уже врядли получу - слишком маржинально, а если дальше ковыряться буду то ещё может сотку и должен останусь.








