Develop and Download Open Source Software

View README.cabi.v2

category(Tag) tree

file info

category(Tag)
root
file name
readme
last update
2008-04-02 12:08
type
Plain Text
editor
Midori Sugaya
description
Update README for kernel-2.6.24 kernel (CABI利用方法、情報参照方法)
language
Japanese
translate
CABI (CPU Accounting & Blocking Interface) System Development Ver0.2.1 README

Update 2008/04/02
First  2005/10/05


CONTENTS
========
1	インストール
1.1.	カーネルのインストール
2.	プログラムの実行
2.1.	ライブラリのコンパイルとインストール
2.2.	サンプルプログラムのコンパイル
2.3.	サンプルプログラムの実行方法
 2.3.1.	AOの作成              
 2.3.2.	プロセスのバインド          
 2.3.3.	プロセスのアンバインド        
 2.3.4.	AO の削除              
 2.3.5.	AOの設定情報の取得       
 2.3.6.	AOの設定を変更          
 2.3.7.	オーバーロードAOの作成と削除 
2.4.	動作プロセスの確認
 2.4.1.	簡単な確認方法
 2.4.2.	/proc ファイルシステム以下の情報による確認


1 インストール

1.1. カーネルのインストール

・ アーカイブの入手
linux-2.6.24-cabi-v2.1.tar.gz
tar xvfz linux-2.6.24-cabi-v2.1.tar.gz

・ カーネルイメージを作成する
make clean
make menuconfig (xconfig) <適宜設定を行います>
     => Processor type and features -->
	[*] High Resolution Timer Support	[option]
	[*] Symmetric multi-processing support	[option]
        [*] Resource Accounting and Binding Interface suppport (NEW) -->
		[*] Resource Accounting Support
		[*] CPU support
		[ ] Memory support

	
make dep clean
make bzImage
cp arch/i386/boot/bzImage /boot/<ブートさせるファイル名>

※ カーネルイメージを /boot 以下にコピーした後は、lilo や grub を適宜
設定して、カーネルが起動するようにします。ここでは、ローダの設定方法
は省きます。


2. プログラムの実行

2.1. ライブラリのコンパイルとインストール
linux-2.6.24-cabi/の中の cabi ディレクトリに移動し,make と make install を行います。

In this example, kernel directory is under /usr/src/

cd /usr/src/linux-2.6.24-cabi
cd drivers/cabi/
ls 
	Kconfig	Makefile built-in.o common cpu examples lib mem
cd lib
make clean
make  
make install


2.2. サンプルプログラムのコンパイル

2.2.1 make header links to kernel
cd /usr/include
mv linux linux.org
mv asm asm.org
ln -sf /usr/src/linux-2.6.24-cabi/include/linux linux
ln -sf /usr/src/linux-2.6.24-cabi/include/asm-arm asm
ln -sf /usr/src/linux-2.6.24-cabi/include/cabi cabi


cd /usr/src/
cd linux-2.6.24-cabi/drivers/cabi/examples
make 
プログラムが作成されます。


2.3. サンプルプログラムの実行方法 (CPU)

- 操作はルートユーザで行います。サンプルプログラムは、引数なしで実行す
るとシンタックスが表示されます。

2.3.1. AOの作成 

cd cpu
# ./cabi_create
cabi_create:
  cabi terminate action [block]:
  Usage: cabi_create [cpu_time(us)] [cpu_period(us)] [cpu_id]
  cabi terminate action [signal]:
  Usage: cabi_create [cpu_time(us)] [cpu_period(us)] [cpu_id] [pid] [sig] [flag]
--------------------------------------------------
    [cpu_time(us)]   : cpu performance time (usec)
    [cpu_period(us)] : cpu cycle time (usec)
    [cpu_id]         : cpu assignment
    [pid]            : signal receive pid
    [sig]            : send signal number
    [flag]           : default(current) or else

実行例) 
./cabi_create 10000 100000 1
Create CABI object...
account set create.(1) object_id [2]

- AOの作成には cabi_create プログラムを実行します。
- AOが作成されると,メッセージとともにAOのオブジェクトID が表示されます。
- 実行に成功すると、/proc/cabi 以下にAOのオブジェクト ID で directory が生成されます。

