Difference between revisions of "File:Kernel patches stats.png"

From OpenVZ Virtuozzo Containers Wiki
Jump to: navigation, search
(Glic3rinu uploaded a new version of "File:Kernel patches stats.png": 3.8-rc4, good work guys!)
m (Collect data)
Line 9: Line 9:
 
== Source code ==
 
== 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
 
#!/bin/sh
 
   
 
   
Line 35: Line 31:
 
# We start from 2.6.12 -- the first kernel available in git
 
# 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
 
# and end on 2.6.39 -- the last kernel on 2.6 branch
for f in $(seq 13 40); do
+
for f in $(seq 13 39); do
 
v1=v2.6.$((f-1))
 
v1=v2.6.$((f-1))
 
d1=$(get_tag_date $v1)
 
d1=$(get_tag_date $v1)
Line 50: Line 46:
 
   
 
   
 
done | sed 's/ /\t/g'
 
done | sed 's/ /\t/g'
 
+
 
# New 3.x kernel branch
 
# New 3.x kernel branch
 
# Transition: patches from 2.6.39 to 3.0
 
# Transition: patches from 2.6.39 to 3.0
 
d2=$(get_tag_date v3.0)
 
d2=$(get_tag_date v3.0)
 
count=$(count_patches v2.6.39 v3.0)
 
count=$(count_patches v2.6.39 v3.0)
echo $d2 v3.0 " " $count
+
echo $d2 "v3.0" " " $count | sed 's/ /\t/g'
 
+
# What is the latest kernel patch number (i.e. x in 3.x)
+
# What is the latest kernel patch number 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/')
 
   
 
   
Line 72: Line 68:
 
fi
 
fi
 
fi
 
fi
 
+
 
# We start from 3.0
 
# We start from 3.0
 
for f in $(seq 1 $((latest+1))); do
 
for f in $(seq 1 $((latest+1))); do
Line 89: Line 85:
 
   
 
   
 
done | sed 's/ /\t/g'
 
done | sed 's/ /\t/g'
</source></small>
 
  
 
=== Draw the graph ===
 
=== Draw the graph ===

Revision as of 23:03, 19 January 2013


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

  1. !/bin/sh
  1. Whose patches to count

PAT='@openvz.org|@parallels.com|@sw.ru|@swsoft.com|@sw.com.sg|adobriyan@|kuznet@'

  1. 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' }

  1. Count the number of patches whose authors match $PAT,
  2. for the period between two given git tags

count_patches() { git log --pretty=short --no-merges $1..$2 | egrep '^Author: ' | egrep $PAT | wc -l }

  1. Old 2.6 kernel branch
  2. We start from 2.6.12 -- the first kernel available in git
  3. and end on 2.6.39 -- the last kernel on 2.6 branch

for f in $(seq 13 39); 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'

  1. New 3.x kernel branch
  2. Transition: patches from 2.6.39 to 3.0

d2=$(get_tag_date v3.0) count=$(count_patches v2.6.39 v3.0) echo $d2 "v3.0" " " $count | sed 's/ /\t/g'

  1. What is the latest kernel patch number in 3.x

latest=$(git tag | grep -v -- -rc | tail -n1 | sed -e 's/^.*\.\(.*\)$/\1/')

  1. Find out if number of patches for HEAD is much more
  2. 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

  1. 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 | ) (10 | 20 | 50 | 100 | 250 | 500)
Date/TimeThumbnailDimensionsUserComment
current05:47, 28 March 2022Thumbnail for version as of 05:47, 28 March 20221,600 × 1,200 (52 KB)Vvs (talk | contribs)v5.17+
15:00, 8 May 2021Thumbnail for version as of 15:00, 8 May 20211,600 × 1,200 (49 KB)Vvs (talk | contribs)v5.12+
13:27, 3 May 2020Thumbnail for version as of 13:27, 3 May 20201,600 × 1,200 (50 KB)Vvs (talk | contribs)3.Mai 2020
10:21, 31 January 2020Thumbnail for version as of 10:21, 31 January 20201,600 × 1,200 (49 KB)Vvs (talk | contribs)v5.5+
07:36, 30 October 2019Thumbnail for version as of 07:36, 30 October 20191,600 × 1,200 (49 KB)Vvs (talk | contribs)v5.3+
07:16, 23 August 2019Thumbnail for version as of 07:16, 23 August 20191,600 × 1,200 (49 KB)Vvs (talk | contribs)v5.2+
06:26, 27 May 2019Thumbnail for version as of 06:26, 27 May 20191,600 × 1,200 (49 KB)Vvs (talk | contribs)26 may 2019, v5.2-rc2
15:48, 21 February 2019Thumbnail for version as of 15:48, 21 February 20191,600 × 1,200 (48 KB)Vvs (talk | contribs)5.0-rc7 state
11:10, 30 November 2018Thumbnail for version as of 11:10, 30 November 20181,600 × 1,200 (47 KB)Vvs (talk | contribs)
11:18, 27 August 2018Thumbnail for version as of 11:18, 27 August 20181,600 × 1,200 (48 KB)Vvs (talk | contribs)4.18+
(newest | oldest) View (newer 10 | ) (10 | 20 | 50 | 100 | 250 | 500)
  • You cannot overwrite this file.

The following 2 pages link to this file:

Metadata