Difference between revisions of "File:QEMU KVM.png"
(Vvs uploaded a new version of File:QEMU KVM.png) |
(Vvs uploaded a new version of File:QEMU KVM.png) |
||
| (One intermediate revision by the same user not shown) | |||
| Line 1: | Line 1: | ||
| − | Number of patches from OpenVZ team, | + | Number of patches from OpenVZ team |
| − | per | + | == Description == |
| − | + | ||
| + | This graph shows how many patches from OpenVZ developers were merged into mainstream QEMU + KVM, per each version. | ||
| + | |||
| + | It is drawn by gnuplot using the data set obtained from git repository. | ||
| + | |||
| + | == Source code == | ||
| + | === Collect data === | ||
| + | Here is the script to produce the data for the graph, called <code>count</code>: | ||
| + | |||
| + | <small><source lang="bash"> | ||
| + | #!/bin/sh | ||
| + | |||
| + | # 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@|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 | ||
| + | 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 tags | ||
| + | count_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 ' | ||
| + | } | ||
| + | |||
| + | # Latest kernel | ||
| + | latest=$(git tag | grep -v -- -rc | grep -F 'v1.' | \ | ||
| + | awk -F . '{print $2}' | sort -n | tail -n1) | ||
| + | |||
| + | # Find out if number of patches for HEAD is much more | ||
| + | # than for latest -rc. If yes, use HEAD, otherwise -rc.: | ||
| + | last_rc=$(git describe --abbrev=0) | ||
| + | HEAD=$last_rc | ||
| + | if ! test -z "$last_rc"; then | ||
| + | much_more=10 | ||
| + | count_head=$(count_patches v1.$latest.0 HEAD) | ||
| + | count_rc=$(count_patches v1.$latest.0 $last_rc) | ||
| + | if test $count_head -gt $((count_rc+much_more)); then | ||
| + | HEAD="HEAD " | ||
| + | fi | ||
| + | fi | ||
| + | |||
| + | pv='' | ||
| + | for v in $(git for-each-ref --sort='*authordate' --format='%(tag)' refs/tags |\ | ||
| + | grep -v -E -- '-rc|-tree|v2.6.11|\.[1-9]$') HEAD; do | ||
| + | if [ -z "$pv" ]; then | ||
| + | pv=$v | ||
| + | continue | ||
| + | fi | ||
| + | |||
| + | pd=$(get_tag_date $pv) | ||
| + | d=$(get_tag_date $v) | ||
| + | count_ours=$(count_patches $pv $v) | ||
| + | count_total=$(count_total_patches $pv $v) | ||
| + | if test "$count_ours" -gt 0; then | ||
| + | echo $d $v " " $count_ours $count_total | ||
| + | fi | ||
| + | pv=$v | ||
| + | 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=~/src/qemu/.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 QEMU 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 QEMU 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> | ||
Latest revision as of 10:23, 27 May 2020
Number of patches from OpenVZ team
Description[edit]
This graph shows how many patches from OpenVZ developers were merged into mainstream QEMU + KVM, per each version.
It is drawn by gnuplot using the data set obtained from git repository.
Source code[edit]
Collect data[edit]
Here is the script to produce the data for the graph, called count:
#!/bin/sh
# 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@|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
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 tags
count_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 '
}
# Latest kernel
latest=$(git tag | grep -v -- -rc | grep -F 'v1.' | \
awk -F . '{print $2}' | sort -n | tail -n1)
# Find out if number of patches for HEAD is much more
# than for latest -rc. If yes, use HEAD, otherwise -rc.:
last_rc=$(git describe --abbrev=0)
HEAD=$last_rc
if ! test -z "$last_rc"; then
much_more=10
count_head=$(count_patches v1.$latest.0 HEAD)
count_rc=$(count_patches v1.$latest.0 $last_rc)
if test $count_head -gt $((count_rc+much_more)); then
HEAD="HEAD "
fi
fi
pv=''
for v in $(git for-each-ref --sort='*authordate' --format='%(tag)' refs/tags |\
grep -v -E -- '-rc|-tree|v2.6.11|\.[1-9]$') HEAD; do
if [ -z "$pv" ]; then
pv=$v
continue
fi
pd=$(get_tag_date $pv)
d=$(get_tag_date $v)
count_ours=$(count_patches $pv $v)
count_total=$(count_total_patches $pv $v)
if test "$count_ours" -gt 0; then
echo $d $v " " $count_ours $count_total
fi
pv=$v
done | sed 's/ /\t/g'Draw the graph[edit]
Here is the script to produce the graph. Note it calls the previous script under the name 'count'.
#!/bin/sh
REPO=~/src/qemu/.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 QEMU 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 QEMU 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
EOFFile history
Click on a date/time to view the file as it appeared at that time.
| Date/Time | Thumbnail | Dimensions | User | Comment | |
|---|---|---|---|---|---|
| current | 10:23, 27 May 2020 | 1,600 × 1,200 (35 KB) | Vvs (talk | contribs) | ||
| 11:20, 27 August 2018 | 1,600 × 1,200 (25 KB) | Vvs (talk | contribs) | 27 aug 2018 | ||
| 09:52, 3 July 2018 | 1,600 × 1,200 (25 KB) | Vvs (talk | contribs) |
- You cannot overwrite this file.
File usage
The following page links to this file: