mdb写経/カーネルメモリーアロケータ

2013/08/16

dcmds

thread ::allocdby
指定されたカーネルスレッドのアドレスを使用して、そのスレッドが割り当てたメモリーのリストを新しい順に出力します。
> fffffffffbc36de0::allocdby BUFCTL TIMESTAMP CALLER ffffff00cb845af8 b8483496d47c callb_add_common+0x81 ffffff00cb9f6cb8 b8483496b2e1 lgrp_affinity_init+0x26 ffffff00cbabd588 b8483496ac9f audit_thread_create+0x1e ffffff00cbace658 b84834966817 segkp_get_internal+0x89 ffffff00cb5d7308 b8483496649e thread_create+0x4f ffffff00cb9f6be0 b84834961b3c lgrp_affinity_init+0x26 ffffff00cbabd4b0 b84834961204 audit_thread_create+0x1e ffffff00cbace580 b8483495d379 segkp_get_internal+0x89 ffffff00cb9fa468 b84834945c0d vmem_alloc+0x1d2 ffffff00cb5d7158 b848349455b0 thread_create+0x4f ffffff00cbac8040 b8483493f28b lwp_create+0x78e ffffff00cb5d42f0 b8483493ef34 lwp_create+0x709 : :
bufctl ::bufctl [- a address] [-c caller ] [-e earliest] [- l latest] [-t thread ]
指定された bufctl 構造体についての要約を出力します。1 つまたは複数のオプションが指定されている場合は、オプション引数によって定義される条件に一致する bufctl 構造体の情報だけが出力されます。したがって、この dcmd をパイプラインの入力のフィルタとして使用できます。
-a buctl の対応するバッファーアドレスが指定されたアドレスと等しくなるように指定します
-c 指定された呼び出し元のプログラムカウント値が bufctl の保存されているスタックトレースの中に存在するように指定しま。
-e bufctl の時刻表示が、指定されたもっとも早い時刻表示と同じかそれよりも遅い時刻になるように指定します
-l bufctl の時刻表示が、指定されたもっとも遅い時刻表示と同じかそれよりも早い時刻になるように指定します
-t bufctl のスレッドポインタが、指定されたスレッドアドレスと等しくなるように指定します
> ffffff00cb845af8::bufctl -v ADDR BUFADDR TIMESTAMP THREAD CACHE LASTLOG CONTENTS ffffff00cb845af8 ffffff00cb6543c8 b8483496d47c fffffffffbc36de0 ffffff00c502a008 ffffff00c5c61200 ffffff00c6d99740 kmem_cache_alloc_debug+0x2b1 kmem_cache_alloc+0x14c kmem_zalloc+0x66 callb_add_common+0x81 callb_add+0x48 sched+0x5a main+0x513 _locore_start+0x90
[ address ] ::findleaks [-v]
フルセットの kmem デバッギング機能が有効になっている場合に、カーネルクラッシュダンプ時に効率的にメモリーリークを検出します。::findleaks の最初の実行では、ダンプを処理してメモリーリークを探します。この処理には数分かかる場合があります。次に、割り当てスタックトレース別にリークがまとめられます。findleaks レポートには、識別されたメモリーリークごとに bufctl アドレスと先頭のスタックフレームが表示されます。
-v オプションが指定されている場合には、この dcmd は実行の際により詳細なメッセージを出力します。dcmd の前に明示的にアドレスが指定されている場合には、レポートがフィルタリングされ、割り当てスタックトレースに指定された関数アドレスが含まれているリークだけが表示されます。

thread ::freedby
指定されたカーネルスレッドのアドレスを使用して、そのスレッドが解放したメモリーのリストを新しい順に出力します。

value ::kgrep
カーネルアドレス空間の中で、指定されたポインタサイズ値を含んでいるポインタ整列アドレスを検索します。次に、一致する値を含んでいるアドレスのリストを出力します。MDB の組み込み検索演算子とは異なり、::kgrep はカーネルアドレス空間のすべてのセグメントを検索し、不連続セグメント境界にまたがって検索します。大きなカーネルでは、::kgrep は実行にかなりの時間がかかる場合があります。