$ cat /proc/cabi/2/
  
※ timespec は tv_nsec(ナノ秒)での記述ができます,10ms の場合には
   1000*1000*10. とします。

cabi の作成に失敗する場合、下記のメッセージが表示されます。

# ./cabi_create 20000 100000 1
Create CABI object...
cabi_account_create failed.(-1)
cabi_account_create faild on cpu 804a718


2.3.2. プロセスのバインド 
- 既存のアプリケーションのバインド

# ./cabi_bind
Usage: cabi_bind [object_id] [pid] 
--------------------------------------------------
  [object_id]      : cabi object id
  [pid]            : bind process id

- 既存のアプリケーションをバインドする場合には,cabi_bind を使用します。
- 引数には、バインドするAOのオブジェクトID、バインドするプロセスの PID
- を指定します。

実行例) PID 1234 プロセス(アプリケーション)のバインド

# ./cabi_bind 2 1234
cabi bind pid
cabi_account_bind_pid: object_id(2) pid[1234]
   - AO 1にプロセス1234をバインドする。

・ 確認
- /proc/cabi/2/bind_pid ファイルを確認します。
1234

2.3.3. プロセスのアンバインド 
cabi_unbind  [pid]

実行例) 
# ./cabi_unbind 1234
pid: 1234
unbaind succeed.


2.3.4. AO の削除 
destroy  [object_id]

実行例) 
# ./destroy 1
destroy succeed.
- 一つでもプロセスがバインドされている場合には、AOを削除することはできません。

・確認
# cat /proc/cabi/
- /proc/cabi/ 以下のデイレクトリからオブジェクトIDと PID が削除されます。


2.3.5. AOの設定情報の取得 
cabi_get  [object_id]

実行例) 
$ ./cabi_get 2
object_id (2)
TERM_ACT (1)
CPU_TIME (0 sec 10000000 nsec) /CPU_PERIOD (0 sec 100000000 nsec)
CPU_RATIO (10.00 %)

- TERM_ACTは終了処理を示します。1の場合には、ブロック処理、2の場合にはシグナルです。
- CPU_TIME は最大実行時間(C)、CPU_PERIODで周期(T)を表示します。


2.3.6. AOの設定を変更  

cabi_set [object_id]

実行例) 
# ./cabi_set
cabi_set:
  only cpu ratio change:
  Usage: cabi_set [object_id] [cpu_time(us)] [cpu_period(us)]
  cabi terminate action [signel] -> [block]:
  Usage: cabi_set [object_id] [cpu_time(us)] [cpu_period(us)] [term_act]
  cabi terminate action [block] -> [signal]:
  Usage: cabi_set [object_id] [cpu_time(us)] [cpu_period(us)] [term_act] [pid] [sig] [flag]
--------------------------------------------------
    [object_id]      : cabi object id
    [cpu_time(us)]   : cpu performance time (usec)
    [cpu_period(us)] : cpu cycle time (usec)
    [term_act]       : terminate action (block=1, signal=2)
    [pid]            : signal receive process id
    [sig]            : send signal number
    [flag]           : default(current) or else


実行例 )
# ./cabi_set 2 40000 100000 1
Setting...
account set. object_id (2)TERM_ACT (1)
CPU_TIME (0 sec 40000000 nsec) /CPU_PERIOD (0 sec 100000000 nsec)
- 成功すると、新しく設定された値が表示されます。

確認
# ./cabi_get 2
object_id (2)
TERM_ACT (1)
CPU_TIME (0 sec 40000000 nsec) /CPU_PERIOD (0 sec 100000000 nsec)
CPU_RATIO (40.00 %)

2.3.7. オーバーロードAOの作成と削除  
cabi_overload_create
cabi_overload_destory

作成:
# ./cabi_overload_create
Usage: cabi_overload_create [overload_time(us)] [ovlerload_period(us)]
--------------------------------------------------
  [overload_time(us)]   : overload cpu performance time (usec)
  [overload_period(us)] : overload cycle time (usec)
  [overload_time] / [overload_period] * 100 : overload limit persents.

実行例)
# ./cabi_overload_create 90000 100000
AO PID = 2254
Admin start..pid 2255
Admin PID = 2255
Overload Create!
cabi_param.bind_proc_type (0)
account set create[SIGNAL]. object_id (1) 

