CABI-DMEL 2.0.0.0-lineo 2008/1/29 x86,ARM,SHのパッチは以下のボードで動作確認しています。以降、これらのボードを <ターゲットボード>と呼びます。 X86 :VIA ME6000 ARM :Versatile SH :MS7780SE03 1 インストール手順 X86,ARM 以下のはパッチをダウンロードしたディレクトリを指定してください。 1-1 下記のサイトからカーネルソース一式(linux-2.6.18.1)を入手してください。 URL:http://www.kernel.org/pub/linux/kernel/v2.6/ ファイル名:linux-2.6.18.1.tar.bz2 1-2 ダウンロードしたカーネルソースを展開します。 $ tar xjf linux-2.6.18.1.tar.bz2 $ cd linux-2.6.18.1 1-3 パッチファイルを以下の手順でカーネルにあてます。 $ patch -p1 < <PATCHDIR>/linux-2.6.18.1_cabi-common_i386_lineo.patch $ patch -p1 < <PATCHDIR>/linux-2.6.18.1_cabi-mem_i386_lineo.patch 1-4 ARMアーキテクチャの場合、上記 1-3 に以下のパッチを追加します。 $ patch -p1 < <PATCHDIR>/inux-2.6.18.1_cabi-common_arm_lineo.patch $ patch -p1 < <PATCHDIR>/linux-2.6.18.1_cabi-mem_arm_lineo.patch 2 インストール手順 SH 以下のはパッチをダウンロードしたディレクトリを指定してください。 2-1 下記のサイトからカーネルソース一式(linux-2.6.16.26)を入手してください。 URL:http://www.kernel.org/pub/linux/kernel/v2.6/ ファイル名:linux-2.6.16.26.tar.bz2 2-2 ダウンロードしたカーネルソースを展開します。 $ tar xjf linux-2.6.16.26.tar.bz2 $ cd linux-2.6.16.26 2-3 パッチファイルを以下の手順でカーネルにあてます。 $ tar xjf /sh_patches.tar.bz2 $ patch -p1 < <PATCHDIR>/linux-2.6.16.26_cabi-common_sh_lineo.patch $ patch -p1 < <PATCHDIR>/linux-2.6.16.26_cabi-mem_sh_lineo.patch 3 kernel イメージの作成 コマンド並びに設定は使用されるクロス開発環境にあわせて適宜使用ください。 は使用されるコンパイラを指定してください。 は CPU の arch を指定してください。(例 i386) $ make menuconfig [*] Resource Accounting and Binding Interface support (NEW) [*] Memory support $ make clean $ make ARCH=i386 CRPSS_COMPILE=<xxxxxxxx> bzImage(X86の場合) $ make ARCH=arm CRPSS_COMPILE=<xxxxxxxx> uImage(X86の場合) $ make ARCH=sh CRPSS_COMPILE=<xxxxxxxx> zImage(shの場合) 4 プログラムの実行 4-1 ライブラリのコンパイルとインストール linux-2.6.18.1/の中の cabi ディレクトリに移動し,make を行います。使用 されるクロス開発環境にあわせて適宜makeファイルを修正してください。 $ cd drivers/cabi/mem/lib $ make $ cp -a *.so <ターゲットボード>のrootfsの/usr/lib/. 4-2 サンプルプログラムのコンパイル $ cd drivers/cabi/mem/examples/ $ make $ mkdir <ターゲットボード>のrootfsの/home/<ユーザ>/cabi/ $ cp -a cabi_* <ターゲットボード>のrootfsの/home/<ユーザ>/cabi/. 5 サンプルプログラムの実行方法 操作はルートユーザで行います。サンプルプログラムは、引数なしで実行 するとシンタックスが表示されます。  <ターゲットボード>を起動し、サンプルをコピーしたディレクトリに移動します。 $ cd /home/<ユーザ>/cabi 5-1 上限値 5MBytes のAOを作成します。 cabi_create 単位指定 ユーザメモリ上限値 単位指定:4(単位をMbyte指定)   ユーザメモリ上限値:5MB $ ./cabi_create 4 5 Create CABI object... account create.object_id[2] 5-2 AOの設定値を確認します。個々のパラメタを変更するには cabi_setを使用します。 cabi_get ID ID: 2 $ ./cabi_get 2 > id: 2 > op_flag: 8 > obj_flag: 0 > mem_unit: 0 > ulimit: 1280 > uwarn: 1024 > flimit: 1280 > fwarn: 1024 > reclaim_pages: 32 > sig_pid: 0 表示結果の詳細は以下の通りです。   CABI ID:整数値で AO の ID  閾値到達時の動作:8(ページ回収処理)  OBJフラグ:0(強制バインド不可)  単位指定:0(ページフレーム数)  ユーザメモリ上限値: 1280page(5MB)  ユーザメモリ閾値: 1024page(上限値の80%)  ページキャッシュ上限値: 1280page(ユーザメモリと同じ値)  ページキャッシュ閾値: 1024page(ユーザメモリと同じ値)  ページ回収数: 32page  シグナル送信先PID: 0 5-3 PID=900のプロセスを上記AO(ID=2)にバインドします。 cabi_bind ID PID    ID:2 PID:900 $ ./cabi_bind 2 900 これで PID=900のプロセスは 5MBytes を超える物理メモリを使用できなく なりました。1つのAOに複数のプロセスをバインドすることが可能です。   その場合、バインドしたプロセスの使用する物理メモリの総量が、制限される   対象になります。   物理メモリの使用状況は以下のファイルで確認できます。    /proc/cabi/mem/cmap 1秒毎に全ページの使用状況を表示する例    $ while [ 0 ] ; do cat /proc/cabi/mem/cmap ; sleep 1 ; done   ※ procfs の詳細は API仕様書を参考のこと。 5-4 PID=900のプロセスをAOからアンバインドします。 cabi_unbind PID PID:900 $ ./cabi_unbind 900 5-5 AOを削除します。 cabi_destroy ID ID:2 $ ./cabi_destroy 2 ※ 一つでもプロセスがバインドされている場合には、AOを削除することは    できません。 6 最後に Lineo のホームページからダウンロードできるパッチは CABIのInterface 部分と メモリ管理機能のみです。CPUリソース管理機能を含む全てのパッチは 2008/2/E に Sourceforge.comに登録する予定です。最新のパッチはそちらからダウンロードして ください。