|
@@ -1,5 +1,8 @@
|
|
|
+.. _zsmalloc:
|
|
|
+
|
|
|
+========
|
|
|
zsmalloc
|
|
|
---------
|
|
|
+========
|
|
|
|
|
|
This allocator is designed for use with zram. Thus, the allocator is
|
|
|
supposed to work well under low memory conditions. In particular, it
|
|
@@ -31,40 +34,49 @@ be mapped using zs_map_object() to get a usable pointer and subsequently
|
|
|
unmapped using zs_unmap_object().
|
|
|
|
|
|
stat
|
|
|
-----
|
|
|
+====
|
|
|
|
|
|
With CONFIG_ZSMALLOC_STAT, we could see zsmalloc internal information via
|
|
|
-/sys/kernel/debug/zsmalloc/<user name>. Here is a sample of stat output:
|
|
|
+``/sys/kernel/debug/zsmalloc/<user name>``. Here is a sample of stat output::
|
|
|
|
|
|
-# cat /sys/kernel/debug/zsmalloc/zram0/classes
|
|
|
+ # cat /sys/kernel/debug/zsmalloc/zram0/classes
|
|
|
|
|
|
class size almost_full almost_empty obj_allocated obj_used pages_used pages_per_zspage
|
|
|
- ..
|
|
|
- ..
|
|
|
+ ...
|
|
|
+ ...
|
|
|
9 176 0 1 186 129 8 4
|
|
|
10 192 1 0 2880 2872 135 3
|
|
|
11 208 0 1 819 795 42 2
|
|
|
12 224 0 1 219 159 12 4
|
|
|
- ..
|
|
|
- ..
|
|
|
+ ...
|
|
|
+ ...
|
|
|
+
|
|
|
|
|
|
+class
|
|
|
+ index
|
|
|
+size
|
|
|
+ object size zspage stores
|
|
|
+almost_empty
|
|
|
+ the number of ZS_ALMOST_EMPTY zspages(see below)
|
|
|
+almost_full
|
|
|
+ the number of ZS_ALMOST_FULL zspages(see below)
|
|
|
+obj_allocated
|
|
|
+ the number of objects allocated
|
|
|
+obj_used
|
|
|
+ the number of objects allocated to the user
|
|
|
+pages_used
|
|
|
+ the number of pages allocated for the class
|
|
|
+pages_per_zspage
|
|
|
+ the number of 0-order pages to make a zspage
|
|
|
|
|
|
-class: index
|
|
|
-size: object size zspage stores
|
|
|
-almost_empty: the number of ZS_ALMOST_EMPTY zspages(see below)
|
|
|
-almost_full: the number of ZS_ALMOST_FULL zspages(see below)
|
|
|
-obj_allocated: the number of objects allocated
|
|
|
-obj_used: the number of objects allocated to the user
|
|
|
-pages_used: the number of pages allocated for the class
|
|
|
-pages_per_zspage: the number of 0-order pages to make a zspage
|
|
|
+We assign a zspage to ZS_ALMOST_EMPTY fullness group when n <= N / f, where
|
|
|
|
|
|
-We assign a zspage to ZS_ALMOST_EMPTY fullness group when:
|
|
|
- n <= N / f, where
|
|
|
-n = number of allocated objects
|
|
|
-N = total number of objects zspage can store
|
|
|
-f = fullness_threshold_frac(ie, 4 at the moment)
|
|
|
+* n = number of allocated objects
|
|
|
+* N = total number of objects zspage can store
|
|
|
+* f = fullness_threshold_frac(ie, 4 at the moment)
|
|
|
|
|
|
Similarly, we assign zspage to:
|
|
|
- ZS_ALMOST_FULL when n > N / f
|
|
|
- ZS_EMPTY when n == 0
|
|
|
- ZS_FULL when n == N
|
|
|
+
|
|
|
+* ZS_ALMOST_FULL when n > N / f
|
|
|
+* ZS_EMPTY when n == 0
|
|
|
+* ZS_FULL when n == N
|