<?xml version="1.0" ?>

<kc>

<title>Kernel Traffic</title>

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

<issue num="150" date="14 Jan 2002 00:00:00 -0800" />

<intro>

<p>Today is the three-year anniversary of Kernel Traffic. The first issue came
out on January 14, 1999. I can safely say I had no idea what I was getting
myself into. It started as a way to give back to the community of people
that had enabled me to actually <i>use</i> my computer. Since then, it has
been responsible for a 3000-mile relocation from New York to San Francisco,
various stages of employment, many friends, and has just basically been a
complete eye-opener from day one. Thanks for everything, folks.</p>

</intro>

<stats posts="2507" size="10941" contrib="592" multiples="312" lastweek="173">

<person posts="95" size="241" who="Alan Cox " />
<person posts="80" size="296" who="&quot;Eric S. Raymond&quot; " />
<person posts="63" size="194" who="Dave Jones " />
<person posts="62" size="275" who="Andrew Morton " />
<person posts="59" size="344" who="Daniel Phillips " />
<person posts="45" size="182" who="Ingo Molnar " />
<person posts="43" size="158" who="&quot;H. Peter Anvin&quot; " />
<person posts="39" size="299" who="Jeff Garzik " />
<person posts="37" size="197" who="Davide Libenzi " />
<person posts="37" size="168" who="Keith Owens " />
<person posts="37" size="127" who="Rik van Riel " />
<person posts="34" size="276" who="&quot;Adam J. Richter&quot; " />
<person posts="34" size="115" who="Linus Torvalds " />
<person posts="33" size="134" who="Jens Axboe " />
<person posts="31" size="102" who="Timothy Covell " />
<person posts="31" size="93" who="Greg KH " />
<person posts="24" size="121" who="Andrea Arcangeli " />
<person posts="24" size="98" who="Vojtech Pavlik " />
<person posts="23" size="76" who="Richard Gooch " />
<person posts="22" size="79" who="Andreas Dilger " />
<person posts="21" size="74" who="Arnaldo Carvalho de Melo " />
<person posts="20" size="104" who="Roy Sigurd Karlsbakk " />
<person posts="20" size="70" who="Stephan von Krawczynski " />
<person posts="19" size="59" who="Andre Hedrick " />
<person posts="19" size="59" who="Alexander Viro " />
<person posts="19" size="54" who="" />
<person posts="18" size="63" who=" (Kai Henningsen)" />
<person posts="17" size="51" who="Benjamin LaHaise " />
<person posts="17" size="50" who="David Woodhouse " />
<person posts="16" size="137" who="Pavel Machek " />
<person posts="16" size="66" who="William Lee Irwin III " />
<person posts="15" size="88" who="Martin Dalecki " />
<person posts="15" size="57" who="&quot;Richard B. Johnson&quot; " />
<person posts="15" size="51" who="Tom Rini " />
<person posts="15" size="48" who="Lionel Bouton " />
<person posts="14" size="60" who="Rob Landley " />
<person posts="13" size="69" who="Ville Herva " />
<person posts="13" size="59" who="Anton Altaparmakov " />
<person posts="12" size="46" who="Larry McVoy " />
<person posts="12" size="39" who="&quot;Maciej W. Rozycki&quot; " />
<person posts="11" size="51" who="Doug Ledford " />
<person posts="11" size="37" who="Mike Castle " />
<person posts="11" size="32" who="Robert Love " />
<person posts="11" size="32" who="Legacy Fishtank " />
<person posts="11" size="28" who="Michael Zhu " />
<person posts="10" size="38" who="David Weinehall " />
<person posts="10" size="35" who="Horst von Brand " />
<person posts="10" size="33" who="Anton Blanchard " />
<person posts="10" size="28" who="Chris Wedgwood " />
<person posts="9" size="58" who="Riley Williams " />
<person posts="9" size="36" who="Jesse Pollard " />
<person posts="9" size="35" who="Rusty Russell " />
<person posts="9" size="35" who="Nicholas Knight " />
<person posts="9" size="34" who="Nathan Bryant " />
<person posts="9" size="32" who="Miles Lane " />
<person posts="9" size="32" who="Brian Gerst " />
<person posts="9" size="32" who="Erik Andersen " />
<person posts="9" size="25" who="Oliver Xymoron " />
<person posts="9" size="24" who="&quot;David S. Miller&quot; " />
<person posts="8" size="44" who="Jean Tourrilhes " />
<person posts="8" size="40" who="Luigi Genoni " />
<person posts="8" size="40" who="Roger Leblanc " />
<person posts="8" size="39" who="&quot;Petr Vandrovec&quot; " />
<person posts="8" size="30" who="Zwane Mwaikambo " />
<person posts="8" size="30" who="Corey Minyard " />
<person posts="8" size="29" who="&quot;Andrew Rodland&quot; " />
<person posts="8" size="26" who="Andreas Bombe " />
<person posts="8" size="26" who="Douglas Gilbert " />
<person posts="8" size="23" who="Ricky Beam " />
<person posts="7" size="24" who="&quot;M. Edward Borasky&quot; " />
<person posts="7" size="24" who="&quot;J.A. Magallon&quot; " />
<person posts="7" size="23" who="&quot;M. Edward (Ed) Borasky&quot; " />
<person posts="7" size="23" who="Trond Myklebust " />
<person posts="7" size="21" who="Marcelo Tosatti " />
<person posts="7" size="20" who="Mikael Pettersson " />
<person posts="6" size="53" who="salvador " />
<person posts="6" size="29" who="Dylan Egan " />
<person posts="6" size="29" who="Ed Tomlinson " />
<person posts="6" size="29" who="Urban Widmark " />
<person posts="6" size="26" who="Oleg Drokin " />
<person posts="6" size="26" who="Leif Sawyer " />
<person posts="6" size="23" who="Cameron Simpson " />
<person posts="6" size="22" who="Jaroslav Kysela " />
<person posts="6" size="21" who="Abramo Bagnara " />
<person posts="6" size="20" who="Russell King " />
<person posts="6" size="20" who="Christoph Hellwig " />
<person posts="6" size="19" who="=?iso-8859-2?B?R+Fib3IgTOlu4XJ0?= " />
<person posts="6" size="18" who="Peter =?iso-8859-1?Q?W=E4chtler?= " />
<person posts="6" size="17" who="Anthony DeRobertis " />
<person posts="6" size="16" who="Mark Hahn " />
<person posts="6" size="15" who="=?iso-8859-1?q?willy=20tarreau?= " />
<person posts="5" size="95" who="Jesse Barnes " />
<person posts="5" size="89" who="Kai Germaschewski " />
<person posts="5" size="39" who="Edward Stempel " />
<person posts="5" size="35" who="Harald Holzer " />
<person posts="5" size="35" who="Wakko Warner " />
<person posts="5" size="23" who="" />
<person posts="5" size="23" who="Mike Kravetz " />
<person posts="5" size="23" who="Ivan Passos " />
<person posts="5" size="19" who="Hugh Dickins " />
<person posts="5" size="18" who="Rene Rebe " />
<person posts="5" size="18" who="&quot;Dr. David Alan Gilbert&quot; " />
<person posts="5" size="17" who="Johannes Erdfelt " />
<person posts="5" size="17" who="Peter Osterlund " />
<person posts="5" size="16" who="Horst von Brand " />
<person posts="5" size="16" who="Matthias Hanisch " />
<person posts="5" size="16" who="Matthias Andree " />
<person posts="5" size="15" who="James Simmons " />
<person posts="5" size="15" who="Richard Henderson " />
<person posts="5" size="15" who="&quot;Albert D. Cahalan&quot; " />
<person posts="5" size="14" who="Pozsar Balazs " />
<person posts="5" size="14" who="Tony Hoyle " />
<person posts="5" size="14" who="Ryan Cumming " />
<person posts="5" size="13" who="Alex " />
<person posts="5" size="12" who="Momchil Velikov " />
<person posts="5" size="11" who="reddog83 " />
<person posts="4" size="48" who="Jason Thomas " />
<person posts="4" size="33" who="Vijay Kumar " />
<person posts="4" size="24" who="Pete Zaitcev " />
<person posts="4" size="20" who="Matt Dainty " />
<person posts="4" size="20" who="&quot;Ryan C. Bonham&quot; " />
<person posts="4" size="19" who="David Mosberger " />
<person posts="4" size="18" who="Stephen Satchell " />
<person posts="4" size="17" who="Dominik Mierzejewski " />
<person posts="4" size="17" who="Daniel Freedman " />
<person posts="4" size="17" who="Rene Engelhard " />
<person posts="4" size="15" who="=?iso-8859-1?Q?J=F6rn?= Nettingsmeier " />
<person posts="4" size="15" who="Chris Friesen " />
<person posts="4" size="15" who="Dmitri Pogosyan " />
<person posts="4" size="14" who="Tommy Reynolds " />
<person posts="4" size="14" who="christian e " />
<person posts="4" size="14" who="Krzysztof Oledzki " />
<person posts="4" size="14" who="Steffen Persvold " />
<person posts="4" size="13" who="Reid Hekman " />
<person posts="4" size="13" who="&quot;Jeffrey W. Baker&quot; " />
<person posts="4" size="13" who="&quot;Henning P. Schmiedehausen&quot; " />
<person posts="4" size="13" who="Brian " />
<person posts="4" size="13" who="Matti Aarnio " />
<person posts="4" size="12" who="Alex Bligh - linux-kernel " />
<person posts="4" size="12" who="Alessandro Suardi " />
<person posts="4" size="12" who="Petro " />
<person posts="4" size="12" who="=?iso-8859-1?Q?Jos=E9_Luis_Domingo_L=F3pez?= " />
<person posts="4" size="11" who="jtv " />
<person posts="4" size="11" who="Patrick Mochel " />
<person posts="4" size="11" who="Nikita Danilov " />
<person posts="4" size="10" who="Bernd Eckenfels " />
<person posts="4" size="10" who="David Golden " />
<person posts="4" size="10" who="Christoph Hellwig " />
<person posts="4" size="9" who="Frank Davis " />
<person posts="3" size="83" who="Craig Christophel " />
<person posts="3" size="37" who="Jonathan Corbet " />
<person posts="3" size="29" who="Daniel Tuijnman " />
<person posts="3" size="24" who="Ben Greear " />
<person posts="3" size="18" who="Luc Van Oostenryck " />
<person posts="3" size="18" who="" />
<person posts="3" size="17" who="=?ISO-8859-1?Q?G=E9rard_Roudier?= " />
<person posts="3" size="17" who="Ben Clifford " />
<person posts="3" size="16" who="Hans Reiser " />
<person posts="3" size="16" who="kees " />
<person posts="3" size="15" who="Alan " />
<person posts="3" size="15" who="&quot;Karol Pietrzak&quot; " />
<person posts="3" size="15" who="Bryce Nesbitt " />
<person posts="3" size="14" who="Michael Klose " />
<person posts="3" size="14" who="Andy Jeffries " />
<person posts="3" size="14" who="Felix von Leitner " />
<person posts="3" size="13" who="Martin Knoblauch " />
<person posts="3" size="13" who="george anzinger " />
<person posts="3" size="13" who="" />
<person posts="3" size="13" who="&quot;marc. h.&quot; " />
<person posts="3" size="12" who="Morten Helgesen " />
<person posts="3" size="12" who="Steinar Hauan " />
<person posts="3" size="12" who="Mike " />
<person posts="3" size="12" who="Mika Liljeberg " />
<person posts="3" size="12" who="Andreas Ferber " />
<person posts="3" size="11" who="Gertjan van Wingerde " />
<person posts="3" size="11" who="Andrey Nekrasov " />
<person posts="3" size="11" who="&quot;Kevin P. Fleming&quot; " />
<person posts="3" size="11" who="Andris Pavenis " />
<person posts="3" size="11" who=" (Bob_Tracy)" />
<person posts="3" size="11" who="Martin Mares " />
<person posts="3" size="11" who="Martin Josefsson " />
<person posts="3" size="11" who="Nikita Gergel " />
<person posts="3" size="11" who="Vladimir Kondratiev " />
<person posts="3" size="10" who="&quot;Randy.Dunlap&quot; " />
<person posts="3" size="10" who="&quot;Cameron, Steve&quot; " />
<person posts="3" size="10" who="Adrian Bunk " />
<person posts="3" size="10" who=" (Eric W. Biederman)" />
<person posts="3" size="10" who="&quot;Daniel J Blueman&quot; " />
<person posts="3" size="10" who="GOTO Masanori " />
<person posts="3" size="10" who="Kervin Pierre " />
<person posts="3" size="10" who="Matt Bernstein " />
<person posts="3" size="10" who="&quot;T. A.&quot; " />
<person posts="3" size="10" who="David Schwartz " />
<person posts="3" size="10" who="&quot;Phil Oester&quot; " />
<person posts="3" size="9" who="Anuradha Ratnaweera " />
<person posts="3" size="9" who="Marvin Justice " />
<person posts="3" size="9" who="&quot;Mr. James W. Laferriere&quot; " />
<person posts="3" size="9" who="Nick Papadonis " />
<person posts="3" size="9" who="Jacek =?iso-8859-2?Q?Pop=B3awski?= " />
<person posts="3" size="8" who="Alistair Riddell " />
<person posts="3" size="8" who="Chris Wright " />
<person posts="3" size="8" who="David Garfield " />
<person posts="3" size="8" who="David Howells " />
<person posts="3" size="8" who="Patrick Mau " />
<person posts="3" size="8" who="Vikram " />
<person posts="3" size="8" who="&quot;Dr. Kelsey Hudson&quot; " />
<person posts="3" size="8" who="Michael Cohen " />
<person posts="3" size="7" who="Sam Krasnik " />
<person posts="3" size="7" who="Jonathan Amery " />
<person posts="3" size="7" who="Doug McNaught " />
<person posts="3" size="7" who="Bernd Eckenfels " />
<person posts="2" size="76" who="" />
<person posts="2" size="48" who="Jordi " />
<person posts="2" size="45" who="Thomas Gschwind " />
<person posts="2" size="42" who="Jelena Mirkovic " />
<person posts="2" size="37" who="Sebastian =?ISO-8859-1?Q?Dr=F6ge?= " />
<person posts="2" size="30" who="Chris Pitchford " />
<person posts="2" size="27" who="Stefan Frank " />
<person posts="2" size="26" who="&quot;Manfred Spraul&quot; " />
<person posts="2" size="25" who="Rodrigo Souza de Castro " />
<person posts="2" size="24" who="Manfred Spraul " />
<person posts="2" size="23" who="" />
<person posts="2" size="18" who="Pascal Haakmat " />
<person posts="2" size="16" who="Klaus Zerwes " />
<person posts="2" size="15" who="Pawel Kot " />
<person posts="2" size="12" who="Heinz Diehl " />
<person posts="2" size="12" who="" />
<person posts="2" size="12" who="&quot;Venkata Rajesh Velamakanni&quot; " />
<person posts="2" size="12" who="David Lang " />
<person posts="2" size="12" who="" />
<person posts="2" size="12" who="&quot;Bartels, Christian&quot; " />
<person posts="2" size="11" who="Dieter =?iso-8859-15?q?N=FCtzel?= " />
<person posts="2" size="11" who="Steve Snyder " />
<person posts="2" size="10" who="Steven Cole " />
<person posts="2" size="10" who="&quot;Astinus&quot; " />
<person posts="2" size="9" who="Michal Moskal " />
<person posts="2" size="9" who="Rui Sousa " />
<person posts="2" size="9" who="Alexander Zarochentcev " />
<person posts="2" size="9" who="&quot;Giacomo A. Catenazzi&quot; " />
<person posts="2" size="8" who="" />
<person posts="2" size="8" who="Dana Lacoste " />
<person posts="2" size="8" who="Sasha Pachev " />
<person posts="2" size="8" who="Mike Eldridge " />
<person posts="2" size="8" who="Andy Gaynor " />
<person posts="2" size="8" who="J Sloan " />
<person posts="2" size="8" who="Takashi Iwai " />
<person posts="2" size="8" who="" />
<person posts="2" size="7" who="Christopher James " />
<person posts="2" size="7" who="Dennis Schoen " />
<person posts="2" size="7" who="Nick LeRoy " />
<person posts="2" size="7" who="Jeff Chua " />
<person posts="2" size="7" who="Davidovac Zoran " />
<person posts="2" size="7" who="Viktor Rosenfeld " />
<person posts="2" size="7" who="&quot;Martin Eriksson&quot; " />
<person posts="2" size="7" who="Miquel van Smoorenburg " />
<person posts="2" size="7" who="Marco Ermini " />
<person posts="2" size="7" who="William Park " />
<person posts="2" size="7" who="Shaya Potter " />
<person posts="2" size="7" who="aris " />
<person posts="2" size="7" who="Sid Boyce " />
<person posts="2" size="6" who="Richard Guenther " />
<person posts="2" size="6" who="Mario Mikocevic " />
<person posts="2" size="6" who="Mark Zealey " />
<person posts="2" size="6" who="Timo Jantunen " />
<person posts="2" size="6" who="Mike Jagdis " />
<person posts="2" size="6" who="" />
<person posts="2" size="6" who="Birger Lammering " />
<person posts="2" size="6" who="Andreas Schwab " />
<person posts="2" size="6" who="Samuel Maftoul " />
<person posts="2" size="6" who="&quot;Dennis Fleurbaaij&quot; " />
<person posts="2" size="6" who="&quot;Bryan Henderson&quot; " />
<person posts="2" size="6" who="Geert Uytterhoeven " />
<person posts="2" size="6" who="Tom Gall " />
<person posts="2" size="6" who="Paul Larson " />
<person posts="2" size="6" who="MrChuoi " />
<person posts="2" size="6" who="Art Hays " />
<person posts="2" size="6" who="Athanasius " />
<person posts="2" size="6" who="Tony Glader " />
<person posts="2" size="6" who="John Lange " />
<person posts="2" size="6" who="Helge Hafting " />
<person posts="2" size="6" who=" (Christian Koenig)" />
<person posts="2" size="6" who="=?ISO-8859-1?Q?Ra=FAl?= =?ISO-8859-1?Q?N=FA=F1ez?= de Arenas" />
<person posts="2" size="6" who="Cristiano Paris " />
<person posts="2" size="6" who="Nathan Bryant " />
<person posts="2" size="6" who="&quot;Timothy A. Seufert&quot; " />
<person posts="2" size="6" who="Peter Samuelson " />
<person posts="2" size="6" who="Dan Kegel " />
<person posts="2" size="5" who="Anton Tinchev " />
<person posts="2" size="5" who="Bongani Hlope " />
<person posts="2" size="5" who="Jacques Gelinas " />
<person posts="2" size="5" who="James A Sutherland " />
<person posts="2" size="5" who="Peter Jones " />
<person posts="2" size="5" who="Giacomo Catenazzi " />
<person posts="2" size="5" who="&quot;Axel H. Siebenwirth&quot; " />
<person posts="2" size="5" who="Bill Nottingham " />
<person posts="2" size="5" who="Juan Quintela " />
<person posts="2" size="5" who="Steven Walter " />
<person posts="2" size="5" who="Aaron Blew " />
<person posts="2" size="5" who="Bernd Eckenfels " />
<person posts="2" size="5" who="Evgeniy Polyakov " />
<person posts="2" size="5" who="&quot;Stephen C. Tweedie&quot; " />
<person posts="2" size="5" who="Nathan Myers " />
<person posts="2" size="5" who="&quot;Roeland Th. Jansen&quot; " />
<person posts="2" size="5" who="Thomas Capricelli " />
<person posts="2" size="5" who="Phil Oester " />
<person posts="2" size="5" who="Arjan van de Ven " />
<person posts="2" size="5" who="Amber Palekar " />
<person posts="2" size="4" who="Thomas Molina " />
<person posts="2" size="4" who="Alan Cox " />
<person posts="2" size="4" who="Stevie O " />
<person posts="2" size="4" who="Israel Fernandez Cabrera " />
<person posts="2" size="4" who="Sipos Ferenc " />
<person posts="1" size="74" who="Francois Romieu " />
<person posts="1" size="64" who="" />
<person posts="1" size="49" who="Krzysztof Halasa " />
<person posts="1" size="32" who="Dieter =?iso-8859-1?q?N=FCtzel?= " />
<person posts="1" size="29" who="Bradley " />
<person posts="1" size="24" who="Denis Oliver Kropp " />
<person posts="1" size="22" who="Thomas Cataldo " />
<person posts="1" size="21" who="" />
<person posts="1" size="19" who="dan kelley " />
<person posts="1" size="18" who="" />
<person posts="1" size="18" who="Uwe Teichmann " />
<person posts="1" size="17" who="Jason Papadopoulos " />
<person posts="1" size="14" who="=?iso-8859-2?Q?Martin_MOKREJ=A9?= " />
<person posts="1" size="14" who="Shirish Kalele " />
<person posts="1" size="14" who="" />
<person posts="1" size="12" who="Stephen Clark " />
<person posts="1" size="12" who="&quot;Timothy D. Witham&quot; " />
<person posts="1" size="12" who="farmer dude " />
<person posts="1" size="11" who="Brendan Burns " />
<person posts="1" size="9" who="Sebastian Wenleder " />
<person posts="1" size="9" who="Henrik Hovi " />
<person posts="1" size="8" who="James Bottomley " />
<person posts="1" size="8" who="&quot;Peter J. Braam&quot; " />
<person posts="1" size="8" who="&quot;Michael Zhu&quot; " />
<person posts="1" size="7" who="&quot;Stolle, Martin (KIV)&quot; " />
<person posts="1" size="7" who="Szekeres Bela " />
<person posts="1" size="7" who="Chris Rankin " />
<person posts="1" size="6" who="Rainer Keller " />
<person posts="1" size="6" who="" />
<person posts="1" size="6" who="Borsenkow Andrej " />
<person posts="1" size="6" who="Noah Romer " />
<person posts="1" size="6" who="&quot;Weiping He&quot; " />
<person posts="1" size="6" who="Luca Montecchiani " />
<person posts="1" size="6" who="Andy Jeffries " />
<person posts="1" size="5" who="&quot;Shaf [Mobile]&quot; " />
<person posts="1" size="5" who="John Weber " />
<person posts="1" size="5" who="David Mosberger " />
<person posts="1" size="5" who="&quot;Rune Petersen&quot; " />
<person posts="1" size="5" who="&quot;Michael H. Warfield&quot; " />
<person posts="1" size="5" who="&quot;Editors at MotionControl.com&quot; " />
<person posts="1" size="5" who="Pierre Rousselet " />
<person posts="1" size="5" who="Paul Mackerras " />
<person posts="1" size="5" who="Stephen Kitchener " />
<person posts="1" size="5" who="&quot;Adam McKenna&quot; " />
<person posts="1" size="5" who="Bjorn Wesen " />
<person posts="1" size="5" who="Andreas Steinmetz " />
<person posts="1" size="5" who="&quot;BALBIR SINGH&quot; " />
<person posts="1" size="4" who="Daniel Gryniewicz " />
<person posts="1" size="4" who="&quot;Randal, Phil&quot; " />
<person posts="1" size="4" who="Vladimir Dergachev " />
<person posts="1" size="4" who="root " />
<person posts="1" size="4" who="Willy Tarreau " />
<person posts="1" size="4" who="Jorge Nerin " />
<person posts="1" size="4" who="Nicolas Aspert " />
<person posts="1" size="4" who="Carl Ritson " />
<person posts="1" size="4" who="Mike Touloumtzis " />
<person posts="1" size="4" who="James Cleverdon " />
<person posts="1" size="4" who="&quot;Leech, Christopher&quot; " />
<person posts="1" size="4" who="Ion Badulescu " />
<person posts="1" size="4" who="Jens Gecius " />
<person posts="1" size="4" who="&quot;B. Wehrle&quot; " />
<person posts="1" size="4" who="Bob Glamm " />
<person posts="1" size="4" who="Ian Morgan " />
<person posts="1" size="4" who="&quot;Ian S. Nelson&quot; " />
<person posts="1" size="4" who="Walter Hofmann " />
<person posts="1" size="4" who="Julian Anastasov " />
<person posts="1" size="4" who="Christer Weinigel " />
<person posts="1" size="4" who="&quot;Eshwar D - CTD, Chennai.&quot; " />
<person posts="1" size="4" who="Fernando Jimenez " />
<person posts="1" size="4" who="FD Cami " />
<person posts="1" size="4" who="elim " />
<person posts="1" size="4" who="&quot;ServeRAID For Linux&quot; " />
<person posts="1" size="4" who="Werner Puschitz " />
<person posts="1" size="4" who="Nathan " />
<person posts="1" size="4" who="Igor Briski " />
<person posts="1" size="4" who="Dima Brodsky " />
<person posts="1" size="4" who=" (Rogier Wolff)" />
<person posts="1" size="4" who="" />
<person posts="1" size="4" who="Dave Anderson " />
<person posts="1" size="4" who="CJ " />
<person posts="1" size="4" who="&quot;Eric S. Raymond&quot; " />
<person posts="1" size="4" who="David Relson " />
<person posts="1" size="3" who="Roman Zippel " />
<person posts="1" size="3" who="Giacomo Catenazzi " />
<person posts="1" size="3" who="" />
<person posts="1" size="3" who="Michael Dunsky " />
<person posts="1" size="3" who="Benjamin Herrenschmidt " />
<person posts="1" size="3" who="Taco IJsselmuiden " />
<person posts="1" size="3" who="&quot;Jani Forssell&quot; " />
<person posts="1" size="3" who=" (Henrique de Moraes Holschuh)" />
<person posts="1" size="3" who="Charles Cazabon " />
<person posts="1" size="3" who="Tommi Kyntola " />
<person posts="1" size="3" who="Jauder Ho " />
<person posts="1" size="3" who="John Fremlin " />
<person posts="1" size="3" who="Glenn Geers " />
<person posts="1" size="3" who="Nick Craig-Wood " />
<person posts="1" size="3" who="Shawn Ramsey " />
<person posts="1" size="3" who="John Alvord " />
<person posts="1" size="3" who="Nathan Russell " />
<person posts="1" size="3" who="Its Squash " />
<person posts="1" size="3" who="Stefan Wieseckel " />
<person posts="1" size="3" who="&quot;Mark H. Wood&quot; " />
<person posts="1" size="3" who="Marco Ermini " />
<person posts="1" size="3" who="Nicholas Harring " />
<person posts="1" size="3" who="Olaf Dietsche " />
<person posts="1" size="3" who="Joseph Mathewson " />
<person posts="1" size="3" who="John Levon " />
<person posts="1" size="3" who="Gerrit Huizenga " />
<person posts="1" size="3" who="&quot;Simon Turvey&quot; " />
<person posts="1" size="3" who="jon svendsen " />
<person posts="1" size="3" who="Nicholas Petreley " />
<person posts="1" size="3" who="Stewart Smith " />
<person posts="1" size="3" who="&quot;Trever L. Adams&quot; " />
<person posts="1" size="3" who="Dan Chen " />
<person posts="1" size="3" who="Pau Aliagas " />
<person posts="1" size="3" who=" (Miklos Szeredi)" />
<person posts="1" size="3" who="Ivan Kokshaysky " />
<person posts="1" size="3" who="CaT " />
<person posts="1" size="3" who="&quot;David A. Frantz&quot; " />
<person posts="1" size="3" who="&quot;Alex Scheele&quot; " />
<person posts="1" size="3" who="&quot;Martin J. Bligh&quot; " />
<person posts="1" size="3" who="Oliver Paukstadt " />
<person posts="1" size="3" who="Joachim Steiger " />
<person posts="1" size="3" who="Martin Schewe " />
<person posts="1" size="3" who="Steve Lord " />
<person posts="1" size="3" who="Zhu Ying Jie " />
<person posts="1" size="3" who="Mike Galbraith " />
<person posts="1" size="3" who="skidley " />
<person posts="1" size="3" who="Hartmut Holz " />
<person posts="1" size="3" who="&quot;Anthony DeRobertis&quot; " />
<person posts="1" size="3" who=" (Christer Weinigel)" />
<person posts="1" size="3" who="Shaya Potter " />
<person posts="1" size="3" who="Phil Howard " />
<person posts="1" size="3" who="" />
<person posts="1" size="3" who="Dimitrie Paun " />
<person posts="1" size="3" who="Joel Jaeggli " />
<person posts="1" size="3" who="Marc Schiffbauer " />
<person posts="1" size="3" who="Sebastian Heidl " />
<person posts="1" size="3" who="Roger Larsson " />
<person posts="1" size="3" who="Ion Badulescu " />
<person posts="1" size="3" who=" (Zygo Blaxell)" />
<person posts="1" size="3" who="Sebastian Zimmermann " />
<person posts="1" size="3" who="&quot;Chandrasekhar&quot; " />
<person posts="1" size="3" who="Thomas Hood " />
<person posts="1" size="3" who="Martin Rode " />
<person posts="1" size="3" who="Marius Gedminas " />
<person posts="1" size="3" who="Markus Walser " />
<person posts="1" size="3" who="&quot;Steve Best&quot; " />
<person posts="1" size="3" who="Olaf =?iso-8859-2?Q?Fr=B1czyk?= " />
<person posts="1" size="3" who="&quot;Marcel J.E. Mol&quot; " />
<person posts="1" size="3" who="Aaron T Porter " />
<person posts="1" size="3" who="&quot;Gabor Z. Papp&quot; " />
<person posts="1" size="3" who="Eric Sandeen " />
<person posts="1" size="3" who="Andreas Jaeger " />
<person posts="1" size="3" who="Ian Molton " />
<person posts="1" size="3" who="Mike Harrold " />
<person posts="1" size="3" who="Igor Briski " />
<person posts="1" size="3" who="Edesio Costa e Silva " />
<person posts="1" size="3" who="Edesio Costa e Silva " />
<person posts="1" size="3" who="Mike " />
<person posts="1" size="3" who="peter " />
<person posts="1" size="3" who="Chris Ricker " />
<person posts="1" size="3" who="&quot;H . J . Lu&quot; " />
<person posts="1" size="3" who="&quot;Kevin Krieser&quot; " />
<person posts="1" size="3" who="Scott McDermott " />
<person posts="1" size="3" who="&quot;Jeffrey H. Ingber&quot; " />
<person posts="1" size="3" who="" />
<person posts="1" size="3" who="&quot;Mr. Shannon Aldinger&quot; " />
<person posts="1" size="3" who="Eyal Lebedinsky " />
<person posts="1" size="3" who="Roger Larsson " />
<person posts="1" size="3" who="Jeff Mcadams " />
<person posts="1" size="2" who="Ben Collins " />
<person posts="1" size="2" who="Chris Friesen " />
<person posts="1" size="2" who="Nils Juergens " />
<person posts="1" size="2" who="Z-editor Greetings " />
<person posts="1" size="2" who="=?iso-8859-1?q?szonyi=20calin?= " />
<person posts="1" size="2" who="Jason Gunthorpe " />
<person posts="1" size="2" who="&quot;Per Jessen&quot; " />
<person posts="1" size="2" who="" />
<person posts="1" size="2" who="Randolph Bentson " />
<person posts="1" size="2" who="&quot;Stepan Hluchan&quot; " />
<person posts="1" size="2" who="&quot;Partha Narayanan&quot; " />
<person posts="1" size="2" who="Ralf Baechle " />
<person posts="1" size="2" who="petter wahlman " />
<person posts="1" size="2" who="Lars Brinkhoff " />
<person posts="1" size="2" who="Tom Eastep " />
<person posts="1" size="2" who="Eric Windisch " />
<person posts="1" size="2" who="Bruce Blinn " />
<person posts="1" size="2" who="Athanasius " />
<person posts="1" size="2" who="Thomas Dodd " />
<person posts="1" size="2" who="bert hubert " />
<person posts="1" size="2" who="Jamie Lokier " />
<person posts="1" size="2" who=" (Nick Holloway)" />
<person posts="1" size="2" who="Allan Sandfeld " />
<person posts="1" size="2" who="Terje Eggestad " />
<person posts="1" size="2" who="=?gb2312?q?hanhbkernel?= " />
<person posts="1" size="2" who="Neil Booth " />
<person posts="1" size="2" who="Patrick O'Rourke " />
<person posts="1" size="2" who="David C P Gray " />
<person posts="1" size="2" who="Peter Makholm " />
<person posts="1" size="2" who="Paul Duncan " />
<person posts="1" size="2" who="David Rees " />
<person posts="1" size="2" who="Kilobug " />
<person posts="1" size="2" who="Dan Hopper " />
<person posts="1" size="2" who="Mark J Roberts " />
<person posts="1" size="2" who=" (Jonathan Corbet)" />
<person posts="1" size="2" who="David Balazic " />
<person posts="1" size="2" who="&quot;Phillip O'Donnell&quot; " />
<person posts="1" size="2" who="walter " />
<person posts="1" size="2" who="Dave Zarzycki " />
<person posts="1" size="2" who="Simon Richter " />
<person posts="1" size="2" who="Ishan Oshadi Jayawardena " />
<person posts="1" size="2" who="&quot;Bradley D. LaRonde&quot; " />
<person posts="1" size="2" who="Matthias Kilian " />
<person posts="1" size="2" who="Acrimon Beet " />
<person posts="1" size="2" who="Marcin Tustin " />
<person posts="1" size="2" who="Carl Scarfoglio " />
<person posts="1" size="2" who="Ken Moffat " />
<person posts="1" size="2" who="Thierry Vignaud " />
<person posts="1" size="2" who="" />
<person posts="1" size="2" who="Joe Golio " />
<person posts="1" size="2" who="Alex Buell " />
<person posts="1" size="2" who="" />
<person posts="1" size="2" who="James Morris " />
<person posts="1" size="2" who="Guillaume Morin " />
<person posts="1" size="2" who="&quot;Rudmer van Dijk&quot; " />
<person posts="1" size="2" who="" />
<person posts="1" size="2" who="Todor Todorov " />
<person posts="1" size="2" who="Edgar Toernig " />
<person posts="1" size="2" who="Joe " />
<person posts="1" size="2" who="Guest section DW " />
<person posts="1" size="2" who="" />
<person posts="1" size="2" who="&quot;Eyal Sohya&quot; " />
<person posts="1" size="2" who="&quot;Torrey Hoffman&quot; " />
<person posts="1" size="2" who="Donnie Roberts " />
<person posts="1" size="2" who="Georgi Chorbadzhiyski " />
<person posts="1" size="2" who="&quot;SATHISH.J&quot; " />
<person posts="1" size="2" who="Jari Ruusu " />
<person posts="1" size="2" who=" (Greg Hennessy)" />
<person posts="1" size="2" who="Giuliano Pochini " />
<person posts="1" size="2" who="&quot;kumar M&quot; " />
<person posts="1" size="2" who="Pavel Roskin " />
<person posts="1" size="2" who="Matt " />
<person posts="1" size="2" who="Michael Klose " />
<person posts="1" size="2" who="Adam Schrotenboer " />
<person posts="1" size="2" who="Sebastian Roth " />
<person posts="1" size="2" who="Alex Riesen " />
<person posts="1" size="2" who="dean gaudet " />
<person posts="1" size="2" who="slLG " />
<person posts="1" size="2" who="&quot;Justin T. Gibbs&quot; " />
<person posts="1" size="2" who="David Chow " />
<person posts="1" size="2" who="Friedrich Lobenstock " />
<person posts="1" size="2" who="&quot;Georg Nikodym&quot; " />
<person posts="1" size="2" who="Senhua Tao " />
<person posts="1" size="2" who="&quot;Sourav&quot; " />
<person posts="1" size="2" who="Uros Bizjak " />
<person posts="1" size="2" who="Ibrahim El-Shafei " />
<person posts="1" size="2" who="Mark D'voo " />
<person posts="1" size="2" who="Kousalya K " />
<person posts="1" size="2" who="Samir Saidani " />
<person posts="1" size="2" who="David Jez " />
<person posts="1" size="2" who="=?iso-8859-1?B?RnLpZOlyaWMgTC4gVy4=?= Meunier " />
<person posts="1" size="2" who="Steve Wright " />
<person posts="1" size="2" who="Jani Monoses " />
<person posts="1" size="2" who="" />
<person posts="1" size="2" who="reddog83  (by way of reddog83" />
<person posts="1" size="2" who="sebastien geffroy " />
<person posts="1" size="2" who="Matt Reuther " />
<person posts="1" size="2" who="&quot;Eric S. Johnson&quot; " />
<person posts="1" size="2" who="Mike Dresser " />
<person posts="1" size="2" who="vda " />
<person posts="1" size="2" who="Balazs Javor " />
<person posts="1" size="2" who="Serge Manigault " />
<person posts="1" size="2" who=" (Nin Guem)" />
<person posts="1" size="2" who="Jeff Dike " />
<person posts="1" size="2" who="=?iso-8859-1?q?adrian=20kok?= " />
<person posts="1" size="2" who="Justin Piszcz " />
<person posts="1" size="2" who="Rob Radez " />
<person posts="1" size="2" who="Philippe Trottier " />