::kmalog [ slab | fail ]
カーネルメモリーアロケータトランザクションログ内のイベントを表示します。イベントは新しい順に (つまり、最新のイベントから) 表示されます。::kmalog は、イベントごとに、「T-」表示による最新のイベントを基準にした相対時間 (たとえば、T-0.000151879)、bufctl、バッファーアドレス、kmem キャッシュ名、およびイベント発生時刻におけるスタックトレースを表示します。引数を指定しないと、::kmalog は kmem トランザクションログを表示しますが、このログは kmem_flags で KMF_AUDIT が設定されている場合にだけ存在します。::kmalog fail は、割り当て障害ログを表示します。このログは必ず存在します。これは、割り当て障害に正しく対処できないドライバのデバッグを行う場合に役立ちます。::kmalog slab は、スラブ作成ログを表示します。このログは必ず存在します。::kmalog slab は、メモリーリークの検索を行う場合に役立ちます。
> ::kmalog T-0.000000000 addr=ffffff00dc6edd80 anon_cache kmem_cache_alloc_debug+0x2b1 kmem_cache_alloc+0x14c anon_alloc+0x2d anon_zero+0x3c segvn_faultpage+0x2a6 segvn_fault+0xb78 as_fault+0x3e7 pagefault+0x99 trap+0x13d8 0xfffffffffb8001d6 0xfffffffffb85b60a uiomove+0xeb mmio+0x148 mmrw+0x1bb mmread+0x22 : :
::kmastat
カーネルメモリーアロケータキャッシュおよび仮想メモリー領域のリストと該当する統計を表示します。
> ::kmastat cache buf buf buf memory alloc alloc name size in use total in use succeed fail ------------------------- ------ ------ ------ ---------- --------- ----- kmem_magazine_1 16 1364 1506 24576B 1364 0 kmem_magazine_3 32 1228 1250 40960B 1228 0 kmem_magazine_7 64 1082 1116 73728B 1082 0 kmem_magazine_15 128 9412 9424 1245184B 9569 0 kmem_magazine_31 256 0 150 40960B 142 0 kmem_magazine_47 384 103 110 45056B 103 0 kmem_magazine_63 512 0 0 0B 0 0 kmem_magazine_95 768 0 0 0B 0 0 kmem_magazine_143 1152 0 0 0B 0 0 kmem_slab_cache 72 11744 11770 876544B 11744 0 kmem_bufctl_cache 24 46691 46760 1146880B 46691 0 kmem_bufctl_audit_cache 192 0 0 0B 0 0 : :
::kmausers [- ef] [cache ...]
カーネルメモリーアロケータの現在のメモリーの割り当てが中程度あるいは多いユーザーに関する情報を出力するこの出力は、一意的なスタックトレースごとに 1 つのエントリで構成され、そのスタックトレースを使用して作成された合計メモリー量と割り当ての数が示されます。この dcmd を使用するには、kmem_flags で KMF_AUDIT フラグが設定されている必要があります。
1 つまたは複数のキャッシュ名 (たとえば、kmem_alloc_256) が指定されている場合、メモリー使用率の走査はそれらのキャッシュでだけ行われます。デフォルトでは、すべてのキャッシュが含まれます。-e オプションを指定すると、割り当て量の少ないユーザーが含まれます。割り当ての少ないユーザーとは、同じスタックトレースの合計メモリーが 1024 バイト未満または割り当て数 10 未満であるような割り当てのことです。-f オプションを指定すると、個々の割り当てのスタックトレースが出力されます。
> ::kmausers 197001216 bytes for 1503 allocations with data size 131072: kmem_slab_alloc_impl+0xbe kmem_slab_alloc+0xb0 kmem_cache_alloc+0x267 vmem_alloc+0x1d2 segkmem_xalloc+0x94 segkmem_alloc_vn+0xcb segkmem_zio_alloc+0x24 vmem_xalloc+0x53e vmem_alloc+0x172 kmem_slab_create+0x81 kmem_slab_alloc+0x60 kmem_cache_alloc+0x267 zio_data_buf_alloc+0x29 arc_get_data_block+0x153 arc_read+0x2af : :
[ address ] ::kmem_cache [-n name]
指定されたアドレスに格納されている kmem_cache_t 構造体、またはアクティブ kmem_cache 構造体の完全なセットをフォーマットし、表示します。
> ::kmem_cache ADDR NAME FLAG CFLAG BUFSIZE BUFTOTL ffffff00c5021008 kmem_magazine_1 0000 080000 16 1506 ffffff00c5021348 kmem_magazine_3 0000 080000 32 1375 ffffff00c5021688 kmem_magazine_7 0000 080000 64 3658 ffffff00c50219c8 kmem_magazine_15 0000 080000 128 9424 ffffff00c5022008 kmem_magazine_31 0000 080000 256 150 ffffff00c5023348 kmem_slab_cache 0000 080000 72 13530 ffffff00c5023688 kmem_bufctl_cache 0000 080000 24 56947 ffffff00c50239c8 kmem_bufctl_audit_cache 0000 080000 192 0 ffffff00c5024008 kmem_va_4096 0200 110000 4096 13792 ffffff00c5024348 kmem_va_8192 0200 110000 8192 352 ffffff00c5024688 kmem_va_12288 0200 110000 12288 60 ffffff00c50249c8 kmem_va_16384 0200 110000 16384 3136 ffffff00c5026008 kmem_va_20480 0200 110000 20480 24 ffffff00c5027008 kmem_alloc_8 0000 200000 8 17102 ffffff00c5027348 kmem_alloc_16 0000 200000 16 13052 ffffff00c5027688 kmem_alloc_24 0000 200000 24 17869 ffffff00c50279c8 kmem_alloc_32 0000 200000 32 22500 ffffff00c5028008 kmem_alloc_40 0000 200000 40 3600 ffffff00c5028348 kmem_alloc_48 0000 200000 48 26228 ffffff00c5028688 kmem_alloc_56 0000 200000 56 9017 ffffff00c50289c8 kmem_alloc_64 0000 200000 64 9982 : :
[ address ] ::kmem_dump [-l]
クラッシュダンプが処理されている間に記録された kmem の利用を確認してください。
カーネルは、ダンプに使用する小さい代替ヒープを有します。このダンプ・ヒープオーバーフローは、通常の管理された kmem ヒープが代わりに使用されなければならない。この場合、メモリがダンプされている間に、kmem キャッシュの状態が変化し、一貫性のない状態になります。::findleaks と、::kmem_verify は、このような破損したバッファ、または行方不明のスラブのエントリーなど、様々なエラーを報告することがあります。::kmem_dump がオーバーフローを示していたり、問題になっているキャッシュが安全でない割り当てをしている場合、エラーメッセージは信頼することはできません。
オプションを指定しない場合、コマンドはダンプ・ヒープ使用量の要約を出力します。-l が指定されている場合、ダンプ中にアクセスされたすべての kmem キャッシュのリストを表示します。アドレスが提供されている場合は、addrで表される kmem_cache_t 構造体の活動をダンプを表示します。
HEADINGS
overflows ダンプヒープ後にオーバーフローしたalloc命令の回数
size ダンプヒープのサイズ(bytes)
hi-water 必要とされたダンプヒープの最大値
oversize 通常のallocより大きい
used 使用されたダンプエリアのサイズ, 内部断片化が含まれています
% used 使用されたダンプエリア: 0-100%
Cache headings:
Addr kmem_cache_t 構造体のアドレス
Flg U ダンプ時の使用で、常に安全でない場合
O オーバーフロー alloc が発生した場合
Alloc ダンプアロケーションの回数
Free ダンプ開放の回数
Overflow ダンプヒープのオーバーフローの回数
Nondump 非ダンプヒープの数
> ::kmem_dump -l overflows 0 size 0x20000 used 0x4668 % used 13 hi-water 0x4668 Cache Name Addr Flg Alloc Free Ovrflow Nondump kmem_alloc_768 ffffc1000002b2c8 377 377 0 0 kmem_alloc_1152 ffffc1000002b848 30 30 0 0 kmem_alloc_2048 ffffc1000002c2c8 44 44 0 0 kmem_alloc_2688 ffffc1000002c588 53 53 0 0 kmem_alloc_4096 ffffc1000002c848 148 148 0 0 streams_mblk ffffc10000035b08 4 0 0 0 streams_dblk_64 ffffc10000036008 2 0 0 1 streams_dblk_256 ffffc10000036848 2 0 0 1 rootnex_dmahdl ffffc10000568848 377 377 0 0 ::kmem_log
kmem トランザクションログの完全なセットを新しい順にソートして表示します。この dcmd は、::kmalog より簡単な表形式で出力します。
> ::kmem_log CPU ADDR BUFADDR TIMESTAMP THREAD ffffff00c61481c0 ffffff00ca0a6f60 13035b1c42df7 ffffff00020a1c20 ffffff00c6148100 ffffff00cac82e00 13035b1c42ccf ffffff00020a1c20 ffffff00c6148040 ffffff00d6411cc0 13035b1c4217d ffffff00020a1c20 ffffff00c6147f80 ffffff00c77aac40 13035b1c41f74 ffffff00020a1c20 ffffff00c6147ec0 ffffff00c77a9300 13035b1c41925 ffffff00020a1c20 ffffff00c6147e00 ffffff00cca7f7c0 13035b1c4162e ffffff00020a1c20 : : 3 ffffff00c6257cc0 ffffff00c77a9300 13035b1b75549 ffffff00dae9c080 3 ffffff00c6257c00 ffffff00c77a9300 13035b1b6bef7 ffffff00dae9c080 3 ffffff00c6257b40 ffffff00cb98d300 13035b1b6bacd ffffff00dae9c080 0 ffffff00c6147bc0 ffffff00ca0a6f60 13035b1b66d1c ffffff0002272c20 0 ffffff00c6147b00 ffffff00cac82e00 13035b1b66ab5 ffffff0002272c20 0 ffffff00c6147a40 ffffff00d19f1380 13035b1b665b2 ffffff0002272c20 0 ffffff00c6147980 ffffff00d6412f00 13035b1b660bd ffffff0002272c20 1 ffffff00c598e8c0 ffffff00c8d72700 13035b1b62f29 ffffff00cd59d0e0 1 ffffff00c598e800 ffffff00cb995a00 13035b1b62caa ffffff00cd59d0e0 1 ffffff00c598e740 ffffff00c8d72e80 13035b1b4e6ef ffffff00cd59d0e0 : :
[ address ] ::kmem_slabs [-v] [-n cache] [-N cache] [-b maxbins] [-B minbinsize]
kmem cache ごとの slab の使用状況を表示する。
-n name 指定した名前の kmem_cache 構造体の情報を表示します(名前の一部が一致したものを含む)
-N name 正確に名前が一致した kmem_cache 構造体の情報を表示します
-b maxbins アロケートされていないメモリは "bin" と呼ばれる同じサイズの chunk のグループに分けて管理されます。このオプションでは、スラブごとに割り当てられたバッファの分布を maxbins に分割して表示します。最初の bin は完全に割り当てられたスラブ用に予約されています。 maxbins に 0 を設定 (-b 0) すると、スラブごとの最大割り当てられたバッファを指定するか、minbinsize に 1 を設定する (-B 1) のと同じ効果があります
-B minbinsize 全ての bin を、少なくとも minbinsize バッファで分割して(完全に割り当てられたスラブの予約をまず除く)、スラブごとの割り当てられたバッファの分布を表示します
-v 詳細出力:使用法によって順序付けられているスラブがどの程度を示すために、前から後に順に空きリスト上の各部分スラブの割り当てられたバッファ数を一覧表示します
例:
10 complete, 3 partial (8): 7 3 1

