<?xml version="1.0" ?>

<kc>

<title>Kernel Traffic</title>

<author contact="mailto:zbrown@tumblerings.org">Zack Brown</author>

<issue num="310" date="04 Jun 2005 00:00:00 -0800" />

<mailbox-stats>
	<global-stats>
		<generated-at>Sat Jun  4 21:05:49 2005</generated-at>
		<first-message>Thu Feb 24 17:19:21 2005</first-message>
		<last-message>Fri May  6 15:27:17 2005</last-message>
		<totals>
			<n-messages>1457</n-messages>
			<n-is-reply>1057</n-is-reply>
			<avg-resp-time>-522:-29:-58</avg-resp-time>
			<n-pgp-signed>43</n-pgp-signed>
			<total-size>9MB</total-size>
			<avg-size>6KB</avg-size>
			<n-attachments>35</n-attachments>
			<att-size>505KB</att-size>
			<bussiest-day-in-n day="2005-04-29"><n-msgs>246</n-msgs><n-bytes>2MB</n-bytes></bussiest-day-in-n>
			<bussiest-day-in-bytes day="2005-04-29"><n-msgs>246</n-msgs><n-bytes>2MB</n-bytes></bussiest-day-in-bytes>
			<n-writers>539</n-writers>
			<wrote-more-then-1-message>208</wrote-more-then-1-message>
			<n-lines>155996</n-lines>
			<header-size>78449</header-size>
			<n-user-agents>52</n-user-agents>
			<n-organisations>38</n-organisations>
			<n-toplevel-domains>37</n-toplevel-domains>
			<avg-spam-score>-28.358202</avg-spam-score>
				<spammiest-writer><score>1.000000</score><name>grant&#32;baca</name></spammiest-writer>
		</totals>
		<averages>
			<lines-per-message>107</lines-per-message>
			<lines-per-header>53</lines-per-header>
			<header-percent-of-message>50.29%</header-percent-of-message>
			<header-percent-of-total>42.08%</header-percent-of-total>
			<line-length>29</line-length>
		</averages>
		<importance>
			<low>0.00%</low>
			<normal>0.55%</normal>
			<high>0.00%</high>
		</importance>

	</global-stats>
	<top-writers>
		<top-writer rank="1">
			<e-mail-addr>adrian&#32;bunk</e-mail-addr>
			<n-messages>82</n-messages>
			<avg-size>8KB</avg-size>
			<total-size>583KB</total-size>
			<mostly-written-at>11:37</mostly-written-at>
		</top-writer>
		<top-writer rank="2">
			<e-mail-addr>andrew&#32;morton</e-mail-addr>
			<n-messages>46</n-messages>
			<avg-size>5KB</avg-size>
			<total-size>209KB</total-size>
			<mostly-written-at>11:36</mostly-written-at>
		</top-writer>
		<top-writer rank="3">
			<e-mail-addr>alan&#32;cox</e-mail-addr>
			<n-messages>34</n-messages>
			<avg-size>4KB</avg-size>
			<total-size>120KB</total-size>
			<mostly-written-at>17:48</mostly-written-at>
		</top-writer>
		<top-writer rank="4">
			<e-mail-addr>daniel&#32;phillips</e-mail-addr>
			<n-messages>31</n-messages>
			<avg-size>5KB</avg-size>
			<total-size>142KB</total-size>
			<mostly-written-at>13:37</mostly-written-at>
		</top-writer>
		<top-writer rank="5">
			<e-mail-addr>jeff&#32;dike</e-mail-addr>
			<n-messages>28</n-messages>
			<avg-size>8KB</avg-size>
			<total-size>201KB</total-size>
			<mostly-written-at>16:54</mostly-written-at>
		</top-writer>
	</top-writers>
	<top-subjects>
		<top-subject rank="1">
			<subject>mercurial&#32;0.4b&#32;vs&#32;git&#32;patchbomb&#32;benchmark</subject>
			<n-messages>62</n-messages>
			<avg-size>5KB</avg-size>
			<total-size>263KB</total-size>
			<mostly-written-at>12:52</mostly-written-at>
			<first-msg>1114758117</first-msg>
			<last-msg>1115243466</last-msg>
		</top-subject>
		<top-subject rank="2">
			<subject>[patch&#32;1b/7]&#32;dlm:&#32;core&#32;locking</subject>
			<n-messages>46</n-messages>
			<avg-size>9KB</avg-size>
			<total-size>407KB</total-size>
			<mostly-written-at>14:41</mostly-written-at>
			<first-msg>1114469698</first-msg>
			<last-msg>1115335771</last-msg>
		</top-subject>
		<top-subject rank="3">
			<subject>mercurial&#32;0.3&#32;vs&#32;git&#32;benchmarks</subject>
			<n-messages>44</n-messages>
			<avg-size>5KB</avg-size>
			<total-size>177KB</total-size>
			<mostly-written-at>16:59</mostly-written-at>
			<first-msg>1114479671</first-msg>
			<last-msg>1114671966</last-msg>
		</top-subject>
		<top-subject rank="4">
			<subject>[patch&#32;0/7]&#32;dlm:&#32;overview</subject>
			<n-messages>33</n-messages>
			<avg-size>5KB</avg-size>
			<total-size>160KB</total-size>
			<mostly-written-at>14:35</mostly-written-at>
			<first-msg>1114465192</first-msg>
			<last-msg>1115068907</last-msg>
		</top-subject>
		<top-subject rank="5">
			<subject>zimage&#32;on&#32;2.6?</subject>
			<n-messages>24</n-messages>
			<avg-size>4KB</avg-size>
			<total-size>93KB</total-size>
			<mostly-written-at>15:43</mostly-written-at>
			<first-msg>1115091303</first-msg>
			<last-msg>1115229023</last-msg>
		</top-subject>
	</top-subjects>
	<top-receivers>
		<top-receiver rank="1">
			<e-mail-addr>linux-kernel@vger.kernel.org</e-mail-addr>
			<n-messages>216</n-messages>
			<avg-size>9KB</avg-size>
			<total-size>2MB</total-size>
			<mostly-written-at>14:20</mostly-written-at>
		</top-receiver>
		<top-receiver rank="2">
			<e-mail-addr>andrew&#32;morton</e-mail-addr>
			<n-messages>186</n-messages>
			<avg-size>8KB</avg-size>
			<total-size>2MB</total-size>
			<mostly-written-at>13:50</mostly-written-at>
		</top-receiver>
		<top-receiver rank="3">
			<e-mail-addr>linus&#32;torvalds</e-mail-addr>
			<n-messages>71</n-messages>
			<avg-size>6KB</avg-size>
			<total-size>423KB</total-size>
			<mostly-written-at>15:18</mostly-written-at>
		</top-receiver>
		<top-receiver rank="4">
			<e-mail-addr>alan&#32;cox</e-mail-addr>
			<n-messages>29</n-messages>
			<avg-size>4KB</avg-size>
			<total-size>116KB</total-size>
			<mostly-written-at>12:33</mostly-written-at>
		</top-receiver>
		<top-receiver rank="5">
			<e-mail-addr>adrian&#32;bunk</e-mail-addr>
			<n-messages>22</n-messages>
			<avg-size>4KB</avg-size>
			<total-size>77KB</total-size>
			<mostly-written-at>14:14</mostly-written-at>
		</top-receiver>
	</top-receivers>
	<top-ccers>
		<top-ccers rank="1">
			<e-mail-addr>linux-kernel@vger.kernel.org</e-mail-addr>
			<n-messages>648</n-messages>
			<avg-size>6KB</avg-size>
			<total-size>4MB</total-size>
			<mostly-written-at>14:22</mostly-written-at>
		</top-ccers>
		<top-ccers rank="2">
			<e-mail-addr>andrew&#32;morton</e-mail-addr>
			<n-messages>184</n-messages>
			<avg-size>8KB</avg-size>
			<total-size>2MB</total-size>
			<mostly-written-at>15:06</mostly-written-at>
		</top-ccers>
		<top-ccers rank="3">
			<e-mail-addr>linus&#32;torvalds</e-mail-addr>
			<n-messages>50</n-messages>
			<avg-size>4KB</avg-size>
			<total-size>196KB</total-size>
			<mostly-written-at>14:10</mostly-written-at>
		</top-ccers>
		<top-ccers rank="4">
			<e-mail-addr>matt&#32;mackall</e-mail-addr>
			<n-messages>36</n-messages>
			<avg-size>4KB</avg-size>
			<total-size>144KB</total-size>
			<mostly-written-at>13:25</mostly-written-at>
		</top-ccers>
		<top-ccers rank="5">
			<e-mail-addr>teigland@redhat.com</e-mail-addr>
			<n-messages>27</n-messages>
			<avg-size>5KB</avg-size>
			<total-size>127KB</total-size>
			<mostly-written-at>13:20</mostly-written-at>
		</top-ccers>
	</top-ccers>
	<top-level-domains>
		<tld rank="1">
			<name>com</name>
			<freq>561</freq>
			<avg-size>7KB</avg-size>
			<total-size>4MB</total-size>
		</tld>
		<tld rank="2">
			<name>org</name>
			<freq>310</freq>
			<avg-size>5KB</avg-size>
			<total-size>2MB</total-size>
		</tld>
		<tld rank="3">
			<name>de</name>
			<freq>213</freq>
			<avg-size>7KB</avg-size>
			<total-size>2MB</total-size>
		</tld>
		<tld rank="4">
			<name>net</name>
			<freq>68</freq>
			<avg-size>5KB</avg-size>
			<total-size>300KB</total-size>
		</tld>
		<tld rank="5">
			<name>uk</name>
			<freq>55</freq>
			<avg-size>4KB</avg-size>
			<total-size>195KB</total-size>
		</tld>
	</top-level-domains>
	<top-timezones>
		<tz rank="1">
			<name>+0200</name>
			<freq>393</freq>
			<avg-size>7KB</avg-size>
			<total-size>3MB</total-size>
		</tz>
		<tz rank="2">
			<name>-0700</name>
			<freq>359</freq>
			<avg-size>7KB</avg-size>
			<total-size>3MB</total-size>
		</tz>
		<tz rank="3">
			<name>-0400</name>
			<freq>279</freq>
			<avg-size>5KB</avg-size>
			<total-size>2MB</total-size>
		</tz>
		<tz rank="4">
			<name>+0100</name>
			<freq>111</freq>
			<avg-size>7KB</avg-size>
			<total-size>703KB</total-size>
		</tz>
		<tz rank="5">
			<name>+1000</name>
			<freq>77</freq>
			<avg-size>7KB</avg-size>
			<total-size>529KB</total-size>
		</tz>
	</top-timezones>
	<top-organisations>
		<org rank="1">
			<name>osdl</name>
			<freq>24</freq>
			<bytes>121KB</bytes>
		</org>
		<org rank="2">
			<name>ibm&#32;ltc</name>
			<freq>12</freq>
			<bytes>122KB</bytes>
		</org>
		<org rank="3">
			<name>montavista&#32;software</name>
			<freq>6</freq>
			<bytes>54KB</bytes>
		</org>
		<org rank="4">
			<name>oracle&#32;corporation</name>
			<freq>6</freq>
			<bytes>31KB</bytes>
		</org>
		<org rank="5">
			<name>montavista&#32;software,&#32;inc.</name>
			<freq>5</freq>
			<bytes>125KB</bytes>
		</org>
	</top-organisations>
	<top-user-agents>
		<useragent rank="1">
			<name>mozilla</name>
			<freq>39</freq>
			<bytes>809KB</bytes>
		</useragent>
		<useragent rank="2">
			<name>evolution</name>
			<freq>26</freq>
			<bytes>978KB</bytes>
		</useragent>
		<useragent rank="3">
			<name>mutt/1.5.9i</name>
			<freq>23</freq>
			<bytes>898KB</bytes>
		</useragent>
		<useragent rank="4">
			<name>mutt/1.5.6+20040907i</name>
			<freq>20</freq>
			<bytes>562KB</bytes>
		</useragent>
		<useragent rank="5">
			<name>mutt/1.4.1i</name>
			<freq>19</freq>
			<bytes>497KB</bytes>
		</useragent>
	</top-user-agents>
	<messages-per-day>
		<Sunday><msgs>130</msgs><bytes>794KB</bytes></Sunday>
		<Monday><msgs>238</msgs><bytes>2MB</bytes></Monday>
		<Tuesday><msgs>230</msgs><bytes>2MB</bytes></Tuesday>
		<Wednesday><msgs>252</msgs><bytes>2MB</bytes></Wednesday>
		<Thursday><msgs>238</msgs><bytes>2MB</bytes></Thursday>
		<Friday><msgs>256</msgs><bytes>2MB</bytes></Friday>
		<Saturday><msgs>105</msgs><bytes>496KB</bytes></Saturday>
	</messages-per-day>
	<messages-per-month>
		<Jan><msgs>0</msgs><bytes>0</bytes></Jan>
		<Feb><msgs>1</msgs><bytes>3KB</bytes></Feb>
		<Mar><msgs>0</msgs><bytes>0</bytes></Mar>
		<Apr><msgs>687</msgs><bytes>4MB</bytes></Apr>
		<May><msgs>762</msgs><bytes>5MB</bytes></May>
		<Jun><msgs>0</msgs><bytes>0</bytes></Jun>
		<Jul><msgs>0</msgs><bytes>0</bytes></Jul>
		<Aug><msgs>0</msgs><bytes>0</bytes></Aug>
		<Sep><msgs>0</msgs><bytes>0</bytes></Sep>
		<Oct><msgs>0</msgs><bytes>0</bytes></Oct>
		<Nov><msgs>0</msgs><bytes>0</bytes></Nov>
		<Dec><msgs>0</msgs><bytes>0</bytes></Dec>
	</messages-per-month>
	<messages-per-day-of-month>
		<day-1><msgs>128</msgs><bytes>734KB</bytes></day-1>
		<day-2><msgs>191</msgs><bytes>2MB</bytes></day-2>
		<day-3><msgs>168</msgs><bytes>2MB</bytes></day-3>
		<day-4><msgs>156</msgs><bytes>863KB</bytes></day-4>
		<day-5><msgs>109</msgs><bytes>495KB</bytes></day-5>
		<day-6><msgs>10</msgs><bytes>47KB</bytes></day-6>
		<day-7><msgs>0</msgs><bytes>0</bytes></day-7>
		<day-8><msgs>0</msgs><bytes>0</bytes></day-8>
		<day-9><msgs>0</msgs><bytes>0</bytes></day-9>
		<day-10><msgs>0</msgs><bytes>0</bytes></day-10>
		<day-11><msgs>0</msgs><bytes>0</bytes></day-11>
		<day-12><msgs>0</msgs><bytes>0</bytes></day-12>
		<day-13><msgs>0</msgs><bytes>0</bytes></day-13>
		<day-14><msgs>0</msgs><bytes>0</bytes></day-14>
		<day-15><msgs>0</msgs><bytes>0</bytes></day-15>
		<day-16><msgs>0</msgs><bytes>0</bytes></day-16>
		<day-17><msgs>0</msgs><bytes>0</bytes></day-17>
		<day-18><msgs>0</msgs><bytes>0</bytes></day-18>
		<day-19><msgs>0</msgs><bytes>0</bytes></day-19>
		<day-20><msgs>0</msgs><bytes>0</bytes></day-20>
		<day-21><msgs>0</msgs><bytes>0</bytes></day-21>
		<day-22><msgs>0</msgs><bytes>0</bytes></day-22>
		<day-23><msgs>2</msgs><bytes>12KB</bytes></day-23>
		<day-24><msgs>3</msgs><bytes>63KB</bytes></day-24>
		<day-25><msgs>47</msgs><bytes>323KB</bytes></day-25>
		<day-26><msgs>62</msgs><bytes>515KB</bytes></day-26>
		<day-27><msgs>97</msgs><bytes>495KB</bytes></day-27>
		<day-28><msgs>128</msgs><bytes>775KB</bytes></day-28>
		<day-29><msgs>246</msgs><bytes>2MB</bytes></day-29>
		<day-30><msgs>103</msgs><bytes>484KB</bytes></day-30>
		<day-31><msgs>0</msgs><bytes>0</bytes></day-31>
	</messages-per-day-of-month>
	<messages-per-hour>
		<hour-1><msgs>23</msgs><bytes>122KB</bytes></hour-1>
		<hour-2><msgs>23</msgs><bytes>228KB</bytes></hour-2>
		<hour-3><msgs>43</msgs><bytes>305KB</bytes></hour-3>
		<hour-4><msgs>13</msgs><bytes>60KB</bytes></hour-4>
		<hour-5><msgs>5</msgs><bytes>44KB</bytes></hour-5>
		<hour-6><msgs>9</msgs><bytes>37KB</bytes></hour-6>
		<hour-7><msgs>21</msgs><bytes>100KB</bytes></hour-7>
		<hour-8><msgs>30</msgs><bytes>117KB</bytes></hour-8>
		<hour-9><msgs>60</msgs><bytes>319KB</bytes></hour-9>
		<hour-10><msgs>85</msgs><bytes>550KB</bytes></hour-10>
		<hour-11><msgs>102</msgs><bytes>461KB</bytes></hour-11>
		<hour-12><msgs>88</msgs><bytes>489KB</bytes></hour-12>
		<hour-13><msgs>79</msgs><bytes>343KB</bytes></hour-13>
		<hour-14><msgs>101</msgs><bytes>759KB</bytes></hour-14>
		<hour-15><msgs>93</msgs><bytes>612KB</bytes></hour-15>
		<hour-16><msgs>106</msgs><bytes>728KB</bytes></hour-16>
		<hour-17><msgs>108</msgs><bytes>632KB</bytes></hour-17>
		<hour-18><msgs>85</msgs><bytes>462KB</bytes></hour-18>
		<hour-19><msgs>50</msgs><bytes>311KB</bytes></hour-19>
		<hour-20><msgs>54</msgs><bytes>325KB</bytes></hour-20>
		<hour-21><msgs>87</msgs><bytes>380KB</bytes></hour-21>
		<hour-22><msgs>79</msgs><bytes>403KB</bytes></hour-22>
		<hour-23><msgs>57</msgs><bytes>299KB</bytes></hour-23>
	</messages-per-hour>
	<urls>
		<url-1><freq>1161</freq><url>http://vger.kernel.org/majordomo-info.html</url></url-1>
		<url-2><freq>1156</freq><url>http://www.tux.org/lkml/</url></url-2>
		<url-3><freq>9</freq><url>http://www.emulex.com/ts/indexemu.html.</url></url-3>
		<url-4><freq>8</freq><url>http://www.puettmann.net/temp/panic.jpg</url></url-4>
		<url-5><freq>8</freq><url>http://www.kernel.org</url></url-5>
	</urls>
	<top-avg-resp>
		<resp-pers rank="1">
			<name>eric&#32;piel</name>
			<avg-resp-time>00:03:15</avg-resp-time>
			<n-replies>3</n-replies>
		</resp-pers>
		<resp-pers rank="2">
			<name>christoph&#32;hellwig</name>
			<avg-resp-time>00:11:41</avg-resp-time>
			<n-replies>1</n-replies>
		</resp-pers>
		<resp-pers rank="3">
			<name>andreas&#32;gal</name>
			<avg-resp-time>00:12:37</avg-resp-time>
			<n-replies>1</n-replies>
		</resp-pers>
		<resp-pers rank="4">
			<name>erik@debian.franken.de</name>
			<avg-resp-time>00:14:37</avg-resp-time>
			<n-replies>1</n-replies>
		</resp-pers>
		<resp-pers rank="5">
			<name>timur&#32;tabi</name>
			<avg-resp-time>00:19:13</avg-resp-time>
			<n-replies>1</n-replies>
		</resp-pers>
		<resp-pers rank="6">
			<name>jakub&#32;jelinek</name>
			<avg-resp-time>00:20:15</avg-resp-time>
			<n-replies>1</n-replies>
		</resp-pers>
	</top-avg-resp>
	<created-with><name>mboxstats</name><version>2.8</version><developer>folkert@vanheusden.com</developer><url>http://www.vanheusden.com/mboxstats/</url></created-with>
</mailbox-stats>

<section
  title="Some Comparison Of git And Mercurial; A Backward Glance At BitKeeper"
  subject="Mercurial 0.3 vs git benchmarks"
  archive="http://groups-beta.google.com/group/linux.kernel/msg/395ab87509254bef?hl=en"
  posts="107"
  startdate="25 Apr 2005 16:41:11 -0800"
  enddate="04 May 2005 09:51:06 -0800"
>
<topic>Compression</topic>
<topic>Real-Time</topic>
<topic>Version Control</topic>

<p>Matt Mackall said:</p>

<quote who="Matt Mackall">

<p>This is to announce an updated version of Mercurial. Mercurial is a
scalable, fast, distributed SCM that works in a model similar to BK
and Monotone. It has functional clone/branch and pull/merge support
and a working first pass implementation of network pull. It's also
extremely small and hackable: it's about 1000 lines of code.</p>

<p><a href="http://selenic.com/mercurial/">http://selenic.com/mercurial/</a></p>

<p>Here are the results of checking in the first 12 releases of Linux 2.6
into empty repositories for Mercurial v0.3 (hg) and git-pasky-0.7.
This is on my 512M Pentium M laptop. Times are in seconds.</p>

<pre>                 user         system       real        du -sh
ver    files   hg    git    hg    git    hg    git    hg   git

2.6.0  15007 19.949 35.526 3.171 2.264 25.138 87.994 145M   89M
2.6.1    998  5.906  4.018 0.573 0.464 10.267  5.937 146M   99M
2.6.2   2370  9.696 13.051 0.752 0.652 12.970 15.167 150M  117M
2.6.3   1906 10.528 11.509 0.816 0.639 18.406 14.318 152M  135M
2.6.4   3185 11.140  7.380 0.997 0.731 15.265 12.412 156M  158M
2.6.5   2261 10.961  6.939 0.843 0.640 20.564  8.522 158M  177M
2.6.6   2642 11.803 10.043 0.870 0.678 22.360 11.515 162M  197M
2.6.7   3772 18.411 15.243 1.189 0.915 32.397 21.498 165M  227M
2.6.8   4604 20.922 16.054 1.406 1.041 39.622 25.056 172M  262M
2.6.9   4712 19.306 12.145 1.421 1.102 35.663 24.958 179M  297M
2.6.10  5384 23.022 18.154 1.393 1.182 40.947 32.085 186M  338M
2.6.11  5662 27.211 19.138 1.791 1.253 42.605 31.902 193M  379M

tar of .hg/   108175360
tar of .git/  209385920

Full-tree change status (no changes):
hg:  real 0.799s  user 0.607s  sys 0.167s
git: real 0.124s  user 0.051s  sys 0.051s

Check-out time (2.6.0):
hg:  real 34.084s  user 4.069s  sys 2.024s
git: real 30.487s  user 2.393s  sys 1.007s

Full-tree working dir diff (2.6.0 base with 2.6.1 in working dir):
hg:  real 4.920s  user 4.629s  sys 0.260s
git: real 3.531s  user 1.869s  sys 0.862s
(this needed an update-cache --refresh on top of git commit, which took
another: real 2m52.764s  user 2.833s  sys 1.008s)

Merge from 2.6.0 to 2.6.1:
hg:  real 15.507s  user 6.175s  sys 0.442s
git: haven't quite figured this one out yet
</pre>

<p>Some notes:</p>

<ul>

<li>hg has a separate index file for each file checked in, which is why the
initial check-in is larger</li>

<li>this also means it touches twice as many files, typically</li>

<li>neither hg nor git quite fit in cache on my 512M laptop (nor does a
kernel compile), but the extra indexing makes hg's wall times a bit longer</li>

<li>hg does a form of delta compression, so each checkin requires retrieving
a previous version, checking its hash, doing a diff, compressing it, and
checking in the result</li>

<li>hg is written in pure Python</li>

</ul>

<p>Despite the above, it compares pretty well to git in speed and is quite a
bit better in terms of storage space. By reducing the zlib compression level,
it could probably win across the board.</p>

<p>The size numbers will get dramatically more unbalanced with more history -
a conversion of the history in BK to git is expected to take over 3G, which
Mercurial may actually take less space due to storing compressed binary
forward-only deltas.</p>

<p>While disk may be cheap, network bandwidth is not. Given that the common
case usage of git will be to do network pulls, it will find most of its speed
wasted on waiting for the network. Mercurial will almost certainly win here for
typical developer usage as it can do efficient delta communication (though it
currently doesn't attempt any pipelining so suffers a bit in round trips).</p>

<p>More discussion about Mercurial's design can be found here:</p>

<p><a
href="http://selenic.com/mercurial/notes.txt">http://selenic.com/mercurial/notes.txt</a></p>

</quote>

<p>Linus Torvalds replied:</p>

<quote who="Linus Torvalds">

<p>That time in checking things in is worrisome.</p>

<p>"git" is basically linear in the size of the patch, which is what I want,
since most patches I work with are a couple of files at most. The patches you
are checking in are huge - I never actually work with a change that is as big
as a whole release. I work with changes that are five files or something.</p>

<p>"hg" seems to basically slow down the more patches you have applied. It's
hard to tell from the limited test set, but look at "user" time. It seems
to increase from 6 seconds to 27 seconds.</p>

<p>To make an interesting benchmark, try applying the first 200 patches in
the current git kernel archive. Can you do them three per second? THAT is
the thing you should optimize for, not checking in huge changes.</p>

<p>If you're checking in a change to 1000+ files, you're doing something
wrong.</p>

</quote>

<p>Mike Taht pointed out, <quote who="Mike Taht">One difference is probably
- mercurial appears to be using zlib's *default* compression of 6....
using zlib compression of 9 really impacts git...</quote> Linus replied:</p>

<quote who="Linus Torvalds">

<p>I agree that it will hurt for big changes, but since I really do believe
that most changes are just a couple of files, I don't believe it matters
for those.</p>

<p>I forget what the exact numbers were, but I did some timings on plain
"gzip", and it basically said that doing gzip on a medium-sized file was
not that different for -6 and -9. Why? Because most of the overhead was
elsewhere ;)</p>

<p>Oh, well, I just re-created some numbers. This wasn't exactly what I did
last time I tested it, but it's conceptually the same thing:</p>

<pre>        torvalds@ppc970:~&gt; time gzip -9 &lt; v2.6/linux/kernel/sched.c &gt; /dev/null
        real    0m0.018s
        user    0m0.018s
        sys     0m0.000s

        torvalds@ppc970:~&gt; time gzip -6 &lt; v2.6/linux/kernel/sched.c &gt; /dev/null
        real    0m0.015s
        user    0m0.013s
        sys     0m0.001s</pre>

<p>ie there's a 0.003 second difference, which is certainly noticeable, and
would be hugely noticeable if you did a lot of these. But in my world-view
(which is what git is optimized for), the common case is that you usually
end up compressing maybe five-ten files, so the _compression_ overhead is
not that huge compared to all the other stuff.</p>

<p>But yes, testing git on big changes will test exactly the things that git
isn't optimized for. I think git will normally hold up pretty well (ie it
will still beat anything that isn't designed for speed, and will be comparable
to things that _are_), but it's not what I'm interested in optimizing for.</p>

<p>That said - these days we can trivially change over to a "zlib -6"
compression, and nothing should ever notice. So if somebody wants to test it,
it should be fairly easy to just compare side-by-side: the results should
be identical.</p>

<p>The easiest test-case is Andrew's 198-patch patch-bomb on linux-kernel
a few weeks ago: they all apply cleanly to 2.6.12-rc2 (in order), and you
can use my "dotest" script to automate the test..</p>

</quote>

<p>An hour later he continued:</p>

<quote who="Linus Torvalds">

<p>Oh, well. That was so trivial that I just did it:</p>

<p>With Z_BEST_COMPRESSION:</p>

<pre>        torvalds@ppc970:~/git-speed-1&gt; ./script
        Removing old tree
        Creating new tree
        Initializing db
        defaulting to local storage area
        Doing sync
        Initial add

        real    0m37.526s
        user    0m33.317s
        sys     0m3.816s
        Initial commit
        Committing initial tree 0bba044c4ce775e45a88a51686b5d9f90697ea9d

        real    0m0.329s
        user    0m0.152s
        sys     0m0.176s
        Patchbomb

        real    0m50.408s
        user    0m18.933s
        sys     0m25.432s</pre>

<p>With Z_DEFAULT_COMPRESSION:</p>

<pre>        torvalds@ppc970:~/git-speed-1&gt; ./script
        Removing old tree
        Creating new tree
        Initializing db
        defaulting to local storage area
        Doing sync
        Initial add

        real    0m19.755s
        user    0m15.719s
        sys     0m3.756s
        Initial commit
        Committing initial tree 0bba044c4ce775e45a88a51686b5d9f90697ea9d

        real    0m0.337s
        user    0m0.139s
        sys     0m0.197s
        Patchbomb

        real    0m50.465s
        user    0m18.304s
        sys     0m25.567s</pre>

<p>ie the "initial add" is almost twice as fast (because it spends most of
the time compressing _all_ the files), but the difference in applying 198
patches is not noticeable at all (because the costs are all elsewhere).</p>

<p>That's 198 patches in less than a minute even with the highest
compression. That rocks.</p>

<p>And don't try to make me explain why the patchbomb has any IO time at all,
it should all have fit in the cache, but I think the writeback logic
kicked in. Anyway, I tried it several times, and the real-time ends up
fluctuating between 50-56 seconds, but the user/sys times are very stable,
and end up being pretty much the same regardless of compression level.</p>

<p>Here's the script, in case anybody cares:</p>

<pre>        #!/bin/sh
        echo Removing old tree
        rm -rf linux-2.6.12-rc2
        echo Creating new tree
        zcat &lt; ~/v2.6/linux-2.6.12-rc2.tar.gz | tar xvf - &gt; log
        echo Initializing db
        ( cd linux-2.6.12-rc2 ; init-db )
        echo Doing sync
        sync
        echo Initial add
        time sh -c 'cd linux-2.6.12-rc2 &amp;&amp; cat ../l | xargs update-cache --add --' &gt;&gt; log
        echo Initial commit
        time sh -c 'cd linux-2.6.12-rc2 &amp;&amp; echo Initial commit | commit-tree
        $(write-tree) &gt; .git/HEAD' &gt;&gt; log
        echo Patchbomb
        time sh -c 'cd linux-2.6.12-rc2 ; dotest ~/andrews-first-patchbomb' &gt;&gt; log</pre>

<p>and since the timing results were pretty much what I expected, I don't
think this changes _my_ opinion on anything. Yes, you can speed up commits
with Z_DEFAULT_COMPRESSION, but it's _not_ that big of a deal for my kind
of model where you commit often, and commits are small.</p>

<p>It all boils down to:</p>

<ul>
<li>huge commits are slowed down by compression overhead</li>
<li>I don't think huge commits really matter</li>
</ul>

<p>I mean, if it took 2 _hours_ to do the initial commit, I'd think it
matters. But when we're talking about less than a minute to create the initial
commit of a whole kernel archive, does it really make any difference?</p>

<p>After all, it's something you do _once_, and never again (unless you
script it to do performance testing ;)</p>