</stats>

<section
  title="Reiserfs Problem On 2.4.17 Sparc64 Systems"
  subject="reiserfs does not work with linux 2.4.17 on sparc64 CPUs"
  archive="http://www.uwsg.indiana.edu/hypermail/linux/kernel/0112.3/0417.html"
  posts="13"
  startdate="27 Dec 2001 07:23:32 -0800"
  enddate="03 Jan 2002 03:05:11 -0800"
>
<topic>Debugging</topic>
<topic>FS: ReiserFS</topic>

<mention>Nikita Danilov</mention>
<mention>Luigi Genoni</mention>

<p>Luigi Genoni reported that using 2.4.17 with Reiserfs on a Sparc64 would
cause an oops at boot-time, when the system tried to mount his disks. On x86
machines, everything worked fine. Nikita Danilov asked him to reboot into
single-user mode, mount the partition manually, and send the decoded oops
to the list. Luigi did so, and David S. Miller commented, <quote who="David
S. Miller">Looks like some change in reiserfs in 2.4.17 has caused it to
start doing {set,clear,change}_bit() operations on pointers which are not
"long" aligned.</quote> Alexander Zarochentcev posted a patch, and Alan
Cox remarked elsewhere, <quote who="Alan Cox">The fix is definitely right -
without it you'll scribble on other memory on any 64bit BE platform.</quote>
Luigi also confirmed Alexander's fix, and promised to do some stability
testing. End Of Thread (tm).</p>

