マルチコア/マルチOS環境でのデバイス共有/コア間・OS間通信
組込みシステムでのRTOSとLinuxの共存を検討する際に、デバイスの共有とOS間通信がネックになるケースがあります。ユビキタスAIではこれらを実現するためにリアルタイムシステム用に設計・開発された仕組みを使い、Linux用のオープンソースのOS間通信の仕組みを応用する際に起こりがちなパフォーマンスの問題を解決しています。
本ページでは、マルチコア/マルチ OS 環境でのデバイス共有/コア間・OS間の通信を円滑に行うための手法と、開発に役立つソフトウェアについて解説します。
より詳しい技術や関連製品について知りたい方へ
本コラムに関係する技術や関連する製品について知りたい方は、お気軽にご相談ください。
目次
1. はじめに
2. LinuxとRTOSの構成
3. LinuxとLinuxとRTOSの構成
4. マルチコアで複数のOSを使用する場合の構成および使用例
4-1. Linux1からEthernetを使用する場合(通常のEthernet通信)
4-2. RTOS(TOPPERS)からEthernetを使用する場合
4-3. Linux2からEthernetを使用する場合
4-4. Linux1とRTOS(TOPPERS)間のコア間/OS間通信
4-5. Linux2とRTOS(TOPPERS)間のコア間/OS間通信
4-6. Linux1とLinux2間のコア間/OS間通信
4-7. まとめ
5. 対応環境
6. 技術サポート体制・移植・チューニング
1. はじめに
Linux用のオープンソースのOS間通信の仕組みをRTOSでも使えるようにする方法もありますが、元々リアルタイムシステム用には作られていないため、思うようなパフォーマンスが得られないこともあります。
Hypervisorを使うのも一つの方法ではありますが、Hypervisorはエンタープライズ用途のものがほとんどで、組込みシステムで使うにはオーバースペックな上、設定が複雑です。また組込みLinuxやRTOSをHypervisor上に正しく移植するのはかなり困難です。
TOPPERS-Pro MDCOMは、リアルタイムシステム向けに開発された高速なOS間通信の仕組みです。このMDCOMをLinuxおよびRTOSのTCP/IPの仮想物理層として使用することにより、以下がアドバンテージが得られます。
- Ethernetが繋がっていないOSからでもSocketを使ってEthernetにアクセスできる
- 各OS間通信にSocketが使える
以下、イメージ図を使って解説します。
2. LinuxとRTOSの構成
Linuxが動作しているコアにEthernetコントローラーが接続されている場合は、別コアで動作しているRTOSからはEthernetを使用することができません。
コア間通信TCP/IPネットワーク機能を使うと、RTOS上のアプリケーションも通常のSocketを使ってEthernetを使用できます。
また、RTOSとLinux間の通信もSocketを使えるので、マルチコア/マルチOSのシステムでも可搬性・移植性の高いプログラムが作れます。
RTOS側のTCP/IPスタックであるHE-NETの仮想EthernetドライバーとLinux側の仮想Ethernetドライバーは、高速なOS間/コア間通信ライブラリであるMDCOMで接続されており、仮想ドライバー経由でのアクセスでも通信速度の低下はほとんどありません。
Linuxでは、L3 routingの機能を使って仮想Ethernetと実Ethernetを繋ぎます。
3. LinuxとLinuxとRTOSの構成
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を繋ぎます。
4. マルチコアで複数のOSを使用する場合の構成および使用例
複数のコアで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は使用できません。
4-1. Linux1からEthernetを使用する場合(通常のEthernet通信)
4-2. RTOS(TOPPERS)からEthernetを使用する場合
4-3. Linux2からEthernetを使用する場合
4-4. Linux1とRTOS(TOPPERS)間のコア間/OS間通信
4-5. Linux2とRTOS(TOPPERS)間のコア間/OS間通信
4-6. Linux1とLinux2間のコア間/OS間通信
4-7. まとめ
以上の説明は、MDCOMによってマルチコアで動作する複数のOSから仮想Ethernetデータバスを介して、一つの物理Ethernetを共有する例と、仮想Ethernetデータバスを介して、マルチコアで動作する複数のOS間通信をSocket APIプログラミングモデルで実現する例です。
Socket APIプログラミングモデルで記述したアプリケーションは別のCPU(TCP/IPホスト)へ分散することも容易となります。
5. 対応環境
MDCOMのサーバー機能
TOPPERS-Pro/ASP3、TOPPERS-Pro/FMP3などTOPPERS OSが動作している環境に対応します。
MDCOMのクライアント機能
Linux、Android、およびTOPPERSをはじめとするRTOSで実績があります。
6. 技術サポート体制・移植・チューニング
専任の担当者による技術サポートを提供します。
ユビキタスAIが提供するソフトウェアの移植サービスからアプリケーションの開発受託サービスなどを、別途承っております。開発期間が短い場合やエンジニアリングリソースが不足している時など、お客様に代わり経験豊富なエンジニアが移植、開発作業を行います。
より詳しい技術や関連製品について知りたい方へ
本コラムに関係する技術や関連する製品について知りたい方は、お気軽にご相談ください。