☆Linux カーネルの仕組みを勉強するスレ☆
■ このスレッドは過去ログ倉庫に格納されています
0001login:Penguin
01/10/02 17:44ID:38KkZsUQカーネル全般について語り合うスレッドです。
0169login:Penguin
01/11/13 22:48ID:36p1vksl> いいスケジューラなの? 俺はそう思わんけど。
うーん、うーん、うーん。頼むから OS の教科書ぐらい読んでくれー。
> 応答性が重要ならそもそもOSの選択に間違いがあったと思われ。
それって、Linux よりも、商用UNIX やら *BSD やらを勧めてるってこと?
該当システムってハードリアルタイム性は全く必要ないので、UNIX で十分なんだが。
0170login:Penguin
01/11/13 22:56ID:CaHKE6Ak> うーん、うーん、うーん。頼むから OS の教科書ぐらい読んでくれー。
ごめん。OS はほとんど自学なので基本的なことがわかってないかも知れない。
しかし多量のディスクI/Oや,遅いネットワークI/Oってのは短い応答時間が
必要だろうか? ってハナシ。
> それって、Linux よりも、商用UNIX やら *BSD やらを勧めてるってこと?
> 該当システムってハードリアルタイム性は全く必要ないので、UNIX で十分なんだが。
Solaris なんかを使えばプリエンプトできるからずっとよいと思うけど。
0171login:Penguin
01/11/13 23:19ID:36p1vkslシステム全体の「スループット」(not only 応答性) も向上させるのよ。
これ常識。
まともなハードウェアなら I/O と計算処理は並列動作できるから (PC 用の
安物ハードウェアには、駄目なものも多いが)、こうした方がシステム全体の並
列性が上がるんよ。I/O intensive なプロセスに CPU が回ってこないと、
本来発行できる筈の I/O 要求が発行できないので、並列度が落ちるわけ。
> Solaris なんかを使えばプリエンプトできるからずっとよいと思うけど。
実はそのソフトウェアは、開発段階では Solaris と BSD でも動かしてたんだ
が (最終版は Linux のみ)、Solaris だけじゃなくて BSD でも問題なかったのね。
だから、これに関してはカーネルレベルでのプリエンプティブ性は必要ない。
Linux 版がなんか遅いなあと気づいたのは、比較対象があったせいなわけ。
0172login:Penguin
01/11/13 23:27ID:cEWualSTでも、システム全体のスループットをあげるのが必ずしも良いとは限らないよね?
そうすると公平性が損なわれない?
0173login:Penguin
01/11/13 23:46ID:36p1vksl一般的にはスループットと応答性はトレードオフになることが多いからね。
でも、この件に限って言うと、スループットも応答性も両方とも向上する
ので、当てはまらない。
> そうすると公平性が損なわれない?
失われない。
sleep priority は、sleep から目覚めてからユーザーモードに戻るまでの間
しか適用されないから、もしそのプロセスが I/O するだけでなく CPU も沢山
使っている場合は、(sleep priority じゃない方の) 優先度が下がっているの
で、ユーザーモードに戻る時に、より優先度の高いプロセスにスイッチしてし
まうから。
0174login:Penguin
01/11/14 00:00ID:BJD7Ro88> I/O intensive なプロセスに優先的に CPU を与えることは、
> システム全体の「スループット」(not only 応答性) も向上させるのよ。
> これ常識。
ん〜じゃほとんどI/OせずCPUをガンガン使うタイプのプロセスはあまりCPUを
使えなくなるような気がするのだけど。
0175login:Penguin
01/11/14 00:13ID:LEvOTgWY2.4 で比較してみたら?
0176login:Penguin
01/11/14 00:22ID:LEvOTgWY性能があんまし出てないって話だったのね。
2.4 ではカードによっては zero copy が出来るようになったし、
32bitマシンで64bitDMAのbounce buffer なしのデータのやりとり
とかもできるようになってきてるし、ソフト開発で今更 2.2
がターゲットというのもどうかとおもわれ。
0177login:Penguin
01/11/14 00:46ID:IRaPmSaY> 使えなくなるような気がするのだけど。
その通り。UNIX のスケジューラは、どれも基本的には、こうなっているよ。
Linux だってそう。嘘だと思ったらスケジューラのソースを読んでくれ。
ところが、基本的にはそうなっている筈なのに、なぜか CPU intensive な
プロセスが CPU を掴んで離さないことがあるのが変だって話をしてるわけ。
その原因として Linux に sleep priority がない (他の UNIX には、全て
ある) ことを疑っているんだけど、本当にこれが原因なのかどうかは実は
検証したわけじゃないので良く分からない。濡れ衣かもしれない。
あと、今回の件は wake one とか zero copy とか bounce buffer なしとか
は、たぶん関係ないよ。どうしてそう想像できるかは、
・使ったハードは、今どきの Intel CPU に Intel EtherExpress PRO
・CPU intensive なプロセスと I/O intensive なプロセスがそれぞれ 1 つ
ずつでも発生した
・Linux と Solaris や BSD を比べた
・少なくとも直接の原因はスケジューリングにあった
ってことから導けるんだけど、面倒だからこれ以上の説明は省略。
これだけ書いとけば、あとは自分で考えれば分かる筈だからね。
0178login:Penguin
01/11/14 00:47ID:jil2no7jもうソース公開おわっちゃったみたいなので。
UNIX板だと煽られそうだからここの有志に期待。
0179login:Penguin
01/11/14 01:02ID:cZfNRmC/0180login:Penguin
01/11/14 01:06ID:jil2no7j0181login:Penguin
01/11/14 01:45ID:BJD7Ro88> その通り。UNIX のスケジューラは、どれも基本的には、こうなっているよ。
> Linux だってそう。嘘だと思ったらスケジューラのソースを読んでくれ。
つーか良いスケジューラかどうかってハナシをしてるんだけど。これでいいの?
0182login:Penguin
01/11/14 02:18ID:IRaPmSaY良いからこうなってるんだ YO。
そんなに疑わしいなら、君の考える理想のスケジューリングと、それが既存の
スケジューリング戦略と比べて、どう優れているかを、ここで提案してごらん YO。
0183login:Penguin
01/11/14 03:05ID:BJD7Ro88> そんなに疑わしいなら、君の考える理想のスケジューリングと、それが既存の
> スケジューリング戦略と比べて、どう優れているかを、ここで提案してごらん YO。
やはりCPUバウンドとI/Oバウンドなプロセスがバランスよく動くことが理想だ
と思うわけ。画像のレンダリングとかをやるならCPUバウンドの方を優先した
方がいい。SVR4なんかはI/Oでなくて「イベント」でプライオリティを増減し
ているらしいけどこういう戦略の方が今っぽくはないかというハナシ。
例えばLinuxのsched.cなんかを読むと以前実行したプロセスとメモリを共有し
ているプロセスの優先度を上げるようになっているけどこういうのは駄目なの?
あと前も言ったけどLinuxのスケジューラは毎秒キューを再計算してないので
(再計算するのは全ての実行可能プロセスがカンタム時間を使いつくした時だ
け)プロセスが多くなると設定しなおす頻度が下がるからレイテンシが下がる
んだろうと思ったんだけど。こういうのも毎秒計算するよりはアリだと思う。
まぁ問題と言えば問題なんだけどそれはスケジューラのクセであって信用に値
するかしないかという問題ではないと思ってるんだけどどう?
0184login:Penguin
01/11/14 08:20ID:BJD7Ro88>>177
> その原因として Linux に sleep priority がない (他の UNIX には、全て
> ある) ことを疑っているんだけど、
他のUnixはスリープ優先度でI/O intensiveを実現してるんだけどLinuxの場合は
違う方法でそれを実現しているってのもクセを作ってる一因だと思う。
> あと、今回の件は wake one とか zero copy とか bounce buffer なしとか
> は、たぶん関係ないよ。どうしてそう想像できるかは、
俺も関係ないと思う。つーわけで出勤だよヽ( ´ー`)丿続きはまた今夜。
0185login:Penguin
01/11/14 19:55ID:IRaPmSaY> と思うわけ。
I/O バウンドなプロセスを優先して動かすと、バランスよく動くようになるん
だよ。I/O バウンドなプログラムは、名前の定義からして CPU はそんなに使
わない、CPU を掴んでもすぐに手放すんだから、優先的に CPU を回してやっ
ても全く何の問題ないんだよ。
> 画像のレンダリングとかをやるならCPUバウンドの方を優先した方がいい。
違うよ。CPU intensive なプロセスを優先すると、正帰還が起きて CPU を消
費しないプロセスには決して CPU が割り当てられないという致命的な状況が
発生するでしょ。対話的なプログラムなんかは、ほとんど入力待ちにいてCPU
を使わないから優先度が下がって、優先度の高い CPU intensive なプロセス
が終了するまで決してスケジュールされないことになる。つまり、ほとんどシ
ングルタスク OS 状態、しかも対話的なプロセスが常に一番後回しにされてし
まうという。そんな OS 決して誰も使わないよ。
もし信じられないなら、p->couter が大きい方を優先する代わりに p->counter
が小さい方を優先するように goodness() を書き換えて試してごらんよ。そん
なことをしなくても、ちょっと考えれば分かる筈だと思うんだが。
> 他のUnixはスリープ優先度でI/O intensiveを実現してるんだけどLinuxの場合は
> 違う方法でそれを実現しているってのもクセを作ってる一因だと思う。
これも違うなあ。I/O intensive なプロセスが優先されるのは、基本的にはそ
ういうプロセスが CPU を使わない (Linux の実装の言葉で言うと、
p->counterの値が大きい) からだよ。これは、Linux 以外の UNIX でも変わら
ない。Linux の異なる点は、他の UNIX が持っているもう一つの仕組み (スリー
プ優先度) を持ってないことであって、Linux 独自の特別な仕組みで I/O バ
ウンドなプログラムを優先させているわけじゃない。
あと、気になっているんだけど、Linux のスケジューラを、4.3BSD のスケジュー
ラに毛が生えたって表現するのは、かなり違うと思うな。ラウンドロビン以外
の優先度クラスがあるって意味では毛が生えているけど、逆に抜けている毛も
大きいと思うよ。ロードアベレージを勘案した decay なんてのは、すっぽり
抜け落ちてるでしょ。
0186login:Penguin
01/11/14 21:32ID:BJD7Ro88> を使わないから優先度が下がって、優先度の高い CPU intensive なプロセス
> が終了するまで決してスケジュールされないことになる。つまり、ほとんどシ
> ングルタスク OS 状態、しかも対話的なプロセスが常に一番後回しにされてし
> まうという。そんな OS 決して誰も使わないよ。
だからバランスよくと表現したんだけど。LinuxはPC用OSだよ?
DVDとか見るときとかどうするのさ。これってほとんどCPUバウンドなプロセスだよ。
ゲームとかもそうかもね。
こんなもんでいいやと手を打った結果だと思ってるんだけど。
なんでここまで粘着かというとオライリーの「LINUX カーネル」のP330に
「I/Oバウンド型プロセスを優先する仕組は万能ではない」
という節があるから。俺もこれを見て納得してたんだけどそうではないという。
それで混乱しているわけさ。
> もし信じられないなら、p->couter が大きい方を優先する代わりに p->counter
> が小さい方を優先するように goodness() を書き換えて試してごらんよ。そん
> なことをしなくても、ちょっと考えれば分かる筈だと思うんだが。
それって優先度が逆転してるじゃん(笑)
> あと、気になっているんだけど、Linux のスケジューラを、4.3BSD のスケジュー
> ラに毛が生えたって表現するのは、かなり違うと思うな。ラウンドロビン以外
> の優先度クラスがあるって意味では毛が生えているけど、逆に抜けている毛も
> 大きいと思うよ。ロードアベレージを勘案した decay なんてのは、すっぽり
> 抜け落ちてるでしょ。
こういう部分はLinuxの各所に見られるね。アルゴリズムをシンプルにするこ
とによって速く動かそうという感じ。VM とか。その代わり必要だと思ったら
ガンガン詰め込む。スケジューラの件も kernel-ml あたりでプリエンプティ
ブなスケジューラのパッチが流れてきてるんでそのうち入るのではないかな。
そういや君の案件ってリアルタイムプロセスにして動かすという手はなかったの?
0187login:Penguin
01/11/14 22:18ID:IRaPmSaY> DVDとか見るときとかどうするのさ。これってほとんどCPUバウンドなプロセスだよ。
それこそ、リアルタイム・スケジューリングを使うべきアプリケーション
じゃないの? 今はカーネルが、どう優先度を自動的に推測すべきかって
話をしているわけでしょ。リアルタイム・スケジューリングの場合、
ユーザーが指定した優先度が固定的に使われるんだから、そもそもそういう
問題は発生しないよ。
> なんでここまで粘着かというとオライリーの「LINUX カーネル」のP330に
> 「I/Oバウンド型プロセスを優先する仕組は万能ではない」
> という節があるから。俺もこれを見て納得してたんだけどそうではないという。
> それで混乱しているわけさ。
え? その記述は正しいよ。
俺は、ベストだとは言ったかもしれないけど、万能だなんて言ってないけどな。
カーネルの行う優先度の推測は、所詮推測に過ぎないんだから、向かない
応用はあるし、だからこそリアルタイム・スケジューリングとかが必要に
なるわけでしょ。
でも、TSS 用の優先度変動型スケジューリング・ポリシーとしては、I/Oバウ
ンド・プロセスを優先させる以外に良いやり方はないと思う。というか、CPU
バウンド型プロセスを優先させたら、取り返しのつかないことになる。
> > もし信じられないなら、p->couter が大きい方を優先する代わりに p->counter
> > が小さい方を優先するように goodness() を書き換えて試してごらんよ。そん
> > なことをしなくても、ちょっと考えれば分かる筈だと思うんだが。
>
> それって優先度が逆転してるじゃん(笑)
そう。君の主張していた、TSS スケジューリングにおいて CPU バウンド型
プロセスを優先させるっていう方針は、つまるところ、そういう意味なわけ。
やっと分かったかな。
> こういう部分はLinuxの各所に見られるね。アルゴリズムをシンプルにするこ
> とによって速く動かそうという感じ。VM とか。その代わり必要だと思ったら
> ガンガン詰め込む。
この、必要だと思ったらってところの判断基準に納得いかない点があるんだよなあ。
今回の応用の場合は作り込みで問題を回避できたけど、一般論としては回避で
きないこともあると思うんだが。
> スケジューラの件も kernel-ml あたりでプリエンプティブなスケジューラ
> のパッチが流れてきてるんでそのうち入るのではないかな。
プリエンプティブ化と この件は、関係ないのでは?
> そういや君の案件ってリアルタイムプロセスにして動かすという手はなかったの?
リアルタイム・プロセスにするにはルート権限いるでしょ。
この特定の問題のためだけに setuid root にするよりは、sched_yield() で
スケジューラの変な挙動を回避する方が、マシな解決策だと判断したわけ。
0188login:Penguin
01/11/14 22:43ID:BJD7Ro88> それこそ、リアルタイム・スケジューリングを使うべきアプリケーション
> じゃないの?
Unix的にはそうかも知れない。しかしLinuxはそういうプロセスにもCPUを割り振る
ようなスケジューラに*結果的*になっている。だからこの辺でいいんじゃないか
と手を打ったように見えるわけさ。それをクセと書いたわけ。
> この、必要だと思ったらってところの判断基準に納得いかない点があるんだよなあ。
> 今回の応用の場合は作り込みで問題を回避できたけど、一般論としては回避で
> きないこともあると思うんだが。
必要だと思ったらというより必要だと思ってパッチを出せる人がいたらってことかな。
却下されることはあまりないよね。
> > スケジューラの件も kernel-ml あたりでプリエンプティブなスケジューラ
> > のパッチが流れてきてるんでそのうち入るのではないかな。
>
> プリエンプティブ化と この件は、関係ないのでは?
あ。ごめん。>>154 の件。
0189login:Penguin
01/11/14 23:16ID:IRaPmSaY> 結果的*になっている。だからこの辺でいいんじゃないかと手を打ったよう
> に見えるわけさ。
これを、Linux のスケジューラのクセであって許容範囲内であると考えるか、
UNIX 古来の知恵を無視して手を抜いてるから信用できないって考えるかって
違いなんだよなあ。俺は old type、oldtimer だから、よく知られている筈の
知恵が使われてないのをみると、結構ガックリくるのね。
まあ、無視しても何の問題も出ないのなら、そういうのもありなわけだけど、
現実に、こっちとしては手間がかかってるわけだし。
> 却下されることはあまりないよね。
たとえば crashdump と kernel debugger が標準カーネルにいまだに入ってな
いのは、納得いってない。そりゃ Linus が必要としてないのは分かるが、
顧客に対してカーネル保守サービスを提供している場合には要るんだけどなあ。
0190login:Penguin
01/11/15 01:29ID:L5cES50v>顧客に対してカーネル保守サービスを提供している場合には要るんだけどなあ
そりは君のお仕事では?
0191login:Penguin
01/11/15 02:42ID:mJoL8gKI> これを、Linux のスケジューラのクセであって許容範囲内であると考えるか、
> UNIX 古来の知恵を無視して手を抜いてるから信用できないって考えるかって
> 違いなんだよなあ。俺は old type、oldtimer だから、よく知られている筈の
> 知恵が使われてないのをみると、結構ガックリくるのね。
シンプルで高速にってのがLinuxのモットーだしね。VM論争だってRikのロバスト
なVMよりAndreaの高速なVMの方が採用されてしまった。まぁそれもアリだとう思う。
既存のUnix的なものを求めるのならLinuxは向かないのかも知れない。
0192login:Penguin
01/11/20 10:07ID:VDFNCHJfLinuxのソースコードの中で読むと勉強になるファイルを紹介してください。
個人的にはlist.h、ghash.hが大変為になりました。
0193login:Penguin
01/12/07 04:50ID:pUngVfZJスケジューラのどこをどう換えればよくなるの?
0194生徒A
01/12/07 12:06ID:Gi93BTz7>193 リアルタイム化ってことでいいんじゃない? 具体的には,
カーネルプリエンティブにして優先度付きスケジューラ(Linuxで
言う優先度とはちょっと違う)を搭載すればマルチメディア対応で
いいのかな.
優先度継承機能とかもいるね.
0195縞栗鼠(シマリス)の親方
01/12/07 12:19ID:ohUthW+y汚物入れを物色して女子生徒の使用済みタンポン・ナプキン等を
個人的に収集しているというのは事実。
中央高等学院では
生徒及びその保護者の個人情報を名簿図書館等に売却しています。
中央高等学院
http://www.chuo-school.ac/
http://chs-f.com/index.html 中央高等学院福岡校
0196login:Penguin
01/12/11 19:44ID:PbCyuzo0割り込み処理に優先度をつけるのも必要でしょ。
割り込み処理を、優先度付きのスレッド化するってのでもいいけど。
0197login:Penguin
01/12/12 20:53ID:VRHOlTvG買った age 。
0198login:Penguin
01/12/12 21:32ID:6ixMAsTNずいぶん前に買ったけど、まだ読んでないや。
細かいけど詳細ではなく詳解です。
#それじゃあLinuxJapan 10月号と同じ間違いだよ。(w
0200login:Penguin
01/12/13 04:48ID:GDrY1kNCこれとソースコードをつき合わせてるから、
年内かかりそうなかんじ。
がんばりましょう!
0201login:Penguin
01/12/13 07:24ID:nHHZmC7zあんなのいつ読み終わるやら…。
現在、1章読み終わる!
残りページ見てまたウトゥ。
ま、ゆっくりと行きますか。
がんばりましょう。
0202login:Penguin
01/12/13 07:26ID:nHHZmC7z『速読ってどう?』
http://ebi.2ch.net/test/read.cgi/rikei/969547091/l50
0203login:Penguin
01/12/13 07:31ID:GDrY1kNCもうあっという間に理解してたりする。
あういった技能は本を速読するのとは
また別の能力の気がするよ。
0204login:Penguin
01/12/13 17:28ID:3ZNfl0lP2.4もあまり変わりないの?
0205login:Penguin
01/12/13 19:35ID:P41LkMkd執筆の時点の安定版カーネルが、 2.2 だったらしい。
でも、初版が 2001 年 7 月だから、本としては
カナーリ新しいんじゃなかろうか。
漏れなんかには違い分からないだろうし…。
0206login:Penguin
01/12/13 20:20ID:jXJ+WFgy詳細な部分が違うだろうから本の趣旨からすると…
0207login:Penguin
01/12/13 20:35ID:GDrY1kNC一応各章の最後に2.4.*のことについて書かれてる。
ほんの少しだけど。
>>205
原書は2001/1って書いてある。ってことは発売されたのは去年かな?
>>206
もとのタイトルには詳解なんて言葉はないです。日本のオライソーが
勝手につけた言葉です。
この本の目的はカーネルのソースを読めるようにすること
って書いてあるから、本だけ見て細部を隈なく理解できるように
なると期待するほうが間違ってると思う。
0208login:Penguin
01/12/14 09:22ID:pLOVOTkt特別にシステムに関数とかを用意したりするんでしょうか?
0209login:Penguin
01/12/24 12:51ID:UsKcZqV70210login:Penguin
01/12/29 11:32ID:QLo22gE5/dev以下のノードを介する方法しかないのでしょうか?
よろしくお願いします。
0211login:Penguin
01/12/29 12:03ID:mYAbtgDl/dev 以下以外にもデバイスファイルは作れます。
man mknod
0212login:Penguin
01/12/29 12:19ID:4LQmsDwQフォーマットとかしようと思ってmke2fsとかやったら
自分のところのマシンをフォーマットしちゃったわけよ。
デバイスファイルって結局そこにあるメジャー番号とかマイナー番号
とかしか参考にしないわけで、誰のものかなんて考慮してないよね。
(かならず自分のデバイスだと思ってる)
たしかネットワーク経由で他のマシンのデバイスを直接操作する
機能というか仕組みがあったと思うんだけど、なんて名前だっけ?
0213login:Penguin
01/12/30 00:17ID:5UM9dPtt最近はデバイスファイルでは扱いにくいハードが増えたから
(マルチメディア系・プラグアンドプレイ)
なんで、デバイスファイルじゃなくて、
そのハードを扱うシステムコール作って、
システムコールであつかうのもいいんじゃないかな?
0214login:Penguin
01/12/30 00:30ID:vlB/mJ24出会いを求める男性へ!!
http://chevy.sites.cc/
0215login:Penguin
01/12/30 00:55ID:L5DsFMps>そのハードを扱うシステムコール作って、
>システムコールであつかうのもいいんじゃないかな?
これはカーネルに手をつけるということですよね。
そこまでしなければデバイスファイルを経由しないといけないという事でよろしいのでしょうか?
0216login:Penguin
01/12/30 02:50ID:FBPpTPsC>他のマシンの/devをNFSマウントして、そこの/dev/hdcとかを直接
>フォーマットとかしようと思ってmke2fsとかやったら
>自分のところのマシンをフォーマットしちゃったわけよ。
最初UNIX Kernelをわかってないなぁって思ったんだけど、でも、確かにネットワーク越しに相手のデバイスファイルを触るという発想はちょっと面白いかも。
Kernel側がどう一貫性を維持しようとするかが問題だけど。
0217212
01/12/30 03:07ID:UzGpkVqiネットワークブロックデバイス というのがあるみたいッスね。
(ようやく名前がわかったですよ)
カーネル2.2にもあるみたいなんだけど試すのおっかないなぁ
0218login:Penguin
02/01/01 12:59ID:fIVu4F/oまた交換するには具体的にどのような過程を通しているのでしょうか?
お願いします。
0219login:Penguin
02/01/01 20:33ID:BcEtv31+ハードウェアによる割込み、ソフトウェア割込み (システムコールはこれ)、
モード切替え用の命令、メモリ保護違反、不正な命令の実行、等いろいろ。
まずは JF の
http://www.linux.or.jp/JF/JFdocs/The-Linux-Kernel.html
読んで勉強しな。
0220login:Penguin
02/01/01 20:57ID:fIVu4F/o0221login:Penguin
02/01/05 15:23ID:7OyjHkMf以下の本は買う価値あるでしょうか?
実習Linuxカーネル 理論と実習カーネルを効率的に理解するための実習書
出版社名 : ピアソン・エデュケーション
0222login:Penguin
02/01/06 03:54ID:Dq18r+Giカキコしてください。
とりあえず、global
0223login:Penguin
02/01/06 03:56ID:I+MzFQ0/grep
0224login:Penguin
02/01/06 04:06ID:Yl828KDRecho, printf
0225login:Penguin
02/01/06 04:18ID:OZczuKpf0226login:Penguin
02/01/06 04:51ID:QV/kUS0W↑こんな感じでLinuxカーネルを激しいインパクトと共に
表示してくれるツールないのか?
0227TOM
02/01/06 05:29ID:VAV/Hk1Rマスクを設定したいのですが、どのようにやればいいのでしょうか?
0228TOM
02/01/06 05:31ID:VAV/Hk1R0229global
02/01/06 07:29ID:6O0PvUPfgtags
htags
って何時間ぐらいかかりますか?
5時間動かしてて、まだ、終らないんですけど。
0230login:Penguin
02/01/07 02:12ID:9E3jZ+kYとりあえず、
htags -aF
-a:英字インデックス
-F:フレーム対応
linux2.4.17、Pen�V733で4時間ぐらいだった気がする。
0231229
02/01/07 20:12ID:hX8x2Oivlinux2.4.17をPentium3 500でやってます。
よかったら
GPATH
GRTAGS
GSYMS
GTAGS
のサイズ教えてください。
僕のは今のところ
2 MB
92 MB
13 MB
19 MB
で、GSYMSがちょっとづつ増えています。
sortが遅いのかな?(2.0.16)
0232login:Penguin
02/01/09 14:16ID:YpXVFRRT0233login:Penguin
02/01/11 10:22ID:aBKMHgnQやっぱり片っ端からチェックしてるだけなんでしょうか?
0234login:Penguin
02/01/11 22:24ID:VauQghNoみんな買って読んでる?
0235login:Penguin
02/01/11 22:34ID:OhKVZ3uP0236login:Penguin
02/01/11 22:43ID:J9+ERyxt個々のドライバの初期化処理で、ありそうなアドレスを片っ端からチェックしてる。
0237デフォルトの名無しさん
02/01/12 21:54ID:Osm3xSog0238SsS
02/01/13 16:44ID:1HgPfsgvデバックにprintfk を使うってほんと???
0239login:Penguin
02/01/13 17:17ID:ften7Xofほんとう
0240セマフォ
02/01/13 22:51ID:byNjLBNZ0241デビットカトラー
02/01/13 23:12ID:byNjLBNZといいますが、具体的にどのファイルで処理しているのでしょうか?
0242login:Penguin
02/01/13 23:30ID:QSg7wIlWlinux/kernel/sched.o だろ(藁
ソースコードはlinux/kernel/sched.c だな
0243super
02/01/14 00:12ID:d6cd8xHDopen やclose などに対応したデバイス独自の関数を
作成しそれらへの関数ポインタをひとまとめにしたテーブルを
作成するということ
といいますが、
もうすこし、わかりやすく説明してください
0244login:Penguin
02/01/14 00:34ID:/7fIIVhtこれは「比較を行う関数」というものをqsort本体からは
抽象化して、実装は別にしているわけだ。
同様に、あるキャラクタディバイスに対してread()やwrite()
を行った際の動作を、カーネルが扱う際に抽象化する為に
関数へのポインタを渡すことで実現している。
0245login:Penguin
02/01/14 01:00ID:HmpJulBQsemaphoeで検索すれば、いくらでもヒットするんでは?
もしかして、test and set命令とか、そのレベルから
教えてという話?
0246login:Penguin
02/01/14 01:24ID:qUNfVGwW0247login:Penguin
02/01/14 05:38ID:yv5BYGJ8そういうテーブルを作ると、ドライバの親分が
必要に応じて呼び出してくれるんです。
0248super
02/01/14 22:10ID:hh4sVRcA0249login:Penguin
02/01/15 21:02ID:blfk2QjYhttp://pc1.peanuts.gr.jp/~kei/Kernel-Snapshot/linux/kernel/sched.c
Lion みたいにわかりやすく解説して!
0250login:Penguin
02/01/15 21:07ID:blfk2QjY1269ステップ数あります
みなさん249のページをコピーして
秀丸に貼り付けて下さい!
0251login:Penguin
02/01/15 21:08ID:blfk2QjYstatic union {
struct schedule_data {
struct task_struct * curr;
cycles_t last_schedule;
} schedule_data;
char __pad [SMP_CACHE_BYTES];
} aligned_data [NR_CPUS] __cacheline_aligned = { {{&init_task,0}}};
では何をやっているのでしょうか?
0252login:Penguin
02/01/15 21:13ID:blfk2QjYは何を意味していますか?
0253login:Penguin
02/01/15 21:43ID:blfk2QjY0254名無しさん@お腹いっぱい。
02/01/15 23:02ID:myRSFpvn具体的にどの部分が分からないのか不明。
currにn番目のプロセッサで実行中のタスクが入る。
unionで__pad入れてるのは、構造体のサイズをcache境界の単位にあわせるため。
__cacheline_aligned は構造体そのものをcache境界に整合した番地に置くため。
NR_CPUS定数はCPUの数。
>252
>find_process_by_pid
関数名そのまんま。PIDからタスク構造体を取得するだけだと思うが。
0255login:Penguin
02/01/15 23:06ID:iytjqY0j/*
* We align per-CPU scheduling data on cacheline boundaries,
* to prevent cacheline ping-pong.
*/
>>252
pidが0なら、現在のタスク情報の構造体へのポインタを、
そうでないなら、指定されたpidがしめすタスクの構造体への
ポインタを返してる。
0256login:Penguin
02/01/16 00:02ID:NXnK8I7nLionsに紹介されている(P94)のsched.c
とLinuxのSched.cとは全然違うように思います
これはLinuxが独自の仕様ということでしょうか?
Bach本でスケジューリングのアルゴリズムを説明しているソース
はLion本に近いソースで説明しているのですが
0257login:Penguin
02/01/16 00:03ID:NXnK8I7nあわせるため
もう少し詳しく!
0258名無しさん@お腹いっぱい。
02/01/16 00:13ID:MlDa/kr2http://lse.sourceforge.net/counters/statctr.html
#Statistics Counter Maintenance
のところに詳しく書かれてる。
0259login:Penguin
02/01/16 00:15ID:lZaXRnQUcacheの問題だっていってるんだから、そこに因われることは
無いと思われ。
「あー、高速化の為に、unionつかってイイ感じにやってんのねー」で
十分じゃねーの?
0260login:Penguin
02/01/16 00:38ID:NXnK8I7n256のいうように、ソースが複雑になっていると
いうことでしょうか?
ちなみにSCHED.C ってlINUXの中ではわかりずらいソースなのでしょうか?
0261名無しさん@お腹いっぱい。
02/01/16 00:58ID:MlDa/kr2つまり、キャッシュラインに対して構造体1つがピッタリはまっていれば
その構造体以外のアクセスで、その構造体があるキャッシュラインがフラッシュされることがなくなる。
もし、構造体のサイズ!=キャッシュラインサイズであれば、
あるプロセッサによって無関係のデータの読み込みが行われた場合でも
他のプロセッサ全てのキャッシュラインの更新が行われてしまう可能性がある。
そしてメモリアクセスが増えて性能が落ちる。わずかだけど。
キャッシュラインのイメージ図(*が構造体の部分 Xが無関係のデータ)
(1). [**********][XXXX] <-構造体のサイズ!=キャッシュラインサイズの場合
(2). [****************] <-構造体のサイズ==キャッシュラインサイズの場合
(1)の場合は無関係のデータにアクセスされてもそのキャッシュラインがフラッシュされてしまうので無駄。
(2)の場合は構造体にアクセスする場合だけそのキャッシュラインがフラッシュされるので効率がいい。
∧_∧
( ´Д`) <わかったかな?
/ \
_ | | ∬ | |_..∬
|\ ̄ ̄ ̄旦 ̄ ̄ 旦.\
./..\\ \
/ \|================|
\ ノ \
\ .\
\ ..\_
""""""""""""""""""″″′
0262login:Penguin
02/01/16 01:09ID:DfshrX4dthank you
0263Be名無しさん
02/01/16 22:11ID:NXnK8I7n0264Be名無しさん
02/01/16 22:31ID:NXnK8I7n{
int weight;
/*
* select the current process after every other
* runnable process, but before the idle thread.
* Also, dont trigger a counter recalculation.
*/
weight = -1;
if (p->policy & SCHED_YIELD)
goto out;
/*
* Non-RT process - normal case first.
*/
if (p->policy == SCHED_OTHER) {
/*
* Give the process a first-approximation goodness value
* according to the number of clock-ticks it has left.
*
* Don't do any other calculations if the time slice is
* over..
*/
weight = p->counter;
if (!weight)
goto out;
#ifdef CONFIG_SMP
/* Give a largish advantage to the same processor... */
/* (this is equivalent to penalizing other processors) */
if (p->processor == this_cpu)
weight += PROC_CHANGE_PENALTY;
#endif
/* .. and a slight advantage to the current MM */
if (p->mm == this_mm || !p->mm)
weight += 1;
weight += 20 - p->nice;
goto out;
}
/*
* Realtime process, select the first one on the
* runqueue (taking priorities within processes
* into account).
*/
weight = 1000 + p->rt_priority;
out:
return weight;
}
なにをやっているか解説して下さい
140行目からです
sched.c
0265Be名無しさん
02/01/16 23:00ID:NXnK8I7nint count;
pgd_t * pgd;
unsigned long context;
unsigned long start_code, end_code, start_data, end_data;
unsigned long start_brk, brk, start_stack, start_mmap;
unsigned long arg_start, arg_end, env_start, env_end;
unsigned long rss, total_vm, locked_vm;
unsigned long def_flags;
struct vm_area_struct * mmap;
struct vm_area_struct * mmap_avl;
struct semaphore mmap_sem;
};
構造体の中に構造体がある場合はどう理解すればいいのでしょうか?
sched.h
http://www.linux.or.jp/JF/JFdocs/The-Linux-Kernel-15.html
0266もなー君@お腹いっぱい。
02/01/16 23:37ID:MlDa/kr2goodnessは、指定されたタスクが実行し続けるにふさわしいか判断するための関数。
戻り値が大きいほど「実行しつづけた方がいいよ」という意味になる。
この関数だけ見てもしょうがないので全体的に説明すると。
#RTプロセス周りは省略
> weight = p->counter;
このcounterは可変優先度式スケジューラの動的優先度に相当する。
動的優先度については>171あたりを参照。
>#ifdef CONFIG_SMP
> (省略)
> if (p->processor == this_cpu)
> weight += PROC_CHANGE_PENALTY;
>#endif
プロセッサはそれぞれにcacheとTLBを持っているため、
1つのタスクがいくつものプロセッサにまたがって実行されると性能が低下してしまう。
従って、「なるべく同じプロセッサ上で実行し続けた方がいいよ」という意味。
>if (p->mm == this_mm || !p->mm)
> weight += 1;
これも同様に、別のメモリ空間(ページテーブル)に切り替えるとTLBが無駄になってしまうから
「なるべく切り替えない方がいいよ」という意味。
∧_∧
( ´Д`) <PROC_CHANGE_PENALTYとかの値は推測的に決められているから
/ \ <どれほど性能が改善されるのかをLinus君に問いたい、問い詰めたい、
_ | | ∬ | |_..∬ <小一時間ほど問い詰めたいところではある。
|\ ̄ ̄ ̄旦 ̄ ̄ 旦.\
./..\\ \
/ \|================|
\ ノ \
\ .\
\ ..\_
""""""""""""""""""″″′
0267あげあげ
02/01/17 13:09ID:fKwmqdxCThank You
0268login:Penguin
02/01/17 20:28ID:P7SYmdjdhttp://www.zdnet.co.jp/news/0201/17/e_usb.html
...カーネル2.5.2には,OSの重要な部分となる「スケジューラ」も実装されている。
ワロタ
■ このスレッドは過去ログ倉庫に格納されています