lkml.org 
[lkml]   [2005]   [Dec]   [6]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
SubjectRe: [PATCH 05/13] mm: balance zone aging in kswapd reclaim path
Here is a simple test.
It concurrently copies two sparse files of 601M/1.6G in qemu.

The balance is not good enough for now, but is expected to improve much when
shrink_zone() scans small enough in one run(say, < nr_inactive/100).

RESULTS
=======
root ~# ./show-aging-rate.sh
Linux (none) 2.6.15-rc5-mm1 #4 SMP Tue Dec 6 21:27:36 CST 2005 i686 GNU/Linux
total used free shared buffers cached
Mem: 1138 1119 18 0 0 1104
-/+ buffers/cache: 14 1123
Swap: 0 0 0

---------------------------------------------------------------
active/inactive size ratios:
DMA0: 78 / 1000 = 141 / 1803
Normal0: 372 / 1000 = 58453 / 156728
HighMem0: 415 / 1000 = 19471 / 46875

active/inactive scan rates:
DMA: 45 / 1000 = 3238 / ( 61920 + 9280)
Normal: 279 / 1000 = 1509888 / ( 5272608 + 133024)
HighMem: 437 / 1000 = 645536 / ( 1430112 + 44032)

---------------------------------------------------------------
inactive size ratios:
DMA0 / Normal0: 115 / 10000 = 1803 / 156733
Normal0 / HighMem0: 33420 / 10000 = 156733 / 46896

inactive scan rates:
DMA / Normal: 131 / 10000 = ( 61920 + 9280) / ( 5272608 + 133024)
Normal / HighMem: 36669 / 10000 = ( 5272608 + 133024) / ( 1430112 + 44032)
root ~# grep "age " /proc/zoneinfo
age 3085
age 3072
age 3072
root ~# grep -E '(low|high|free|protection:) ' /proc/zoneinfo
pages free 1161
low 21
high 25
protection: (0, 0, 880, 1140)
pages free 3420
low 1173
high 1408
protection: (0, 0, 0, 2080)
pages free 132
low 134
high 203
protection: (0, 0, 0, 0)
root ~# vmstat 5 10
procs -----------memory---------- ---swap-- -----io---- --system-- ----cpu----
r b swpd free buff cache si so bi bo in cs us sy id wa
1 0 0 19544 200 1130844 0 0 40 9 1102 61 6 86 7 1
1 4 0 16936 208 1133012 0 0 0 22 1043 30 7 93 0 0
1 0 0 19404 208 1130904 0 0 0 8 994 83 5 95 0 0
1 0 0 19152 160 1130612 0 0 0 8 1018 85 3 93 0 3
2 0 0 19152 160 1130952 0 0 0 8 997 56 5 95 0 0
2 0 0 18372 168 1131896 0 0 0 3 1000 50 5 95 0 0
1 0 0 18672 112 1131544 0 0 0 7 1014 70 5 95 0 0
1 0 0 19320 112 1131204 0 0 0 2 989 81 4 96 0 0
2 0 0 19152 108 1131276 0 0 1 0 996 79 5 95 0 0
2 0 0 18216 96 1132444 0 0 0 8 1015 84 5 95 0 0

pages_high+lowmem_reserve
203 + 1408 + 2080 + 25 + 1140 = 4856 (x4 = 19424)

SCRIPTS
=======
# cat test-aging2
#!/bin/zsh

while true
do
cp cold /dev/null
sleep $((RANDOM%20))
done &

while true
do
cp hot /dev/null
sleep $((RANDOM%10))
done

# cat show-aging-rate.sh
#!/bin/sh

uname -a
free -m

echo
echo ---------------------------------------------------------------
echo active/inactive size ratios:

egrep '(zone|active|inactive)' /proc/zoneinfo |
while true
do
read a b c d
[[ -z $a ]] && break
if [[ $c = "zone" ]]; then
prev_node=$node
prev_zone=$zone
node=${b%,}
zone=$d$node
else
eval $a=$b
if [[ $a = "inactive" ]]; then
printf "%8s: %4d / 1000 = %9d / %9d\n" $zone \
$((active * 1000 / (1 + inactive))) \
$active $inactive
fi
fi
done