</section>

<section
  title="Status Of Framebuffer In 2.4 And 2.5"
  subject="Framebuffer, mmap(), hanging in D state, root FS unmount failure."
  archive="http://www.uwsg.indiana.edu/hypermail/linux/kernel/0112.3/0505.html"
  posts="38"
  startdate="27 Dec 2001 11:50:37 -0800"
  enddate="07 Jan 2002 03:11:26 -0800"
>
<topic>Debugging</topic>
<topic>FS</topic>
<topic>Framebuffer</topic>
<topic>Small Systems</topic>
<topic>Virtual Memory</topic>

<p>Mark J Roberts posted a very short test program and reported, <quote
who="Mark J Roberts">When I run this on my 2.4.17rc2aa2 kernel with a
Voodoo3000 framebuffer, the process hangs forever in D state. ps and top
will then hang the same way when they read the /proc/pid files for the
hung process. And my root filesystem won't unmount.  It only happens when
PROT_READ|PROT_WRITE is specified - when I use only PROT_WRITE, the program
segfaults like you'd expect.... but once the PROT_READ|PROT_WRITE version
has hung, PROT_WRITE-only versions will also hang.</quote> Andrew Morton
diagnosed, <quote who="Andrew Morton">the framebuffer driver is failing to mark
the mmapped vma as VM_IO, so the kernel is trying to dump the framebuffer
device to the core file, takes a recursive fault and deadlocks.</quote>
He said the simplest fix was to mark the framebuffer as not dumpable for
x86 machines, but added, <quote who="Andrew Morton">However I don't see why
_any_ architecture wants framebuffer contents to be included in core files.
It sounds risky.</quote> At this point Timothy Covell lamented, <quote
who="Timothy Covell">When X11 locks up, I can still kill it and my box lives.
When framebuffers crash, their is no recovery save rebooting.  Back in 1995 I
thought that linux VTs and X11 implemenation blew Solaris out of the water,
and now we want throw away our progress?  I'm still astounded by the whole
"oooh I can see  a penquin while I boot-up" thing?  Granted, frame buffers
have usage in embedded systems, but do they really have to be so deeply
integrated??</quote> Linus Torvalds replied:</p>