<p>Anyway guys, feel free to test this on other machines. I bet there are
lots of subtle performance differences between different filesystems and
CPU architectures.. But the only hard numbers I have show that -9 isn't
that expensive.</p>

</quote>

<p>In the course of discussion, Linus and Matt came to consider BitKeeper's
methods of doing things. Linus remarked:</p>

<quote who="Linus Torvalds">

<p>I didn't want to do anything that even smelled of BK. Of course, part
of my reason for that is that I didn't feel comfortable with a delta model
at all (I wouldn't know where to start, and I hate how they always end up
having different rules for "delta"ble and "non-delta"ble objects).</p>

<p>But another was that exactly since I've been using BK for so long, I
wanted to make sure that my model just emulated the way I've been _using_
BK, rather than any BK technical details.</p>

</quote>

<p>Matt also confirmed that <quote who="Matt Mackall">I've never used BK,
but I got the impression that it was all SCCS under the covers, which means
adding stuff and reconstructing random versions is expensive (just as it
is in CVS). The split between index and data in Mercurial is intended to
address that.</quote></p>

</section>

<section
  title="Review Of Patch Submissions For 2.6.11.8 Stable Release"
  subject="[00/07] -stable review"
  archive="http://groups-beta.google.com/group/fa.linux.kernel/msg/995c7df77cd14ab5?hl=en"
  posts="47"
  startdate="27 Apr 2005 09:14:46 -0800"
  enddate="30 Apr 2005 00:10:14 -0800"
