情報システム部門にいる人にとっては「仮想化」という言葉はよく聞く言葉のはずです。特にサーバーの構築や維持に携わっていれば、非常に身近な言葉のはずです。しかし、ものづくり系のエンジニアであれば「よく聞く言葉だけど詳しくはわからない」という人もいるかもしれません。ここでは、仮想化の定義や具体例に触れながら、生産システムとエッジコンピューティングの仮想化との関わりについて見ていきます。
仮想化の定義
仮想化の定義とは「システムの技術的詳細を隠し、抽象化すること」です。
情報システムにおいては、システムのリソースを抽象化することにより、OSやハードウェアの違いを吸収し、異なるOSやハードウェアであっても同じプログラムを走らせるようにすることです。これを移植性の確保といいます。また、複数のプログラムを同時に走らせる場合に、互いのプログラムを意識せずにプログラムを走らせるようにすることです。このような技術は、1つのハードウェアで複数のソフトウェアを走らせるようなマルチタスクOSやサーバーにおいて非常に重要な技術です。
特にサーバーにおいては、メモリ占有率やCPU占有率などのシステムリソースが余っていることが多く、1つのハードウェアに複数のサーバーソフトウェアを導入してリソースの有効利用を図ることが考えられます。しかし、サーバーソフトウェアによっては動作環境、利用者、求められるセキュリティレベルが異なることがあり、1つのハードウェアで同時に動作ができない場合もあります。そこでサーバーに仮想化ソフトを導入するケースが多いのです。仮想化ソフトを導入することによって、異なるソフトウェアが互いの動作状態を意識せずに、それぞれのソフトウェアを同時に独立して動作させることができます。
一方、生産システムにおける仮想化は、最近使われるようになってきた比較的新しい概念です。基本的には「システムの技術的詳細を隠し、抽象化する」ことなのですが、これらの抽象化をIT技術によって行うことが特徴です。
具体的には、工場の生産ラインをコンピュータ上に再現し、実際に生産ラインを構築する前に、作業者の動きや、歩留まり、レイアウトなどをシュミレーションすることです。また、生産ラインの制御や生産管理などを、IT機器を使って行うことも含まれます。いわば、IT機器を介して生産ラインを「仮想化」することだといえるでしょう。
情報システムにおける仮想化のメリットと具体例
仮想化のメリットは、なんといっても、システムの自由度が高まることです。たとえば、移植性が高まることによって、既存のソフトウェアを異なるOSや新しいハードウェアで動作させることができます。また、お互いのプログラムの挙動を意識することなく、複数のプログラムを同時に動作させることも可能です。これにより、システムのトータルコストを下げることができ、特にサーバーにおいて有効なケースが多くあります。
一方、デメリットとしては、仮想化の機構が複雑になり、スピードが落ちることが挙げられます。したがって、仮想化を意識してシステムを構築する場合には、ハードウェアに十分な余力が必要です。
次に、仮想化技術の具体例を見ていきましょう。
- MVS
MVS(Multiple Virtual Storage、多重仮想記憶)は、IBMが開発したメインフレーム用のOSですが、世界でもっとも早く実用的な仮想記憶を実現したOSとして知られています。仮想記憶とは、いわば「メモリ空間の仮想化」ともいえる技術で、マルチタスクOSには欠かせない技術です。たとえば、仮想記憶がサポートされていない状況で、複数のプログラムが同時に実行されている場合を考えてみましょう。この環境で、プログラムAがあるメモリ空間にデータXを書き込んだとします。続いて、プログラムBが同じメモリ空間にデータYを書き込んだ場合には何が起こるでしょうか。その後にプログラムAがデータを読もうとしてもデータYを読み込んでしまい、データの整合性が取れないために、プログラムAはうまく動作しなくなってしまいます。
そこで、MVSによってプログラムBがデータYを書き込む前に、データXを外部記憶装置に退避させます。そして、プログラムAが読み込む前にデータXをメモリに戻します。この動作を、プログラムA・Bが意識しないように行うのが仮想記憶の原理です。これにより、他のプログラムの挙動にかかわらず、独立してプログラムを実行できるようになるのです。 - Java VM
組み込みシステムに関わっている人にはJavaは良く聞くと思います。Javaはプログラミング言語なのですが、同時に「仮想機械」としての側面を持っています。Javaコンパイラは原則としてネイティブコード(CPUが直接実行できるコード)を出力せず、中間コードを出力します。この中間コードはJavaVM(Java仮想機械)が実行できる形式のコードです。中間コードはネイティブコードよりも実行速度が遅くなるのですが、OSやハードウェアの構成が違っていたとしても、そのOSやハードウェア用のJavaVMを用意しておけば、共通の中間コードを実行することができます。
組込みシステム用のOSは用途ごとにいろいろな種類があり、すべてのOS向けにコンパイラを用意するよりもJavaVMを開発する方が容易なことが多いです。JavaVMはOSやハードウェアの違いを吸収して、共通の中間コードを実行でできるメリットがあります。このような理由から、組み込みシステムではJavaが良く使われているのです。 - WINE
Linux上でWindowsアプリケーションを走らせるソフトウェアに「WINE」があります。これは、エミュレータの一種で、LinuxとWindowsアプリケーションとの間に入って、API(アプリケーション・プログラミング・インターフェース)の橋渡しをするものです。OSの違いを吸収するという観点ではこの種のエミュレータも仮想化の1つといえるでしょう。
生産システムの仮想化と具体例
一方、生産システムの仮想化のメリットとはどんなものでしょうか?
工場の生産ラインをコンピュータ上に再現し、生産ラインのシミュレーションをすることで、現実に生産を開始する前にさまざまな問題点を検討・改善することができます。また、IT機器を使って生産を管理することで、生産の効率化や省力化を図ることも可能です。
生産システムの仮想化、とりわけIT機器を活用した監視や生産管理を行う場合、製造装置の制御プロトコルや、データフォーマットなどがバラバラであることが問題になります。製造装置メーカでは製造装置の性能を引き出すために最適な制御プロトコルやデータフォーマットを採用していることが多くあります。これらの統一規格を作る動きもあるのですが、なかなか実現に至らないのが現状です。
そこで、製造装置の制御システムとクラウドサーバーの間にエッジサーバーを導入して、エッジサーバー上でこれらの違いを吸収する操作を行うことが考えられます。こうすると、クラウドサーバーから見ると、データフォーマットや制御プロトコルがすべて同じように見えるのです。したがって、製造装置間の違いを吸収するという意味においては、このようなシステムも「仮想化」といえるかもしれません。このような目的でエッジコンピューティングを導入すると、製造装置の監視とスピードの両立ができるというメリットがあります。
また、エッジサーバー自体が仮想化されていれば、エッジサーバー用のハードウェア1台で、複数の製造装置の監視をそれぞれ独立して行うことができ、後付けでソフトウェアを追加することも可能です。これはランニングコストを下げることにもつながるでしょう。
仮想化技術とエッジコンピューティング
仮想化の意義と具体例について、情報システムと生産システムの両面から見ていきました。生産ラインの製造装置の制御プロトコルやデータフォーマットの違いは現場で課題となることも多くありますが、エッジコンピューティングによってそれらを吸収することは有効な手段の1つです。また、エッジサーバーそのものが仮想化されていれば、生産ラインまわりのシステムを柔軟に構築することもできます。さらに、エッジサーバーを後付けで構築することができるので、既存の設備を生かしながら段階的に工場を仮想化することも可能です。こうした背景から、エッジサーバーを導入する場合には、仮想化に対応しているかどうかは重要な検討ポイントといえるでしょう。