<quote who="Linus Torvalds">

<p>They aren't.</p>

<p>No sane person should use frame buffers if they have the choice.</p>

<p>Like your mama told you: "Just say no". Use text-mode and X11, and be
happy.</p>

<p>Some people don't have the choice, of course.</p>

</quote>

<p>James Simmons replied, <quote who="James Simmons">Try pretty much every
platform except ix86. Plus now that M$ doesn't support DOS you are starting
to see graphics card manufactures dropping VGA support. Even BIOS setup
interfaces use the VESA graphics interface these days. So VGA text days are
numbered. I agree the framebuffer/console layer really needs to reworked to
do the right things.</quote> He added, <quote who="James Simmons">I plan to
do that for 2.5.X.</quote></p>

</section>

<section
  title="Support For Large FAT Partitions"
  subject="kernel patch support large fat partitions"
  archive="http://www.uwsg.indiana.edu/hypermail/linux/kernel/0201.0/0799.html"
  posts="8"
  startdate="03 Jan 2002 15:42:20 -0800"
  enddate="05 Jan 2002 12:40:51 -0800"
>
<topic>Big File Support</topic>
<topic>FS: FAT32</topic>
<topic>FS: NTFS</topic>
<topic>Legacy Support</topic>
<topic>Microsoft</topic>

