Difference between revisions of "File:Kernel patches stats.png"
(uploaded a new version of "File:Kernel patches stats.png": 2.6.38 release) |
(Updated to 3.x kernel series) |
||
Line 14: | 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|adobriyan@|kuznet@' | PAT='@openvz.org|@parallels.com|@sw.ru|@swsoft.com|@sw.com.sg|adobriyan@|kuznet@' | ||
− | + | ||
# 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 24: | 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 31: | 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' | ||
− | # What is the latest kernel patch number (i.e. x in | + | # New 3.x kernel branch |
+ | # 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=$(git tag | grep -v -- -rc | tail -n1 | sed -e 's/^.*\.\(.*\)$/\1/') | ||
− | + | ||
# 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. | ||
Line 41: | Line 61: | ||
if ! test -z "$last_rc"; then | if ! test -z "$last_rc"; then | ||
much_more=15 | much_more=15 | ||
− | count_head=$(count_patches | + | count_head=$(count_patches v3.$latest HEAD) |
− | count_rc=$(count_patches | + | 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 48: | Line 68: | ||
fi | fi | ||
− | # We start from | + | # We start from 3.0 |
− | for f in $(seq | + | for f in $(seq 1 $((latest+1))); do |
− | v1= | + | v1=v3.$((f-1)) |
d1=$(get_tag_date $v1) | d1=$(get_tag_date $v1) | ||
if [ $f -gt $latest ]; then | if [ $f -gt $latest ]; then | ||
v2=$HEAD | v2=$HEAD | ||
else | else | ||
− | v2= | + | v2=v3.$f |
fi | fi | ||
d2=$(get_tag_date $v2) | d2=$(get_tag_date $v2) | ||
Line 62: | Line 82: | ||
echo $d2 $v2 " " $count | echo $d2 $v2 " " $count | ||
fi | fi | ||
− | + | ||
done | sed 's/ /\t/g' | done | sed 's/ /\t/g' | ||
</source></small> | </source></small> |
Revision as of 19:38, 26 January 2012
Description
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
Collect data
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|adobriyan@|kuznet@'
# 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
}
# 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'
# New 3.x kernel branch
# 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/')
# Find out if number of patches for HEAD is much more
# than for latest -rc. If yes, use HEAD, otherwise -rc.
last_rc=$(git tag | tail -n 1 | grep -- -rc)
HEAD=$last_rc
if ! test -z "$last_rc"; then
much_more=15
count_head=$(count_patches v3.$latest HEAD)
count_rc=$(count_patches v3.$latest $last_rc)
if test $count_head -gt $((count_rc+much_more)); then
HEAD="HEAD "
fi
fi
# We start from 3.0
for f in $(seq 1 $((latest+1))); do
v1=v3.$((f-1))
d1=$(get_tag_date $v1)
if [ $f -gt $latest ]; then
v2=$HEAD
else
v2=v3.$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'
Draw the graph
Here is the script to produce the graph. Note it calls the previous script under the name 'count'.
#!/bin/sh
if test "$1" != "-f"; then
git checkout master
git pull
sh count > time.dat
fi
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+50}' < time.dat)
# GNU date is powerful!
MAXX=$(date +%b-1-%Y --date='+2 months')
export GDFONTPATH=/usr/share/fonts/msttcorefonts/
cat << EOF | gnuplot > plot.png
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}"
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 '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,1 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 | |
---|---|---|---|---|---|
current | 05:47, 28 March 2022 | 1,600 × 1,200 (52 KB) | Vvs (talk | contribs) | v5.17+ | |
15:00, 8 May 2021 | 1,600 × 1,200 (49 KB) | Vvs (talk | contribs) | v5.12+ | ||
13:27, 3 May 2020 | 1,600 × 1,200 (50 KB) | Vvs (talk | contribs) | 3.Mai 2020 | ||
10:21, 31 January 2020 | 1,600 × 1,200 (49 KB) | Vvs (talk | contribs) | v5.5+ | ||
07:36, 30 October 2019 | 1,600 × 1,200 (49 KB) | Vvs (talk | contribs) | v5.3+ | ||
07:16, 23 August 2019 | 1,600 × 1,200 (49 KB) | Vvs (talk | contribs) | v5.2+ | ||
06:26, 27 May 2019 | 1,600 × 1,200 (49 KB) | Vvs (talk | contribs) | 26 may 2019, v5.2-rc2 | ||
15:48, 21 February 2019 | 1,600 × 1,200 (48 KB) | Vvs (talk | contribs) | 5.0-rc7 state | ||
11:10, 30 November 2018 | 1,600 × 1,200 (47 KB) | Vvs (talk | contribs) | |||
11:18, 27 August 2018 | 1,600 × 1,200 (48 KB) | Vvs (talk | contribs) | 4.18+ |
- You cannot overwrite this file.
File usage
The following 2 pages link to this file: