Editing File:Kernel patches stats.png

Jump to: navigation, search

Warning: You are not logged in. Your IP address will be publicly visible if you make any edits. If you log in or create an account, your edits will be attributed to your username, along with other benefits.

The edit can be undone. Please check the comparison below to verify that this is what you want to do, and then save the changes below to finish undoing the edit.
Latest revision Your text
Line 8: Line 8:
  
 
== Source code ==
 
== Source code ==
 +
 
=== Collect data ===
 
=== Collect data ===
 
Here is the script to produce the data for the graph, called <code>count</code>:
 
Here is the script to produce the data for the graph, called <code>count</code>:
Line 13: Line 14:
 
<small><source lang="bash">
 
<small><source lang="bash">
 
#!/bin/sh
 
#!/bin/sh
 
+
 
# Whose patches to count
 
# Whose patches to count
#PAT='@openvz.org|@parallels.com|@sw.ru|@swsoft.com|@sw.com.sg|kuznet@'
+
PAT='@openvz.org|@parallels.com|@sw.ru|@swsoft.com|@sw.com.sg|adobriyan@|kuznet@'
#PAT='@openvz.org|@parallels.com|@sw.ru|@swsoft.com|@sw.com.sg|adobriyan@|kuznet@|gorcunov@'
+
PAT='@openvz.org|@parallels.com|@sw.ru|@swsoft.com|@sw.com.sg|@virtuozzo.com|kuznet@|gorcunov@'
 
 
 
 
# Return the date of the given tag, in a format usable by gnuplot
 
# Return the date of the given tag, in a format usable by gnuplot
 
get_tag_date() {
 
get_tag_date() {
Line 25: Line 24:
 
sed 's/ ..:..:..//' | sed 's/ /-/g'
 
sed 's/ ..:..:..//' | sed 's/ /-/g'
 
}
 
}
 
+
 
# Count the number of patches whose authors match $PAT,
 
# Count the number of patches whose authors match $PAT,
 
# for the period between two given git tags
 
# for the period between two given git tags
Line 32: Line 31:
 
egrep '^Author: ' | egrep $PAT | wc -l
 
egrep '^Author: ' | egrep $PAT | wc -l
 
}
 
}
 +
 +
# Old 2.6 kernel branch
 +
# We start from 2.6.12 -- the first kernel available in git
 +
# and end on 2.6.39 -- the last kernel on 2.6 branch
 +
for f in $(seq 13 40); do
 +
v1=v2.6.$((f-1))
 +
d1=$(get_tag_date $v1)
 +
if [ $f -gt 39 ]; then
 +
v2=$HEAD
 +
else
 +
v2=v2.6.$f
 +
fi
 +
d2=$(get_tag_date $v2)
 +
count=$(count_patches $v1 $v2)
 +
if test "$count" -gt 0; then
 +
echo $d2 $v2 " " $count
 +
fi
 +
 +
done | sed 's/ /\t/g'
  
count_total_patches() {
+
# New 3.x kernel branch
git log --pretty=short --no-merges $1..$2 | grep -c '^commit '
+
# What is the latest kernel patch number (i.e. x in 3.x)
}
+
latest=$(git tag | grep -v -- -rc | tail -n1 | sed -e 's/^.*\.\(.*\)$/\1/')
 
+
# Latest 3.x kernel
 
#latest3=$(git tag | grep -v -- -rc | tail -n1 | sed -e 's/^.*\.\(.*\)$/\1/')
 
latest3=$(git tag | grep -v -- -rc | grep -F 'v3.' | \
 
awk -F . '{print $2}' | sort -n | tail -n1)
 
# Latest 2.6.x kernel
 
latest26=39
 
 
 
 
# Find out if number of patches for HEAD is much more
 
# Find out if number of patches for HEAD is much more
# than for latest -rc. If yes, use HEAD, otherwise -rc.:
+
# than for latest -rc. If yes, use HEAD, otherwise -rc.
last_rc=$(git describe --abbrev=0)
+
last_rc=$(git tag | tail -n 1 | grep -- -rc)
 
HEAD=$last_rc
 
HEAD=$last_rc
 
if ! test -z "$last_rc"; then
 
if ! test -z "$last_rc"; then
much_more=10
+
much_more=15
count_head=$(count_patches v3.$latest3 HEAD)
+
count_head=$(count_patches v3.$latest HEAD)
count_rc=$(count_patches v3.$latest3 $last_rc)
+
count_rc=$(count_patches v3.$latest $last_rc)
 
if test $count_head -gt $((count_rc+much_more)); then
 