<p>Vijay Kumar posted a patch and said:</p>

<quote who="Vijay Kumar">

<p>This is regarding a change I had to make to the kernel 2.2.17-14 to support
really large drives. In our project we deal with huge drives, sometimes drives
larger than 128GB. The file system is FAT32 and only one partition is create
on any drive. During our testing we realized that linux fat implementation
doesn't support partitions larger than 128GB(actually 64GB because of a bug
in fat implementation).</p>

<p>This limitation is imposed by the data structures used by the linux fat
implementation to read/write directory entries. A 'long' data type is used
to access directory entries on the disk, of which only 28 bits are used to
identify the sector that contains the directory entry and the rest 4 bits
are used to specify offset of the directory entry inside the sector. Using
28 bits to identify a sector means we cannot access sectors beyond 128GB
(2^28*512), thus limiting us from creating partitions larger than 128GB on
large disk drives.</p>

<p>I have made changes to fat, vfat and msdos file system implementations
in the kernel to use larger data types, thus allowing us to create larger
partitions. As per the GPL I would like to make the patch available to
everyone and also in case somebody has run into the same problem(who cares
about fat in the linux world). The patch has been fairly well tested only
on our systems(p3, 700MHz with FC). I truly appreciate if you &amp; anybody
in the kernel mailing list have any feedback about the changes.</p>

<p>The patch is applicable to only 2.2.17-14 kernel and may require changes to
use with other kernel versions. As far as I know none of the kernel versions
provide any fix for this problem.</p>

</quote>