それぞれ 8 つのバッファを持つ 13 のスラブが存在することを意味します。8 つの割り当てられたすべてのバッファよりも少ない、3つの部分的に割り当てられたスラブを含みます。
バッファ割り当ては、常に部分スラブリストの先頭から行われます。完全に使用されたスラブからバッファが解放されると、そのスラブは、部分スラブなリストの先頭に追加されます。すべてのバッファは等しくすぐに解放される可能性があると仮定すると、部分的なスラブが要求される順序は、最も使用されるものがリストの先頭に、最も使用されないものが末尾にあります(上記の例のように)。
しかしながら、すぐに解放されない割り当てられたバッファがスラブに含まれている場合は、そのすべての割り当て可能なバッファの前方にあるほうが良いでしょう。部分的なスラブリストからスラブを取得すると、キャッシュの断片化が減少します(すべてのバッファが解放されたか、すべてのバッファが割り当てられたかのいずれか)。
部分的なスラブを表す、スラブの割り当てられたバッファ数がマークされることがあります(下の例では 9)。
9* のアスタリスクは、kmem のクライアントが、スラブのバッファの移動を拒否したため、kmem が、スラブを非再生可能としてマークしていたことを示しています。なので、kmem はスラブを完全に解放することを期待していないので、代わりにそれを完全に割り当てることを希望して、リストの先頭に移動します。アスタリスクでマークされたスラブは、それが部分的なスラブ・リストに残っている限り、マークされたままになります。
Column Description
Cache Name kmem キャッシュの名前
Slabs スラブの数
Partial Slabs フリーリストの部分的に確保されたスラブの数
Buffers バッファ数 (Slabs * (buffers per slab))
Unused Buffers 部分スラブの確保されていないバッファーの数
Waste (Unused Buffers / Buffers) アカウンティング構造(デバッグモード)、スラブカラーリング(バッファの配置をずらすための小さなオフセットの増分)、または CPU ごとのマガジン層のためのスペースは含まれません
> ::kmem_slabs Partial Unused Cache Name Slabs Slabs Buffers Buffers Waste ------------------------- -------- -------- --------- --------- ------ kmem_magazine_1 20 1 2000 93 4.7% kmem_magazine_3 133 1 8246 56 0.7% kmem_magazine_7 60 1 2460 14 0.6% kmem_magazine_15 21 1 420 11 2.6% kmem_magazine_31 31 1 372 2 0.5% kmem_magazine_47 20 1 160 7 4.4% kmem_magazine_63 0 0 0 0 0.0% kmem_magazine_95 0 0 0 0 0.0% kmem_magazine_143 0 0 0 0 0.0% kmem_slab_cache 564 1 23124 37 0.2% kmem_bufctl_cache 248 1 20584 80 0.4% kmem_bufctl_audit_cache 18971 1 341478 3 0.0% kmem_va_4096 423 1 13536 14 0.1% kmem_va_8192 25 1 400 9 2.3% kmem_va_12288 22 1 220 8 3.6% kmem_va_16384 396 1 3168 2 0.1% kmem_va_20480 3 1 18 5 27.8% kmem_va_24576 1 1 5 2 40.0% kmem_va_28672 19 1 76 3 3.9% kmem_va_32768 1 1 4 3 75.0% kmem_alloc_8 140 1 17920 10 0.1% kmem_alloc_16 129 1 13158 23 0.2% kmem_alloc_24 214 1 18190 1 0.0% kmem_alloc_32 297 1 21681 29 0.1% : : > ::kmem_slabs -b 5 Partial Unused Cache Name Slabs Slabs Buffers Buffers Waste ------------------------- -------- -------- --------- --------- ------ kmem_magazine_1 14 1 3514 146 4.2% Allocated Buffers ------------------ Distribution ------------------ Slabs 256 | 0 192-255 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 13 128-191 | 0 64-127 |@@@ 1 1-63 | 0 Partial Unused Cache Name Slabs Slabs Buffers Buffers Waste ------------------------- -------- -------- --------- --------- ------ kmem_magazine_3 11 7 1375 747 54.3% Allocated Buffers ------------------ Distribution ------------------ Slabs 128 | 0 96-127 |@@@@@@@@@@@@@@@@@@ 4 64-95 | 0 32-63 | 0 1-31 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 7 : : > ffffc100000212c8::kmem_slabs -v Partial Unused Cache Name Slabs Slabs Buffers Buffers Waste ------------------------- -------- -------- --------- --------- ------ kmem_magazine_3 11 7 1375 747 54.3% 4 complete (128), 7 partial: 19 24 18 29 19 12 7
[ address ] ::kmem_verify
指定されたアドレスに格納されている kmem_cache 構造体、またはアクティブ kmem_cache 構造体の完全なセットの完全性を検証します。明示的にキャッシュアドレスが指定されている場合、この dcmd はエラーに関するより冗長な情報を表示します。明示的に指定されていない場合は、要約レポートを表示します。::kmem_verify dcmd については、「カーネルメモリーキャッシュ」で詳しく説明します。
> ::kmem_verify Cache Name Addr Cache Integrity kmem_magazine_1 ffffff00c5021008 clean kmem_magazine_3 ffffff00c5021348 clean kmem_magazine_7 ffffff00c5021688 clean kmem_magazine_15 ffffff00c50219c8 clean kmem_magazine_31 ffffff00c5022008 clean kmem_magazine_47 ffffff00c5022348 clean kmem_magazine_63 ffffff00c5022688 clean kmem_magazine_95 ffffff00c50229c8 clean kmem_magazine_143 ffffff00c5023008 clean kmem_slab_cache ffffff00c5023348 clean kmem_bufctl_cache ffffff00c5023688 clean kmem_bufctl_audit_cache ffffff00c50239c8 clean kmem_alloc_8 ffffff00c5027008 clean kmem_alloc_16 ffffff00c5027348 clean kmem_alloc_24 ffffff00c5027688 clean kmem_alloc_32 ffffff00c50279c8 clean : :
[ address ] ::vmem
指定されたアドレスに格納されている vmem 構造体、またはアクティブ vmem 構造体の完全なセットをフォーマットし、表示します。この構造体は、<sys/vmem_impl.h> で定義されます。
> ::vmem ADDR NAME INUSE TOTAL SUCCEED FAIL fffffffffbcd78c0 heap 273100800 1095132774400 2738 0 fffffffffbcd8700 vmem_metadata 4112384 4194304 965 0 fffffffffbcd9540 vmem_seg 3665920 3665920 880 0 fffffffffbcda380 vmem_hash 182784 188416 37 0 fffffffffbcdb1c0 vmem_vmem 266688 294528 76 0 fffffffffbcddc80 static 0 0 0 0 fffffffffbcdeac0 static_alloc 0 0 0 0 fffffffffbcdf900 hat_memload 1966080 1966080 483 0 ffffff00c5001000 kstat 296160 303104 1029 0 ffffff00c5002000 kmem_metadata 4984832 5111808 1163 0 ffffff00c5003000 kmem_msb 4050944 4050944 994 0 ffffff00c5004000 kmem_cache 382336 475136 511 0 ffffff00c5005000 kmem_hash 451072 458752 319 0 ffffff00c5006000 kmem_log 131808 135168 6 0 ffffff00c5007000 kmem_firewall_va 13529088 13529088 814 0 ffffff00c5008000 kmem_firewall 0 0 0 0 ffffff00c500d000 kmem_oversize 13527160 13529088 814 0 ffffff00c501a000 mod_sysfile 7 4096 1 0 ffffff00c501f000 kmem_va 143998976 143998976 1001 0 ffffff00c5020000 kmem_default 143228928 143228928 17536 0 ffffff00c5049000 kmem_io_1G 28672 28672 7 0 ffffff00c504a000 kmem_io_16M 0 0 0 0 ffffff00c504d000 bp_map 0 0 0 0 ffffff00c505c000 umem_np 524288 524288 23 0 ffffff00c505e000 ksyms 2216252 2244608 289 0 ffffff00c505f000 ctf 2045575 2068480 290 0 : :
address ::vmem_seg
指定されたアドレスに格納されている vmem_seg 構造体をフォーマットし、表示します。この構造体は、<sys/vmem_impl.h> で定義されます。
> 0x30000022bd0::vmem_seg -v ADDR TYPE START END SIZE THREAD TIMESTAMP 30000022bd0 ALLC 30002358000 3000235a000 8192
address ::whatis [- abv]
指定されたアドレスに関する情報をレポートします。特に、::whatis は、そのアドレスが kmem によって管理されているバッファーへのポインタまたはスレッドスタックのような別のタイプの特殊メモリー領域へのポインタかどうかを判断し、検出結果をレポートします。
オプション:
-a 照会に最初に一致するものだけでなく、すべての一致をレポートします
-b アドレスが既知の kmem bufctl によって参照されているかどうかも判断します
-v 種々のカーネルデータ構造体を検索する際に進行状況をレポートします
> ffffff00c5004000::whatis ffffff00c5004000 is allocated from the vmem_vmem vmem arena: ADDR TYPE START END SIZE THREAD TIMESTAMP fffffffffbcea7a8 ALLC ffffff00c5004000 ffffff00c5004e40 3648 fffffffffbc36de0 0 vmem_hash_insert+0x89 vmem_seg_alloc+0x12d vmem_xalloc+0x6c2 vmem_alloc+0x172 vmem_create_common+0xcb vmem_create+0x38 kmem_init+0x129 startup_kmem+0xbf startup+0x33 main+0x3a _locore_start+0x90

