slub の検索結果:

Linuxカーネル4.1の名前空間(ドラフト)

…uxカーネル4.1のSLUBアローケータ(ドラフト) - φ(・・*)ゞ ウーン カーネルとか弄ったりのメモと同じくドラフト版公開です。 カーネルのバージョンは4.1系です。 文書自体も完成版ではないし、markdownから手作業ではてなblogにコピペして修正してるので章立てとか変になってるところとかあるかもしれませんが気にしないでください。 一部は文書修正してます。 名前空間 名前空間とは、Linuxカーネル内のグローバルなリソースを管理する機構です。名前空間によって管理…

Linuxカーネル4.1のvmalloc()(ドラフト)

…uxカーネル4.1のSLUBアローケータ(ドラフト) - φ(・・*)ゞ ウーン カーネルとか弄ったりのメモと同じくドラフト版公開です。こちらはLinuxカーネル4.1のメモリレイアウト(ドラフト) - φ(・・*)ゞ ウーン カーネルとか弄ったりのメモで説明しなかったvmalloc()の説明です。 カーネルのバージョンは4.1系です。 文書自体も完成版ではないし、markdownから手作業ではてなblogにコピペして修正してるので章立てとか変になってるところとかあるかもしれ…

Linuxカーネル4.1のメモリレイアウト(ドラフト)

…uxカーネル4.1のSLUBアローケータ(ドラフト) - φ(・・*)ゞ ウーン カーネルとか弄ったりのメモと同じくドラフト版公開です。 カーネルのバージョンは4.1系です。 文書自体も完成版ではないし、markdownから手作業ではてなblogにコピペして修正してるので章立てとか変になってるところとかあるかもしれませんが気にしないでください。 一部は文書修正してます。 ユーザプロセス空間とカーネル空間 Linux x86_64では48bit(256TiB)のアドレス空間を使…

Linuxカーネル4.1のSLUBアローケータ(ドラフト)

…lobアローケータ slubアローケータ スラブオブジェクトの管理 使用中リスト スラブのマージ機能 Chache Coloring スラブの不活性化 frozen状態 スラブキャッシュの情報 slubアローケータのデータ構造 データの関連 slubアローケータで使用するデータの関連 スラブのライフサイクル スラブアローケータの機能 スラブキャッシュの作成 スラブキャッシュ生成時に設定するフラグ 空きオブジェクトの管理 空きスラブオブジェクトの設定 スラブオブジェクトの確保 …

週刊? Linux Kernel Patch Watch 20180511

…よ [PATCH] slub: add printf verification to ‘slab err’:で、__printfでチェックすると良いよという感じのpatchです。 -- mm/slub.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mm/slub.c b/mm/slub.c index 44aa7847324a..7d38cfb6a619 100644 --- a/mm/…

週刊? Linux Kernel Patch Watch 20180413