<p>Someone pointed out that FAT stored 28-bit cluster numbers, and that
altering that size would break FAT compatibility. The poster suggested
increasing cluster size instead. Vijay replied, <quote who="Vijay Kumar">Using
28bit cluster numbers and 65536 cluster size I could go upto 16TB which is
lot more than what I wanted. So right now I have no problem with the on-disk
format of a fat partition. Nevertheless with hard drives prices going down
dramatically it may not be too long before we hit the limit.</quote> H. Peter
Anvin commented:</p>

<quote who="H. Peter Anvin">

<p>That's Microsoft's problem -- that's a fundamental limit of the format
they defined.  The fact that they defined it in the first place is part of
the problem (the only way you can make a FAT filesystem work *well* is by
loading the entire FAT into memory ahead of time, and "FAT32" breaks that),
instead of creating a more sensible replacement.</p>

<p>(FWIW, the reason they used to justify FAT32 was "it would be too much
work to make DOS handle NTFS", as if those were the only options...)</p>

</quote>

</section>

<section
  title="New Scalable Scheduler"
  subject="[announce] [patch] ultra-scalable O(1) SMP and UP scheduler"
  archive="http://www.uwsg.indiana.edu/hypermail/linux/kernel/0201.0/0810.html"
  posts="67"
  startdate="03 Jan 2002 18:19:10 -0800"
  enddate="07 Jan 2002 11:53:33 -0800"
>
<topic>Big O Notation</topic>
<topic>Efficiency</topic>
<topic>Networking</topic>
<topic>Real-Time</topic>
<topic>SMP</topic>
<topic>Scheduler</topic>

<p>Ingo Molnar announced:</p>

<quote who="Ingo Molnar">

<p>now that new-year's parties are over things are getting boring again. For
those who want to see and perhaps even try something more complex, i'm
announcing this patch that is a pretty radical rewrite of the Linux
scheduler for 2.5.2-pre6:</p>

<p><a href="http://redhat.com/~mingo/O(1)-scheduler/sched-O1-2.5.2-A0.patch">http://redhat.com/~mingo/O(1)-scheduler/sched-O1-2.5.2-A0.patch</a></p>

<p>for 2.4.17:</p>

<p><a href="http://redhat.com/~mingo/O(1)-scheduler/sched-O1-2.4.17-A0.patch">http://redhat.com/~mingo/O(1)-scheduler/sched-O1-2.4.17-A0.patch</a></p>

<p><b>Goal</b></p>

<p>The main goal of the new scheduler is to keep all the good things we know
and love about the current Linux scheduler:</p>

<p>

<ul>

<li>good interactive performance even during high load: if the user
   types or clicks then the system must react instantly and must execute
   the user tasks smoothly, even during considerable background load.</li>

<li>good scheduling/wakeup performance with 1-2 runnable processes.</li>

<li>fairness: no process should stay without any timeslice for any
   unreasonable amount of time. No process should get an unjustly high
   amount of CPU time.</li>

<li>priorities: less important tasks can be started with lower priority,
   more important tasks with higher priority.</li>

<li>SMP efficiency: no CPU should stay idle if there is work to do.</li>

<li>SMP affinity: processes which run on one CPU should stay affine to
   that CPU. Processes should not bounce between CPUs too frequently.</li>

<li>plus additional scheduler features: RT scheduling, CPU binding.</li>

</ul>

</p>

<p>and the goal is also to add a few new things:</p>

<p>

<ul>

<li>fully O(1) scheduling. Are you tired of the recalculation loop
   blowing the L1 cache away every now and then? Do you think the goodness
   loop is taking a bit too long to finish if there are lots of runnable
   processes? This new scheduler takes no prisoners: wakeup(), schedule(),
   the timer interrupt are all O(1) algorithms. There is no recalculation
   loop. There is no goodness loop either.</li>

<li>'perfect' SMP scalability. With the new scheduler there is no 'big'
   runqueue_lock anymore - it's all per-CPU runqueues and locks - two
   tasks on two separate CPUs can wake up, schedule and context-switch
   completely in parallel, without any interlocking. All
   scheduling-relevant data is structured for maximum scalability. (see
   the benchmark section later on.)</li>

<li>

<p>better SMP affinity. The old scheduler has a particular weakness that
   causes the random bouncing of tasks between CPUs if/when higher
   priority/interactive tasks, this was observed and reported by many
   people. The reason is that the timeslice recalculation loop first needs
   every currently running task to consume its timeslice. But when this
   happens on eg. an 8-way system, then this property starves an
   increasing number of CPUs from executing any process. Once the last
   task that has a timeslice left has finished using up that timeslice,
   the recalculation loop is triggered and other CPUs can start executing
   tasks again - after having idled around for a number of timer ticks.
   The more CPUs, the worse this effect.</p>

<p>   Furthermore, this same effect causes the bouncing effect as well:
   whenever there is such a 'timeslice squeeze' of the global runqueue,
   idle processors start executing tasks which are not affine to that CPU.
   (because the affine tasks have finished off their timeslices already.)</p>

<p>   The new scheduler solves this problem by distributing timeslices on a
   per-CPU basis, without having any global synchronization or
   recalculation.</p>

</li>

<li>batch scheduling. A significant proportion of computing-intensive tasks
   benefit from batch-scheduling, where timeslices are long and processes
   are roundrobin scheduled. The new scheduler does such batch-scheduling
   of the lowest priority tasks - so nice +19 jobs will get
   'batch-scheduled' automatically. With this scheduler, nice +19 jobs are
   in essence SCHED_IDLE, from an interactiveness point of view.</li>

<li>handle extreme loads more smoothly, without breakdown and scheduling
   storms.</li>

<li>O(1) RT scheduling. For those RT folks who are paranoid about the
   O(nr_running) property of the goodness loop and the recalculation loop.</li>

<li>run fork()ed children before the parent. Andrea has pointed out the
   advantages of this a few months ago, but patches for this feature
   do not work with the old scheduler as well as they should,
   because idle processes often steal the new child before the fork()ing
   CPU gets to execute it.</li>

</ul>

</p>

<p><b>Design</b></p>

<p>(those who find the following design issues boring can skip to the next,
'Benchmarks' section.)</p>

<p>the core of the new scheduler are the following mechanizms:</p>

<p>

<ul>

<li>*two*, priority-ordered 'priority arrays' per CPU. There is an 'active'
   array and an 'expired' array. The active array contains all tasks that
   are affine to this CPU and have timeslices left. The expired array
   contains all tasks which have used up their timeslices - but this array
   is kept sorted as well. The active and expired array is not accessed
   directly, it's accessed through two pointers in the per-CPU runqueue
   structure. If all active tasks are used up then we 'switch' the two
   pointers and from now on the ready-to-go (former-) expired array is the
   active array - and the empty active array serves as the new collector
   for expired tasks.</li>

<li>there is a 64-bit bitmap cache for array indices. Finding the highest
   priority task is thus a matter of two x86 BSFL bit-search instructions.</li>

</ul>

</p>

<p>the split-array solution enables us to have an arbitrary number of active
and expired tasks, and the recalculation of timeslices can be done
immediately when the timeslice expires. Because the arrays are always
access through the pointers in the runqueue, switching the two arrays can
be done very quickly.</p>

<p>this is a hybride priority-list approach coupled with roundrobin
scheduling and the array-switch method of distributing timeslices.</p>

<p>

<ul>

<li>there is a per-task 'load estimator'.</li>

</ul>

</p>

<p>one of the toughest things to get right is good interactive feel during
heavy system load. While playing with various scheduler variants i found
that the best interactive feel is achieved not by 'boosting' interactive
tasks, but by 'punishing' tasks that want to use more CPU time than there
is available. This method is also much easier to do in an O(1) fashion.</p>

<p>to establish the actual 'load' the task contributes to the system, a
complex-looking but pretty accurate method is used: there is a 4-entry
'history' ringbuffer of the task's activities during the last 4 seconds.
This ringbuffer is operated without much overhead. The entries tell the
scheduler a pretty accurate load-history of the task: has it used up more
CPU time or less during the past N seconds. [the size '4' and the interval
of 4x 1 seconds was found by lots of experimentation - this part is
flexible and can be changed in both directions.]</p>

<p>the penalty a task gets for generating more load than the CPU can handle
is a priority decrease - there is a maximum amount to this penalty
relative to their static priority, so even fully CPU-bound tasks will
observe each other's priorities, and will share the CPU accordingly.</p>

<p>I've separated the RT scheduler into a different codebase, while still
keeping some of the scheduling codebase common. This does not look pretty
in certain places such as __sched_tail() or activate_task(), but i dont
think it can be avoided. RT scheduling is different, it uses a global
runqueue (and global spinlock) and it needs global decisions. To make RT
scheduling more instant, i've added a broadcast-reschedule message as
well, to make it absolutely sure that RT tasks of the right priority are
scheduled apropriately, even on SMP systems. The RT-scheduling part is
O(1) as well.</p>

<p>the SMP load-balancer can be extended/switched with additional parallel
computing and cache hierarchy concepts: NUMA scheduling, multi-core CPUs
can be supported easily by changing the load-balancer. Right now it's
tuned for my SMP systems.</p>

<p>i skipped the prev->mm == next->mm advantage - no workload i know of shows
any sensitivity to this. It can be added back by sacrificing O(1)
schedule() [the current and one-lower priority list can be searched for a
that->mm == current->mm condition], but costs a fair number of cycles
during a number of important workloads, so i wanted to avoid this as much
as possible.</p>

<p>

<ul>

<li>the SMP idle-task startup code was still racy and the new scheduler
triggered this. So i streamlined the idle-setup code a bit. We do not call
into schedule() before all processors have started up fully and all idle
threads are in place.</li>

<li>the patch also cleans up a number of aspects of sched.c - moves code
into other areas of the kernel where it's appropriate, and simplifies
certain code paths and data constructs. As a result, the new scheduler's
code is smaller than the old one.</li>

</ul>

</p>

<p>(i'm sure there are other details i forgot to explain. I've commented some
of the more important code paths and data constructs. If you think some
aspect of this design is faulty or misses some important issue then please
let me know.)</p>

<p>(the current code is by no means perfect, my main goal right now, besides
fixing bugs is to make the code cleaner. Any suggestions for
simplifications are welcome.)</p>

<p><b>Benchmarks</b></p>

<p>i've performed two major groups of benchmarks: first i've verified the
interactive performance (interactive 'feel') of the new scheduler on UP
and SMP systems as well. While this is a pretty subjective thing, i found
that the new scheduler is at least as good as the old one in all areas,
and in a number of high load workloads it feels visibly smoother. I've
tried a number of workloads, such as make -j background compilation or
1000 background processes. Interactive performance can also be verified
via tracing both schedulers, and i've done that and found no areas of
missed wakeups or imperfect SMP scheduling latencies in either of the two
schedulers.</p>

<p>the other group of benchmarks was the actual performance of the scheduler.
I picked the following ones (some were intentionally picked to load the
scheduler, others were picked to make the benchmark spectrum more
complete):</p>

<p>

<ul>

<li>compilation benchmarks</li>

<li>thr chat-server workload simulator written by Bill Hartner</li>

<li>the usual components from the lmbench suite</li>

<li>a heavily sched_yield()-ing testcode to measure yield() performance.</li>

</ul>

</p>

<p> [ i can test any other workload too that anyone would find interesting.
]</p>

<p>i ran these benchmarks on a 1-CPU box using a UP kernel, a 2-CPU and a
8-CPU box as well, using the SMP kernel.</p>

<p>The chat-server simulator creates a number of processes that are connected
to each other via TCP sockets, the processes send messages to each other
randomly, in a way that simulates actual chat server designs and
workloads.</p>

<p>3 successive runs of './chat_c 127.0.0.1 10 1000' produce the following
message throughput:</p>

<p>vanilla-2.5.2-pre6:</p>

<p> Average throughput : 110619 messages per second<br />
 Average throughput : 107813 messages per second<br />
 Average throughput : 120558 messages per second</p>

<p>O(1)-schedule-2.5.2-pre6:</p>

<p> Average throughput : 131250 messages per second<br />
 Average throughput : 116333 messages per second<br />
 Average throughput : 179686 messages per second</p>

<p>this is a rougly 20% improvement.</p>

<p>To get all benefits of the new scheduler, i ran it reniced, which in
essence triggers round-robin batch scheduling for the chat server tasks:</p>

<p>3 successive runs of 'nice -n 19 ./chat_c 127.0.0.1 10 1000' produce the
following throughput:</p>

<p>vanilla-2.5.2-pre6:</p>

<p> Average throughput : 77719 messages per second<br />
 Average throughput : 83460 messages per second<br />
 Average throughput : 90029 messages per second</p>

<p>O(1)-schedule-2.5.2-pre6:</p>

<p> Average throughput : 609942 messages per second<br />
 Average throughput : 610221 messages per second<br />
 Average throughput : 609570 messages per second</p>

<p>throughput improved by more than 600%. The UP and 2-way SMP tests show a
similar edge for the new scheduler. Furthermore, during these chatserver
tests, the old scheduler doesnt handle interactive tasks very well, and
the system is very jerky. (which is a side-effect of the overscheduling
situation the scheduler gets into.)</p>

<p>the 1-CPU UP numbers are interesting as well:</p>

<p>vanilla-2.5.2-pre6:</p>

<p> ./chat_c 127.0.0.1 10 100<br />
 Average throughput : 102885 messages per second<br />
 Average throughput : 95319 messages per second<br />
 Average throughput : 99076 messages per second</p>

<p> nice -n 19 ./chat_c 127.0.0.1 10 1000<br />
 Average throughput : 161205 messages per second<br />
 Average throughput : 151785 messages per second<br />
 Average throughput : 152951 messages per second</p>

<p>O(1)-schedule-2.5.2-pre6:</p>

<p> ./chat_c 127.0.0.1 10 100 # NEW<br />
 Average throughput : 128865 messages per second<br />
 Average throughput : 115240 messages per second<br />
 Average throughput : 99034 messages per second</p>

<p> nice -n 19 ./chat_c 127.0.0.1 10 1000 # NEW<br />
 Average throughput : 163112 messages per second<br />
 Average throughput : 163012 messages per second<br />
 Average throughput : 163652 messages per second</p>

<p>this shows that while on UP we dont have the scalability improvements, the
O(1) scheduler is still slightly ahead.</p>

<p>another benchmark measures sched_yield() performance. (which the pthreads
code relies on pretty heavily.)</p>

<p>on a 2-way system, starting 4 instances of ./loop_yield gives the
following context-switch throughput:</p>

<p>vanilla-2.5.2-pre6</p>

<pre>  # vmstat 5 | cut -c57-
     system         cpu
   in    cs  us  sy  id
  102 241247   6  94   0
  101 240977   5  95   0
  101 241051   6  94   0
  101 241176   7  93   0</pre>

<p>O(1)-schedule-2.5.2-pre6</p>

<pre>  # vmstat 5 | cut -c57-
     system         cpu
   in     cs  us  sy  id
  101 977530  31  69   0
  101 977478  28  72   0
  101 977538  27  73   0</pre>

<p>the O(1) scheduler is 300% faster, and we do nearly 1 million context
switches per second!</p>

<p>this test is even more interesting on the 8-way system, running 16
instances of loop_yield:</p>

<p>vanilla-2.5.2-pre6:</p>

<pre>   vmstat 5 | cut -c57-
      system         cpu
    in     cs  us  sy  id
   106 108498   2  98   0
   101 108333   1  99   0
   102 108437   1  99   0</pre>

<p>100K/sec context switches - the overhead of the global runqueue makes the
scheduler slower than the 2-way box!</p>

<p>O(1)-schedule-2.5.2-pre6:</p>

<pre>    vmstat 5 | cut -c57-
     system         cpu
    in      cs  us  sy  id
   102 6120358  34  66   0
   101 6117063  33  67   0
   101 6117124  34  66   0</pre>

<p>this is more than 6 million context switches per second! (i think this is
a first, no Linux box in existence did so many context switches per second
before.) This is one workload where the per-CPU runqueues and scalability
advantages show up big time.</p>

<p>here are the lat_proc and lat_ctx comparisons (the results quoted here are
the best numbers from a series of tests):</p>

<p>vanilla-2.5.2-pre6:</p>

<p>  ./lat_proc fork<br />
  Process fork+exit: 440.0000 microseconds<br />
  ./lat_proc exec<br />
  Process fork+execve: 491.6364 microseconds<br />
  ./lat_proc shell<br />
  Process fork+/bin/sh -c: 3545.0000 microseconds</p>

<p>O(1)-schedule-2.5.2-pre6:</p>

<p>  ./lat_proc fork<br />
  Process fork+exit: 168.6667 microseconds<br />
  ./lat_proc exec<br />
  Process fork+execve: 279.6500 microseconds<br />
  ./lat_proc shell<br />
  Process fork+/bin/sh -c: 2874.0000 microseconds</p>

<p>the difference is pretty dramatic - it's mostly due to avoiding much of
the COW overhead that comes from fork()+execve(). The fork()+exit()
improvement is mostly due to better CPU affinity - parent and child are
running on the same CPU, while the old scheduler pushes the child to
another, idle CPU, which creates heavy interlocking traffic between the MM
structures.</p>

<p>the compilation benchmarks i ran gave very similar results for both
schedulers. The O(1) scheduler has a small 2% advantage in make -j
benchmarks (not accounting statistical noise - it's hard to produce
reliable compilation benchmarks) - probably due to better SMP affinity
again.</p>

<p><b>Status</b></p>

<p>i've tested the new scheduler under the aforementioned range of systems
and workloads, but it's still experimental code nevertheless. I've
developed it on SMP systems using the 2.5.2-pre kernels, so it has the
most testing there, but i did a fair number of UP and 2.4.17 tests as
well. NOTE! For the 2.5.2-pre6 kernel to be usable you should apply
Andries' latest 2.5.2pre6-kdev_t patch available at:</p>

<p><a href="http://www.kernel.org/pub/linux/kernel/people/aeb/">http://www.kernel.org/pub/linux/kernel/people/aeb/</a></p>

<p>i also tested the RT scheduler for various situations such as
sched_yield()-ing of RT tasks, strace-ing RT tasks and other details, and
it's all working as expected. There might be some rough edges though.</p>

</quote>

<p>A lot of people tried the patch. Some had problems getting it working,
others got it running right away. A lot of people were very impressed at
Ingo's figure of 6,000,000 context switches per second. At one point in
the discussion, Dieter Nitzel asked if the patch might be merged with the
preemption patch. Ingo replied, <quote who="Ingo Molnar">yes, fast preemption
of kernel-mode tasks and the scheduler code are almost orthogonal. So i
agree that to get the best interactive performance we need both.</quote> A
couple posts later, George Anzinger said, <quote who="George Anzinger">The
two patches will are not compatable.  When the time comes we will have
to work out how to make them compatable as they both modify key parts of
sched.c.</quote> Robert Love replied, <quote who="Robert Love">Ingo and
I are working on a merged patchset that works.  Yay.</quote></p>

<p>Elsewhere, Davide Libenzi replied to Ingo's initial post, pointing out
that Ingo had objected to a patch by Davide 4 years earlier, that did what
Ingo's patch went to great lengths to accomplish now: achieve O(1) algorithmic
efficiency. Davide said, <quote who="Davide Libenzi">You said, just in case
you do not remember, that the load average over a single CPU even for high
loaded servers is typically lower than 5.  So why the hell create 13456
queues to achieve an O(1) on the lookup code when 70% of the switch cost is
switch-mm ?  Yes, 70% of the cost of a context switch is switch-mm, and this
measured with a cycle counter. Take a look at this if you do not believe : <a
href="http://www.xmailserver.org/linux-patches/ltcpu.png">http://www.xmailserver.org/linux-patches/ltcpu.png</a>.</quote>
Ingo replied, <quote who="Ingo Molnar">yep, this might have been the
case 4 years ago :) But i'd not be ashamed to change my opinion even
if i had said it just a few months ago.  Today we have things like the
slashdot effect that will break down otherwise healthy and well-sized
systems. People have started working around things by designing servers
that run only a limited number of processes, but the fact is, why should we
restrict application maker's choice of design, especially if they are often
interested in robustness more than in the last bit of performance. There
are a fair number of real-world application servers that start to suffer
under Linux if put under realistic load.</quote> Davide replied, <quote
who="Davide Libenzi">No Ingo the fact that you coded the patch this time
does not really change the workloads, once you've a per-cpu run queue and
lock. The thing that makes big servers to suffer in the common queue plus the
cache coherency traffic due the common lock. Look here for an 8 way system : <a
href="http://www.xmailserver.org/linux-patches/lats8-latsch.png">http://www.xmailserver.org/linux-patches/lats8-latsch.png</a>
In even _high_realistic_ workloads on these servers the scheduler impact is
never more than 5-15% and by simply splitting the queue/lock you get a 30
up to 60 time fold ( see picture ), that makes the scheduler impact to go
down to 0.2-0.3%. Why do you need to overoptimize for a 0.2% ?</quote></p>

