SHARP Zaurus
ザウルスサポートステーション
SLシリーズ関連 サバイバルレベル設定方法のページ

Linuxカーネルへのサバイバルレベルについて
このページは、メモリ残量が少ない場合にプロセスを強制的に終了させる処理を説明しています。

カーネル動作途中でアプリに割り当てる物理ページが枯渇した場合には、カーネル内の oom_kill 機能によって適当なプロセスを選択して 終了させるようになっています(Linuxカーネルのデフォルトの機能です)。

しかしながら、この処理では以下の問題が残ります。

  • 重要なサーバプロセスが、qpeより前にkillされる可能性があります。
  • 最優先でkillするタスクを管理する必要が出てくるかもしれません。

このため、SL-A300 Linuxカーネル ROM Version : 1.00 J では次のように変更いたしました。

SL-A300 Linuxカーネル ROM Version : 1.00 J の処理内容

処理内容は次のとおりです。

  • プロセス毎に oom_kill 時になるべく kill されない為の値( サバイバルレベルと呼びます )を 段階的に指定できます。
  • サバイバルレベルは 0 が通常プロセス、1 が一番サバイバルレベルが高く、2 がその次にサバイバルレベルが高くて、 以降数値が大きくなる順にサバイバルレベルが下がって kill されやすくなっていきます。 最もkillされやすいのはサバイバルレベルが 0 のプロセスです。0とは、サバイバルレベルを設定していない状態です。
  • サバイバルレベルは、1から15までの範囲で指定できます。

    下記は、サバイバルレベルの例です:
    1init
    5/sbin/cardmgr
    5/usr/sbin/inetd
    5/usr/sbin/rpc.portmap
    5/home/QtPalmtop/bin/atd
    5/sbin/sdmgr
    6/sbin/launch
    6/bin/sh ./qpe.sh
    6qpe
    10addressbook ( *1 )
    10todolist ( *1 )
    10calender ( *1 )
    0showimg
    0operagui

    注意事項:( *1 ) サバイバルレベルを設定するためには、以下のようなプログラミングが必要です。

サバイバルレベルのプログラミング方法
以下の処理を実行して、サバイバルレベルを設定します。

    #include
    ...
    int level = 10 ; // サバイバルレベル:1 - 15
    int mode = 0 ; // 継承の有無:0 (非継承) 、1 (継承)
    if( prctl( PR_SET_OOM_KILL_SURVIVAL_LEVEL , mode , level ) < 0 ) {
     perror("prctl") ;
     return 2;
    }
    ...

    同じく、デーモンのようなコマンドに関しては、以下のラッパーコマンドでサバイバルレベルを変更できます。

サバイバルレベルを指定したコマンドの実行方法
surviveコマンドを使用して、サバイバルレベルを設定してコマンドを実行します。
    survive [ -i ] [ -l survive_level ] command
     指定されたsurvival_levelでコマンドを実行します。

    -i:oom_kill_survival_level属性を子に継承します。
    survival_level:1 - 15 (デフォルトは15)

    実行例:survive -l5 test(testコマンドをサバイバルレベル5で実行します)

 
←戻る

 
▲このページのトップへ
関連サイト   修理/ご相談窓口   利用上のご注意
COPYRIGHT