while true
do
read name value
[[ -z $name ]] && break
eval $name=$value
done < /proc/vmstat

echo
echo active/inactive scan rates:

printf " DMA: %4d / 1000 = %11d / (%11d + %11d)\n" \
$((pgrefill_dma * 1000 / (1 + pgscan_kswapd_dma + pgscan_direct_dma))) \
$pgrefill_dma $pgscan_kswapd_dma $pgscan_direct_dma

[[ $pgscan_kswapd_dma32 != 0 ]] && \
printf " DMA32: %4d / 1000 = %11d / (%11d + %11d)\n" \
$((pgrefill_dma32 * 1000 / (1 + pgscan_kswapd_dma32 + pgscan_direct_dma32))) \
$pgrefill_dma32 $pgscan_kswapd_dma32 $pgscan_direct_dma32

printf " Normal: %4d / 1000 = %11d / (%11d + %11d)\n" \
$((pgrefill_normal * 1000 / (1 + pgscan_kswapd_normal + pgscan_direct_normal))) \
$pgrefill_normal $pgscan_kswapd_normal $pgscan_direct_normal

[[ $pgscan_kswapd_high != 0 ]] && \
printf " HighMem: %4d / 1000 = %11d / (%11d + %11d)\n" \
$((pgrefill_high * 1000 / (1 + pgscan_kswapd_high + pgscan_direct_high))) \
$pgrefill_high $pgscan_kswapd_high $pgscan_direct_high

echo
echo ---------------------------------------------------------------
echo inactive size ratios:

egrep '(zone|inactive)' /proc/zoneinfo |
while true
do
read a b c d
[[ -z $a ]] && break
if [[ $c = "zone" ]]; then
prev_node=$node
prev_zone=$zone
node=${b%,}
zone=$d$node
else
prev_inactive=$inactive
eval $a=$b
if [[ $prev_node = $node ]]; then
printf "%8s / %8s: %4d / 10000 = %9d / %9d\n" \
$prev_zone $zone \
$((prev_inactive * 10000 / (1 + inactive))) \
$prev_inactive $inactive
fi
fi
done

echo
echo inactive scan rates:

[[ $pgscan_kswapd_dma != 0 ]] && \
printf "%8s / %8s: %4d / 10000 = (%11d + %11d) / (%11d + %11d)\n" \
"DMA" "Normal" \
$(((1 + pgscan_kswapd_dma + pgscan_direct_dma)* 10000 /\
(1 + pgscan_kswapd_normal + pgscan_direct_normal))) \
$pgscan_kswapd_dma $pgscan_direct_dma \
$pgscan_kswapd_normal $pgscan_direct_normal

[[ $pgscan_kswapd_dma32 != 0 ]] && \
printf "%8s / %8s: %4d / 10000 = (%11d + %11d) / (%11d + %11d)\n" \
"DMA32" "Normal" \
$(((1 + pgscan_kswapd_dma32 + pgscan_direct_dma32)* 10000 /\
(1 + pgscan_kswapd_normal + pgscan_direct_normal))) \
$pgscan_kswapd_dma32 $pgscan_direct_dma32 \
$pgscan_kswapd_normal $pgscan_direct_normal

[[ $pgscan_kswapd_high != 0 ]] && \
printf "%8s / %8s: %4d / 10000 = (%11d + %11d) / (%11d + %11d)\n" \
"Normal" "HighMem" \
$(((1 + pgscan_kswapd_normal + pgscan_direct_normal)* 10000 /\
(1 + pgscan_kswapd_high + pgscan_direct_high))) \
$pgscan_kswapd_normal $pgscan_direct_normal \
$pgscan_kswapd_high $pgscan_direct_high
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/

\
 
 \ /
  Last update: 2005-12-06 15:00    [W:0.088 / U:0.144 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site