マルチコア/マルチOS 環境でのデバイス共有/コア間・OS 間通信

組込みシステムでの RTOS と Linux の共存を検討する際に、デバイスの共有と OS 間通信がネックになるケースがあります。ユビキタスAIコーポレーションではこれらを実現するためにリアルタイムシステム用に設計・開発された仕組みを使い、Linux 用のオープンソースのOS 間通信の仕組みを応用する際に起こりがちなパフォーマンスの問題を解決しています。

本ページでは、マルチコア/マルチ OS 環境でのデバイス共有/コア間・OS 間の通信を円滑に行うための手法と、開発に役立つソフトウェアについて解説します。

Linux 用のオープンソースの OS 間通信の仕組みを RTOS でも使えるようにする方法もありますが、元々リアルタイムシステム用には作られていないため、思うようなパフォーマンスが得られないこともあります。
Hypervisor を使うのも一つの手ではありますが、Hypervisor はエンタープライズ用途のものがほとんどで、組込みシステムで使うにはオーバースペックな上、設定が複雑です。また組込み Linux や RTOS を Hypervisor 上に正しく移植するのはかなり困難です。

TOPPERS-Pro MDCOM は、リアルタイムシステム向けに開発された高速な OS 間通信の仕組みです。この MDCOM を Linux および RTOS の TCP/IP の仮想物理層として使用することにより、以下が実現できます。

  • Ethernet が繋がっていない OS からでも Socket を使って Ethernet にアクセスできる
  • 各 OS 間通信に Socket が使える

以下、イメージ図を使って解説します。

Linux が動作しているコアに Ethernet コントローラーが接続されている場合は、別コアで動作している RTOS からは Ethernet を使用することができません。

1_MDCOM&Ether.png

コア間通信 TCP/IP ネットワーク機能を使うと、RTOS 上のアプリケーションも通常の Socket を使って Ethernet を使用できます。
また、RTOS と Linux 間の通信も Socket を使えるので、マルチコア/マルチ OS のシステムでも可搬性・移植性の高いプログラムが作れます。

RTOS 側の TCP/IP スタックである HE-NET の仮想 Ethernet ドライバーと Linux 側の仮想 Ethernet ドライバーは、高速な OS 間/コア間通信ライブラリである MDCOM で接続されており、仮想ドライバー経由でのアクセスでも通信速度の低下はほとんどありません。
Linux では、L3 routing の機能を使って仮想 Ethernet と実 Ethernet を繋ぎます。

2_3OS&MDCOM.png

3 つの OS を使用する場合でも同様に、Ethernet が直接使えない RTOS や Linux2 からも Socket を使って Ethernet を使用できます。
また、Linux1 と RTOS 間、RTOS と Linux2 間、Linux1 と Linux2 間の通信も Socket が使えます。

MDCOM は RTOS をサーバーとして動作するため、Linux1 と Linux2 間の通信は RTOS を経由することになります。しかしながら通信のデータ本体は MDCOM が使用する共有 RAM にコピーされた後はそのまま通信相手に渡されるので、オーバヘッドはほとんどありません。

サーバーとして動作する RTOS では L2 switch の機能を使い、Linux1 の仮想 Ethernet と Linux2 の仮想 Ethernet を繋ぎます。

以下にイメージ図を示します。

複数のコアで Linux1、Linux2、RTOS(TOPPERS)が動作しており、Linux1 と RTOS、Linux2 と RTOS 間は MDCOM を使用して通信ができるようになっています。
Linux1 では標準の TCP/IP スタックを使用し、実 Ethernet ドライバーと仮想 Ethernet ドライバーが実装されています。
Linux2 では標準の TCP/IP スタックを使用し、仮想 Ethernet ドライバーのみが実装されています。
RTOS(TOPPERS)では Tuxera 社製の TCP/IP(HE-NET)を使用し、仮想 Ethernet ドライバーのみが実装されています。
Ethernet は Linux1 からのみ使用でき、通常の方法では Linux2 や RTOS からは Ethernet は使用できません。

Linux1 から Ethernet を使用する場合(通常の Ethernet 通信)

3_Linux1toEther.png

RTOS(TOPPERS)から Ethernet を使用する場合

4_RTOStoEther.png

Linux2 から Ethernet を使用する場合

5_Linux2toEther.png

Linux1 と RTOS(TOPPERS)間のコア間/OS 間通信

6_Linux1toRTOS.png

Linux2 と RTOS(TOPPERS)間のコア間/OS 間通信

7_Linux2toRTOS.png

Linux1 と Linux2 間のコア間/OS 間通信

8_Linux2toRTOS.png

これまでの説明は、MDCOM によってマルチコアで動作する複数の OS から仮想 Ethernet データバスを介して、一つの物理 Ethernet を共有する例と、仮想 Ethernet データバスを介して、マルチコアで動作する複数の OS 間通信を Socket API プログラミングモデルで実現する例です。
Socket API プログラミングモデルで記述したアプリケーションは別の CPU(TCP/IP ホスト)へ分散することも容易となります。

対応環境

MDCOM のサーバー機能として TOPPERS-Pro/ASP3、TOPPERS-Pro/FMP3 など TOPPERS OS が動作している環境。
MDCOM のクライアント機能は、Linux、Android、および TOPPERS をはじめとする RTOS で実績があります。

技術サポート体制

専任の担当者による技術サポートを提供します。

移植・チューニング

ユビキタスAI が提供するソフトウェアの移植サービスからアプリケーションの開発受託サービスなどを、別途承っております。開発期間が短い場合やエンジニアリングリソースが不足している時など、お客様に代わり経験豊富なエンジニアが移植、開発作業を行います。

関連製品

HE-NETTOPPERS-Pro MDCOMTOPPERS-Pro/ASP3TOPPERS-Pro/FMP3TOPPERS-ProHRP3TOPPERS-Pro/HRMP3TOPPERS-Pro SafeGシリーズ