>
<topic>Digital Video Broadcasting</topic>
<topic>Disks: SCSI</topic>
<topic>FS: NFS</topic>
<topic>FS: sysfs</topic>
<topic>SMP</topic>
<topic>User-Mode Linux</topic>

<mention>Chris Wright</mention>

<p>Greg KH said:</p>

<quote who="Greg KH">

<p>This is the start of the stable review cycle for the 2.6.11.8 release.
There are 7 patches in this series, all will be posted as a response to
this one.  If anyone has any issues with these being applied, please let
us know.  If anyone is a maintainer of the proper subsystem, and wants to
add a signed-off-by: line to the patch, please respond with it.</p>

<p>These patches are sent out with a number of different people on the Bcc:
line.  If you wish to be a reviewer, please email stable@linux.com to add your
name to the list.  If you want to be off the reviewer list, also email us.</p>

<p>Responses should be made by Friday, Apr 29 17:00 UTC.  Anything received
after that time, might be too late.</p>

</quote>

<p>One patch gave modular NFSd a syscall interface, usable by User-Mode Linux.
Alan Cox felt this was not really a critical bug, since anyone who wanted
it could just compile NFSd directly into the kernel. Chris Wright felt this
made sense, and suggested dropping that patch; and Greg dropped it.</p>

<p>Another patch would fix a system lockup with some bt8xx-based DVB cards,
when loading the bttv driver. There were no objections to this one.</p>

