Мотивація
При швидкості сигналу 480 Мбіт / с USB 2.0 пристрої повинні мати можливість передавати дані до 60 Мб / с. Однак на сьогоднішній день пристрої, здається, обмежені 30-42 Мб / с під час читання [ Wiki: USB ]. Це 30-відсоткові витрати.
USB 2.0 був фактичним стандартом для зовнішніх пристроїв вже більше 10 років. Одне з найважливіших додатків для інтерфейсу USB з самого початку - це портативне зберігання даних. На жаль, USB 2.0 швидко обмежував швидкість у вузьких місцях для цих додатків, наприклад, сьогоднішній жорсткий диск здатний більше 90 Мб / с при послідовному зчитуванні. Враховуючи тривалу присутність на ринку та постійну потребу в більшій пропускній здатності, слід очікувати, що екосистема USB 2.0 протягом багатьох років була оптимізована та досягла показників читання, близьких до теоретичної межі.
Яка теоретична максимальна пропускна здатність у нашому випадку? Кожен протокол має накладні витрати, включаючи USB, і згідно з офіційним стандартом USB 2.0 він становить 53,248 Мб / с [ 2 , табл. 5-10]. Це теоретично означає, що сьогоднішні пристрої USB 2.0 можуть бути на 25 відсотків швидшими.
Аналіз
Щоб отримати будь-який ближчий корінь цієї проблеми, наступний аналіз продемонструє, що відбувається на шині під час зчитування послідовних даних із пристрою зберігання даних. Протокол розбивається по шарах, і нас особливо цікавить питання, чому 53,248 Мб / с є максимальним теоретичним числом для масових пристроїв вгору. Нарешті ми поговоримо про межі аналізу, які можуть дати нам натяки на додаткові витрати.
Примітки
У всьому цьому питанні використовуються лише десяткові префікси.
Хост USB 2.0 здатний обробляти декілька пристроїв (через концентратори) та декілька кінцевих точок на один пристрій. Кінцеві точки можуть працювати в різних режимах передачі. Ми обмежимо наш аналіз лише одними пристроями, які безпосередньо приєднані до хоста і здатні безперервно надсилати повноцінні пакети над об'ємною кінцевою точкою вище за течією у високошвидкісному режимі.
Обрамлення
Високошвидкісний зв’язок через USB синхронізується у фіксованій структурі кадру. Кожен кадр становить 125 нас і починається з пакету Start-Of-Frame (SOF) і обмежений послідовністю End-Of-Frame (EOF). Кожен пакет починається з SYNC і закінчується з End-Of-Packet (EOF). Ці послідовності були додані до діаграм для наочності. EOP міняється за розміром і залежить від пакетної передачі даних, для SOF це завжди 5 байт.
Відкрийте зображення на новій вкладці, щоб побачити більшу версію.
Операції
USB - це основний протокол, і кожна транзакція ініціюється хостом. Часовий інтервал між SOF та EOF може використовуватися для транзакцій USB. Однак час для SOF та EOF дуже суворий, і хост ініціює лише транзакції, які можуть бути повністю завершені у вільний часовий проміжок часу.
Угода, яка нас зацікавила, - це вдала об'ємна операція IN. Операція починається з пакета токенів IN, потім хости чекають на пакет даних DATA0 / DATA1 і підтверджують передачу пакетом передачі даних ACK. EOP для всіх цих пакетів становить від 1 до 8 біт залежно від пакетних даних, тут ми припустили найгірший випадок.
Між кожним із цих трьох пакетів ми повинні враховувати терміни очікування. Вони знаходяться між останнім бітом пакета IN від хоста та першим бітом пакета DATA0 пристрою та між останнім бітом пакета DATA0 та першим бітом пакета ACK. Нам не потрібно враховувати будь-які подальші затримки, оскільки хост може почати надсилати наступний IN відразу після надсилання ACK. Час передачі кабелю визначається як максимальний 18 нс.
Об'ємна передача може надсилати до 512 байт за транзакцію IN. І хост спробує оформити якомога більше транзакцій між роздільниками кадру. Хоча групова передача має низький пріоритет, вона може зайняти весь доступний час у слоті, коли немає інших транзакцій, що очікують на розгляд.
Щоб забезпечити належне відновлення годинника, стандарти визначають спосіб набивання бітів виклику. Коли пакет вимагає дуже довгої послідовності того ж виходу, додається додатковий фланг. Це забезпечує фланг після максимум 6 біт. У гіршому випадку це збільшить загальний розмір пакету на 7/6. EOP не підлягає набиванню бітів.
Відкрийте зображення на новій вкладці, щоб побачити більшу версію.
Розрахунки пропускної здатності
Об'ємна транзакція IN має накладні витрати в 24 байти та корисний набір 512 байт. Це загалом 536 байт. Часовий інтервал між ними становить 7487 байт. Без необхідності набивання бітів є місце для 13.968 пакетів. Маючи 8000 мікро кадрів в секунду, ми можемо читати дані з 13 * 512 * 8000 B / s = 53,248 Мб / с
Для абсолютно випадкових даних ми очікуємо, що розряд бітів необхідний в одній із 2 ** 6 = 64 послідовностей з 6 послідовних біт. Це збільшення (63 * 6 + 7) / (64 * 6). Помноження всіх байтів, які підлягають набиванню бітів на ці числа, дає загальну довжину транзакцій (19 + 512) * (63 * 6 + 7) / (64 * 6) + 5 = 537,38 байт. Це призводить до отримання 13.932 пакетів на Micro-Frame.
У цих розрахунках відсутній ще один особливий випадок. Стандарт визначає максимальний час реакції пристрою в 192 бітних разів [ 2 , глава 7.1.19.2]. Це потрібно враховувати, вирішуючи, чи останній пакет все-таки вписується в кадр, якщо пристрою потрібен повний час відгуку. Ми могли б це пояснити, скориставшись вікном 7439 байт. Хоча отримана смуга пропускання однакова.
Що залишилося
Виявлення помилок та відновлення не висвітлено. Можливо, помилки є досить частими або відновлення помилок займає багато часу, щоб вплинути на середню продуктивність.
Ми припустили миттєву реакцію хоста та пристрою після пакетів та транзакцій. Я особисто не бачу необхідності великих завдань з обробки в кінці пакетів або транзакцій з обох боків, і тому я не можу придумати жодної причини, чому хост або пристрій не зможуть миттєво реагувати на достатньо оптимізованих апаратних реалізаціях. Особливо в звичайній роботі більшість робіт із зберігання книг та виявлення помилок можна проводити під час трансакції, а наступні пакети та транзакції можуть бути в черзі.
Трансфери для інших кінцевих точок або додаткового зв'язку не враховувалися. Можливо, стандартний протокол для пристроїв зберігання даних вимагає деякого безперервного зв'язку з бічними каналами, який забирає цінний час слота.
Можливо, додаткові накладні протоколи для пристроїв зберігання даних для драйвера пристрою або рівня файлової системи. (завантаження пакета == дані для зберігання?)
Питання
Чому сьогоднішні реалізації не здатні передавати поточну передачу зі швидкістю 53 Мб / с?
Де вузьке місце в сьогоднішніх реалізаціях?
І потенційне спостереження: чому ніхто не намагався усунути таке вузьке місце?