USB-MIDI (4)

「レイテンシ」の観点から結論を先に言うと、USB 2.0 ハイスピード・ハブを介して接続した方が、USB 1.1 FS ネイティブなポートに接続した場合よりもレイテンシが小さくなります。
後述するような条件では、HS ハブ経由では最短 250 μs (2 マイクロフレーム) 周期でバルク転送が行われるのに対し、FS ネイティブなポートへの接続では最短 2 ms (2 フレーム) 周期でしかバルク転送されません。
MIDI のシリアル転送レート 31.25 kbps では 1 バイトの転送に 320 μs かかるので、(最大) レイテンシを MIDI メッセージ・バイト数に換算すると、それぞれ、HS ハブ経由では約 1 バイト分、FS ポート直接では約 6 バイト分に相当することになります。
intel 5 シリーズ世代以降のチップセットでは、チップセット内に USB 2.0 ハイスピード・ハブが組み込まれているので、PC の USB の口に直接接続しても必ずハブ経由となります。
旧 Anchor Chips / 現 Cypress 製 (無印) EZ-USB (AN2131SC) を使い、 USB バルク出力エンドポイントから UART 用バッファにデータをコピーする処理の前後でポートを上げ下げし、外部から見られるようにしたプログラムを作り、ディジタル・オシロで波形を観測しました。
まず、ネイティブ FS ポートに接続した場合 (ICH7 使用の PC 本体 (OS は Windows Vista) に接続した場合) の波形を下に示します。

上側 (CH1) のトレースが USB エンドポイントからのデータ取り出し期間を示す波形で、下側 (CH2) のトレースが SOF (Start Of Frame) 割り込みで出力ポートを「トグル」した「SOF トグル」波形です。
SOF トグル波形は 1 周期 2ms で周波数としては 500 Hz となり、その両エッジの部分が SOF のタイミングを表しています。
「トグル」している理由は、SOF の部分に細いパルスを出すだけだと、時間軸のスイープを遅くした場合にパルス幅がせまくなりすぎて見えなくなるためです。
データ取り出しタイミングのパルスは SOF トグル波形と同一の周期、つまり 2 ms 間隔で発生しています。
これはエンドポイント長 64 バイトのバルク・エンドポイントに 4 バイトの MIDI パケットが 1 個だけ転送されてくる場合の波形です。
データ取り出しタイミングのパルス波形付近を拡大したものを下に示します。

パルス幅は約 30 μs 、つまりエンドポイントからデータを取り出し、UART バッファにコピーする処理に約 30 μs かかっていることになります。
実際に USB のバス信号線上をエンドポイント長 64 バイトいっぱい転送するのに必要な (正味の) 最小所要時間は
64 × 8 / 12 [MHz] = 42.67 [μs]
ですから、それに比べると、かなり処理時間がかかっています。
EZ-USB AN2131Q は 8051 コアに USB デバイス・ファンクション・モジュールを搭載したもので、24 MHz クロックをコアに供給しており、8051 コアは 4 クロックで CPU 1 サイクルの構成となっているので、実質 6 MHz のクロックで CPU が動いていることになります。
下に、1 回のバルク転送で複数の MIDI パケットが送られてくる場合の波形を示します。

拡大波形を下に示します。

データ取り出しタイミングのパルス波形の「山」の数を数えると 13 あり、13 個の MIDI パケットが 1 回のバルク転送で送られてきたことが分かります。
XG 音源用の SMF を再生して観察しているので、これはその演奏データに含まれている、LCD パネルに 16 文字 × 2 行のキャラクタ表示をするエクスクルーシブ・メッセージだと思われます。 (メッセージ長は 38 バイト)
次は、USB-MIDIバイスと PC 本体との間に USB 2.0 ハイスピード・ハブを経由させた場合の波形を示します。

これは、SMF 上では同タイミングの演奏データ (ノート ON / ノート OFF) を出力したもので、1 MIDI パケットずつ送られてきます。
その時間間隔は USB 2.0 ハイスピードでの 2 マイクロフレーム分の 250 μs です。
USB 1.1 の 1 フレーム 1ms 内で最大 4 回のバルク転送が行われることになります。
ハブ経由でも 1 回のバルク転送で複数の MIDI パケットが転送される場合もあり、その例を下に示します。

最後にノート ON / ノート OFF が 1 MIDI パケットずつ送られてくる場合の比較を、もっと広い範囲が見えるように時間軸のスケールを設定した場合の波形で示します。
まず、FS ネイティブのポートに直接接続した場合です。

2 ms より短い周期ではバルク転送は行われないため、5 パケット分の転送に 8 ms かかっています。
下に、USB 2.0 ハイスピード・ハブ経由の場合を示します。

こちらは 7 パケット分と思われるデータの転送に 2 ms 程度の時間しかかかっていません。