<p>Another patch fixed some SysFS files to be read-only, since trying to
write to them could produce undefined results. There were no objections to
this either, although seme refinements were offered.</p>

<p>Another patch fixed partition guessing; however since there didn't seem to be
anyone who actually experienced problems with this, there was some doubt as to
whether it should go into the a .8 release or not.</p>

<p>Another patch fixed a reproducible SMP crash. There was no objection to this.</p>

<p>Another patch attempted to fix SCSI tape security, but Alan remarked,
<quote who="Alan Cox">This patch is just wrong on so many different levels
its hard to know where to begin.</quote> However, after some discussion, he
modified his objections, to say, <quote who="Alan Cox">Its the wrong answer
long term I suspect but its definitely a good answer for now.</quote></p>

</section>

<section
  title="Fixing SysFS File Ownership For Tpm Driver"
  subject="[PATCH 10 of 12] Fix Tpm driver -- sysfs owernship changes"
  archive="http://groups-beta.google.com/group/fa.linux.kernel/msg/98a3fe78c872b650?hl=en"
  posts="6"
  startdate="27 Apr 2005 14:19:03 -0800"
  enddate="29 Apr 2005 08:38:12 -0800"
>
<topic>FS: sysfs</topic>

<mention>Greg KH</mention>

<p>Kylene Hall said that for the current Tpm driver, <quote who="Kylene
Hall">all sysfs files end up owned by the base driver module rather than
the module that actually owns the device this is a problem if the module is
unloaded and the file is open. This patch fixes all that.</quote> Greg KH
had some technical suggestions and concerns, but seemed generally favorable
to the patch.</p>

</section>

<section
  title="New Broadband Processor Architecture Within The PPC64 Architecture Tree"
  subject="[PATCH 0/4] ppc64: Introduce BPA platform"
  archive="http://groups-beta.google.com/group/linux.kernel/msg/13b404e31685caab?hl=en"
  posts="15"
  startdate="27 Apr 2005 23:54:00 -0800"
  enddate="28 Apr 2005 20:35:28 -0800"
>
<topic>Ioctls</topic>
<topic>POSIX</topic>

