Разработчикът Джеф Гърлинг (Jeff Geerling) проведе интересни експерименти с външни USB флаш дискове за Raspberry Pi 4 и откри, че USB 3.0 SSD работи около десет пъти по-бързо от най-бързата microSD карта, която е държал в ръцете си.
Но в коментарите към неговия материал се появи интересна идея. Един от коментиращите обърна внимание, че тестваният корпус с вграден адаптер за външния USB 3.0 SSD диск Inateck USB 3.0 SATA не поддържа UASP протокола.
Без UASP протокола външният диск се монтира като Mass Storage Device и работи в режим Bulk Only Transport (BOT), който още отдавна има ограничение на скоростта като за USB 1.1 от едва 12 Mb/s. И това като се има предвид, че при USB 3.0 теоретичната максимална скорост е 5 Gb/s – тоест, 400 пъти повече!
Старият BOT обменя файловете във вид на малки късчета, като всеки от тях се предава строго по реда си, без да се използват каквото и да било буфериране и паралелна работа. Ето защо бе създаден новият протокол USB Attached SCSI Protocol или UASP.
Ако не навлизаме в технически подробности, високопроизводителният протокол SCSI включва редица полезни функционалности, като например паралелен обмен и прехвърляне на пакети извън опашката (out of order data transfer), а това дава възможност на диска много ефективно да използва буфериране и кеширане за подобряване на производителността.
С появата на USB 3.0 стандарта, той бе внедрен в повече USB устройства за запис на информация и адаптери за хард дискове. А където това нямаше как да стане, просто смениха фърмуера, за да се поддържа UASP протокола в случай че се работи с по-нови дискове, както и за повишаване на производителността.
След този коментар Джеф Гърлинг поръчал UASP версията на същата малка кутийка с адаптера Inateck USB 3.0 SATA. На външен вид те са съвсем еднакви, като единият поддържа протокола, а другият – не го поддържа.
Но за сметка на това, платката на контролера е съвсем различна:
Характеристиките на включените към Raspberry Pi дискове могат да бъдат погледнати чрез следната команда:
$ lsusb -t /: Bus 02.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/4p, 5000M |__ Port 1: Dev 2, If 0, Class=Mass Storage, Driver=uas, 5000M
Ако в реда с Driver се вижда uas, както е в третия ред на горния листинг, то дискът поддържа UASP. Но ако там е указано usb-storage, то устройството работи с BOT протокола.
Изглежда че повечето USB адаптери, излезли през последните пет години, поддържат UASP. За съжаление, Raspberry Pi 3 B+ и по-старите версии с USB 2.0 интерфейс, не поддържат UASP на ниво драйвер.
Ето ги и резултатите в бенчмарковете на Raspberry Pi 4 с включен UASP и без него.
Виждаме, че скоростта за обмен на данните в тестовете hdparm и dd са се увеличили с 50% и с 40%.
Нещо повече, с използването на UASP, консумацията е паднала от 5,29 на 4,87 W или 8%.
Цялата методология е описана в хранилището turing-pi-cluster..