walker

allocdby
指定された kthread_t 構造体のアドレスを開始点として使用して、当該カーネルスレッドによって行われたメモリー割り当てに対応する bufctl 構造体のセットに対して反復適用します。

bufctl
指定された kmem_cache_t 構造体のアドレスを開始点として使用して、このキャッシュに関連する割り当てられた bufctl 構造体のセットに対して反復適用します。

freectl
指定された kmem_cache_t 構造体のアドレスを開始点として使用して、このキャッシュに関連する空き bufctl のセットに対して反復適用します。

freedby
指定された kthread_t 構造体のアドレスを開始点として使用して、このカーネルスレッドによって行われたメモリー割り当て解除に対応する bufctl 構造体のセットに対して反復適用します。

freemem
指定された kmem_cache_t 構造体のアドレスを開始点として使用して、このキャッシュに関連する空きバッファーのセットに対して反復適用します。

kmem
指定された kmem_cache_t 構造体のアドレスを開始点として使用して、このキャッシュに関連する割り当てられたバッファーのセットに対して反復適用します。

kmem_cache
アクティブな kmem_cache_t 構造体のセットに対して反復適用します。この構造体は、<sys/kmem_impl.h> で定義されます。
> ::walk kmem_cache |::print kmem_cache_t cache_name cache_name = [ "kmem_magazine_1" ] cache_name = [ "kmem_magazine_3" ] cache_name = [ "kmem_magazine_7" ] cache_name = [ "kmem_magazine_15" ] cache_name = [ "kmem_magazine_31" ] cache_name = [ "kmem_magazine_47" ] cache_name = [ "kmem_magazine_63" ] cache_name = [ "kmem_magazine_95" ] : :
kmem_cpu_cache
指定された kmem_cache_t 構造体のアドレスを開始点として使用して、このキャッシュに関連する CPU ごとの kmem_cpu_cache_t 構造体に対して反復適用します。
> 0000030000160008::walk kmem_cpu_cache |::print kmem_cpu_cache_t cc_flags cc_flags = 0 cc_flags = 0 cc_flags = 0 cc_flags = 0 cc_flags = 0 cc_flags = 0 cc_flags = 0x1000 cc_flags = 0
kmem_slab
指定された kmem_cache_t 構造体のアドレスを開始点として使用して、関連する kmem_slab_t 構造体のセットに対して反復適用します。この構造体は、<sys/kmem_impl.h> で定義されます。
> 00000300000a0008::walk kmem_slab |::print kmem_slab_t slab_cache slab_cache = 0x300000a0008 slab_cache = 0x300000a0008 slab_cache = 0x300000a0008 slab_cache = 0x300000a0008 slab_cache = 0x300000a0008 : :
kmem_log
kmem アロケータトランザクションログに格納されている bufctl のセットに対して反復適用します。

