查看/proc/sys目录下有哪些内容:
/proc/sys # ls
debug dev fs kernel net vm
/proc/sys目录下的内容对应着下面这个sysctl_base_table数组中的procname,sysctl_base_table数组是在sysctl_init函数中通过register_sysctl_table注册的。
static struct ctl_table sysctl_base_table[] = {
{
.procname = "kernel",
.mode = 0555,
.child = kern_table,
},
{
.procname = "vm",
.mode = 0555,
.child = vm_table,
},
{
.procname = "fs",
.mode = 0555,
.child = fs_table,
},
{
.procname = "debug",
.mode = 0555,
.child = debug_table,
},
{
.procname = "dev",
.mode = 0555,
.child = dev_table,
},
{ }
};
然后进入/proc/sys/的每个子目录下,比如进入/proc/sys/vm目录,查看此目录下有哪些内容:
/proc/sys/vm # ls
admin_reserve_kbytes laptop_mode overcommit_memory
block_dump legacy_va_layout overcommit_ratio
dirty_background_bytes lowmem_reserve_ratio page-cluster
dirty_background_ratio max_map_count panic_on_oom
dirty_bytes min_free_kbytes percpu_pagelist_fraction
dirty_expire_centisecs mmap_min_addr scan_unevictable_pages
dirty_ratio nr_pdflush_threads swappiness
dirty_writeback_centisecs oom_dump_tasks user_reserve_kbytes
drop_caches oom_kill_allocating_task vfs_cache_pressure
对应着进入到sysctl_base_table元素中的.child,这里.child = vm_table,ls的这些内容又和vm_table中的procname对应。proc_handler是这些目录的操作函数。
static struct ctl_table vm_table[] = {
{
.procname = "overcommit_memory",
.data = &sysctl_overcommit_memory,
.maxlen = sizeof(sysctl_overcommit_memory),
.mode = 0644,
.proc_handler = proc_dointvec_minmax,
.extra1 = &zero,
.extra2 = &two,
},
{
.procname = "panic_on_oom",
.data = &sysctl_panic_on_oom,
.maxlen = sizeof(sysctl_panic_on_oom),
.mode = 0644,
.proc_handler = proc_dointvec_minmax,
.extra1 = &zero,
.extra2 = &two,
},
{
.procname = "oom_kill_allocating_task",
.data = &sysctl_oom_kill_allocating_task,
.maxlen = sizeof(sysctl_oom_kill_allocating_task),
.mode = 0644,
.proc_handler = proc_dointvec,
},
{
.procname = "oom_dump_tasks",
.data = &sysctl_oom_dump_tasks,
.maxlen = sizeof(sysctl_oom_dump_tasks),
.mode = 0644,
.proc_handler = proc_dointvec,
},
...