いうのがPhoto01である。Driverは最初にリクエストを受けると、ITr(Stat)、ITr(Data-in)、OTr(Data-out)、OTr(CUI)の4つのコマンドをまとめて発行する。ACK(Stat)、DP(CIU)をそれぞれDevice側に送り出す。この例の場合、まずDP(CIU)に対するレスポンスが最初にDevice側で実行され、その結果がACK(Cmd)として返される。Driverに戻される。Controllerに返す。ACK(Data-in)を送り出し、データの書き出しと受け取りを同時に開始することになる。ここで重要なのは、(あくまでもDevice側が対応していれば、という条件付ではあるが)Data-outとData-inという2つのトランザクションを、実際問題として並行して実施できることだ。2.0の場合のBi-directionalで実際に転送が開始された場合のシーケンスを模式化したものだ。Data-inとData-outを2回づつ行うまで、を示している。OUT/IN/ACKとDATAのパケット長は適当であるが、あくまでも模式図ということで理解してほしい。2.0の場合、2つのトランザクションが両方実行するといっても送受信が共通であり、あくまでも半二重である。Data-outのシーケンスが終わるまでの間は現実問題としてData-inのシーケンスは開始できない。図2の様に、若干パケットの送受信順序が変わることはありえるだろうが、トータルとしての所要時間には差がないことになる。3.0の場合、送信と受信で配線が別だから、図3の様に2つのトランザクションを完全に並行に行うことができる。Photo01を見るとData-outはnumP=4、Data-inはnumP=2とされているので、この図も厳密には正しくないが、単に紫色のData-inのDATAパケットの幅が(Data-outの)半分となり、数が倍になるだけなので、概ね同じと思ってよい。ACKのパケットサイズは実際には非常に小さいので、結局のところDATAのパケットサイズが実際の帯域を定める要因となる。2.0ではData-inとData-outの2つのDATAパケットで60MB/secのバス帯域を分け合う形になるから、実質的な転送速度の限界は30MB/secに留まることになる。3.0でもUASを使わない場合はData-inとData-outを多重化しないため、実際には500MB/secの帯域があるにも関わらず実質的な転送速度の限界は半分の250MB/secになる。ところがUASを使うと図3の様に完全に多重化できるため、実質的な転送速度が500MB/secフルに利用できる、という訳だ。ACK(Data-in)のシーケンスが続けられることになる。Driverに返される。Driverに返される。Driverに送り返す。Driverはこの4つの結果が揃うのを待って、上位アプリケーションに制御を戻すという訳だ。Driverの効果が一番高いのがこのBi-directionalのケースである事が判る。この効果を得るためには、Device側がData-inとData-outの両方のTransactionを同時に処理できなければいけないという制約事項も付くことになる。Driverを使ってもその性能がフルには発揮できないことになる。なってくると、現状存在するSSDのI/Fチップでもどれだけがフルに対応しているのかちょっと疑問が残るところである。1/17]エンタメもっと見るページトップ。