leak
指定された bufctl 構造体のアドレスを使用して、同様な割り当てスタックトレースを持つ、リークが発生したメモリーバッファーに対応する bufctl 構造体のセットに対して反復適用します。leak walker を使用する前には、::findleaks dcmd を適用してメモリーリークを発見しておく必要があります。

leakbuf
指定された bufctl 構造体のアドレスを使用して、同様な割り当てスタックトレースを持つ、リークが発生したメモリーバッファーに対応するバッファーアドレスのセットに対して反復適用します。leakbuf walker を使用する前には、::findleaks dcmd を適用してメモリーリークを発見しておく必要があります。

vmem
指定された vmem 構造体に対して反復適用します。
> ::walk vmem |::print vmem_t vm_name vm_name = [ "heap" ] vm_name = [ "vmem_metadata" ] vm_name = [ "vmem_seg" ] vm_name = [ "vmem_hash" ] vm_name = [ "vmem_vmem" ] vm_name = [ "static" ] vm_name = [ "static_alloc" ] vm_name = [ "hat_memload" ] vm_name = [ "kstat" ] : :
vmem_seg
指定された kmem_cache_t 構造体のアドレスを使用して、vmem_seg 構造体に対して反復適用します。
> 0000030005ea0da0::walk vmem_seg |::print vmem_seg_t vs_type vs_type = 0x10 vs_type = 0x20 vs_type = 0x10 vs_type = 0x1 vs_type = 0x1 : :

0 件のコメント:

コメントを投稿