GR-USBとAzure RTOS USBXの速度比較をしてみた

つぶつぶコラム

はじめに

今回は弊社で開発・販売している、USBホストドライバ「GR-USB/HOST#」と「Azure RTOS USBX」の速度比較を行いたいと思います。

GR-USB/HOST#とは

GR-USB/HOST#(本コラムでは「GR-USB」と呼びます。)は、弊社で開発・販売している組込み機器向けのUSBホストドライバソフトウェアです。

多くのUSBホストコントローラに対応した製品が用意されていますので、ご検討の際には弊社営業までお問い合わせいただければと思います。

Azure RTOS USBXとは

Azure RTOS USBXとは、Express Logic社が開発した組込み向けのUSBドライバソフトウェアです。

基本的にはEHCI/OHCI準拠のUSBホストコントローラへの対応ですが、一部個別のコントローラ対応されたものもあるようです。詳細はMicrosoft社までお問い合わせください。

ご存知の方も多いと思いますが、Express Logic社はMicrosoft社に買収され、リアルタイムOS「ThreadX」は「Azure RTOS ThreadX」(本コラムでは「ThreadX」と呼びます。)となり、同じく「Azure RTOS USBX」(本コラムでは「USBX」と呼びます。)となりました。

ライセンスも、Microsoft社とチップベンダーとの間で契約する形となり、ライセンスされているマイクロコントローラー (MCU) 、マイクロプロセッサー (MPU) であれば、ユーザーは無料で使用が可能になりました。

※ライセンスされているMCU/MPUのリストは、GitHub  にあります。

速度比較の環境・構成

今回の速度比較で使用した機器構成やシステム構成は以下のようになります。

使用機器・開発環境

評価ボード GR-MANGO(CORE社製RZ/A2M評価基板Rev.F)

IDEツール e2studio202104

ツールチェイン GCC for Renesas RZ GNU ARM Embedded Ver.6.3.1.20170620

通信アプリケーション Tera Term Ver4.105(SVN# 8433)

USBメモリ SDCZ80-032G

環境的にちょっと古いですが、参考にはなるかと…。

USBメモリにUSB3.0対応品を使用したのは、USBメモリ側の速度がボトルネックになる事を懸念したためです。PCで測定した際は十分な速度が出ていましたので採用しました。

機器構成

速度比較を行った構成図は以下の通りです。

シリアルは測定した速度表示の為に使いました。

システム構成

速度比較を行ったシステム構成は以下の通りです。
速度比較なのでパターン3は不要ですが、何かの参考になればと思い実施しました。

それぞれのモジュールの概要は以下のようになります。

#名称内容
1アプリ速度比較用に作成したアプリケーションです。
速度測定の為にファイルを読み書きするような動作を行います。
APIが異なるので、GR-USB用とUSBX用の2つを
なるべく同じ条件になる様に作りました。
2GR-FILE弊社で開発・販売を行っている、組込み機器向けのFATファイルシステムです。
3FSIF弊社で開発・販売を行っている、
GR-FILEとMSC(USBのマスストレージクラス)の間を取り持つモジュールです。
4MSC弊社で開発・販売を行っている、マスストレージクラスです。
5GR-USB弊社で開発・販売を行っている、USBドライバです。
6GR-VOS弊社で開発・販売を行っている、仮想OSです。
このモジュールでOSの違いを吸収することで様々なOSに対応しています。
今回はOSに ThreadXとFreeRTOSを使用しました。
7ThreadXMicrosoft社のAzure RTOS ThreadXです。
8FileXMicrosoft社のAzure RTOS FileXです。FATファイルシステムです。
9USBX-MSCAzure RTOS USBXに含まれるマスストレージクラスです。
10USBXMicrosoft社のAzure RTOS USBXです。
11FreeRTOSAmazon.com のFreeRTOSです。

比較条件

2つを比較する場合、なるべく条件を同じにする必要があります。

ですが、GR-USBとUSBXではAPIも機能も異なるため、なかなか同一条件とはいきませんが、以下の項目で条件を設定しました。

  • 毎回フォーマット直後のUSBメモリを使用し、以下の速度情報を測定する
  • アプリケーションバッファは4KB、64KB、512KBで測定する
  • アプリケーションバッファは非キャッシュ領域に配置する
  • テストを行うファイルサイズは10MBとする
  • GR-FILEのメモリプール、FileXのセクタキャッシュは100KBとする
  • GR-FILEでのアクセスはDirectIOとする(FileXも同等のアクセスとなる為)
  • 時間測定は書き込み、読み込み時間のみとしオープンや同期は含まない
  • 測定後PCで書き込み内容の確認とchkdskで問題の無いことを確認する
  • 測定は5回行い、最大、最小を除いた3回の平均値を測定値とする
  • フォーマット⇒測定⇒chkdskの流れを測定1回とする
  • USBXのUX_HOST_CLASS_STORAGE_MAX_TRANSFER_SIZEは(1024*8)を設定
  • GRP_EHCI_DELAY_INTERRUPTをGRP_EHCI_REG_ITC_1uFrmに設定(※1)

※1 デフォルトではGRP_EHCI_REG_ITC_1mFrmが設定されています。

測定結果

比較結果

今回の比較では、4KBの比較的小さなサイズでは大きな差は見られませんでしたが、64KB、512KBなどの比較的大きなサイズでは差がみられました。

今回の比較で、OSによる影響は少なく、やはりドライバの影響が大きいことが分かります。