<p>At one point Linus Torvalds said, <quote who="Linus Torvalds">I don't
think O(1) matters all that much, but it certainly won't hurt. UNLESS it
causes bad choices to be made. Which we can only guess at right now.</quote>
This satisfied Davide, and a bunch of folks proceeded with an implementation
discussion.</p>

</section>

<section
  title="Multiple Kernel Trees"
  subject="Linux Kernel-2.4.18-nj1"
  archive="http://www.uwsg.indiana.edu/hypermail/linux/kernel/0201.0/1194.html"
  posts="10"
  startdate="04 Jan 2002 22:50:52 -0800"
  enddate="07 Jan 2002 03:07:52 -0800"
>
<topic>Development Philosophy</topic>
<topic>FS: ReiserFS</topic>
<topic>FS: ext3</topic>
<topic>Project Forks</topic>

<p>Nathan Russell posted his own <a
href="http://www.geocities.com/camel_10.geo/linux/patch-2.4.18-nj1.gz">patch-set</a>
against 2.4.18, but Willy Tarreau objected:</p>

<quote who="Willy Tarreau">

<p>Please don't take it bad, I don't want to flame you nor anybody, but I
think that if everyone publicly announces his own tree with his own set of
changes against the main kernel, many users will be lost quickly.</p>

<p>Once, we had "only" 3 main trees for the stable release :</p>

