のくす牧場
コンテンツ
牧場内検索
カウンタ
総計:127,062,266人
昨日:no data人
今日:
最近の注目
人気の最安値情報

    私的良スレ書庫

    不明な単語は2ch用語を / 要望・削除依頼は掲示板へ。不適切な画像報告もこちらへどうぞ。 / 管理情報はtwitter
    ログインするとレス評価できます。 登録ユーザには一部の画像が表示されますので、問題のある画像や記述を含むレスに「禁」ボタンを押してください。

    元スレSGI KDBを使ったカーネルデバッグスレ

    kernel スレッド一覧へ / kernel とは? / 携帯版 / dat(gz)で取得 / トップメニュー
    スレッド評価: スレッド評価について
    みんなの評価 :
    タグ : 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。
    レスフィルター : (試験中)
    ←前へ 1 2 3 4 5 6 7 8 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitter
    101 : login:Pe - 2001/05/31(木) 11:06.net (+18,-29,-37)
    >>98
    ユーザが生成できるプロセスMAX数が設定できないの?
    MagicKeyでも殺せないの?
    102 : オリジナルスレの - 2001/05/31(木) 12:01.net (+6,-30,+0)
    >>98
    ソースを見てみてデバッグしてみた。101が正しいな。
    fork.cのdo_fork関数に以下のようなコードがある。
      retval = -EAGAIN;
      if (atomic_read(&p->user->processes) >= p->rlim[RLIMIT_NPROC].rlim_cur)
        goto bad_fork_free;
      atomic_inc(&p->user->__count);
      atomic_inc(&p->user->processes);
    でp->userはsched.hを見るとuser_structだから、user_structの定義を見ると
    これもsched.hにある。
    struct user_struct {
      atomic_t __count;   /* reference count */
      atomic_t processes;  /* How many processes does this user have? */
      atomic_t files;    /* How many open files does this user have? */
      /* Hash table maintenance information */
      struct user_struct *next, **pprev;
      uid_t uid;
    };
    これらよりコメントを見れば分かるけどprocessesはこのユーザコンテキスト
    上でいくつのプロセスが走っているかを示している。それを
    p->rlim[RLIMIT_NPROC].rlim_cur と比較してそれ以上になったら
    fork処理を失敗させている。rlim_curはfork_initでイニシャライズ
    されていてmax_threads/2になっている。
    103 : オリジナルスレの - 2001/05/31(木) 12:12.net (+3,-30,+0)
    実際にデバッガでどう動いているか見てみよう。
    まず main(){while(fork());} をコンパイルし実行する。
    pauseキーでブレイクインし、do_forkにブレイクポイントを張る。
    [1]kdb> bp do_fork
    Instruction(i) BP #0 at 0xc0115270 (do_fork)
      is enabled globally adjust 1
    gで、再実行。先ほど実行したプログラムでforkが実行されまくってる
    からねすかさず止まるはず。
    Instruction(i) breakpoint #0 at 0xc0115270 (adjusted)
    0xc0115270 do_forkint3

    Entering kdb (current=0xc5f82000, pid 15240) on processor 1
                   due to Breakpoint @0xc0115270
    止まったら
      if (atomic_read(&p->user->processes) >= p->rlim[RLIMIT_NPROC].rlim_cur)
    の行までトレースする。ソースをみるとこの条件判断はalloc_task_structの
    次の次の条件判断であることが分かる。この辺りのコードでアロケートしてるのは
    0xc01152ee do_fork+0x7ecall 0xc012fbe0 __get_free_pages
    0xc01152f3 do_fork+0x83mov %eax,%ebx
    0xc01152f5 do_fork+0x85test %ebx,%ebx
    0xc01152f7 do_fork+0x87je 0xc01158d8 do_fork+0x668
    のコードだ。test %ebx,%ebx jeはif (!p) gotoであることは容易に分かる
    このコードの次の条件判断は
    0xc0115314 do_fork+0xa4mov 0x4(%edx),%eax
    0xc0115317 do_fork+0xa7cmp 0x300(%ebx),%eax
    0xc011531d do_fork+0xadjae 0xc011596b do_fork+0x6fb
    だから、ここまでトレース。トレースはssコマンドだ。
    104 : オリジナルスレの - 2001/05/31(木) 13:02.net (+7,-30,+0)
    俺は実際にはトレースするの面倒だから 0xc0115317にブレイクポイントを
    設定し実行した。
    [0]kdb> bp 0xc0115317
    Instruction(i) BP #1 at 0xc0115317 (do_fork+0xa7)
      is enabled globally adjust 1
    [1]kdb> g
    Instruction(i) breakpoint #1 at 0xc0115317 (adjusted)
    0xc0115317 do_fork+0xa7int3

    Entering kdb (current=0xc5f82000, pid 15240) on processor 1
                   due to Breakpoint @0xc0115317
    次に実行されるインストラクションはこれ。
    0xc0115317 do_fork+0xa7cmp 0x300(%ebx),%eax
    レジスタの内容を見てみよう。eaxが&p->user->processesのはず。
    [1]kdb> rd
    eax = 0x00001000 ebx = 0xc2bd0000 ecx = 0x00000000 edx = 0xc6d0dfc0
    esi = 0xc5f82680 edi = 0xc2bd0680 esp = 0xc5f83f50 eip = 0xc0115317
    ebp = 0xc5f83fa4 xss = 0x00000018 xcs = 0x00000010 eflags = 0x00000286
    xds = 0xc5f80018 xes = 0x00000018 origeax = 0xffffffff ®s = 0xc5f83f1c
    eaxは0x1000つまり4096だな。0x300(%ebx)も見てみよう。メモリダンプはmdだ。
    [0]kdb> md %ebx+0x300
    0xc5aaa300 00001000 00001000 00000400 00000400 ................
    p->rlim[RLIMIT_NPROC].rlim_curも0x1000,4096であることがわかる。
    つまりこのマシンでは1ユーザーコンテキスト上では4096個以上のプロセスは
    立ち上げられないことになる。実際にpsコマンドでみても4096以上は
    立ち上がっていない。
    105 : オリジナルスレの - 2001/05/31(木) 13:22.net (+11,-30,-70)
    まあ、こんなもんだ。まあまあの題材だったね。
    2.2.19にも
      retval = -EAGAIN;
      if (p->user) {
        if (atomic_read(&p->user->count) >= p->rlim[RLIMIT_NPROC].rlim_cur)
          goto bad_fork_free;
        atomic_inc(&p->user->count);
      }
    ちゅうコードがあるからちゃんと動くはずだけどなあ。
    106 : login:Pe - 2001/05/31(木) 22:00.net (+3,-30,-22)
                 ∩
                     | |
                     | |
            ∧_∧   | |   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
           ( ´Д`)//  <  先生!クソレスがついてます!
          /       /     \  やはりちゃんころですか!?鬱だ、sageます!
         / /|    /       \_____________
      __| | .|    |
      \   ̄ ̄ ̄ ̄ ̄ ̄ ̄\
      ||\             \
      ||\|| ̄ ̄ ̄ ̄ ̄ ̄ ̄|| ̄
      ||  || ̄ ̄ ̄ ̄ ̄ ̄ ̄||
         .||              ||
    107 : login:Pe - 2001/05/31(木) 22:00.net (-2,-30,-16)
       .'⌒⌒丶
    _ ′从 从)_  もう寝る
    | __ヽゝ・_・ν  |
    |\ ⌒⌒⌒⌒⌒\
    |  \         \
    \  |⌒⌒⌒⌒⌒|
      \ |_____|

    108 : login:Pe - 2001/05/31(木) 22:43.net (+56,+27,-25)
    >>105
    ところで、その
    1ユーザが生成できるプロセスの上限
    はどこで設定できるの?
    109 : オリジナルスレの - 2001/06/01(金) 01:58.net (+12,-30,+0)
    rootユーザーの場合はulimitコマンドで設定することが可能。
    一般ユーザーは設定できない。一般ユーザの最大プロセス数を変更したい場合は
    2.2系では最大値はtask.hで
    #define MAX_TASKS_PER_USER (NR_TASKS/2)
    と定義されてるからここを適当にかえて再構築。
    2.4系では>>102で書いたようにfork_initの中で物理メモリの搭載量をもとに
    max_threadsが計算され、その半分に設定されている。
    変更したい場合は物理メモリの搭載量をかえましょう。
    どうしてもメモリをそのままでプロセス数だけ変更したい場合はfork.cのfork_initの
      init_task.rlim[RLIMIT_NPROC].rlim_cur = max_threads/2;
      init_task.rlim[RLIMIT_NPROC].rlim_max = max_threads/2;
    のmax_threads/2を適当な値に変えて再構築しましょう。
    110 : login:Pe - 2001/06/01(金) 02:09.net (+68,+29,-41)
    >>109
    減らす方向にはユーザレベルで可能なはずだが、
    現在手元にソースが無いので確認できず
    111 : オリジナルスレの - 2001/06/01(金) 02:13.net (+67,+29,-19)
    >>110
    確かに。減らす方向には一般ユーザでも設定できる。
    112 : login:Pe - 2001/06/01(金) 02:27.net (+19,-3,-3)
    >>オリジナルスレの1
    ちょっといい?
    113 : login:Pe - 2001/06/01(金) 16:33.net (+59,+29,-17)
    >>101=110か?
    オリ1が一人突っ走っていたが、キミのおかげで
    会話が成り立つようになって、良スレ化してきた。
    114 : login:Pe - 2001/06/03(日) 01:48.net (-6,-24,-1)
    晒しage
    115 : オリジナルスレの - 2001/06/03(日) 22:56.net (+65,+30,-151)
    >>88
    やんわりと同意。
    このスレはLinuxのことやってるんだから、興味ない人や
    他のスレの発言から1が嫌いな人は放っておけばいい。
    恥ずかしい論理でLinux厨房ぶりを晒さないことだ。

    確かに1は>>35-37みたいな恥ずかしい自作自演をする輩ではある。
    だいたい>>36は前スレの190だろ。
    http://cocoa.2ch.net/test/read.cgi?bbs=linux&key=989048022&st=190&to=191&nofirst=true
    文体が変わってるし急に馴れ馴れしくなってるよ。キャラは一貫性を持たせろ。

    >たまにリロードして窺ってました。
    >5時間くらい人がこなかったので誰もいなくなったのかと思ってました。

    俺は前スレの190=1のこの粘着ぶりをみて気持ち悪くなり
    手を引いた。確かにおもちゃにするにはおもしろい相手だけどな。
    だからあまり刺激するな。
    1は反論するやつはみんな俺に見えてるみたいだが、そんなに君を
    傷つけて心に深い傷を負わしてしまったかな。
    ごめんな、がんばれよ。

    まあ2chの掃き溜めで1もいろんな意味で英雄になったな。嬉しいぞ。
    116 : login:Pe - 2001/06/03(日) 22:59.net (+55,+27,-2)
    >>115
    やめろって。。。また。。
    117 : 55 - 2001/06/03(日) 23:06.net (+77,+29,-19)
    >>115
    盛り上がってるとこ悪いけど、おれは前スレの190で、このスレの36だけど
    ここでも前スレでも 1じゃないよ。
    118 : login:Pe - 2001/06/03(日) 23:07.net (+67,+29,-3)
    >>117
    言うだけなら1でも出来るな。
    119 : login:Pe - 2001/06/03(日) 23:18.net (+72,+29,-32)
    >>35-37
    つうか午前4時にあの間隔のカキコはなあ。
    120 : 37 - 2001/06/03(日) 23:30.net (+82,+29,-15)
    >>115

    >>37
    は俺だが、さすがにあの間隔は疑われてもしょうがないとは思うが…
    でも別人よ。
    121 : login:Pe - 2001/06/03(日) 23:32.net (+58,+20,-21)
    >>120
    36の次が37か…。
    なんか、ますます胡散臭くなってきたなあ(w
    122 : login:Pe - 2001/06/03(日) 23:35.net (+57,+29,-27)
    間隔&月曜の午前4時だぜ。
    そんでまた偶然36、37が出てくる。
    君たちはデムパで繋がってるの?
    123 : login:Pe - 2001/06/03(日) 23:38.net (+61,+29,-19)
    確かに。その限られた中で、さらに数少ない1に同意した人間がねえ。
    決めつけるのは良くないが、かなり不自然であるとだけ。
    124 : 55 - 2001/06/03(日) 23:40.net (+51,+28,-2)
    いいじゃん。このスレためになるし。
    125 : login:Pe - 2001/06/03(日) 23:45.net (+70,+29,-20)
    >>117,>>120
    おいおいおいおいおいおいおいおいおい
    ちょっと面白いな(w
    126 : login:Pe - 2001/06/03(日) 23:49.net (+72,+29,-28)
    そんじゃ55=1ってことか。
    自分でネタフリして自分で答えるのはスレを盛り上げるために
    使われる手段ではあるので、別に批判はしない。
    127 : 37 - 2001/06/03(日) 23:57.net (+66,+29,-37)
    >自分でネタフリして自分で答えるのはスレを盛り上げるために
    >使われる手段ではあるので、別に批判はしない。

    まあ、つまらん煽りや正体探しより遙かに有益だわな
    128 : login:Pe - 2001/06/03(日) 23:59.net (+52,+29,-6)
    開きなおった(藁
    面白いなー
    129 : login:Pe - 2001/06/04(月) 00:00.net (+49,+26,-4)
    トリッキーの1か?もしかして
    130 : 126 - 2001/06/04(月) 00:08.net (+78,+29,-25)
    ただ、みっともないだけの自作自演はカコワルイ。
    テクニカルな話題の自作自演はいいけどね。

    みっともないのは>>35-37みたいなのね。
    131 : login:Pe - 2001/06/04(月) 00:31.net (+82,+29,-33)
    >>127

    >>35-37のどこが遥かに有益なんだ…?
    見てて恥ずかしくなるんですけど…。
    開き直ってるのがダメ押しだな…。
    132 : login:Pe - 2001/06/04(月) 00:32.net (+38,+15,-2)
    age
    もっとしゃべって
    133 : 37 - 2001/06/04(月) 00:32.net (+75,+29,-13)
    >>131
    有益な情報を書いてくれる人にエールを送るのはダメなのか?
    134 : login:Pe - 2001/06/04(月) 00:34.net (+48,+12,-6)
    >>133
    自作自演だからダメなんだろ馬鹿(w
    135 : login:Pe - 2001/06/04(月) 00:36.net (+57,+29,-7)
    そうそう、温かいエールも自作自演だとひたすら寒い。
    136 : 55 - 2001/06/04(月) 00:38.net (+62,+29,-2)
    そろそろ 1にきてもらいたいなぁ
    137 : login:Pe - 2001/06/04(月) 00:40.net (+79,+30,-83)
    時間から見て、1は>>28を発見。カーッっとなってしまい、
    感情的な書き込みのあと、フォローしてくれる人がいそうにないので、
    自分にはこれだけ支持者が居るんだぞ、
    俺の発言は有益なんだぞ、と見せ付ける為に、
    >>35-37の自作自演を展開、感情的になっていて間を空けるのを忘れた。
    と見るのが妥当かな。

    いや、所詮ただの妄想だから無視してくれて結構。ほっほ。
    138 : login:Pe - 2001/06/04(月) 00:42.net (+85,+29,-14)
    >>136
    ここで1が登場して、弁解するに1票。
    (この書き込みを見て、しばらく時間を空けてくるに300ガバス)
    139 : login:Pe - 2001/06/04(月) 00:43.net (+52,+29,-3)
    そろそろカーネルの話に戻してよ
    140 : login:Pe - 2001/06/04(月) 00:45.net (+67,+29,-8)
    …などと1らしき人が発言してますが、皆さんいかがでしょう?
    141 : login:Pe - 2001/06/04(月) 00:46.net (+75,+29,-19)
    >>140
    こんな事やってると何も書けんぞ。
    Win厨、Lin厨よりもタチが悪いな。
    142 : login:Pe - 2001/06/04(月) 00:49.net (+81,+29,-39)
    >>141
    いや、カーネルデバッグ以外でLinuxの話ならOKでしょ(w
    それに匿名掲示板における自作自演指摘の無意味さは
    ここにいる全員が知っている。まあ、ネタまがいの遊び
    だよ。
    143 : login:Pe - 2001/06/04(月) 00:52.net (+9,-18,-13)
    >いや、カーネルデバッグ以外でLinuxの話ならOKでしょ(w

    カーネルデバッグの話はいやなのか?
    144 : login:Pe - 2001/06/04(月) 00:52.net (+58,+19,-2)
    >>142
    1発見!!
    ごまかそうとしてもだーめー
    145 : login:Pe - 2001/06/04(月) 00:52.net (+52,+29,-2)
    だって1がうざいんだもん。
    146 : login:Pe - 2001/06/04(月) 00:53.net (+84,+29,-23)
    >>115->>142

    カーネルデバッグネタに付いてこれない連中の嫌がらせ。
    147 : login:Pe - 2001/06/04(月) 00:55.net (+64,+26,+0)
    >>146
    やめとけ、1。
    素直に謝れ。
    148 : login:Pe - 2001/06/04(月) 00:57.net (+56,+15,-15)
    >>146
    Lin厨にはテクニカルな話は理解不能です。
    149 : 101=110= - 2001/06/04(月) 01:04.net (+52,+20,-3)
    オリ1とは無関係です
    150 : login:Pe - 2001/06/04(月) 01:11.net (+64,+29,-8)
    >>149
    いや、判ってるって。
    文体違うし文短いし
    ←前へ 1 2 3 4 5 6 7 8 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitterで / kernel スレッド一覧へ
    スレッド評価: スレッド評価について
    みんなの評価 :
    タグ : 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。

    類似してるかもしれないスレッド


    トップメニューへ / →のくす牧場書庫について