中野と申します。
釈迦に説法ならゴメンナサイ。
>・端末のスペックの違い(メモリの搭載量など)
>・UbuntuとAndroidではGFP_ATOMICの取り扱いが異なる
ご存知とは思いますが、
GFP_ATOMICはメモリアロケートできない場合には
内部でblocking waitせずに即時復帰する仕様と思います。
実際カーネルソースで確認した訳ではないのですが、
UbuntuとAndroidでアロケータの仕様が変わっているのは信じにくいです。
もし、クロスコンパイルが通らないのでGFP_KERNELを
GFP_ATOMICに変更したコードを実行してオカシクなっているのなら
GFP_KERNELでクロスコンパイルを通すのが先決と思います。
そうでないならAndroidの実メモリ不足を疑いたくなります。
ともかく、ネットワーク受信可割り込みの延長上で動作する
ネットワーク受信モジュール内でメモリプールに確保済みのデータに
「ルータの帯域情報等を埋め込む」のですから
GFP_ATOMICオプションはよほど厳格なエラー処理を実装しない限り
不味いように思います。
重ねて釈迦に説法ならゴメンナサイ。
以上、よろしくお願いします。
2011年5月22日19:58 大垣憲俊 <noritos...@gmail.com>:
> --
> このメールは Google グループのグループ「日本Androidの会」の登録者に送られています。
> このグループに投稿するには、android-g...@googlegroups.com にメールを送信してください。
> このグループから退会するには、android-group-j...@googlegroups.com にメールを送信してください。
> 詳細については、http://groups.google.com/group/android-group-japan?hl=ja からこのグループにアクセスしてください。
>
>
> ご指摘のとおり実メモリ不足が考えられると思います。
すでに結論が出たようなので、私も独りカラ回り状態を脱しようと思います。
かってに検証テストをしていましたが、結果が出せませんでした。
カーネルのビルドには成功したものの、
Ubuntuの/lib/module/下のMakefileを使うのが気になり、
UbuntuのOSバージョンとターゲットAndroidのバージョンを合わせるべき?
との疑問を感じながらも、
ともかくできあがったモジュールで insmod ip_sirens.ko とやると、
T-01C(まだAndroid2.1)では、許可なし(Operation Not Permitted)で、
HT-01Cは Android1.6なのでいくら何でもと思い、試していませんが、
avd2.2のエミュレータでも、何のエラーか忘れましたが、実行できませんでした。
rootユーザではなく、systemユーザでないとできないのですね、たぶん。
失礼しました。。。
返信ありがとうございます。
> 現在パケットのレイヤ2ヘッダとレイヤ3ヘッダの間に
> 通信時に経由するルータの帯域情報等を埋め込むための
> カーネル拡張を作成しています。
動的な帯域情報を保有するなんて、賢いパケットですね。
最近の常識なんでしょうか?
でも、通信系モジュールは様々な制約があり難しい。
だからやりがいがあると思います。
ご健闘を期待します。
中野
2011年5月24日13:38 mochidai <moch...@gmail.com>:
中野です。
> 実際カーネルソースで確認した訳ではないのですが、
> UbuntuとAndroidでアロケータの仕様が変わっているのは信じにくいです。
申し訳ありません。
Androidのアロケータ仕様は変更されているみたいでした。
推測で語ってしまった点を反省します。
> OSカーネルにはLinuxを採用。オープンソースとして提供されたAndroid 1.0は,
> カーネル2.6.25を採用する。
> これをベースに電源管理用モジュール,プロセス間通信用モジュール,
> メモリー量が不足したときにAndroid関連のプロセスを自動的に落とすモジュールなど,
> Android用のカーネル・モジュールが加えられている。
カーネル(アロケータ)内部でメモリ不足を検知するとプロセスを落としてしまう訳ですね。
週末にでもソースを読んで確認してみます。
> ご指摘のとおり実メモリ不足が考えられると思います。
納得です。
ありがとうございました。
2011年5月24日20:26 大垣憲俊 <noritos...@gmail.com>:
中野です。
大垣さん、情報ありがとうございました。
> Low Memory Killer
ashmem - Android shared memory
PMEM - Process memory allocatorに関するDave Sparksさんの説明が
とても分かりやすく納得できました。
アンドロイドでは「ashmem」と「pmem」の使い分けが微妙ですね。
メモリ不足時の、ubuntuとandroidの挙動の相違が明確になりました。
androidには「Low Memory Killer」があるので、
少ない実装メモリでもきめ細やかに制御可能なので、
アプリレベルではあまり頑張らなくてもよいが、GFP_KERNELが前提。
後腐れないようにプロセスを始末してくれるようですネ。
ありがとうございました。
中野
2011年5月31日21:49 大垣憲俊 <noritos...@gmail.com>:
> その答がAndroid Kernel Features - eLinux.orgのoom handlingに書いてあったので紹介...」