Changes

Jump to: navigation, search

BC proc entries

3,737 bytes added, 12:31, 27 December 2006
no edit summary
This page describes proc interface of [UBC] subsystem.

== Old interface ==
Old interface consisted of 2 (optionally 3) files
; <code>user_beancounters</code>
: reveals an overall information about resource consumption of each beancounter in system
; <code>user_beancounters_sub</code>
: reveals information about all beancounters and sub-beancounters in system
; <code>user_beancounters_debug</code>
: this files is shown if <code>CONFIG_UBC_DEBUG_KMEM</code> option is turned on and shows debugging information about each beancounter. This includes the numbers of
# objects charged from each slab
# pages charged
# vmalloc-ed pages
# page beancounters
# etc

== New interface ==
In new interface only <code>user_beancounters</code> entry is left for compatibility with old tools. New entries reside in <code>/proc/bc</code> directory. This directory also contains subdirectories for each beancounter in the system. E.g.
<pre>
# ls /proc/bc/
0 ioacct_debug resources
# vzctl start 101
...
# ls /proc/bc
0 101 ioacct_debug resources
# ls /proc/bc/101/
ioacct kmem_debug resources vmaux
</pre>

All new entries that are in <code>/proc/bc</code> shows some overall information about BC subsystem, while entries in <code>/proc/bc/$BCID</code> show per-beancounter info.

=== Existing general entries ===
; <code>/proc/bc/resources</code>
: This entry looks like old <code>user_beancounters</code> entry but
# it doesn't contain “dummy” resources
# if new resource is added to BC it will appear in this entry only
; <code>/proc/bc/$BCID/resources</code>
: This entry shows the same as <code>bc/resources</code> does but for <code>$BCID</code> beancounter only.
; <code>/proc/bc/$BCID/vmaux</code>
: This entry shows auxiliary resources used in VM accounting.
; <code>/proc/bc/$BCID/kmem_debug</code>
: This entry is available with <code>CONFIG_UBC_DEBUG_KMEM</code> option set and shows per-beancounter info that was in <code>/proc/user_beancounters_debug</code> before.

=== Kernel API ===
Subsystems may add its own entries in <code>/proc/bc</code> or <code>/proc/bc/$BCID</code>. To facilitate this the following API is used in BC sybsystem (declared in <code>include/ub/proc.h</code>).
; <code>struct proc_dir_entry *bc_proc_root</code>
: This is an entry that corresponds to <code>/proc/bc</code> directory. If a subsystem wishes to report some information that is not per-beancounter it may create entry using this as a parent.
; <code>struct bc_proc_entry;</code>
: This describes an entry that may show per-beancounter info. This looks like this:
<pre>
struct bc_proc_entry {
char *name;
int (*show)(struct seq_file *, void *);
struct bc_proc_entry *next;
};
</pre>
* <code>name</code> is the entry name as it will appear in <code>/proc/bc/$BCID</code>
* <code>show</code> is a callback that is to fill info about particulat beancounter
; <code>void bc_register_proc_entry(struct bc_proc_entry *);</code>
: This call registers an entry that shows per-beancounter info.

The code that fills info about BC must look like this
<pre>
static int bc_my_show(struct seq_file *f, void *v)
{
struct user_beancounter *ub;

ub = seq_beancounter(f);
/* dump info into f here */
return 0;
}
...
static struct bc_proc_entry my_entry = {
.name = "my_entry",
.show = bc_my_show,
};

static int __init bc_my_init(void)
{
bc_register_proc_entry(&my_entry);
return 0;
}

late_initcall(bc_my_init);
</pre>
{{note|Due to limitations in <code>single_open</code> the <code>struct user_beancounter</code> pointer is not passed as <code>void *v</code> into showing function but must be obtained from <code>seq_file</code> with <code>seq_beancounter</code>}}

Navigation menu