<p>Arnd Bergmann said:</p>

<quote who="Arnd Bergmann">

<p>This series of patches add support for a fifth platform type in the ppc64
architecture tree. The Broadband Processor Architecture (BPA) is currently
used in a single machine from IBM, with others likely to be added at a
later point.</p>

<p>I already sent preparation patches before, these need to be applied on
top of them.  The first three patches add the actual platform code, which
should be usable for any BPA compatible implementation.</p>

<p>The final patch introduces a new file system to make use of the SPUs
inside the processors. This patch is still in a prototype stage and not
intended for merging yet.</p>

</quote>

<p>Regarding this last, Arnd posted the final patch, saying:</p>

<quote who="Arnd Bergmann">

<p>This is an early version of the SPU file system, which is used to run
code on the Synergistic Processing Units of the Broadband Engine.</p>

<p>The file system provides a name space similar to posix shared memory or
message queues. Users that have write permissions on the file system can
create directories in the spufs root.</p>

<p>Every directory represents an SPU context, which is currently mapped to
a physical SPU, but that is going to change to a virtualization scheme in
future updates.</p>

<p>An SPU context directory contains a predefined set of files used for
manipulating the state of the logical SPU. Users can change permissions
on those files, but not actually add or remove files without removing the
complete directory.</p>

<p>The current set of files is:</p>

<ul>
<li><b>/mem</b>    the contents of the local store memory of the SPU.
        This can be accessed like a regular shared memory
        file and contains both code and data in the address
        space of the SPU.
        The implemented file operations currently are read(),
        write() and mmap(). We will need our own address
        space operations as soon as we allow the SPU context
        to be scheduled away from the physical SPU into
        page cache.</li>

<li><b>/run</b>    A stub file that lets us do ioctl. The only ioctl
        method we need is the spu_run() call. spu_run suspends
        the current thread from the host CPU and transfers
        the flow of execution to the SPU.
        The ioctl call return to the calling thread when a state
        is entered that can not be handled by the kernel, e.g.
        an error in the SPU code or an exit() from it.
        When a signal is pending for the host CPU thread, the
        ioctl is interrupted and the SPU stopped in order to
        call the signal handler.</li>

<li><b>/mbox</b>   The first SPU to CPU communication mailbox. This file
        is read-only and can be read in units of 32 bits.
        The file can only be used in non-blocking mode and
        it even poll() will not block on it.
        When no data is available in the mailbox, read() returns
        EAGAIN.</li>

<li><b>/ibox</b>   The second SPU to CPU communication mailbox. This file
        is similar to the first mailbox file, but can be read
        in blocking I/O mode, and the poll familiy of system
        calls can be used to wait for it.</li>

<li><b>/wbox</b>   The CPU to SPU communation mailbox. It is write-only
        can can be written in units of 32 bits. If the mailbox
        is full, write() will block and poll can be used to
        wait for it becoming empty again.</li>

</ul>

<p>Other files are planned but currently are not implemented or
not functional.</p>

</quote>

</section>

<section
  title="Attempting To Reorganize XFS Compile-Time Configuration Options"
  subject="[PATCH] fs/Kconfig: more consistent configuration of XFS"
  archive="http://groups-beta.google.com/group/linux.kernel/msg/c9867d6aec1202f1?hl=en"
  posts="10"
  startdate="27 Apr 2005 23:55:48 -0800"
  enddate="01 May 2005 03:26:42 -0800"
>
<topic>FS: JFS</topic>
<topic>FS: ReiserFS</topic>
<topic>FS: XFS</topic>
<topic>FS: ext3</topic>

<p>Nguyen Anh Quynh said:</p>

<quote who="Nguyen Anh Quynh">

<p>At the moment, the configuration interface of Filesystem is not very
consistent:</p>

<ul>

<li>All other filesystem configurations (like Reiserfs, JFS, ext3,...)
is in fs/Kconfig, but only XFS is in a separate file fs/xfs/Kconfig</li>

<li>All other filesystem configuration is processed in the same screen
(using a kind of drop-down interface), but XFS configuration is done in a
separate screen.</li>

</ul>

<p>Here is the patch to fix the problem: it moves XFS configuration from
fs/xfs/Kconfig to fs/Kconfig, makes it to do all the configuration in the
same screen (by removing "menu" directive), and removes the unnecessary
fs/xfs/Kconfig.</p>

</quote>

<p>Christoph Hellwig replied, <quote who="Christoph Hellwig">The screen bits
is fine, btu please keep fs/xfs/Kconfig.  It make maintaince a lot a easier
for us XFS people.</quote> Nguyen said:</p>

<quote who="Nguyen Anh Quynh">

