Changes

Jump to: navigation, search

File:Kernel patches stats.png

2,671 bytes added, 05:47, 28 March 2022
Vvs uploaded a new version of File:Kernel patches stats.png
This graph shows how many patches from OpenVZ developers are merged in mainstream, for each kernel version.[[Category: Development]]
== Description == This graph shows how many patches from OpenVZ developers were merged into mainstream Linux kernel, per each kernel version. It is done in drawn by gnuplot. Data using the data set produced by a simple shell script working on obtained from kernel git repository.  == Source code ===== Collect data ===Here is the scriptto produce the data for the graph, called <code>count</code>:
<small><source lang="bash">
#!/bin/sh
latest# Whose patches to count#PAT=$(git tag '@openvz.org|@parallels.com| grep -v -- -rc @sw.ru| tail -n1 @swsoft.com|@sw.com.sg| sed -e kuznet@'s/^#PAT='@openvz.org|@parallels.com|@sw.*\ru|@swsoft.com|@sw.\(com.*\)$/\1/sg|adobriyan@|kuznet@|gorcunov@')((latest++))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
get_tag_date() {
echo $(git show $1 | egrep ^Date: | head -n1) | sed 's/^Date: ... \(.*\) [-+]....$/\1/' | sed 's/ ..:..:..//' | sed 's/ /-/g'} # Count the number of patches whose authors match $PAT,# for the period between two given git tagscount_patches() { git log --pretty=short --no-merges $1..$2 | egrep '^Author: ' | egrep $PAT | wc -l} count_total_patches() { git log --pretty=short --no-merges $1..$2 | grep -c '^commit '
}
for f in # Latest 3.x kernel#latest3=$(seq 13 git tag | grep -v -- -rc | tail -n1 | sed -e 's/^.*\.\(.*\)$latest/\1/'); do v1latest3=v2$(git tag | grep -v -- -rc | grep -F 'v3.' | \ awk -F . '{print $2}' | sort -n | tail -n1)# Latest 2.6.x kernellatest26=39 # Find out if number of patches for HEAD is much more# than for latest -rc. If yes, use HEAD, otherwise -rc.:last_rc=$((fgit describe --1abbrev=0)HEAD=$last_rcif ! test -z "$last_rc"; then much_more=10 count_head=$(count_patches v3.$latest3 HEAD) d1 count_rc=$(get_tag_date count_patches v3.$latest3 $v1last_rc) if [ test $f = count_head -gt $latest ]((count_rc+much_more)); then v2 HEAD="HEAD " else fifi v2pv=''for v in $(git for-each-ref --sort='*authordate' --format='%(tag)' refs/tags |\ grep -v -E -- '-rc|-tree|v2.6.11') HEAD; do if [ -z "$fpv" ]; then pv=$v continue fi d2 pd=$(get_tag_date $v2pv) d=$(get_tag_date $v)# echo -n " count_ours=$(count_patches $pv $v1..v) count_total=$v2 (count_total_patches $d1 -- pv $d2v): if test "$count_ours"-gt 0; then echo -n $d2 d $v2 v " "$count_ours $count_total git log --pretty fi pv=short --no-merges $v1..$v2 | grep 'Author:' | egrep '@openvz.org|@parallels.com|@sw.ru|@swsoft.com|@sw.com.sg|adobriyan@|kuznet@' | wc -lv
done | sed 's/ /\t/g'
</source></small>
 
=== Draw the graph ===
 
Here is the script to produce the graph. Note it calls the previous script under the name 'count'.
<small><source lang="bash">
#!/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
echo "== Previous (old) stats =="
tail -n 2 $OUT
# Update the repo and count new stats
(cd $REPO && cd .. && git pull) && sh $COUNT > $OUT
echo "== New stats =="
tail -n 2 $OUT
fi
 
DATE=$(tail -n 1 $OUT | cut -f 1 | awk -F- '{print $2,$1,$3}')
MAXY=$(awk 'BEGIN {max=0}; ($3 > max) {max=$3}; END {print max+80}' < time.dat)
# GNU date is powerful!
MAXX=$(date +%b-1-%Y --date='+2 months')
 
cat << EOF | gnuplot > plot.png
set terminal png enhanced font "verdana,13" size 1600,1200
 
 
set title "OpenVZ team kernel patches progress as of ${DATE}"
 
unset xlabel
set xdata time
set timefmt "%b-%d-%Y"
set format x "%b\n%Y"
set grid xtics mxtics noytics
 
set xrange [ : "${MAXX}" ]
set yrange [ 0 : ${MAXY} ]
set ylabel "Number of patches from OpenVZ team,\n per kernel release, accepted into mainstream"
 
set border 3 # no lines at right and top
set xtics nomirror # no tics at top
set ytics nomirror # no tics at right
 
plot '${OUT}' 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:3 with labels left offset 0.7,0 notitle
EOF
</source></small>

Navigation menu