Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
  • Loading branch information
kaiwan committed Dec 18, 2023
2 parents fe37474 + 396a0e7 commit e2d7648
Show file tree
Hide file tree
Showing 4 changed files with 214 additions and 9 deletions.
2 changes: 1 addition & 1 deletion ch8/slab4_actualsz_wstg_plot/Readme
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ sudo dmesg -C
2. Now build the module and insmod it (it will fail at some point, that's fine)
../../lkm slab4_actualsz_wstg_plot

3. Run the helper script plot_graph.sh; f.e.:
3. Run the helper script plot_graph.sh:

(Recommended: Before running the script, pl check the data file; it should ONLY
have data of the form:
Expand Down
Binary file modified ch8/slab4_actualsz_wstg_plot/graph.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
206 changes: 205 additions & 1 deletion ch8/slab4_actualsz_wstg_plot/plotdata.txt
Original file line number Diff line number Diff line change
Expand Up @@ -203,4 +203,208 @@
4137060,1
4157540,0
4178020,0
<intr>,ipv6:addrconf_verify_rtnl:4618:,IPv6:,now,=,4302957104,,schedule,=,4302987241,,rounded,schedule,=,4302987491,=>,4302987241
100,28
20580,59
41060,59
61540,6
82020,59
102500,27
122980,6
143460,82
163940,59
184420,42
204900,27
225380,16
245860,6
266340,96
286820,82
307300,70
327780,59
348260,50
368740,42
389220,34
409700,27
430180,21
450660,16
471140,11
491620,6
512100,2
532580,96
553060,89
573540,82
594020,76
614500,70
634980,65
655460,59
675940,55
696420,50
716900,46
737380,42
757860,38
778340,34
798820,31
819300,27
839780,24
860260,21
880740,19
901220,16
921700,13
942180,11
962660,8
983140,6
1003620,4
1024100,2
1044580,0
1065060,96
1085540,93
1106020,89
1126500,86
1146980,82
1167460,79
1187940,76
1208420,73
1228900,70
1249380,67
1269860,65
1290340,62
1310820,59
1331300,57
1351780,55
1372260,52
1392740,50
1413220,48
1433700,46
1454180,44
1474660,42
1495140,40
1515620,38
1536100,36
1556580,34
1577060,32
1597540,31
1618020,29
1638500,27
1658980,26
1679460,24
1699940,23
1720420,21
1740900,20
1761380,19
1781860,17
1802340,16
1822820,15
1843300,13
1863780,12
1884260,11
1904740,10
1925220,8
1945700,7
1966180,6
1986660,5
2007140,4
2027620,3
2048100,2
2068580,1
2089060,0
2109540,98
2130020,96
2150500,95
2170980,93
2191460,91
2211940,89
2232420,87
2252900,86
2273380,84
2293860,82
2314340,81
2334820,79
2355300,78
2375780,76
2396260,75
2416740,73
2437220,72
2457700,70
2478180,69
2498660,67
2519140,66
2539620,65
2560100,63
2580580,62
2601060,61
2621540,59
2642020,58
2662500,57
2682980,56
2703460,55
2723940,53
2744420,52
2764900,51
2785380,50
2805860,49
2826340,48
2846820,47
2867300,46
2887780,45
2908260,44
2928740,43
2949220,42
2969700,41
2990180,40
3010660,39
3031140,38
3051620,37
3072100,36
3092580,35
3113060,34
3133540,33
3154020,32
3174500,32
3194980,31
3215460,30
3235940,29
3256420,28
3276900,27
3297380,27
3317860,26
3338340,25
3358820,24
3379300,24
3399780,23
3420260,22
3440740,21
3461220,21
3481700,20
3502180,19
3522660,19
3543140,18
3563620,17
3584100,17
3604580,16
3625060,15
3645540,15
3666020,14
3686500,13
3706980,13
3727460,12
3747940,11
3768420,11
3788900,10
3809380,10
3829860,9
3850340,8
3870820,8
3891300,7
3911780,7
3932260,6
3952740,6
3973220,5
3993700,5
4014180,4
4034660,3
4055140,3
4075620,2
4096100,2
4116580,1
4137060,1
4157540,0
4178020,0
15 changes: 8 additions & 7 deletions ch8/waste_kmalloc_slabs.sh
Original file line number Diff line number Diff line change
Expand Up @@ -31,38 +31,39 @@ do
# /sys/kernel/debug/slab/kmalloc-8/alloc_traces: 58 strndup_user+0x4a/0x70 waste=406/7 age=831078/831403/831933 pid=1-801 cpus=0-5 406
# -----kmalloc-<foo> slab----------------------: num-times-requested func+start/len waste=num_wasted_total/num_wasted_eachtime pid=<...> cpus=<...>

# Get the absolute wastage:
# Get the total wastage (the x in waste=x/y; y = # bytes wasted each time):
# Kernel modules contain an extra field, the module name [foo]
# So get the field# of the column having the string 'waste=' ...
waste_fieldnum=$(echo "${rec}" | awk '{for(i=1;i<=NF;i++) {if ($i ~ /waste=/) print i}}')
# ... and then extract the absolute number of wasted bytes based on it
# (of the form: waste=406/7, i.e., waste=num_wasted_total/num_wasted_eachtime)
wastage_abs=$(echo "${rec}" | awk -v fld=${waste_fieldnum} '{print $fld}'|cut -d= -f2|cut -d/ -f1)
echo "${rec} ${wastage_abs}" >> ${TMPF}
num_wasted_total=$(echo "${rec}" | awk -v fld=${waste_fieldnum} '{print $fld}'|cut -d= -f2|cut -d/ -f1)
#echo "wstg_abs= ${wastage_abs}"
echo "${rec} ${num_wasted_total}" >> ${TMPF}
let n=n+1
[[ $((n % 100)) -eq 0 ]] && echo -n "."
done
echo

# separate out kernel internal kmalloc-* slabs from kernel modules slabs
# Separate out kernel internal kmalloc-* slabs from kernel modules slabs
grep -v "\[.*\]" ${TMPF} > kint.waste || true
grep "\[.*\]" ${TMPF} > kmods.waste || true

echo "======== Wastage (highest-to-lowest with duplicate lines eliminated) ========"
echo "--------------- kernel internal ----------------
Top 10 wasters (in desc order). (To see all, lookup the full report here: kint.waste)"
[[ -s kint.waste ]] && {
# kernel internal - the 8th fields is the number of 'waste' bytes
# kernel internal - the 8th fields is the total number of 'waste' bytes
# (As the abs number of wasted bytes is already there in the output, we use awk
# to eliminate the last col, the number of wasted bytes)
# to eliminate the last col, the total number of wasted bytes)
# Also, use uniq(1) to eliminate duplicate lines (?)
sort -k8nr kint.waste | awk 'NF{NF--};1' | uniq | head
} || echo "-none-"

echo "
--------------- kernel modules ----------------
Top 10 wasters (in desc order). (To see all, lookup the full report here: kmods.waste)"
# kernel modules - the 9th fields is the number of 'waste' bytes
# kernel modules - the 9th fields is the total number of 'waste' bytes
[[ -s kmods.waste ]] && {
sort -k9nr kmods.waste | awk 'NF{NF--};1' | uniq | head
} || echo "-none-"
Expand Down

0 comments on commit e2d7648

Please sign in to comment.