Wreszcie rozwiązano problem z rozłączaniem urządzeń USB na Linuksie?

Wreszcie rozwiązano problem z rozłączaniem urządzeń USB na Linuksie?

23.08.2013 12:28

Niejeden użytkownik Linuksa klął na producentów przeróżnychurządzeń peryferyjnych podłączanych przez USB, w przekonaniu, żeproblemy z ich częstym rozłączaniem wynikają bądź to z kiepskiejjakości sterowników, bądź nędznej elektroniki. Dało się to odczućprzy wielu pendrive'ach, które na Linuksie działały znacznie gorzejniż na Windows, ale też i takich urządzeniach jak skanery, którepotrafiły w trakcie skanowania nagle się rozłączyć. Ale w wieluwypadkach to nie producenci są winni. To w podsystemie USBlinuksowego jądra tkwił błąd, który powodował niewłaściwe działaniesprzętu.Problem zauważyła dopiero Sarah Sharp z Intela, pełnoetatowaopiekunka sterownika xHCI, pracująca też nad obsługą USB 3.0. Wewpisie na Google+ przedstawiaszczegóły swojego odkrycia. Otóż najwyraźniej Linux obsługiwałUSB 2.0 niezgodnie ze standardem,zgodnie z którym oprogramowanie systemowe odpowiadające za obsługęinterfejsu szeregowego powinno zagwarantować urządzeniu 10 ms nawznowienie czasu odzyskiwania (resume recovery time, TRSMRCY),podczas którego nie powinno się wysyłać żadnych sygnałów na danyodcinek magistrali.[img=linux-usb]Sharp uważa, że programiścisystemu zapewne rozumieli to jako przyzwolenie na próbę dostępu dourządzenia po odczekaniu 10 ms. Sęk w tym jednak, że w specyfikacjiwartości zmiennych w tabeli załączonej do dokumentacji USB, 10 ms todla TRSMRCY wartość minimalna. Oznacza to, że wiele portów może być wstanie wznowienia dłużej niż przez 10 ms, a jeśli w tym czasie jądrosystemu będzie próbowało coś z podłączonym urządzeniem robić przezdemona khubd, to albo się ono rozłączy, albo zgłosi błędy transmisji.Według przeprowadzonych przezprogramistkę Intela testów, z 227 zdarzeń wychodzenia ze stanuuśpienia inicjowanych przez mysz i klawiaturę USB, 163 zajęły mniejniż jedną mikrosekundę, 47 zmieściło się w czasie poniżej 10 ms, ale17 zajęło ponad 10 ms (a najdłuższe odnotowane opóźnienie wyniosło 17ms). Tak więc w 8% wypadków zbyt mała wartość zmiennej określającejczas oczekiwania doprowadzała do rozłączeń z urządzeniami. Problemten daje się najwyraźniej odczuć na chromebookach – ChromeOS bardzo agresywnie zarządza oszczędzaniem energii na USB, arozłączenia z urządzeniami powodują zauważalne dla użytkownikamigotanie interfejsu.Problem tymczasowo rozwiązano,podnosząc po prostu wartość parametru TRSMRCY do 20. Jednak zawcześniej jeszcze, by odtrąbić sukces, gdyż rozwiązanie tego problemuujawniło inne. pani Sharp zasugerowała właśnie, że odkryty przez niąbłąd dotyczy wyłącznie kontrolera hosta xHCI,i nie jest przyczyną rozłączeń w starszym kontrolerze EHCI.Więcej informacji można znaleźćna liście dyskusyjnej linux-usb.Przygotowana przez panią Sharp łatka powinna znaleźć się w wersji3.11 jądra, której wydanie nastąpi najpewniej już we wrześniu tegoroku.

Źródło artykułu:www.dobreprogramy.pl
Oceń jakość naszego artykułuTwoja opinia pozwala nam tworzyć lepsze treści.
Wybrane dla Ciebie
Komentarze (51)