if test $count_head -gt $((count_rc+much_more)); then
 
HEAD="HEAD  "
 
HEAD="HEAD  "
Line 57: Line 68:
 
fi
 
fi
  
pv=''
+
# We start from 3.0
for v in $(git for-each-ref --sort='*authordate' --format='%(tag)' refs/tags |\
+
for f in $(seq 1 $((latest+1))); do
grep -v -E -- '-rc|-tree|v2.6.11') HEAD; do
+
v1=v3.$((f-1))
if [ -z "$pv" ]; then
+
d1=$(get_tag_date $v1)
pv=$v
+
if [ $f -gt $latest ]; then
continue
+
v2=$HEAD
 +
else
 +
v2=v3.$f
 
fi
 
fi
 
+
d2=$(get_tag_date $v2)
pd=$(get_tag_date $pv)
+
count=$(count_patches $v1 $v2)
d=$(get_tag_date $v)
+
if test "$count" -gt 0; then
count_ours=$(count_patches $pv $v)
+
echo $d2 $v2 " " $count
count_total=$(count_total_patches $pv $v)
 
if test "$count_ours" -gt 0; then
 
echo $d $v " " $count_ours $count_total
 
 
fi
 
fi
pv=$v
+
 
done | sed 's/ /\t/g'
 
done | sed 's/ /\t/g'
 
</source></small>
 
</source></small>
Line 81: Line 91:
 
<small><source lang="bash">
 
<small><source lang="bash">
 
#!/bin/sh
 
#!/bin/sh
 
REPO=~/git/linux/.git
 
COUNT=$(pwd)/count
 
OUT=$(pwd)/time.dat
 
export GDFONTPATH=/usr/share/fonts/microsoft
 
export GIT_DIR=$REPO
 
  
 
if test "$1" != "-f"; then
 
if test "$1" != "-f"; then
echo "== Previous (old) stats =="
+
git checkout master
tail -n 2 $OUT
+
git pull
# Update the repo and count new stats
+
sh count > time.dat
(cd $REPO && cd .. && git pull) && sh $COUNT > $OUT
 
echo "== New stats =="
 
tail -n 2 $OUT
 
 
fi
 
fi
  
DATE=$(tail -n 1 $OUT | cut -f 1 | awk -F- '{print $2,$1,$3}')
+
DATE=$(tail -n 1 time.dat | cut -f 1 | awk -F- '{print $2,$1,$3}')
MAXY=$(awk 'BEGIN {max=0}; ($3 > max) {max=$3}; END {print max+80}' < time.dat)
+
MAXY=$(awk 'BEGIN {max=0}; ($3 > max) {max=$3}; END {print max+50}' < time.dat)
 
# GNU date is powerful!
 
# GNU date is powerful!
 
MAXX=$(date +%b-1-%Y --date='+2 months')
 
MAXX=$(date +%b-1-%Y --date='+2 months')
  
 +
export GDFONTPATH=/usr/share/fonts/msttcorefonts/
 
cat << EOF | gnuplot > plot.png
 
cat << EOF | gnuplot > plot.png
set terminal png enhanced font "verdana,13" size 1600,1200
+
set terminal png enhanced font "verdanab,20" size 1600,1200
 
+
#set terminal png enhanced transparent font "verdanab,14" size 1200,600
 +
#set terminal svg enhanced font "verdanab,8" size 800,600
  
 
set title "OpenVZ team kernel patches progress as of ${DATE}"
 
set title "OpenVZ team kernel patches progress as of ${DATE}"
Line 122: Line 125:
 
set ytics nomirror # no tics at right
 
set ytics nomirror # no tics at right
  
plot '${OUT}' using 1:3 with linespoints pt 6 ps 1 lw 2 lt 2 notitle, \
+
plot 'time.dat' using 1:3 with linespoints pt 6 ps 1 lw 2 lt 2 notitle, \
'' using 1:3:2 with labels left offset 0,5.5 rotate notitle, \
+
'' using 1:3:2 with labels left offset 0,1 rotate notitle, \
 
'' using 1:3:3 with labels left offset 0.7,0 notitle
 
'' using 1:3:3 with labels left offset 0.7,0 notitle
  
 
EOF
 
EOF
 
</source></small>
 
</source></small>

Please note that all contributions to OpenVZ Virtuozzo Containers Wiki may be edited, altered, or removed by other contributors. If you don't want your writing to be edited mercilessly, then don't submit it here.
If you are going to add external links to an article, read the External links policy first!

To edit this page, please answer the question that appears below (more info):

Cancel Editing help (opens in new window)