Motivasi
Dengan kecepatan pensinyalan 480 MBit / s, perangkat USB 2.0 harus dapat mentransmisikan data hingga 60 MB / s. Namun perangkat saat ini tampaknya terbatas pada 30-42 MB / s saat membaca [ Wiki: USB ]. Itu adalah overhead 30 persen.
USB 2.0 telah menjadi standar de facto untuk perangkat eksternal selama lebih dari 10 tahun. Salah satu aplikasi terpenting untuk antarmuka USB sejak awal adalah penyimpanan portabel. Sayangnya USB 2.0 dengan cepat menjadi penghambat kecepatan untuk aplikasi bandwidth yang menuntut ini, HDD saat ini misalnya mampu lebih dari 90 MB / s dalam pembacaan berurutan. Mempertimbangkan kehadiran pasar yang panjang dan kebutuhan konstan untuk bandwidth yang lebih tinggi kita harus berharap bahwa sistem eco USB 2.0 telah dioptimalkan selama bertahun-tahun dan mencapai kinerja baca yang dekat dengan batas teoritis.
Apa bandwidth maksimum teoretis dalam kasus kami? Setiap protokol memiliki overhead termasuk USB dan menurut standar resmi USB 2.0 adalah 53.248 MB / s [ 2 , Tabel 5-10]. Itu berarti secara teoritis perangkat USB 2.0 saat ini bisa 25 persen lebih cepat.
Analisis
Untuk mendekati akar masalah ini, analisis berikut akan menunjukkan apa yang terjadi di bus saat membaca data berurutan dari perangkat penyimpanan. Protokol ini dipecah lapis demi lapis dan kami sangat tertarik pada pertanyaan mengapa 53.248 MB / s adalah angka teoritis maksimum untuk perangkat hulu massal. Akhirnya kita akan berbicara tentang batasan analisis yang mungkin memberi kita beberapa petunjuk tambahan biaya tambahan.
Catatan
Sepanjang pertanyaan ini hanya awalan desimal yang digunakan.
Host USB 2.0 mampu menangani beberapa perangkat (melalui hub) dan beberapa titik akhir per perangkat. Titik akhir dapat beroperasi dalam berbagai mode transfer. Kami akan membatasi analisis kami untuk satu perangkat yang secara langsung dilampirkan ke host dan yang mampu mengirimkan paket penuh secara terus menerus melalui titik akhir curah hulu dalam mode Kecepatan Tinggi.
Pembingkaian
Komunikasi kecepatan tinggi USB disinkronkan dalam struktur bingkai tetap. Setiap frame panjangnya 125 us dan dimulai dengan paket Start-Of-Frame (SOF) dan dibatasi oleh dan urutan End-Of-Frame (EOF). Setiap paket dimulai dengan SYNC dan diakhiri dengan dan End-Of-Packet (EOF). Urutan-urutan itu telah ditambahkan ke diagram untuk kejelasan. EOP adalah variabel dalam ukuran dan paket data tergantung, untuk SOF selalu 5 byte.
Buka gambar di tab baru untuk melihat versi yang lebih besar.
Transaksi
USB adalah protokol berbasis master dan setiap transaksi dimulai oleh tuan rumah. Slot waktu antara SOF dan EOF dapat digunakan untuk transaksi USB. Namun penetapan waktu untuk SOF dan EOF sangat ketat dan tuan rumah hanya melakukan transaksi yang dapat diselesaikan sepenuhnya dalam slot waktu bebas.
Transaksi yang kami minati adalah transaksi massal IN yang berhasil. Transaksi dimulai dengan paket tocken IN, kemudian host menunggu paket data DATA0 / DATA1 dan mengonfirmasi transmisi dengan paket ACK handshake. EOP untuk semua paket ini adalah 1 hingga 8 bit tergantung pada paket data, kami mengasumsikan kasus terburuk di sini.
Di antara masing-masing dari ketiga paket ini kita harus mempertimbangkan waktu tunggu. Yaitu antara bit terakhir paket IN dari host dan bit pertama paket DATA0 perangkat dan antara bit terakhir paket DATA0 dan bit pertama paket ACK. Kami tidak perlu mempertimbangkan penundaan lebih lanjut karena tuan rumah dapat mulai mengirim IN berikutnya setelah mengirim ACK. Waktu transmisi kabel didefinisikan maksimum 18 ns.
Transfer massal dapat mengirim hingga 512 byte per transaksi IN. Dan tuan rumah akan mencoba untuk mengeluarkan transaksi sebanyak mungkin di antara pembatas frame. Meskipun transfer massal memiliki prioritas rendah, itu dapat mengambil semua waktu yang tersedia di slot ketika tidak ada transaksi lain yang tertunda.
Untuk memastikan pemulihan jam yang tepat, standar mendefinisikan isian bit panggilan metode. Ketika paket akan membutuhkan urutan yang sangat panjang dari output yang sama, sebuah sisi tambahan ditambahkan. Itu memastikan sisi setelah maksimal 6 bit. Dalam kasus terburuk ini akan meningkatkan ukuran paket total 7/6. EOP tidak dikenakan bit stuffing.
Buka gambar di tab baru untuk melihat versi yang lebih besar.
Perhitungan Bandwidth
Transaksi massal IN memiliki overhead 24 byte dan payload 512 byte. Itu total 536 byte. Slot waktu antara lebarnya 7487 bytes. Tanpa perlu sedikit isian ada ruang untuk paket 13.968. Memiliki 8000 Mikro-Frame per detik kita dapat membaca data dengan 13 * 512 * 8000 B / s = 53,248 MB / s
Untuk data yang benar-benar acak kami berharap bahwa bit stuffing diperlukan dalam salah satu dari 2 ** 6 = 64 urutan 6 bit berturut-turut. Itu peningkatan (63 * 6 + 7) / (64 * 6). Mengalikan semua byte yang terkena bit stuffing dengan angka-angka tersebut memberikan total transaksi total (19 + 512) * (63 * 6 + 7) / (64 * 6) + 5 = 537,38 Bytes. Yang menghasilkan 13.932 paket per Micro-Frame.
Ada kasus khusus lain yang hilang dari perhitungan ini. Standar ini menetapkan waktu respons perangkat maksimum 192 bit kali [ 2 , Bab 7.1.19.2]. Ini harus dipertimbangkan ketika memutuskan apakah paket terakhir masih sesuai dengan bingkai jika perangkat memerlukan waktu respons penuh. Kita dapat menjelaskannya dengan menggunakan jendela 7439 byte. Bandwidth yang dihasilkan meskipun identik.
Apa yang tersisa
Pendeteksian dan pemulihan kesalahan belum tercakup. Mungkin kesalahan cukup sering atau pemulihan kesalahan cukup memakan waktu untuk berdampak pada kinerja rata-rata.
Kami telah mengasumsikan reaksi host dan perangkat instan setelah paket dan transaksi. Saya pribadi tidak melihat adanya kebutuhan tugas pemrosesan besar pada akhir paket atau transaksi di kedua sisi dan oleh karena itu saya tidak dapat memikirkan alasan mengapa tuan rumah atau perangkat tidak dapat merespons secara instan dengan implementasi perangkat keras yang dioptimalkan secara memadai. Khususnya dalam operasi normal, sebagian besar pekerjaan pembukuan dan deteksi kesalahan dapat dilakukan selama transaksi dan paket-paket dan transaksi berikutnya dapat diantrikan.
Transfer untuk titik akhir lain atau komunikasi tambahan belum dipertimbangkan. Mungkin protokol standar untuk perangkat penyimpanan memerlukan beberapa komunikasi saluran sisi kontinu yang menghabiskan waktu slot yang berharga.
Mungkin ada overhead protokol tambahan untuk perangkat penyimpanan untuk driver perangkat atau lapisan sistem file. (paket payload == data penyimpanan?)
Pertanyaan
Mengapa implementasi saat ini tidak mampu streaming pada 53 MB / s?
Di mana hambatan dalam implementasi hari ini?
Dan tindak lanjut potensial: Mengapa tidak ada yang mencoba menghilangkan hambatan seperti itu?