<p>

<ul>

<li>Linus' official kernels</li>

<li>Alan's who did an excellent job at combining a stable core with
experimental drivers</li>

<li>Andrea's kernel which is more oriented towards big servers and very
high loads.</li>

</ul>

</p>

<p>Now that Alan is working on something else, I can easily understand that
people need a branch like the one he maintained, even if the majority of
his work has been merged into the main tree.</p>

<p>But there is now an -mjc tree, an -nj tree, perhaps others I missed,
and many more not announced here (-wt, I remember of Mathias Andree's -ma
for example who may have been the first one to merge ext3 and reiserfs into
a same kernel).  All of them include nearly the same set of fixes that have
not yet got into the official kernel, plus a set of more-or-less stable,
more-or-less interesting features (depending who the targets are). At least,
each one should announce the goal of his kernel, and who it is intended to :
developpers, production users, desktop users, testers, all of them ? With
your announce, nobody even knows if he takes some particular risks using
features from your kernel. Example: I believe that at least Andre Pavenis
still has problems with Doug's i810_audio driver, so this cannot be annouced
simply as a "fix" without a little note.</p>

<p>I sure know it takes a lot of time maintaining a set of patches against
a mainstream kernel, and it even takes more time reading bug reports and
determining what is stable and what isn't. Not to tell about the dozens of
compilations before an announcement (because you compile them, don't you?),
and occasional porting of some fixes to other architectures.</p>

<p>So I really think it would be more productive if people worked around a
smaller set of trees, stopped editing patches by hand again and again to
resolve the same conflicts and tried to be a bit more understandable for
newbies who are a bit lost when they don't know what kernel to try.</p>

<p>Perhaps you could have sent your patches to Mickael Cohen to help him
release an -mjc2 more quickly, like we all did with Alan ? Or perhaps you have
a clear idea in mind about what your kernel tree will be, but in this case,
please elaborate on this a bit more than this simple post, and prepare to cope
with bug reports from people who will trust your tree. This last point may
be the major reason why I chose to keep my kernels for my friends and I...</p>

<p>I hope you didn't take it as an attack, it wasn't really against you,
nor to start a flame war, but just to make people think a bit about something
more constructive.</p>

</quote>

<p>Tom Rini felt that even the current number of trees was too many, saying,
<quote who="Tom Rini">When Alan picked up 2.2.x, there wasn't someone
else doing an -ac'ish 2.2 release as well.  Marcelo is doing 2.4.x now,
and seems to be doing a good job of making sure stable stuff gets in, and
other stuff doesn't.  The only patches that won't make it into Marcelos tree
in the very-near-term (Which is all I'll speculate about) are the preempt
(and lock-break) patches.  Please people, more trees are not always a better
thing when you're all doing the same thing.</quote> Willy replied, <quote
who="Willy Tarreau">Perhaps people who have a solid personal tree would like
to continue this discussion off-list and find an arrangement about a single
test tree. Concerning stable trees, I think that both Marcello's and Andrea's
are rock solid. Othe people may want to use their distributor's.</quote></p>

</section>

<section
  title="Source Tracking"
  subject="Binutils and the Linux kernel source finder"
  archive="http://www.uwsg.indiana.edu/hypermail/linux/kernel/0201.0/1298.html"
  posts="5"
  startdate="05 Jan 2002 10:02:37 -0800"
  enddate="06 Jan 2002 05:09:58 -0800"
>

<p>Dr. David Alan Gilbert said:</p>

<quote who="Dr. David Alan Gilbert">

<p>I am the author of the 'Linux kernel source finder' web page that lists for
each architecture the place to get appropriate Linux kernel patches - see:</p>

<p><a
href="http://www.treblig.org/Linux_kernel_source_finder.html">http://www.treblig.org/Linux_kernel_source_finder.html</a></p>

<p>I wish to extend this to include pointers to the best/latest/most
appropriate binutils for each architecture.  I've put links in for x86,
Alpha and MIPS to H.J.Lu's ftp site, since he tests for those 3 platforms
prior to release.</p>

<p>I'd appreciate recommendations and comments from those using binutils on
Linux for other platforms, with links to ftp, cvs or web pages describing
the solutions for those architectures.</p>

</quote>

</section>

</kc>