…void *)); slubだとsetup_object()で1オブジェクト毎に指定されたコンストラクタを実行します。 static void setup_object(struct kmem_cache *s, struct page *page, void *object) { setup_object_debug(s, page, object); kasan_init_slab_obj(s, object); if (unlikely(s->ctor)) { kasa…

Linux kernelをgdbでリモートデバッグするときはKASLRをoffにするのを忘れずに(´・ω・`)

…: file mm/slub.c, line 3746. gdb-peda$ c Continuing. Warning: not running or target is remote Breakpoint 1, __kmalloc (size=size@entry=0xa8, flags=flags@entry=0x14080c0) at mm/slub.c:3746 3746 { gdb-peda$ 低レベルプログラミング作者: IgorZhirkov出版社/メーカー:…

弄りながらなんとなく学ぶLinuxのスラブアロケーター

…ケーター SLAB SLUB SLOB 各スラブアロケーターのまとめ 実装 スラブ用のページ 弄ってみる 最低限必要な準備 実装開始 データ構造 ロック 初期化 kmem_cache_create() スラブオブジェクトのアロケート スラブオブジェクトのfree 実験 ボトルネック この後 Linuxのスラブアロケーター Linuxには3種類の実装があり、カーネルのコンフィグでどれを使用するかを選択します。 SLAB Solaris型のスラブアローケーターのようです。SLUB…

Linux 2.0.40の頃のkmalloc()

…タを使用しています。SLUBだとこんな感じです。 で、Linux 2.0.40はkernel.orgのファイル作成日時で見ると08-Feb-2004 07:13となっているので、12年前にリリースされたんですね。このバージョンが2.0系の最終バージョンです。 この当時のkmallocはスラブアローケータは使用していないけど、スラブアローケータ的に要求されたサイズを一番近い2の累乗サイズに切り上げて使っています。サイズはblocksizeという変数で管理してます。 97 sta…

free(1)のtotalとかusedなどの各項目をカーネルの方から見てみる

free(1)は/proc/meminfoを読みに行くので、Linuxカーネルでどのような変数を見せているのかを調べてみます。カーネルのバージョンは4.5です。あ、swapのほうは今回は見ません。 最初に見るのはfs/proc/meminfo.cで、このファイルが/proc/meminfoに対する操作を定義しています。/proc/meminfoをopenする処理はmeminfo_proc_open()で、実際の処理はmeminfo_proc_show()が行います。 211 …

fork/clone時に返すpidの設定(2)

…スラブアロケーター(slub or slab or slob)よりpid構造体のメモリを確保します。確保するサイズは最初に書いたとおりです。 297 struct pid *alloc_pid(struct pid_namespace *ns) 298 { 299 struct pid *pid; 300 enum pid_type type; 301 int i, nr; 302 struct pid_namespace *tmp; 303 struct upid *upi…

Linuxカーネルのデバッグでprintk(9)デバッグを卒業したいっ!

…kernel/mm/slub.c:0> 0 void *__kmalloc(size_t size, gfp_t flags) 1 { struct kmem_cache *s; void *ret; 5 if (unlikely(size > KMALLOC_MAX_CACHE_SIZE)) 6 return kmalloc_large(size, flags); 8 s = kmalloc_slab(size, flags); 10 if (unlikely(ZERO_O…

kmem_cache_alloc_bulk()を試してみる

…his_cpu_cmpxchg_double()とprefetch_freepointer()、それにstat()を呼んでいるというのがあります。その辺がクロック数の差としてでたのかな。あ、stat()はCONFIG_SLUB_STATSが設定されていないと空の関数なので最適化の過程で消えると思いますが。 暗号技術入門 第3版 秘密の国のアリス作者: 結城浩出版社/メーカー: SBクリエイティブ発売日: 2015/09/17メディア: Kindle版この商品を含むブログを見る

linux: slub code reading

最近調べていたslubのkmem_cache_alloc()、kmem_cache_free()のまとめですm( )m Slub alloc and_free from Masami Ichikawa Slub alloc and_free Amazon Web Services 基礎からのネットワーク&サーバー構築作者: 玉川憲,片山暁雄,今井雄太出版社/メーカー: 日経BP社発売日: 2014/07/16メディア: 単行本この商品を含むブログ (3件) を見る

Linuxのthis_cpu_cmpxchg_double()によるpercpuなデータの交換

…l1; これをmm/slub.cのslab_alloc_node()で見てみます。ここでcはs->cpu_slabです。 2408 tid = c->tid; 2409 preempt_enable(); 2410 2411 object = c->freelist; 〜略〜 2433 if (unlikely(!this_cpu_cmpxchg_double( 2434 s->cpu_slab->freelist, s->cpu_slab->tid, 2435 object…

slub: [sg]et_freepointer()めも

slubのkmem_cache_alloc()、kmem_cache_free()時の[sg]et_freepointer()の動きを確かめるというめもですが、チラ裏ですm(__)m kmem_cache_alloc()を呼ぶとslubではslab_alloc_node()が呼ばれて、slabがすでにある場合はelseの方に入る。ここでget_freepointer_safe()を呼ぶんだけど、slab_alloc_node()の戻り値はnext_objectではなくて、24…

slubで/sys/kernel/slab/<slab name>/以下にstruct kmem_cacheの変数をexportさせるメモ

slubでstruct kmem_cacheの各変数の値を見るのに/sys/kernel/slab//にexportさせる場合のメモ。俺得用。 見るだけなら 変数名 + _show という形で関数を作って、SLAB_ATTR_ROマクロに見たい変数名を渡す。それとslab_attrsに 変数名 + _attr.attr という形で値をセット。 diff --git a/mm/slub.c b/mm/slub.c index 70567bf..ea5c550 100644 --…

slub: slabでslab名の:at-とか:t-なんかのprefixの意味

…ixをつけているのはslub.cにあるcreate_unique_id()のこの部分。設定されているフラグの中で一部のものについてprefixが付く模様。 5047 *p++ = ':'; 5048 /* 5049 * First flags affecting slabcache operations. We will only 5050 * get here for aliasable slabs so we do not need to support 5051 * t…

slub: struct kmem_cache_nodeの使われ方

SLUBの場合のstruct kmem_cacheでstruct kmem_cache_node *node[MAX_NUMNODES];がどのように使われているのかというメモ。 kernelのバージョンは3.18。 struct kmem_cache_nodeはSLAB・SLUBの場合分けがifdefでされていて、debugオプション無しのSLUBの場合はこのようになる。 317 struct kmem_cache_node { 318 spinlock_t list_lo…

slub: freelist用にpage確保してからstruct kmem_cache_cpuを設定する辺りのメモ

…モです。 大まかにはslub:slab objectの作成処理を見ていく - φ(・・*)ゞ ウーン カーネルとか弄ったりのメモで書いたりしているんだけど流れが見えてきたのでもう一度。 new_slab()を呼んだということはpageをallocateした場合です。 ちょっと思い出すために、new_slab()の最後の処理を見てみます。 1417 page->freelist = start; 1418 page->inuse = page->objects; 1419 pa…

slub: kmem_cache構造体とslab object作成時のめも

…備。 struct slub_test { int n; char s[16]; }; static struct kmem_cache *slub_test_cachep; slub_test_cachepのインスタンスを作る。 slub_test_cachep = KMEM_CACHE(slub_test, SLAB_PANIC); キャッシュを取得 struct slub_test *ptr = kmem_cache_alloc(slub_test_cachep, GF…

slub: objectのsize設定

slubでオブジェクト管理する上で使うサイズ等の管理のメモ。見ているカーネルはv3.17です。今回はcalculate_sizes()を見るのがメインかな。 struct kmem_cacheの中でサイズに関連するのはこの辺り。 62 struct kmem_cache { 〜略〜 67 int size; /* The size of an object including meta data */ 68 int object_size; /* The size of an…

slub: allocate_slabでslab object用のページ確保

…す。 今回は前回の「slub:slab objectの作成処理を見ていく」で詳細を見なかったnew_slab()でpageを確保するところを見ていきます。 new_slab()では下記のようにallocate_slab()にてページの確保を行います。 1392 page = allocate_slab(s, 1393 flags & (GFP_RECLAIM_MASK | GFP_CONSTRAINT_MASK), node); ここでpageを確保出来たらslab obje…

slub:slab objectの作成処理を見ていく

…ef CONFIG_SLUB_STATS 46 unsigned stat[NR_SLUB_STAT_ITEMS]; 47 #endif 48 }; そしてkmem_cache_cpu構造体はkmem_cache構造体のメンバです。 62 struct kmem_cache { 63 struct kmem_cache_cpu __percpu *cpu_slab; 64 /* Used for retriving partial slabs etc */ 65 unsign…

slubのコードを読む:__memcg_kmem_get_cacheの処理を読む

この記事はLinux Advent Calendar 2014の3日目の記事です。 kmem_cache_zalloc()、名前だけ見ると単純そうな気がするけど割とそうでもないのでした。この関数は最初のほうは別の関数へのラッパー程度になっていますが、memcg_kmem_get_cache()、__memcg_kmem_get_cache()辺りでちゃんとした処理になります。 これらは kmem_cache_zalloc()から呼ばれるのでまずはdo_kmem_cache_c…

kmem_cache_create()のざっくりとした流れのめも

…lias()@mm/slub.c ④ --> find_mergeable()@mm/slub.c ⑤ --> do_kmem_cache_create()@mm/slab_common.c ⑥ --> memcg_alloc_cache_params()@mm/memcontrol.c ⑦ --> __kmem_cache_create()@mm/slub.c ⑧ --> put_online_mems()@mm/memory_hotplug.c ⑨ --> put_onl…

Linux:面白そうなpatch(Address sanitizer for kernel)を見てみる

…機能ではBuddy、SLUBをサポートしている。 基本的なコンセプトはシャドウメモリにアクセス対象のメモリの各バイトがアクセスしても安全かどうかを記録する。あと、コンパイラの機能を使って車道メモリをチェックしてメモリアクセスが安全か調べる。 low memory領域の1/8をシャドウメモリのために使用していて、アクセスしようとする対象のメモリアドレスとシャドウメモリのメモリマッピングに使う。 ここで言っているlow memoryが何かはパッチを見ないとわからなかったんだけど、…

kmalloc()とBUG: sleeping function called from invalid context〜とslab_alloc_node()

…ext at mm/slub.c:965」なんて感じでエラーがでますけど、kmalloc()はGFP_XXXなflagsをどのように使っているのかなと思い調べてみる。なんで気になったかというと3.15 + αなカーネルでspin lock中にkamlloc()にGFP_NOIOを渡していて「BUG: sleeping function 〜」が出るケースに遭遇したから。 ずっと前にkmalloc()の概要は見てたんだけど今回は前回とは違う視点で。。 読むカーネルは3.14でsl…

φ(.. )メモシテオコウ trace_kmem_cache_alloc()はどこに?

…るのはどこかというとslub.cのkmem_cache_alloc()です。あ、うちはslabじゃなくてslubを使ってるのでファイルはslub.cを参照してます(;´∀`) ソースはこれですね。 2398 void *kmem_cache_alloc(struct kmem_cache *s, gfp_t gfpflags) 2399 { 2400 void *ret = slab_alloc(s, gfpflags, _RET_IP_); 2401 2402 trace_…

昨日のoopsから,バグが発生した場所を調べます.

…tmap.cとmm/slub.cの2ヶ所にあるのですが,[minix]から,bitmap.cだろうと言う感じです.そしたら,bitmap.oを調べます.使うのはobjdumpです. [masami@moonlight:~/linux/.../fs/minix]% objdump -D bitmap.o | less bitmap.o: file format elf64-x86-64 Disassembly of section .text: 0000000000000000…