Jump to content 日本-日本語

製品  >  ソフトウェア  >  HP- UX Developer Edge

SolarisとHP-UXの間のカベを取り除く「SHPK」・後編

HP-UX/Integrityサーバー お問い合せ
コンテンツに進む
SolarisとHP-UXの間のカベを取り除く「SHPK」・後編
SHPKの利用はきわめて簡単だ。ソースコードスキャンによって検出される手直し部分が少なければ、ほとんど手を加えずにSolaris対応アプリケーションのコンパイルが可能になる。SHPKの利用により、ポーティング作業にかかる日数はおよそ1/4〜1/8に短縮される例も報告されている。また総じて言えば、HP-UXのネーティブ・アプリケーションと何ら変わることのないパフォーマンスを引き出せる。さらにSHPKを利用して「ポーティングのプロトタイプ版」を作成しておけば、早い段階でテストを開始して問題を早期に発見できる。Solarisベースのソフトウェアに対する投資を保護する手段として、SHPKを活用しない手はないだろう。
SolarisとHP-UXの間のカベを取り除く「SHPK」・後編
SHPKによるポーティングの例
SHPKのさまざまな活用
2006年2月
テクニカルライター 吉川和巳

SHPKによるポーティングの例

では、SHPKによるポーティング作業の実例を簡単に紹介しよう。ここでは、Solaris用の以下のサンプルプログラムgetmntent.cをHP-UXに移行する手順を説明する。

$ cat getmntent.c
#include <stdio.h>
#include <sys/mnttab.h>

int main(int argc, char **argv)
{
 FILE *fp;
 int ret;
 struct mnttab mt;

 fp = fopen ("/etc/mnttab", "r");
 if (fp == NULL) {
  printf ("can not open /etc/mnttab\n");
  exit (1);
 }
 while (1) {
  ret = getmntent(fp, &mt);
  if (ret == -1) break;
  printf ("%s on %s\n", mt.mnt_special, mt.mnt_mountp);
 }
 exit (0);
}

sh_src_scannerによるソースコードスキャン

まずは、SHPKに備わるソースコードスキャナsh_src_scannerを用いて、上述のソースコードをスキャンする。

$ sh_src_scanner getmntent.c

この結果、src_scanner_shpk.logというディレクトリが作成され、その下にshpk_keyword_header.txtというファイルが作成される。このファイルには以下のようなログが記録されている。

$ cat shpk_keyword_header.txt
File Path : /home/kamei/getmntent.c
Line No : 2
"sys/mnttab.h" will be handled by SHPK

File Path : /home/kamei/getmntent.c
Line No : 8
"struct mnttab" will be handled by SHPK

File Path : /home/kamei/getmntent.c
Line No : 16
"getmntent" will be handled by SHPK

ここでは、ソースコード上の3か所においてHP-UXとの非互換性が検出され、それぞれについてSHPKが自動的に互換性を提供していることが示されている。つまりこれらについては、ソースコードを手直しする必要はない。

sh_ccによるコンパイル

つづいてはソースコードのコンパイルである。例えば上述のソースコードでは「sys/mnttab.h」というヘッダファイルをインクルードしているが、HP-UXには同ファイルは存在しない。またソースコード内で呼び出されている関数getmntent()は、HP-UXにも存在するものの、引数の数や戻り値の型がSolarisとは異なる。よって通常のコンパイラではエラーとなってしまう。一方、sh_ccを用いてコンパイルすることで、そうした違いを自動的に吸収し、エラーを起こさず実行ファイルを生成できる。

$ sh_cc -o getmntent getmntent.c

ここでnmコマンドを実行して生成された実行ファイルを調べると、SHPKライブラリがリンクされていることがわかる。

$ nm getmntent| grep shpk_getmntent
[64]   |   67112192|   288|FUNC |GLOB |0| .text|__shpk_getmntent

sh_makeによるビルド

ここで、上記ソースコードをビルドするための以下のようなmakefileがあるとしよう。

$ cat Makefile
all:
$(CC) -o getmntent getmntent.c

こうした場合、HP-UXのmakeをそのまま使用するのではなく、SHPKのsh_makeを用いてビルドを実施する。

$ sh_make -f Makefile
sh_cc -o getmntent getmntent.c

このように、makefile内でsh_ccを明示的に指定していなくても、sh_make側で自動的にsh_ccを起動する仕組みだ。またmakefile内部にSolaris固有の文法が含まれていても、それらを事前に修正しておく必要はない。

ここまで見てきたとおり、SHPKの利用はきわめて簡単だ。ソースコードスキャンによって検出される手直し部分が少なければ、ほとんど手を加えずにSolaris対応アプリケーションのコンパイルが可能になる。

SHPKがもたらす効果

では、SHPKの導入によりポーティング作業の工数はどの程度削減されるのだろうか。以下に、実際のポーティング事例における実績を示す。

表:SHPKおよびSLPKによるポーティング作業実績
コードサイズ 未使用時の作業量 使用時の作業量 使用ツール
12万行 8日 2日 SHPK
10万行 30日 4日 SLPK
80万行 80日(見積値) 10日 SLPK
120万行 N/A 25日 SLPK
400万行 N/A 15日 SLPK

ここで、「SLPK」で示される実績データは、「Solaris to Linux Porting Kit」による例である。SLPKとはSHPKと同様のSolaris互換ビルド環境をLinux上に再現したものであり、その能力はSHPKとほぼ同等と考えてよい。この表が示すとおり、ポーティング作業にかかる日数はおよそ1/4〜1/8に短縮されることがわかる。また400万行という大規模アプリケーションの移行についても、15日間というきわめて短い時間で作業を終えている例もある。もちろん、SHPKの有効性はアプリケーションの内容によって変化するが、単純な手作業のみによるポーティングに比較して大幅な期間短縮が期待できることは間違いない。

パフォーマンス面でのインパクト

前述のとおり、SHPKではSHPKライブラリと呼ばれるSolaris互換ライブラリを提供することでSolarisとのソース互換性を実現している。つまり、生成される実行可能ファイルには、SHPKライブラリがリンクされる格好となる。
 
図1:SHPKライブラリの利用
図1:SHPKライブラリの利用
  では、このSHPKライブラリを経由することによるパフォーマンス面でのインパクトはどの程度だろうか。
実のところ、同ライブラリでは関数名や引数を対応する名前や型にマッピングするといった単純な処理をするだけであり、大きなパフォーマンス低下は生じない。またSolarisとHP-UX間で差異がない部分についてはSHPKライブラリを通過しないので、SHPKによるオーバーヘッドは生じない。総じて言えば、HP-UXのネーティブ・アプリケーションと何ら変わることのないパフォーマンスを引き出せると考えて差し支えないだろう。

トップへ   次のページへ

本ページの内容は執筆時の情報に基づいており、異なる場合があります。

お問い合わせ

ご購入前のお問い合わせ


ご購入後のお問い合わせ

HPEサポートセンター
製品の標準保証でご利用いただける無償のサービスです。

ショールーム

ショールーム 導入をご検討のお客様へ
業務アプリケーションの継続・標準化・開発性とシステム担当者様、システム開発者様が抱える悩み・疑問に対する解決策実体験して頂けます。
印刷用画面へ
プライバシー ご利用条件・免責事項