Difference between revisions of "File:Kernel patches stats.png"
(→Description: better wording) |
(Vvs uploaded a new version of File:Kernel patches stats.png) |
||
(44 intermediate revisions by 4 users not shown) | |||
Line 1: | Line 1: | ||
+ | [[Category: Development]] | ||
+ | |||
== Description == | == Description == | ||
Line 6: | Line 8: | ||
== Source code == | == Source code == | ||
− | |||
=== Collect data === | === Collect data === | ||
− | Here is the script to produce the data for the graph: | + | Here is the script to produce the data for the graph, called <code>count</code>: |
<small><source lang="bash"> | <small><source lang="bash"> | ||
#!/bin/sh | #!/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() { | 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 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 | |
+ | # 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 v3.$latest3 HEAD) | ||
+ | count_rc=$(count_patches v3.$latest3 $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') 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' | done | sed 's/ /\t/g' | ||
− | |||
</source></small> | </source></small> | ||
Line 43: | Line 81: | ||
<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 ==" | |
− | + | 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 | fi | ||
− | DATE=$( | + | 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+ | + | 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 | cat << EOF | gnuplot > plot.png | ||
− | set terminal png | + | set terminal png enhanced font "verdana,13" size 1600,1200 |
+ | |||
set title "OpenVZ team kernel patches progress as of ${DATE}" | set title "OpenVZ team kernel patches progress as of ${DATE}" | ||
Line 62: | Line 112: | ||
set timefmt "%b-%d-%Y" | set timefmt "%b-%d-%Y" | ||
set format x "%b\n%Y" | set format x "%b\n%Y" | ||
+ | set grid xtics mxtics noytics | ||
+ | set xrange [ : "${MAXX}" ] | ||
set yrange [ 0 : ${MAXY} ] | set yrange [ 0 : ${MAXY} ] | ||
− | set ylabel "Number of patches accepted into mainstream" | + | set ylabel "Number of patches from OpenVZ team,\n per kernel release, accepted into mainstream" |
− | set border 3 | + | set border 3 # no lines at right and top |
− | set xtics nomirror | + | set xtics nomirror # no tics at top |
− | set ytics nomirror | + | set ytics nomirror # no tics at right |
− | plot ' | + | 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 | EOF | ||
</source></small> | </source></small> |
Latest revision as of 05:47, 28 March 2022
Description[edit]
This graph shows how many patches from OpenVZ developers were merged into mainstream Linux kernel, per each kernel version.
It is drawn by gnuplot using the data set obtained from kernel 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 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
# 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 v3.$latest3 HEAD)
count_rc=$(count_patches v3.$latest3 $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') 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=~/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
File history
Click on a date/time to view the file as it appeared at that time.
(newest | oldest) View (newer 10 | older 10) (10 | 20 | 50 | 100 | 250 | 500)Date/Time | Thumbnail | Dimensions | User | Comment | |
---|---|---|---|---|---|
12:11, 14 June 2018 | 1,600 × 1,200 (43 KB) | Vvs (talk | contribs) | 4.17+ | ||
11:03, 27 April 2018 | 1,600 × 1,200 (43 KB) | Vvs (talk | contribs) | Kirill Thai submitted huge number of patches into 4.17-rc kernel | ||
16:16, 8 February 2018 | 1,600 × 1,200 (45 KB) | Vvs (talk | contribs) | |||
12:34, 3 June 2015 | 1,600 × 1,200 (30 KB) | Sergey Bronnikov (talk | contribs) | |||
03:25, 24 March 2014 | 1,600 × 1,200 (38 KB) | Kir (talk | contribs) | better labels | ||
03:17, 24 March 2014 | 1,600 × 1,200 (38 KB) | Kir (talk | contribs) | Updated | ||
22:46, 19 January 2013 | 1,600 × 1,200 (49 KB) | Glic3rinu (talk | contribs) | 3.8-rc4, good work guys! | ||
20:48, 19 March 2012 | 1,600 × 1,200 (47 KB) | Glic3rinu (talk | contribs) | kernel 3.3 released (c/r patches) | ||
19:51, 26 January 2012 | 1,600 × 1,200 (47 KB) | Glic3rinu (talk | contribs) | now 3.0 is displayed too | ||
19:39, 26 January 2012 | 1,600 × 1,200 (46 KB) | Glic3rinu (talk | contribs) | v3.3-rc1 |
- You cannot overwrite this file.
File usage
The following 2 pages link to this file: