Merge tag 'scsi-misc' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi
[linux-block.git] / Documentation / admin-guide / mm / shrinker_debugfs.rst
CommitLineData
7507f099
RG
1==========================
2Shrinker Debugfs Interface
3==========================
4
5Shrinker debugfs interface provides a visibility into the kernel memory
bbf535fd
RG
6shrinkers subsystem and allows to get information about individual shrinkers
7and interact with them.
7507f099
RG
8
9For each shrinker registered in the system a directory in **<debugfs>/shrinker/**
10is created. The directory's name is composed from the shrinker's name and an
11unique id: e.g. *kfree_rcu-0* or *sb-xfs:vda1-36*.
12
bbf535fd
RG
13Each shrinker directory contains **count** and **scan** files, which allow to
14trigger *count_objects()* and *scan_objects()* callbacks for each memcg and
15numa node (if applicable).
7507f099
RG
16
17Usage:
18------
19
201. *List registered shrinkers*
21
22 ::
23
24 $ cd /sys/kernel/debug/shrinker/
25 $ ls
26 dquota-cache-16 sb-devpts-28 sb-proc-47 sb-tmpfs-42
27 mm-shadow-18 sb-devtmpfs-5 sb-proc-48 sb-tmpfs-43
28 mm-zspool:zram0-34 sb-hugetlbfs-17 sb-pstore-31 sb-tmpfs-44
29 rcu-kfree-0 sb-hugetlbfs-33 sb-rootfs-2 sb-tmpfs-49
30 sb-aio-20 sb-iomem-12 sb-securityfs-6 sb-tracefs-13
31 sb-anon_inodefs-15 sb-mqueue-21 sb-selinuxfs-22 sb-xfs:vda1-36
32 sb-bdev-3 sb-nsfs-4 sb-sockfs-8 sb-zsmalloc-19
33 sb-bpf-32 sb-pipefs-14 sb-sysfs-26 thp-deferred_split-10
34 sb-btrfs:vda2-24 sb-proc-25 sb-tmpfs-1 thp-zero-9
35 sb-cgroup2-30 sb-proc-39 sb-tmpfs-27 xfs-buf:vda1-37
36 sb-configfs-23 sb-proc-41 sb-tmpfs-29 xfs-inodegc:vda1-38
37 sb-dax-11 sb-proc-45 sb-tmpfs-35
38 sb-debugfs-7 sb-proc-46 sb-tmpfs-40
39
402. *Get information about a specific shrinker*
41
42 ::
43
44 $ cd sb-btrfs\:vda2-24/
45 $ ls
bbf535fd 46 count scan
7507f099
RG
47
483. *Count objects*
49
50 Each line in the output has the following format::
51
52 <cgroup inode id> <nr of objects on node 0> <nr of objects on node 1> ...
53 <cgroup inode id> <nr of objects on node 0> <nr of objects on node 1> ...
54 ...
55
56 If there are no objects on all numa nodes, a line is omitted. If there
57 are no objects at all, the output might be empty.
58
59 If the shrinker is not memcg-aware or CONFIG_MEMCG is off, 0 is printed
60 as cgroup inode id. If the shrinker is not numa-aware, 0's are printed
61 for all nodes except the first one.
62 ::
63
64 $ cat count
65 1 224 2
66 21 98 0
67 55 818 10
68 2367 2 0
69 2401 30 0
70 225 13 0
71 599 35 0
72 939 124 0
73 1041 3 0
74 1075 1 0
75 1109 1 0
76 1279 60 0
77 1313 7 0
78 1347 39 0
79 1381 3 0
80 1449 14 0
81 1483 63 0
82 1517 53 0
83 1551 6 0
84 1585 1 0
85 1619 6 0
86 1653 40 0
87 1687 11 0
88 1721 8 0
89 1755 4 0
90 1789 52 0
91 1823 888 0
92 1857 1 0
93 1925 2 0
94 1959 32 0
95 2027 22 0
96 2061 9 0
97 2469 799 0
98 2537 861 0
99 2639 1 0
100 2707 70 0
101 2775 4 0
102 2877 84 0
103 293 1 0
104 735 8 0
bbf535fd
RG
105
1064. *Scan objects*
107
108 The expected input format::
109
110 <cgroup inode id> <numa id> <number of objects to scan>
111
112 For a non-memcg-aware shrinker or on a system with no memory
113 cgrups **0** should be passed as cgroup id.
114 ::
115
116 $ cd /sys/kernel/debug/shrinker/
117 $ cd sb-btrfs\:vda2-24/
118
119 $ cat count | head -n 5
120 1 212 0
121 21 97 0
122 55 802 5
123 2367 2 0
124 225 13 0
125
126 $ echo "55 0 200" > scan
127
128 $ cat count | head -n 5
129 1 212 0
130 21 96 0
131 55 752 5
132 2367 2 0
133 225 13 0