- オーバーロード検出用のAOは固定オブジェクトID (1)となります。
- オーバーロード検出用のAOには,アイドルプロセスが自動的にバインドされます。
- サンプルでは,周期100ms 、最大実行時間 90ms が設定されています。
- 100msのうち90% となる 90ms が利用された場合, オーバーロードとみなし
  てシグナルを送信します。
- シグナルの送信先プロセスは,プログラムの中で admin プロセスとして生成しています。
- ここでは、呼び出した 2254 のプロセスが admin プロセスとなります。


2.4. 動作プロセスの確認
2.4.1. 簡単な確認方法
- top コマンドで動作確認ができます。


2.4.2. /proc ファイルシステム以下の情報による確認

/proc/cabi/以下に本システムの基本情報が表示されます。

$ cat cabi_status
952173647
cabi_cpu_ticks_per_second		1秒あたりの tick 数

/proc/cabi/<object_id>/ 以下には、object_id の ID の AO に対応した
directory が作成される。ファイル構成は次のようになります。

- status	: 各種統計情報
- bind_pid	: AOにバインドされているプロセスリスト
- term_act	: プロセスの制御情報
- time_set      : 時間の設定


status file
==============
status
 <1行目> 使用時間に関する統計情報
 <2行目> 現在の CPU 使用率
 <3行目> 周期の実行回数
 <4行目> AO の object_id 


$ cat status
10.00 9.92 7.85 10.00 0.83  	 <1行目>
1304 40000 40000		 <2行目>
26186				 <3行目>
2				 <4行目>

<1行目> 使用時間に関する統計情報
10.00 9.92 7.85 10.00 0.83   <1行目>
(1)   (2)  (3)  (4)  (5) 
(1) capacity 		   比率(%)
(2) prv			   使用時間(cpu_period_used_ticks)/周期(cpu_period_ticks)
(3) ave			   トータルの使用時間/トータル回数 = 平均使用時間
(4) cpu_max_utilization	   最大使用時間 
(5) cpu_min_utilization	   最小使用時間 
	

<2 行目> 現在の CPU 使用率
9883 10000 10000         <2行目>
(1)    (2)   (3)

(1) used_cpu_time		使用した CPU 時間
(2) cpu_period_available_ticks	利用可能な CPU 時間
(3) cpu_time_ticks		使用時間


<3 行目> 周期の実行回数
913                     <3行目>
cpu_average.total_count		現在までの周期(T)の回数
	
<4 行目> AO の object_id 
1
object_id			AO のオブジェクト ID



bind_pid file
=================
bind_pid 
<1行目以降>   バインドされているプロセスの ID リスト

例) 1271 のプロセスが AO 2 にバインドされている。
$ cat /proc/cabi/2/bind_pid
1271


term_act file
=================
term_act
<1行目>	 実行時間終了時の動作と現在の状態
<2行目>  現在までの操作実施回数

例)
$ cat /proc/cabi/2/term_act
0
4158

<1行目>	 実行時間終了時の動作と現在の状態
0	 block 指定。現在 block はおこなわれていない
1	 block 指定。現在プロセスは block されている
2	 signal 指定。周期中に

<2行目>  現在までに<1行目> の操作が実行された回数
4158	


time_set file
===============
<1行目> timespec で表示した、実行時間、周期の秒、ナノ秒
<2行目> HRT の使用/不使用
<3行目> jiffie 値

$ cat time_set
0 40000000 0 100000000  
(1) (2)   (3)   (4)
0
(5)
0 90000000 0 210000000
(6)  (7)  (8)   (9)

(1) 実行時間: timespec の tv_sec (秒)に設定されている値
(2) 実行時間: timespec の tv_nsec (ナノ秒)に設定されている値
(3) 周期    : timespec の tv_sec (秒)に設定されている値
(4) 周期    : timespec の tv_nsec (ナノ秒)に設定されている値
(5) 0/1     : HRT 使用/不使用
(6) jiffies で示した秒単位の実行時間
(7) jiffies で示したナノ秒単位の実行時間
(8) jiffies で示した秒単位の実行時間
(9) jiffies で示したナノ秒単位の実行時間