<p>I dont see why we should keep a file in kernel tree without using it
(since the patch removes "source xfs/Kconfig). Anyway, here is another patch
that doesnt remove fs/xfs/Kconfig.</p>

<p>Also note that this patch (and the last one, too) moves "config XFS_EXPOR"
to the bottom, so the menu intems aligns better and consistently with others
(like what Reiserfs, JFS,... are doing)</p>

</quote>

<p>But Christoph replied that not only should the file itself remain, but
the usage of it should remain as well. Nguyen said, <quote who="Nguyen Anh
Quynh">OK, here is another patch. It is up to Andrew to pick the approriate.
But I still prefer the first patch, which provides both consistency in
interface and configuration.</quote></p>

</section>

<section
  title="Strong Discord Among Top IDE Developers"
  subject="Multiple functionality breakages in 2.6.12rc3 IDE layer"
  archive="http://groups-beta.google.com/group/linux.kernel/msg/e6affef6c67ce7cf?hl=en"
  posts="9"
  startdate="28 Apr 2005 07:48:05 -0800"
  enddate="29 Apr 2005 07:34:17 -0800"
>
<topic>Disks: IDE</topic>
<topic>Disks: SCSI</topic>
<topic>Ioctls</topic>

<p>Alan Cox said:</p>

<quote who="Alan Cox">

<p>Ages ago we added an ide_default driver to clean up all the corner cases
like spurious IRQs for a device with no matching driver (eg ide-cd and
no CD driver) as well as ioctls and file access.</p>

<p>2.6.12rc removes it. Unfortunately it also means that if your only IDE
interface is one you hand configure you can no longer run Linux. It also
changes other aspects of behaviour although they don't look problematic
for most users. You can no longer</p>

<ul>

<li>Control the bus state of an interface</li>

<li>Reset an interface</li>

<li>Add an interface if none exist</li>

<li>Issue raw commands</li>

<li>Get an objects bios geometry</li>

<li>Read the identify data by ioctl (its still in proc but may be stale)</li>

</ul>

<p>without having a device specific driver loaded matching the media - and
that only works if its already detected the device correctly.</p>

<p>I don't have the tools at the moment to generate spurious IRQ's for
devices with no driver loaded but it does look like the code may well
then crash. From the way the changes were done it appears the current
IDE maintainers never appreciated that ide_default existed for far more
than just cleaning up ide-proc but also to handle IRQ's, opening of
empty slots, ioctls and power
management ?</p>

<p>The ability to specify the IDE ports on the command line as needed for
some Sony laptop installs have also become "obsolete" over time. They
still appear to work but spew a warning that the user will soon be
screwed.</p>

</quote>

<p>Bill Davidsen said, <quote who="Bill Davidsen">I missed the discussion
of why it was felt that the users would no longer want to be able to do
these things, or the new way to do it.</quote> Alan replied, <quote who="Alan
Cox">I'm assuming it may be accidental rather than detailed planning. Also its
taken this long to notice so its clearly not that critical to everyone. Seems
to be reasonably sane to fix too.</quote> Bill replied, <quote who="Bill
Davidsen">I was being a bit sarcastic about the "missed the discussion" bit,
but I'm pretty sure ripping out the capability was deliberate. Hopefully it's
now going to be evaluated, and then fixed. One thing Linux doesn't seem to do
well is recover failed drives at boot time, it always seems to take a bunch
of fiddling or even a boot from live CD and hand recover.</quote> He added,
<quote who="Bill Davidsen">Thanks for jumping into this, with ATAPI storage
down to about $1100(US)/TB it's getting really hard to justify SCSI and real
hot swap hardware.</quote></p>

<p>Elsewhere, Bartlomiej Zolnierkiewicz also replied to Alan, saying, <quote
who="Bartlomiej Zolnierkiewicz">Maybe you should mail current maintainer before
spreading FUD?</quote> He added, <quote who="Bartlomiej Zolnierkiewicz">No
functionality was removed AFAIK, see the patches.  I spend quite a bit of time
making sure that nothing breaks up (I missed one special case but somebody
already posted patch to LKML fixing it).  These patches were posted at least
two times to both linux-ide and linux-kernel, they were in -mm for ages - were
you hiding under the rock?</quote> He said there had been several discussions
already; and added, <quote who="Bartlomiej Zolnierkiewicz">Alan, seriously,
what is your problem?</quote> Alan replied that his problem was that <quote
who="Alan Cox">The fact that the IDE layer appears to be getting worse not
better, which given the starting point is a remarkable achievement.</quote> He
added that he had been busy <quote who="Alan Cox">doing an MBA thesis, a job,
learning a second language and trying to beat sense into our politicians. Now
I come back to look at the ide layer ready for a 2.6.12 merge and its all a
bit messy. The open code was clean and is now duplicated. Copies of subtly
different per driver gendisk/disk layer open routines have appeared that
should be shared. The default driver handling has been removed and half the
options for obscure systems have been marked obsolete in some Gnome like
purge of functionality that might scare small children.</quote> He added,
<quote who="Alan Cox">If you need details you shouldn't be maintaining that
code.</quote></p>

<p>Bartlomiej said, <quote who="Bartlomiej Zolnierkiewicz">Give details or
quit whining.</quote> The two continued flaming each other, and Bartlomiej
ended it with, <quote who="Bartlomiej Zolnierkiewicz">Feel free to fork so
you'll be wasting yours time only and not mine.</quote></p>

</section>

<section
  title="Attempting To Unify Semaphore Implementations For Maintainability"
  subject="[RFC] unify semaphore implementations"
  archive="http://groups-beta.google.com/group/fa.linux.kernel/msg/56e60773437e013f?hl=en"
  posts="17"
  startdate="28 Apr 2005 10:29:26 -0800"
  enddate="30 Apr 2005 08:50:16 -0800"
>
<topic>Assembly</topic>

<p>Benjamin LaHaise said:</p>

<quote who="Benjamin LaHaise">

<p>Please review the following series of patches for unifying the semaphore
implementation across all architectures (not posted as they're about 350K),
as they have only been tested on x86-64.  The code generated is functionally
identical to the earlier i386 variant, but since gcc has no way of taking
condition codes as results, there are two additional instructions inserted
from the use of generic atomic operations.  All told the >6000 lines of
code deleted makes for a much easier job for subsequent patches changing
semaphore functionality.</p>

<p><a href="http://www.kvack.org/~bcrl/patches/sem-cleanup-A2/10-rename_semaphore_h.diff">http://www.kvack.org/~bcrl/patches/sem-cleanup-A2/10-rename_semaphore_h.diff</a><br />
        Introduce linux/semaphore.h.  Convert all users of asm/semaphore.h over
        to linux/semaphore.h.</p>

<p><a href="http://www.kvack.org/~bcrl/patches/sem-cleanup-A2/20-move_rwlock.diff">http://www.kvack.org/~bcrl/patches/sem-cleanup-A2/20-move_rwlock.diff</a><br />
        Move i386 rwlock helper functions out of semaphore.c and into their own
        file rwlock.c.</p>

<p><a href="http://www.kvack.org/~bcrl/patches/sem-cleanup-A2/30-one_semaphore.diff">http://www.kvack.org/~bcrl/patches/sem-cleanup-A2/30-one_semaphore.diff</a><br />
        Replace all semaphore implementations with a single implementation
        derrived from the i386 code using atomic operations.  Tested on x86-64,
        compiled on i386 and ia64.</p>

</quote>

<p>James Bottomley replied:</p>

<quote who="James Bottomley">

<p>It's all very well for platforms that have efficient atomic operations.
However, on parisc we have no such luxury (the processor has no atomic
operations, so we have to fiddle them in the kernel using locks), so it
looks like you're making our semaphore operations less efficient.</p>

<p>Could you come up with a less monolithic way to share this so that we
can still do a spinlock semaphore implementation instead of an atomic op
based one?</p>

</quote>

<p>Benjamin replied, <quote who="Benjamin LaHaise">As I read the code, it
doesn't make a difference: parisc will take a spin lock within the atomic
operation and then release it, which makes the old fast path for the semaphores
and the new fast path pretty much equivalent (they both take and release one
spinlock).  The only extra cost is the address computation for the spinlock.
If there is contention for the atomic spinlocks, then parisc can increase
the number of buckets in their hashed spinlocks.</quote> David S. Miller
replied, <quote who="David S. Miller">I think parisc should be allowed to
choose their implementation of semaphores.  Look, if you change semaphores
in some way it will be their problem to keep their parisc version in sync.
Or you could provide both a spinlocked and an atomic op based implementation
of generic semaphores, as we do for rwsem already.</quote></p>

<p>Elsewhere, Russell King saw no point to Benjamin's patches at all. He
said, <quote who="Russell King">What happened to efficiency and performance?
It is my understanding that the inline part of the semaphore implementation
was one of the critical areas - critical enough to warrant coding it in
assembly for some people.</quote> Trond Myklebust explained, <quote who="Trond
Myklebust">It started from a desire to extend the existing implementations
to support new features such as asynchronous notification. Currently that
sort of thing is impossible unless your developer-super-powers include the
ability to herd 24 different subsystem maintainers into working together
on a solution.  In other words, the main drive is the desire to make it
maintainable.</quote> Paul Mackerras said, <quote who="Paul Mackerras">Well,
maybe the slow paths could be unified somewhat, and then these extra features
could be added in the slow paths.  I would support that.  I certainly don't
support replacing the current optimized fast-path implementations with a
lowest-common-denominator thing like Ben was proposing.</quote></p>

</section>

<section
  title="New timeofday Core Subsystem"
  subject="[RFC][PATCH (1/4)] new timeofday core subsystem (v A4)"
  archive="http://groups-beta.google.com/group/fa.linux.kernel/msg/e2468d5a2ae93219?hl=en"
  posts="15"
  startdate="29 Apr 2005 14:45:47 -0800"
  enddate="03 May 2005 13:47:07 -0800"
>
<topic>FS: sysfs</topic>
<topic>POSIX</topic>

<mention>Matt Mackall</mention>

<p>John Stultz said:</p>

<quote who="John Stultz">

<p>This patch implements the architecture independent portion of the time
of day subsystem. For a brief description on the rework, see here: <a
href="http://lwn.net/Articles/120850/">http://lwn.net/Articles/120850/</a>
(Many thanks to the LWN team for that clear writeup!)</p>

<p>Mostly this version is just a cleanup of the last release. One neat
feature is the new sysfs interface which allows you to manually override
the selected timesource while the system is running.</p>

<p>Included below is timeofday.c (which includes all the time of day management
and accessor functions), ntp.c (which includes the ntp scaling calculation
code, leapsecond processing, and ntp kernel state machine code), timesource.c
(for timesource specific management functions), interface definition .h files,
the example jiffies timesource (lowest common denominator time source, mainly
for use as example code) and minimal hooks into arch independent code.</p>

<p>The patch does not function without minimal architecture specific hooks
(i386, x86-64, ppc32, ppc64, ia64 and s390 examples to follow), and it should
be able to be applied to a tree without affecting the code.</p>

<p>New in this version:</p>

<ul>

<li>Improved cyc2ns remainder handling</li>

<li>Added getnstimeofday() interface</li>

<li>Better timesource management</li>

<li>Sysfs interface for overriding timesources</li>

<li>Cleanups from Nish Aravamudan and Matt Mackall</li>

</ul>

<p>Items still on the TODO list:</p>

<ul>

<li>make ntp adjustments be in ppb instead of ppm</li>

<li>posix-timers integration</li>

<li>boot time "timesource=" override option</li>

</ul>

</quote>

<p>Nishanth Aravamudan replied:</p>

<quote who="Nishanth Aravamudan">

<p>I have been working closely with John to re-work the soft-timer subsytem
to use the new timeofday() subsystem. The following patch attempts to
being this process. I would greatly appreciate any comments.</p>

<p>Some design points:</p>

<ol>

<li>

<p>The patch is small but does a lot.</p>

<ol>

<li>Renames timer_jiffies to last_timer_time (now that we are not
        jiffies-based).</li>
<li>Converts the soft-timer time-vector's/bucket's entries to
        timerinterval (a new unit) width, instead of jiffy width.</li>
<li>Defines timerintervals to be the current time as reported by
        the new timeofday-subsystem shifted down by 20 bits and masked
        to only grab the lower 32 bits. This effectively emulates a
        32-bit millisecond value.</li>
<li>Uses do_monotonic_clock() (converted to timerintervals) as the
        basis for addition and expiration instead of jiffies.</li>
<li>Adds some new helper functions for dealing with nanosecond
        values.</li>

</ol>

</li>

<li>Currently, the patch is dependent upon John's timeofday core rework.
For arches that will not have the new timeofday (or for which the rework
is still in progress), I can emulate the existing system with a separate
patch. The goal of this patch, though, is just to show how easy the new
system can be implemented and the benefits.</li>

<li>The reason for the re-work?: Many people complain about all of the adding
of 1 jiffy here or there to fix bugs. This new systems is fundamentally
human-time oriented and deals with those issues correctly.</li>

</ol>

<p>The code is reasonably well commented, but does expect readers to understand
the current system to some degree.</p>

</quote>

<p>And Darren Hart said:</p>

<quote who="Darren Hart">

<p>Also working closely with John and Nish, I have been taking advantage of
the new human-time soft-timer subsystem and the NO_IDLE_HZ code to dynamically
schedule interrupts as needed.  The idea is to have interrupt source drivers
(PIT, Local APIC, HPET, ppc decrementers, etc) similar to the time sources
in John's timeofday patches.</p>

<p>Because the resolution of the soft-timer sybsystem is configurable via
TIMER_INTERVAL_BITS, and the timeofday code is now free of the periodic system
tick, we can move the soft-timers to a dynamically scheduled interrupt system.
We can achieve both sub-millisecond timer resolution and NO_IDLE_HZ simply
by adjusting TIMER_INTERVAL_BITS and scheduling the next timer interrupt
appropriately whenever a soft-timer is added or removed.</p>

<p>In general at the end of set_timer_nsecs(), we see when the next
timer is due to expire and pass that value (in absolute nanoseconds) to
schedule_next_timer_interrupt().  Each interrupt source driver is then free
to reprogram the hard-timer to the "best" interval.  For something like
the local APIC, that may be exactly when the next timer needs to go off.
For the PIT, it may do nothing at all and just fire periodically.</p>

<p>I have a prototype using the PIT, which just demonstrates that the system
will still run this way.  Obviously other timers will perform much better
since the PIT is so slow to program.</p>

<p>I feel that this is a clean approach to two soft-timer issues: resolution
and NO_IDLE_HZ.  It integrates well with the patches from John and Nish and
is a direct approach to these issues, rather than an attempt to add support
on top of a jiffies based soft-timer subsystem.</p>

</quote>

</section>

<section
  title="Linux 2.6.11.8 Released"
  subject="Linux 2.6.11.8"
  archive="http://groups-beta.google.com/group/linux.kernel/msg/f710613ead5d1a7e?hl=en"
  posts="4"
  startdate="29 Apr 2005 17:57:32 -0800"
  enddate="29 Apr 2005 18:43:51 -0800"
>
<topic>FS: sysfs</topic>
<topic>I2C</topic>
<topic>SMP</topic>
<topic>USB</topic>

<mention>David S. Miller</mention>
<mention>Johannes</mention>
<mention>Jean Delvare</mention>
<mention>Alexander Nyberg</mention>

<p>Greg KH announced Linux 2.6.11.8, saying:</p>

<quote who="Greg KH">

<p>As the -stable patch review cycle is now over, I've released the 2.6.11.8
kernel in the normal kernel.org places.  Due to some disagreement over some
of the patches in the review cycle, I've dropped a number of them.</p>

<p>The diffstat and short summary of the fixes are below.</p>

<p>I'll also be replying to this message with a copy of the patch between
2.6.11.7 and 2.6.11.8, as it is small enough to do so.</p>

<p>And a personal thanks to OSU for letting me bore them by doing this in
their meeting.</p>

<pre> Makefile                                 |    4 ++--
 arch/sparc/kernel/ptrace.c               |   12 ------------
 arch/sparc64/kernel/ptrace.c             |   19 -------------------
 arch/sparc64/kernel/signal32.c           |    5 ++++-
 arch/sparc64/kernel/systbls.S            |    2 +-
 arch/um/include/sysdep-i386/syscalls.h   |   12 ++++++------
 arch/um/include/sysdep-x86_64/syscalls.h |    5 -----
 arch/um/kernel/sys_call_table.c          |   11 ++++-------
 drivers/i2c/chips/it87.c                 |    2 +-
 drivers/i2c/chips/via686a.c              |    2 +-
 drivers/media/video/bttv-cards.c         |    2 --
 fs/partitions/msdos.c                    |    5 +++++
 security/keys/key.c                      |    3 ++-
 13 files changed, 26 insertions(+), 58 deletions(-)</pre>

<p>Summary of changes from v2.6.11.7 to v2.6.11.8</p>

<p>Alexander Nyberg:</p>

<ul>
<li>Fix reproducible SMP crash in security/keys/key.c</li>
</ul>

<p>David S. Miller:</p>

<ul>
<li>sparc: Fix PTRACE_CONT bogosity</li>
<li>sparc64: Fix copy_sigingo_to_user32()</li>
<li>sparc64: use message queue compat syscalls</li>
</ul>

<p>Greg Kroah-Hartman:</p>

<ul>
<li>Linux 2.6.11.8</li>
</ul>

<p>Jean Delvare:</p>

<ul>
<li>I2C: Fix incorrect sysfs file permissions in it87 and via686a
    drivers</li>
</ul>

<p>Johannes Stezenbach:</p>

<ul>
<li>[fix Bug 4395] modprobe bttv freezes the computer</li>
</ul>

<p>Paolo 'Blaisorblade' Giarrusso:</p>

<ul>
<li>uml: quick fix syscall table</li>
</ul>

</quote>

<p>Lee Revell asked, <quote who="Lee Revell">Why didn't the fix for losing the
keyboard when unplugging a USB audio device go in?  That was a serious bug
that bit many, many users.</quote> Chris Wright replied, <quote who="Chris
Wright">They came in while we were already in the review process. They'll
have to be queued for next review cycle.</quote></p>

</section>

<section
  title="Documentation For realtime-preempt Patchset"
  subject="Updated realtime-preempt documentation"
  archive="http://groups-beta.google.com/group/fa.linux.kernel/msg/baf457e633e295d3"
  posts="7"
  startdate="29 Apr 2005 21:37:32 -0800"
  enddate="30 Apr 2005 12:31:19 -0800"
>
<topic>Real-Time</topic>

<mention>Ingo Molnar</mention>

<p>Michael J. Cohen said, <quote who="Michael J. Cohen">I've been
following Ingo Molnar and friends' lovely realtime-preempt patchset.
I'm curious, though, the only piece of documentation I've found is <a
href="http://people.redhat.com/mingo/realtime-preempt/older/ANNOUNCE-voluntary-preempt">http://people.redhat.com/mingo/realtime-preempt/older/ANNOUNCE-voluntary-preempt</a>
which is, indeed, quite old. Is anyone planning on updating this in the
near future or is it in too much flux? Should I try and make heads or tails
of the code first?</quote> Lee Revell replied, <quote who="Lee Revell">I
think it's changing too fast for anyone to have bothered to document
it yet.  But, you could make some pretty good documentation based on
the LKML discussions of RT preemption, especially Ingo's posts.</quote>
Lee added later, <quote who="Lee Revell">Right now there's this: <a
href="http://www.affenbande.org/~tapas/wiki/index.php?Low%20latency%20for%20audio%20work%20on%20linux%202.6.x">http://www.affenbande.org/~tapas/wiki/index.php?Low%20latency%20for%20audio%20work%20on%20linux%202.6.x</a>.
It's slightly outdated and focuses only on using the RT kernel for low latency
audio with JACK, but I think it's the best user level doc so far.</quote>
Close by, John Cooper remarked, <quote who="John Cooper">I'd cobbled together
documentation for internal use here though it lacks an "overall concepts"
wrapper.  I should be revisiting this in a week or so and will look into making
it generally available.</quote> And also close by, Jonathan Corbet said:</p>

<quote who="Jonathan Corbet">

<p>Don't know if it's what you're after, but I've written some on the
realtime preemption patches:</p>

<p>        <a href="http://lwn.net/Articles/106010/">http://lwn.net/Articles/106010/</a><br />
        <a href="http://lwn.net/Articles/107269/">http://lwn.net/Articles/107269/</a><br />
        <a href="http://lwn.net/Articles/108216/">http://lwn.net/Articles/108216/</a><br />
        <a href="http://lwn.net/Articles/129511/">http://lwn.net/Articles/129511/</a></p>

</quote>

</section>

<section
  title="Clarifying I2C Driver Dependencies"
  subject="tighten i2c dependancies"
  archive="http://groups-beta.google.com/group/fa.linux.kernel/msg/6bbb900e8b76402b?hl=en"
  posts="4"
  startdate="29 Apr 2005 21:57:45 -0800"
  enddate="30 Apr 2005 03:06:04 -0800"
>
<topic>I2C</topic>

<mention>Geert Uytterhoeven</mention>
<mention>Christer Weinigel</mention>
<mention>Christoph Hellwig</mention>

<p>Dave Jones said that a lot of I2C drivers <quote who="Dave Jones">show
up on pretty much every arch regardless of whether they make sense.</quote>
He posted a patch that <quote who="Dave Jones">adds a bunch of additional
dependancies tying down platform specific drivers that are unlikely to be
used on other archs.</quote> Christoph Hellwig, Geert Uytterhoeven, and
Christer Weinigel helped track down various dependencies.</p>

</section>

<section
  title="Removing BitKeeper Documentation From The Kernel"
  subject="[2.6 patch] remove BK documentation"
  archive="http://groups-beta.google.com/group/linux.kernel/msg/10fab65b1cacf69d?hl=en"
  posts="9"
  startdate="01 May 2005 15:34:41 -0800"
  enddate="02 May 2005 09:06:36 -0800"
>
<topic>Version Control</topic>

<mention>Adrian Bunk</mention>

<p>Adrian Bunk pointed out that there was no longer any reason for the kernel
source tree to document BitKeeper usage, and posted a patch to remove those
docs from the tree. Jeff Garzik, the author of the bulk of the documentation
in question, resented not being CCed on the patch removing it, but still
approved of the patch. Adrian said he would have CCed Jeff, if Jeff had been
listed in the files. Jeff pointed out that Adrian should have consulted the
revision history in that case. Jeff said, <quote who="Jeff Garzik">Files you
wish to remove were obviously written by -somebody-.  When removing things,
make a serious effort to contact the author.</quote></p>

<p>Close by, Bill Davidsen said:</p>

<quote who="Bill Davidsen">

<p>This seems like a good place to thank Adrian for his cleaning fetish,
which makes the kernel code and docs far less confusing, and Jeff, who put
in most of the effort in documenting bk.</p>

<p>Documentation authors really should mention themselves in the introduction,
docs aren't sexy and don't get your name in the news, but they are a vital
part of making Linux usable.</p>

</quote>

</section>

<section
  title="JFSutils Version 1.1.8 Released"
  subject="[ANNOUNCE] jfsutils-1.1.8"
  archive="http://groups-beta.google.com/group/fa.linux.kernel/msg/be5483acce0ab0f3?hl=en"
  posts="1"
  startdate="03 May 2005 12:26:28 -0800"
>
<topic>FS: JFS</topic>

<p>Dave Kleikamp said:</p>

<quote who="Dave Kleikamp">

<p>Release 1.1.8 of jfsutils was made available today.</p>

<p>This release include the following changes to the utilities:</p>

<ul>

<li>fsck should not bail out if reserved (but unused) inode 1 is bad</li>

<li>code cleanup - remove unused variables, eliminate compiler warnings</li>

<li>Added blocks parameter to jfs_mkfs to specify file system size</li>

<li>Ensure that data gets flushed to disk</li>

<li>Fix bug in replaying journal that corrupted inodes</li>

<li>Update directory index table when moving directory entries</li>

<li>Use O_DIRECT when checking for bad blocks (jfs_mkfs -c)</li>

</ul>

<p>For more details about JFS, please see our website: <a
href="http://jfs.sourceforge.net">http://jfs.sourceforge.net</a></p>

</quote>

</section>

<section
  title="yaird 0.0.6 Released"
  subject="[ANNOUNCE] yaird 0.0.6, a mkinitrd based on hotplug concepts"
  archive="http://groups-beta.google.com/group/linux.kernel/msg/761b0c332b7e29ab?hl=en"
  posts="1"
  startdate="03 May 2005 14:32:58 -0800"
>
<topic>Disk Arrays: LVM</topic>
<topic>FS: NFS</topic>
<topic>FS: devfs</topic>
<topic>Hot-Plugging</topic>

<p>Erik van Konijnenburg said:</p>

<quote who="Erik van Konijnenburg">

<p>Version 0.0.6 of yaird is now available at: <a
href="http://www.xs4all.nl/~ekonijn/yaird/yaird-0.0.6.tar.gz">http://www.xs4all.nl/~ekonijn/yaird/yaird-0.0.6.tar.gz</a></p>

<p>Yaird is a proof of concept perl rewrite of mkinitrd.  It aims to reliably
identify the necessary modules by using the same algorithms as hotplug, and
comes with a template system to to tune the tool for different distributions
and experiment with different image layouts.  It requires a 2.6 kernel
with hotplug.  There is a paper discussing it at:</p>

<p><a
href="http://www.xs4all.nl/~ekonijn/yaird/yaird.html">http://www.xs4all.nl/~ekonijn/yaird/yaird.html</a></p>

<p>Summary of user visible changes for version 0.0.6</p>

<ul>

<li>Support cryptsetup.  See the README file, see HTML documentation.</li>

<li>Support aliases and options in modprobe.conf, simply by using modprobe
rather than doing a reimplementation in perl.</li>

<li>tested with ulibc</li>

<li>

<p>Bugfixes:</p>

<ul>
<li>failure to generate image on systems without LVM</li>
<li>overcrowded /dev under Debian with udev</li>
<li>failure to generate image if multiple links to same raid device exist</li>
<li>uninitialised value in verbose output</li>
</ul>

</li>

</ul>

<p>On top of the todo list are now:</p>

<ul>

<li>support NFS devices</li>

<li>support cryptsetup-luks</li>

<li>support loopback devices</li>

</ul>

</quote>

</section>

<section
  title="Mercurial Version 0.4c Released"
  subject="Mercurial v0.4c"
  archive="http://groups-beta.google.com/group/fa.linux.kernel/msg/212fe1d1498956fe?hl=en"
  posts="4"
  startdate="03 May 2005 18:58:53 -0800"
  enddate="05 May 2005 12:36:58 -0800"
>

<p>Matt Mackall said:</p>

<quote who="Matt Mackall">

<p>A new version of Mercurial is available at:</p>

<p><a href="http://selenic.com/mercurial/">http://selenic.com/mercurial/</a></p>

<p>This version is officially self-hosting, now that I've added the final
planned changed to the metadata. To pull the repo, do:</p>

<p> hg init<br />
 hg merge http://selenic.com/hg</p>

<p>This version fixes numerous reported bugs, adds a "verify" command to
check the repository integrity, transaction handling, and some minor
speed improvements.</p>

</quote>

<p>Jeff Garzik asked, <quote who="Jeff Garzik">Can you make it do HTTP 1.1
pipelining?</quote> Matt replied:</p>

<quote who="Matt Mackall">

<p>Yes, a zsync-like protocol ought to be doable. But you'll still
potentially be doing 16k requests to pull something the size of the
kernel, which isn't very friendly to a web server. So I'm working on a
stand-alone or possibly CGI-based replacement.</p>

<p>My goal is to do something like this:</p>

<table>

<th>client</th>                    <th>server</th>
<tr><td>I last saw change N from you</td><td></td></tr>
<tr><td></td>                      <td>W, X, Y, and Z are newer here</td></tr>
<tr><td>Send me X, Y, and Z relative to N</td><td></td></tr>
<tr><td></td>                      <td>Here you go, deltas from N to X to
                                       Y to Z, sorted by file</td></tr>
</table>

<p>So not only can we be efficient in number of round trips and data
transferred, we can reduce seeks by applying all per-file changes together.
We can also usually avoid decompress/recompress and patch/diff because
both ends will end up storing the same delta.</p>

</quote>

</section>

<section
  title="Linux-iSCSI High-Performance Initiator Version 5.0.0.3rc2 Released"
  subject="[ANNOUNCE] Linux-iSCSI High-Performance Initiator"
  archive="http://groups-beta.google.com/group/fa.linux.kernel/msg/0da2c394b7a55c81?hl=en"
  posts="1"
  startdate="04 May 2005 20:31:33 -0800"
>
<topic>Disks: SCSI</topic>

<p>Alex Aizman said:</p>

<quote who="Alex Aizman">

<p>This is to announce a new release of the iSCSI Initiator for Linux:
v5.0.0.3rc2 for 2.6.12 kernel. The previous (2nd) submission (posted 04/12/05)
can be located at:</p>

<p><a
href="http://marc.theaimsgroup.com/?l=linux-kernel&amp;m=111328256211837&amp;w=2">http://marc.theaimsgroup.com/?l=linux-kernel&amp;m=111328256211837&amp;w=2</a></p>

<p>The very first submission is here:</p>

<p><a
href="http://marc.theaimsgroup.com/?l=linux-kernel&amp;m=111017939025775&amp;w=2">http://marc.theaimsgroup.com/?l=linux-kernel&amp;m=111017939025775&amp;w=2</a></p>

<p>Current release is result of the ongoing effort by the combined linux-iscsi
team. In-depth information on the project, including the latest download,
performance results, etc. documentation can be found at:</p>

<p><a
href="http://linux-iscsi.sourceforge.net">http://linux-iscsi.sourceforge.net</a></p>

<p>and/or</p>

<a href="http://www.open-iscsi.org">http://www.open-iscsi.org</a>

</quote>

<p>He added, <quote who="Alex Aizman">This Initiator will work
with the new iSCSI transport class from the (very) recent submission
by Mike Christie. The related (and required) submission can be located at: <a
href="http://marc.theaimsgroup.com/?l=linux-kernel&amp;m=111526182523809&amp;w=2">http://marc.theaimsgroup.com/?l=linux-kernel&amp;m=111526182523809&amp;w=2</a></quote>.
He also said, <quote who="Alex Aizman">The
assoicated userspace tools can be downloaded from <a
href="http://www.open-iscsi.org/index.html#download">http://www.open-iscsi.org/index.html#download</a></quote></p>

</section>

<section
  title="NTFS Development Switches From BitKeeper To git"
  subject="ntfs development git tree for -mm"
  archive="http://groups-beta.google.com/group/linux.kernel/msg/9d3ae01ff6d69073?hl=en"
  posts="1"
  startdate="05 May 2005 07:11:27 -0800"
>
<topic>FS: NTFS</topic>
<topic>Version Control</topic>

<p>Anton Altaparmakov said:</p>

<quote who="Anton Altaparmakov">

<p>The former ntfs-2.6-devel BK repository is now converted to a GIT
repository and is available from:</p>

<p>{rsync,ftp,http}.kernel.org/pub/scm/linux/kernel/git/aia21/ntfs-2.6-devel.git</p>

<p>It would be great if you could add it to the -mm tree.</p>

<p>Please let me know if you have any problems with this tree or indeed if
you prefer a patch / patches (against what?) that I can make available
to you instead.</p>

</quote>

</section>

</kc>

