<?xml version="1.0" ?>

<kc>

<title>Kernel Traffic</title>

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

<issue num="76" date="17 Jul 2000 00:00:00 -0800" />

<intro>

<p>For almost the first time, folks emailed me to recommend covering particular
threads, in this case the low-latency discussions. This is <b>very</b>
helpful. If you follow linux-kernel yourself, and see a discussion you think
should be covered in KT, try to tell me about it as soon as you see that
it's valuable. I can't guarantee to cover it, but I can promise to give it a
more thorough reading than I might have otherwise.</p>

</intro>

<stats posts="1202" size="4968" contrib="393" multiples="170" lastweek="140">

<person posts="39" size="141" who="Richard Gooch " />
<person posts="37" size="169" who="Paul Barton-Davis " />
<person posts="34" size="96" who="Alan Cox " />
<person posts="33" size="121" who="Tigran Aivazian " />
<person posts="29" size="108" who="Chris Lattner " />
<person posts="24" size="118" who="Andrew Morton " />
<person posts="23" size="76" who="Pavel Machek " />
<person posts="22" size="88" who="Robert Dinse " />
<person posts="20" size="194" who="&quot;Jeff V. Merkey&quot; " />
<person posts="20" size="84" who="" />
<person posts="19" size="99" who="&quot;Khimenko Victor&quot; " />
<person posts="18" size="94" who="Benno Senoner " />
<person posts="18" size="68" who="&quot;Andi Kleen&quot; " />
<person posts="17" size="115" who="Roger Larsson " />
<person posts="17" size="75" who=" (Larry McVoy)" />
<person posts="17" size="62" who="Keith Owens " />
<person posts="15" size="50" who="Gregory Maxwell " />
<person posts="14" size="55" who="Linus Torvalds " />
<person posts="14" size="49" who="Andre Hedrick " />
<person posts="12" size="53" who="Russell King " />
<person posts="12" size="47" who="Horst von Brand " />
<person posts="11" size="39" who="Tim Waugh " />
<person posts="11" size="37" who="Jamie Lokier " />
<person posts="11" size="35" who="David Woodhouse " />
<person posts="11" size="28" who="Dan Hollis " />
<person posts="10" size="50" who="Oliver Xymoron " />
<person posts="9" size="40" who="&quot;Albert D. Cahalan&quot; " />
<person posts="9" size="34" who=" (Rogier Wolff)" />
<person posts="9" size="33" who="Yoann Vandoorselaere " />
<person posts="9" size="28" who="Bill Huey " />
<person posts="8" size="35" who="&quot;Mike A. Harris&quot; " />
<person posts="8" size="28" who="" />
<person posts="8" size="27" who="Manfred Spraul " />
<person posts="7" size="28" who="&quot;H. Peter Anvin&quot; " />
<person posts="7" size="24" who="Willy Tarreau " />
<person posts="7" size="22" who="Andrea Arcangeli " />
<person posts="6" size="25" who="&quot;Theodore Y. Ts'o&quot; " />
<person posts="6" size="22" who="Michael Meding " />
<person posts="6" size="19" who="Jeff Garzik " />
<person posts="6" size="18" who="&quot;Maciej W. Rozycki&quot; " />
<person posts="6" size="17" who="Jeff Garzik " />
<person posts="6" size="16" who="Igmar Palsenberg " />
<person posts="5" size="23" who="=?iso-8859-1?Q?Jakob_=D8stergaard?= " />
<person posts="5" size="21" who="David Schleef " />
<person posts="5" size="21" who="Olaf Titz " />
<person posts="5" size="16" who="Cort Dougan " />
<person posts="5" size="16" who="Thorsten Kranzkowski " />
<person posts="5" size="16" who="Jens Axboe " />
<person posts="5" size="15" who="Martin Mares " />
<person posts="5" size="15" who="Rusty Russell " />
<person posts="5" size="15" who="Alexander Viro " />
<person posts="5" size="15" who="Ingo Molnar " />
<person posts="5" size="14" who="&quot;David Schwartz&quot; " />
<person posts="4" size="24" who="Erik McKee " />
<person posts="4" size="21" who="&quot;Barry K. Nathan&quot; " />
<person posts="4" size="19" who="Mikael Pettersson " />
<person posts="4" size="17" who="Kurt Garloff " />
<person posts="4" size="17" who="Christoffer Hall-Frederiksen " />
<person posts="4" size="16" who="Artur Skawina " />
<person posts="4" size="16" who="Chris Wedgwood " />
<person posts="4" size="15" who="=?ISO-8859-1?Q?G=E9rard_Roudier?= " />
<person posts="4" size="15" who="Geert Uytterhoeven " />
<person posts="4" size="15" who="Jussi Laako " />
<person posts="4" size="14" who="&quot;Petr Vandrovec&quot; " />
<person posts="4" size="14" who="David Ford " />
<person posts="4" size="13" who="&quot;Manfred Spraul&quot; " />
<person posts="4" size="13" who="" />
<person posts="4" size="13" who="Samuli Kaski " />
<person posts="4" size="12" who="Werner Almesberger " />
<person posts="4" size="12" who="&quot;Richard B. Johnson&quot; " />
<person posts="4" size="12" who="Rui Sousa " />
<person posts="4" size="11" who="Timur Tabi " />
<person posts="3" size="18" who="&quot;Bakonyi Ferenc&quot; " />
<person posts="3" size="17" who="Vandoorselaere Yoann " />
<person posts="3" size="16" who="Brian Gerst " />
<person posts="3" size="16" who="octave klaba " />
<person posts="3" size="14" who="" />
<person posts="3" size="14" who=" (Kai Henningsen)" />
<person posts="3" size="14" who="David Lang " />
<person posts="3" size="13" who="Jesse Pollard " />
<person posts="3" size="12" who="&quot;Carlos&quot; " />
<person posts="3" size="12" who="Steve VanDevender " />
<person posts="3" size="11" who="Michael Meissner " />
<person posts="3" size="11" who="Horst von Brand " />
<person posts="3" size="11" who="&quot;H. Peter Anvin&quot; " />
<person posts="3" size="10" who="Tom Sightler " />
<person posts="3" size="10" who="Shane Nay " />
<person posts="3" size="10" who="Bernd Paysan " />
<person posts="3" size="10" who="Gary Lawrence Murphy " />
<person posts="3" size="10" who="Reto Baettig " />
<person posts="3" size="9" who="Erik Andersen " />
<person posts="3" size="9" who="Urban Widmark " />
<person posts="3" size="9" who="Derek Martin " />
<person posts="3" size="8" who="&quot;Davide Libenzi&quot; " />
<person posts="3" size="8" who="" />
<person posts="3" size="8" who="Giuliano Pochini " />
<person posts="3" size="8" who="" />
<person posts="3" size="7" who="Tim Hockin " />
<person posts="3" size="7" who="" />
<person posts="2" size="37" who="German Jose Gomez Garcia " />
<person posts="2" size="19" who="Jens-Uwe Mager " />
<person posts="2" size="19" who="Justin " />
<person posts="2" size="16" who="Jim Bauer " />
<person posts="2" size="14" who="Magnus Danielson " />
<person posts="2" size="10" who="Terje=?iso-8859-1?Q?_Gj=F8s=E6ter?= " />
<person posts="2" size="10" who="Ivan Kokshaysky " />
<person posts="2" size="10" who="Riley Williams " />
<person posts="2" size="9" who="Zdenek Kabelac " />
<person posts="2" size="9" who="Ivan Passos " />
<person posts="2" size="9" who="Sandy Harris " />
<person posts="2" size="9" who="Dale Amon " />
<person posts="2" size="8" who="Harold Oga " />
<person posts="2" size="8" who="Ingo Molnar " />
<person posts="2" size="8" who="&quot;Russell, Richard (DEH)&quot; " />
<person posts="2" size="8" who="&quot;Lee Mitchell&quot; " />
<person posts="2" size="8" who="Roger Larsson " />
<person posts="2" size="8" who=" (Ton Hospel)" />
<person posts="2" size="8" who="Jean-Luc Coulon " />
<person posts="2" size="8" who="Matthew Hawkins " />
<person posts="2" size="8" who=" (Linus Torvalds)" />
<person posts="2" size="7" who="" />
<person posts="2" size="7" who="Frank van Maarseveen " />
<person posts="2" size="7" who="Marc Lefranc " />
<person posts="2" size="7" who="Phil Wilshire " />
<person posts="2" size="7" who="Larry McVoy " />
<person posts="2" size="7" who="James Simmons " />
<person posts="2" size="7" who="Matt Brichacek " />
<person posts="2" size="7" who=" (Stephen Harris)" />
<person posts="2" size="7" who=" (Michael Borrelli)" />
<person posts="2" size="7" who="Ben McCann " />
<person posts="2" size="7" who=" (goingware.com)" />
<person posts="2" size="7" who="Jason Collins " />
<person posts="2" size="7" who="Paul Gortmaker " />
<person posts="2" size="7" who="Neil Brown " />
<person posts="2" size="6" who="Thierry Mallard " />
<person posts="2" size="6" who="Evan Langlois " />
<person posts="2" size="6" who="David Wragg " />
<person posts="2" size="6" who="Walter Zimmer " />
<person posts="2" size="6" who="&quot;hiroaki yamamoto&quot; " />
<person posts="2" size="6" who="Andreas Schwab " />
<person posts="2" size="6" who="John Alvord " />
<person posts="2" size="6" who="&quot;Stephen C. Tweedie&quot; " />
<person posts="2" size="6" who="Christopher Cradock " />
<person posts="2" size="6" who="William Montgomery " />
<person posts="2" size="6" who="Michael Westermann " />
<person posts="2" size="6" who="lars brinkhoff " />
<person posts="2" size="6" who="&quot;Eric S. Raymond&quot; " />
<person posts="2" size="6" who="Ville Herva " />
<person posts="2" size="6" who="Rik van Riel " />
<person posts="2" size="6" who="&quot;David S. Miller&quot; " />
<person posts="2" size="6" who="Alex Buell " />
<person posts="2" size="6" who="zhang zhishou " />
<person posts="2" size="6" who=" (Peter Bornemann)" />
<person posts="2" size="6" who="Felix von Leitner " />
<person posts="2" size="6" who="Roman Zippel " />
<person posts="2" size="5" who="&quot;James H. Cloos Jr.&quot; " />
<person posts="2" size="5" who="&quot;Adam J. Richter&quot; " />
<person posts="2" size="5" who="Keitaro Yosimura " />
<person posts="2" size="5" who="Cyrille Chepelov " />
<person posts="2" size="5" who="Pete Clements " />
<person posts="2" size="5" who="Vincent Vanackere " />
<person posts="2" size="5" who="Velizar Bodurski " />
<person posts="2" size="5" who="Mark Hahn " />
<person posts="2" size="5" who="Philipp Rumpf " />
<person posts="2" size="5" who="Manfred " />
<person posts="2" size="5" who="Kurt Roeckx " />
<person posts="2" size="5" who="Michael Kummer " />
<person posts="2" size="5" who="Anton Blanchard " />
<person posts="2" size="4" who="Leisheng Ji " />
<person posts="2" size="4" who="&quot;fatemi&quot; " />
<person posts="1" size="28" who="Naohiko Shimizu " />
<person posts="1" size="25" who="Sean Harding " />
<person posts="1" size="20" who="Meelis Roos " />
<person posts="1" size="18" who="Bartlomiej Zolnierkiewicz " />
<person posts="1" size="18" who="" />
<person posts="1" size="16" who="Pete Toscano " />
<person posts="1" size="15" who="Arnd Bergmann " />
<person posts="1" size="13" who="&quot;yuzhen&quot; " />
<person posts="1" size="11" who="Ben Greear " />
<person posts="1" size="11" who="Ilia Mirkin " />
<person posts="1" size="10" who="Rasmus Andersen " />
<person posts="1" size="9" who="Jens Taprogge " />
<person posts="1" size="9" who="Paul Barton-Davis " />
<person posts="1" size="9" who="Oscar Takeshita " />
<person posts="1" size="9" who="&quot;Langdale, Philip&quot; " />
<person posts="1" size="9" who="Nick Marouf " />
<person posts="1" size="8" who="Andreas Feldner " />
<person posts="1" size="7" who="" />
<person posts="1" size="7" who="Vanja Hrustic " />
<person posts="1" size="7" who="Bryan -TheBS- Smith " />
<person posts="1" size="7" who="Claudio Matsuoka " />
<person posts="1" size="6" who="" />
<person posts="1" size="6" who="&quot;Brian J. Murrell&quot; " />
<person posts="1" size="6" who="Daniel Burrows " />
<person posts="1" size="6" who="" />
<person posts="1" size="6" who="Erick Kinnee " />
<person posts="1" size="6" who="&quot;K.Deepak&quot; " />
<person posts="1" size="6" who="Kevin Fenzi " />
<person posts="1" size="6" who="Joel Fuster " />
<person posts="1" size="6" who="Seth Arnold " />
<person posts="1" size="5" who="&quot;Edward C. Lang&quot; " />
<person posts="1" size="5" who="&quot;Chris Swiedler&quot; " />
<person posts="1" size="5" who="Andreas Steinmetz " />
<person posts="1" size="5" who="&quot;carlos&quot; " />
<person posts="1" size="5" who="David Woodhouse " />
<person posts="1" size="5" who="=?ISO-2022-JP?B?GyRCJVclbSVHJWUhPCU1ISFMcEl0GyhC?= " />
<person posts="1" size="5" who="&quot;Sean Hunter&quot; " />
<person posts="1" size="5" who="&quot;=?ISO-2022-JP?B?GyRCSiFLXCEhPWc7UhsoQg==?=&quot; " />
<person posts="1" size="5" who="Mike Galbraith " />
<person posts="1" size="4" who="" />
<person posts="1" size="4" who="=?ISO-2022-JP?B?SGVhcnR=?= " />
<person posts="1" size="4" who="" />
<person posts="1" size="4" who="&quot;lhyang&quot; " />
<person posts="1" size="4" who="Alain Knaff " />
<person posts="1" size="4" who=" (John Alvord)" />
<person posts="1" size="4" who="" />
<person posts="1" size="4" who="Anton Ivanov " />
<person posts="1" size="4" who="Joel Jaeggli " />
<person posts="1" size="4" who="&quot;Michael H. Warfield&quot; " />
<person posts="1" size="4" who="Peter Rival " />
<person posts="1" size="4" who="Igor Mozetic " />
<person posts="1" size="4" who="" />
<person posts="1" size="4" who="Heikki Vatiainen " />
<person posts="1" size="4" who="Mike Touloumtzis " />
<person posts="1" size="4" who="Thomas Molina " />
<person posts="1" size="4" who="Frank van Maarseveen " />
<person posts="1" size="4" who="Petr Vandrovec " />
<person posts="1" size="4" who="Ben Ford " />
<person posts="1" size="4" who="Dmitry Melekhov " />
<person posts="1" size="4" who="&quot;John Fremlin&quot; " />
<person posts="1" size="4" who="Matthew Vanecek " />
<person posts="1" size="4" who="Ani Joshi " />
<person posts="1" size="4" who="Patrick Cole " />
<person posts="1" size="4" who="&quot;Alex&quot; " />
<person posts="1" size="4" who="Dick Streefland " />
<person posts="1" size="4" who="Craig Kulesa " />
<person posts="1" size="4" who="Dimitris Michailidis " />
<person posts="1" size="4" who="" />
<person posts="1" size="4" who="&quot;Andrew Selby Smith&quot; " />
<person posts="1" size="4" who="Thomas Dodd " />
<person posts="1" size="4" who="kmb " />
<person posts="1" size="4" who=" (Rogier Wolff)" />
<person posts="1" size="4" who="Igor Oblakov " />
<person posts="1" size="3" who="Laurent DUFOUR " />
<person posts="1" size="3" who="" />
<person posts="1" size="3" who="&quot;Ely Wilson&quot; " />
<person posts="1" size="3" who="Robert de Vries " />
<person posts="1" size="3" who="Mitchell Blank Jr " />
<person posts="1" size="3" who="&quot;Johan Kullstam&quot; " />
<person posts="1" size="3" who="" />
<person posts="1" size="3" who="Warren Young " />
<person posts="1" size="3" who="&quot;Dunlap, Randy&quot; " />
<person posts="1" size="3" who="kevin morgan " />
<person posts="1" size="3" who="Jeff Lightfoot " />
<person posts="1" size="3" who=" (Stuart Lynne)" />
<person posts="1" size="3" who="Peter Enderborg " />
<person posts="1" size="3" who=" (A. Ott)" />
<person posts="1" size="3" who="Simon Kirby " />
<person posts="1" size="3" who="Pavel Roskin " />
<person posts="1" size="3" who="=?iso-8859-1?Q?J=F6rn?= Nettingsmeier " />
<person posts="1" size="3" who="Lincoln Dale " />
<person posts="1" size="3" who="Nils Philippsen " />
<person posts="1" size="3" who="David Gould " />
<person posts="1" size="3" who="Keith Schincke " />
<person posts="1" size="3" who="James Lewis Nance " />
<person posts="1" size="3" who="Scott Johnson " />
<person posts="1" size="3" who="Jes Sorensen " />
<person posts="1" size="3" who="=?ISO-2022-JP?B?GyRCMkNGIyEhMCY7UhsoQh==?= " />
<person posts="1" size="3" who="Frode Tenneboe " />
<person posts="1" size="3" who="" />
<person posts="1" size="3" who="" />
<person posts="1" size="3" who="Happy " />
<person posts="1" size="3" who="milkygirl " />
<person posts="1" size="3" who="&quot;Rajeev Bector&quot; " />
<person posts="1" size="3" who="Roberto Zunino " />
<person posts="1" size="3" who="Markus Pfeiffer " />
<person posts="1" size="3" who="Samuel S Chessman " />
<person posts="1" size="3" who="Falk Hueffner " />
<person posts="1" size="3" who="=?ISO-2022-JP?B?GyRCIVo3aiFbMT8xRDt2TDM2SRsoQh==?= " />
<person posts="1" size="3" who="&quot;Mark Haney&quot; " />
<person posts="1" size="3" who="Gabor Lenart " />
<person posts="1" size="3" who="" />
<person posts="1" size="3" who="Richard Rager " />
<person posts="1" size="3" who="Chris Meadors " />
<person posts="1" size="3" who="" />
<person posts="1" size="3" who="" />
<person posts="1" size="3" who="Gerhard Mack " />
<person posts="1" size="3" who="Ricky Beam " />
<person posts="1" size="3" who="" />
<person posts="1" size="3" who="Jan-Benedict Glaw " />
<person posts="1" size="3" who="Damien Miller " />
<person posts="1" size="3" who="Britton " />
<person posts="1" size="3" who="Phil Russell " />
<person posts="1" size="3" who="Wichert Akkerman " />
<person posts="1" size="3" who="Zlatko Calusic " />
<person posts="1" size="3" who="&quot;Liu, Changwen&quot; " />
<person posts="1" size="3" who="Jeffrey Fielding " />
<person posts="1" size="3" who="Dominik Kubla " />
<person posts="1" size="3" who="Benjamin Redelings I " />
<person posts="1" size="3" who="&quot;Juan J. Quintela&quot; " />
<person posts="1" size="3" who="Stephen Lee " />
<person posts="1" size="3" who="Chuck Lever " />
<person posts="1" size="3" who="Helge Hafting " />
<person posts="1" size="3" who="Hannu Savolainen " />
<person posts="1" size="3" who="David Hinds " />
<person posts="1" size="3" who="=?iso-8859-1?Q?Fran=E7ois=20D=E9sarm=E9nien?= " />
<person posts="1" size="3" who="Rob Landley " />
<person posts="1" size="3" who="Chris Adams " />
<person posts="1" size="3" who="&quot;Alan Curry&quot; " />
<person posts="1" size="3" who="Richard Zidlicky " />
<person posts="1" size="3" who="Graydon " />
<person posts="1" size="3" who="Yusuf Goolamabbas " />
<person posts="1" size="3" who="Norbert Tretkowski " />
<person posts="1" size="3" who="" />
<person posts="1" size="3" who="Carlos Eduardo Gorges " />
<person posts="1" size="3" who="Simon Richter " />
<person posts="1" size="3" who="&quot;J. Robert von Behren&quot; " />
<person posts="1" size="3" who="" />
<person posts="1" size="3" who="Andreas Dilger " />
<person posts="1" size="3" who="Olivier Galibert " />
<person posts="1" size="3" who="" />
<person posts="1" size="3" who="&quot;Dr. Kelsey Hudson&quot; " />
<person posts="1" size="3" who="Tom Craft " />
<person posts="1" size="3" who="&quot;Lieven Marchand&quot; " />
<person posts="1" size="3" who="Matan Ziv-Av " />
<person posts="1" size="3" who="=?ks_c_5601-1987?B?sei068ij?= " />
<person posts="1" size="3" who="Stu Palmer " />
<person posts="1" size="3" who="Don Fisher " />
<person posts="1" size="3" who="Lorinczy Zsigmond " />
<person posts="1" size="3" who="David " />
<person posts="1" size="3" who="George France " />
<person posts="1" size="3" who="" />
<person posts="1" size="2" who="Jan Rekorajski " />
<person posts="1" size="2" who="&quot;Susan Mitchell&quot; " />
<person posts="1" size="2" who="&quot;Jim Nance&quot; " />
<person posts="1" size="2" who="Stephen Rothwell " />
<person posts="1" size="2" who="Andre Heynatz " />
<person posts="1" size="2" who="George " />
<person posts="1" size="2" who="Werner Hager " />
<person posts="1" size="2" who="Oystein Viggen " />
<person posts="1" size="2" who="Dieter =?iso-8859-1?Q?N=FCtzel?= " />
<person posts="1" size="2" who="Hans Reiser " />
<person posts="1" size="2" who="Mike Davis " />
<person posts="1" size="2" who="Cesar Eduardo Barros " />
<person posts="1" size="2" who="Chris the Elder " />
<person posts="1" size="2" who="Stephen Torri " />
<person posts="1" size="2" who="Gabor Lenart " />
<person posts="1" size="2" who="kevin " />
<person posts="1" size="2" who="Paul Jakma " />
<person posts="1" size="2" who="Andrey Savochkin " />
<person posts="1" size="2" who="" />
<person posts="1" size="2" who="Miles Lane " />
<person posts="1" size="2" who="" />
<person posts="1" size="2" who="Andrea Ferraris " />
<person posts="1" size="2" who="Jesper Skov " />
<person posts="1" size="2" who="&quot;Raj, Ashok&quot; " />
<person posts="1" size="2" who="dean gaudet " />
<person posts="1" size="2" who="David Caswell " />
<person posts="1" size="2" who="Alexander S A Kjeldaas " />
<person posts="1" size="2" who="Pau Aliagas " />
<person posts="1" size="2" who="Marc Fayer " />
<person posts="1" size="2" who="Enrico Weigelt " />
<person posts="1" size="2" who="Klaus Kudielka " />
<person posts="1" size="2" who="Ilpo Ruotsalainen " />
<person posts="1" size="2" who="root " />
<person posts="1" size="2" who="Rick Hohensee " />
<person posts="1" size="2" who="Richard Henderson " />
<person posts="1" size="2" who="Francis Galiegue " />
<person posts="1" size="2" who="Christopher Yeoh " />
<person posts="1" size="2" who="Bob Lorenzini " />
<person posts="1" size="2" who="Sean Walton " />
<person posts="1" size="2" who=" (J.H.M. Dassen (Ray))" />
<person posts="1" size="2" who="&quot;William F. Maton&quot; " />
<person posts="1" size="2" who="&quot;Jones D (ISaCS)&quot; " />
<person posts="1" size="2" who="D Milburn " />
<person posts="1" size="2" who="" />
<person posts="1" size="2" who="Carlo Scarfoglio " />
<person posts="1" size="2" who="&quot;Leeuw van der, Tim&quot; " />
<person posts="1" size="2" who="Pavel Machek " />
<person posts="1" size="2" who="Delman Lee " />
<person posts="1" size="2" who="Sid Boyce " />
<person posts="1" size="2" who="MEERAK " />
<person posts="1" size="2" who="Linux Kernel Mailing List " />
<person posts="1" size="2" who="Paolo Rossi " />
<person posts="1" size="2" who="&quot;Leisheng Ji&quot; " />
<person posts="1" size="2" who="Tomoko " />
<person posts="1" size="2" who="" />
<person posts="1" size="2" who="John Covici " />
<person posts="1" size="2" who="Bartlomiej Zolnierkiewicz " />
<person posts="1" size="2" who="Claudio Martins " />
<person posts="1" size="2" who="Lorenzo Allegrucci " />
<person posts="1" size="2" who="Tomoko " />

</stats>

<section
  title="Lucent Violates The GPL"
  subject="Symbols match 2.2 &lt;-&gt; 2.4"
  archive="http://kernelnotes.org/lnxlists/linux-kernel/lk_0006_03/msg01131.html"
  posts="48"
  startdate="21 Jun 2000 00:00:00 -0800"
  enddate="09 Jun 2000 00:00:00 -0800"
>
<topic>Modems</topic>

<p>Someone asked for some kernel information, in order to write a module that
would keep a binary-only WinModem driver working across kernel versions.
Kurt Garloff issued the standard disclaimer, saying, <quote who="Kurt
Garloff">Linux was never designed to provide any binary compatibility for
modules. NEVER. Modules are likely to break if you upgrade from one stable
kernel (2.2.15, e.g.) to the next one (2.2.16). Even between kernel compiles
with different settings, some modules may break. In pratice you may be
successful with one module for all 2.2.1x kernels by sheer luck.</quote>
Reto Baettig replied, <quote who="Reto Baettig">please tell that the guys at
lucent. They distributed an "inofficial" linux driver (binary only) for that
f** lt winmodem.</quote> Kurt replied:</p>

<quote who="Kurt Garloff">

<p>It can't be that hard to recompile the module for
2.4.0 even for L*cent engineers. There might be some slight changes
necessary at the places where the module interfaces the kernel, but that
should be a work of a couple of minutes. As they stole code from serial
driver, probably only the changes there need to be redone ...</p>

<p>(And I wonder, whether they have a written statement by Ted that allows them
to use the serial code with a license different from GPL?)</p>

</quote>

<p>Theodore Y. Ts'o revealed:</p>

<quote who="Theodore Y. Ts'o">

<p>No, they don't have a such a statement from
me, and I've already let them know that they're in violation of the GPL.
Lucent was *supposed* to have split the propietary code into its own .o
file, and kept released the Linux glue code as a .c. This solves the GPL
problem, since the user is doing the linking....</p>

<p>I think they should have released a version that you should be able to
compile for 2.4.0; I'm surprised that hasn't happened yet.</p>

</quote>

</section>

<section
  title="Closing The File Descriptors Of Arbitrary Processes"
  subject="closefd: closes a file of any process"
  archive="http://kernelnotes.org/lnxlists/linux-kernel/lk_0006_04/msg00240.html"
  posts="45"
  startdate="23 Jun 2000 00:00:00 -0800"
  enddate="04 Jul 2000 00:00:00 -0800"
>
<topic>FS: Coda</topic>
<topic>FS: NFS</topic>
<topic>POSIX</topic>

<mention>Tim Waugh</mention>

<p>Ulisses Alonso Camar&#243; posted a URL to a FreshMeat <a
href="http://freshmeat.net/appindex/2000/06/22/961682188.html">announcement
of closefd</a>, a module to close the file descriptor of any process. Tigran
Aivazian had some serious objections to Ulisses' code:</p>

<quote who="Tigran Aivazian">

<p>closing a file descriptor of another process
context is a serious task - one could probably write a 200-page book about
it and still not know how to do it quite yet.</p>

<p>Anyway, of course, your simple module has serious problems:</p>

<ol>

<li>POSIX (and probably non-POSIX) locks subsystem needs rewrite before one
can release locks from non-current context.</li>

<li>you bravely access p-&gt;files without any locking - that is broken</li>

<li>you need not emulate put_unused_fd() for non-current context - this is
the *very* reason why I wrote __put_unused_fd() to allow passing p-&gt;files
as a parameter (of course caller needs to lock files-&gt;file_lock) which
you do not do, btw.</li>

</ol>

<p>I spent about 3 weeks working on these (and related) issues and had to write
a separate filesystem to overcome the various problems. It should be
available late July.</p>

<p>You could write another module called munmap.o and another fchroot and
another fchdir and another catch_rights_dgram_in_flight.o or if you see what
I mean :)</p>

</quote>

<p>Elsewhere, Tim Waugh said 'ptrace()' could also accomplish Ulisses' task,
although Tigran replied that while this was literally true, it stuck too
close to the letter of the task, closing only a file descriptor of a given
process. The more interesting and global problem, he felt, was to forcibly
'umount' a given filesystem. For this broader task, he said, the 'ptrace()'
method wouldn't work.</p>

<p>There followed a medium/long technical discussion, which Werner Almesberger
eventually summarized (quoted in full):</p>

<quote who="Werner Almesberger">

<p>I think the discussion circles around three
problems, which are similar in appearance, but quite different in the
possible solutions. Let me attempt a classification:</p>

<p>A) hide resource unavailability from a process</p>

<p>   This is the "tell process to go elsewhere while ejecting the floppy"
   case. May be generalized (with some difficulty) to more general fd
   replacement. I think there are four possible cases:</p>

<blockquote>

<p>   1) process/fd is idle, can be removed/changed just by changing
pointers</p>

<p>   2) fd is busy (system call in progress) but we can just wait for the
      operation to terminate (maybe prod it a little)</p>

<p>   3) fd is not busy, but process is doing something that may make it
      undesirable to mess with its fds (e.g. it's in the middle of exit(2)
      or close(2))</p>

<p>   4) fd is in the middle of an operation that won't come back anytime
      soon</p>

</blockquote>

<p>   I'm afraid there aren't many cases of 2), and the prodding may get a
   little difficult for, say, NFS, so whenever the fd is busy, we probably
   must assume 4). 3) may simply mean that whenever the process is in the
   kernel, nothing should happen to it. 3) of course also covers 4), but
   one may special-case the latter. (After all, we may need this function
   just because we're in case 4). 1) is too good to be true and of little
   hack value.</p>

<p>   For 4), I can imagine the following two approaches:</p>

<blockquote>

<p>   a) add a layer that allows a clean split between the process and the
      driver side of an fd, e.g. by handing all requests to some proxy
      process. May be slow.</p>

<p>   b) hackish, but probably quite efficient: by splicing the thread of
      execution at the process/driver boundary: driver operation
      returns immediately, while the still-running driver operation gets
      a new return address that makes the result evaporate. I think it
      would be interesting to see if somebody could come up with a clean
      solution for such a beast ;-)</p>

</blockquote>

<p>   In both cases, it seems natural to hook the code that maintains the
   separation into VFS, as a new file system. This would limit things
   to regular files and directories, but that's probably okay at the
   beginning. Also, in either case, any access to "current" from the
   driver side would drastically complicate things.</p>

<p>B) de-access a resource (fd) to allow removal of device</p>

<p>   There are again several flavours of this:</p>

<blockquote>

<p>   1) process is killable and nobody cares, so kill it</p>

<p>   2) process should not be killed, so we have to try to close the fd
      (and hope it doesn't get angry), or replace it with something
      else</p>

<p>   3) process stubbornly refuses to die (e.g. it's blocked in an access
      to the reource we want to get rid of)</p>

<p>   4) like 3), but the block is because of something else (e.g. we want
      to umount the partition with the log file of the backup process
      that is currently hung in the tape driver)</p>

</blockquote>

<p>   For 2), any solution from A) should be suitable. 1) is again trivial.
   That leaves us with 3) and 4), which are essentially the same. The
   goal is simply to make that system call return.</p>

<p>   Since we're likely in the middle of a driver and may have accumulated
   an unknown amount of state (e.g. locks, driver flags, etc.), this
   probably can't be solved from outside the driver. Since we should be
   in an uninterruptible sleep at this time (anything else would be a
   serious bug that needs to be fixed no matter what is done about the
   issues discussed here), the obvious solution seems to be to teach
   drivers to allow interruption of uninterruptible sleeps. Maybe with a
   special new signal and, sigh, a new task state.</p>

<p>C) counter denial of service attacks based on keeping devices busy
   This is a combination of B with counter-measures to keep hostile
   code from thwarting the initial counter-measure. Some scheduler or
   kill tricks may be the most efficient way to deal with all such
   kinds of arms races. (E.g. write a kill(2) that accepts a list of
   "good" processes, and atomically delivers the signal to all others.)</p>

<p>Of course, A) and B) could be combined. Also, some instrumentation could
be added to A) to allow the process doing the replacement to retrieve
the exact state of an fd.</p>

<p>A) seems to be the hardest thing to do, particularly if performance is
an issue. If performance is a non-issue, one could use some kind of
demon that looks like NFS, Coda, or such, and spawns a thread for each
IO operation. If we want to revoke an fd, the demon could simply open
the substitute, continue working on that, and discard the result of any
pending operation as soon as it comes back (if ever). 100% user space.</p>

<p>Solving B) would solve a large class of user-visible problems. Since
there may not be all that many TASK_UNINTERRUPTIBLE sleeps that cause
problems in real life, it should be feasible just to put the
infrastructure in place, and to fix things when a problem is found.
I.e. no major code review required.</p>

<p>I'll leave C) to another thread ;-)</p>

</quote>

</section>

<section
  title="Developers Argue Over Kernel Coding Standards"
  subject="Re: ANSI C clarifications, with citations (was Re: [patch-2.4"
  archive="http://kernelnotes.org/lnxlists/linux-kernel/lk_0006_04/msg00922.html"
  posts="33"
  startdate="26 Jun 2000 00:00:00 -0800"
  enddate="05 Jul 2000 00:00:00 -0800"
>
<topic>BSD</topic>

<mention>Larry McVoy</mention>

<p>In the course of discussion, Albert D. Cahalan said, <quote who="Albert D.
Cahalan">Linux will NEVER work with a strict ANSI C compiler.</quote> He
went on:</p>

<quote who="Albert D. Cahalan">

<p>I have the damn 1999 ISO C draft. I know full
well that a "legal" compiler can put 42 chars of padding after everything
and, just for fun, make every type be 101 bits wide.</p>

<p>Moderately portable code assumes a sane compiler and sane hardware. You may
assume:</p>

<ol>

<li>The "char" type is 8 bits. It might be unsigned though. :-/</li>
<li>sizeof(short) == 2</li>
<li>sizeof(int) == 4      (for real Linux, not the 8088 hack)</li>
<li>sizeof(long) == sizeof(void *)</li>
<li>(sizeof(long) == 4) | (sizeof(long) == 8)</li>
<li>sizeof(long long) == 8       (good for 10 years at least)</li>
<li>You can freely cast between any two pointer types</li>
<li>You can freely cast between long and any pointer type</li>
<li>(long)(int*)(long)foo == (long)(char*)(int*)(long)foo</li>
<li>signed integers are represented in two's complement form</li>
<li>integers wrap around instead of causing faults</li>
<li>assuming "good" struct layout, padding only occurs at the end</li>
<li>... that padding won't happen if you supply a multiple of 16 bytes</li>

</ol>

<p>One can define "good" struct layout as being an order that puts items with
the largest natural alignments first. For example, an array of 6 shorts has
a natural alignment of 4 bytes. I suppose you could define natural alignment
as gcd(16,sizeof(foo)).</p>

<p>Every day I work with a system that violates rule 9. From experience, I
assure you that it is a mess to deal with. Casting gets really nasty. There
is no hope of porting Linux to this system.</p>

</quote>

<p>Larry McVoy came down pretty hard on Albert, disagreeing with most of the
assumptions, and including "<a
href="http://allserv.rug.ac.be/~vfack/files/10ccprog.html">The Ten
Commandments For C Programmers</a>" by Henry Spencer as an alternative.
Albert replied, <quote who="Albert D. Cahalan">Note that the kernel makes
EVERY ONE of the above assumptions. The kernel even assumes a stricter
version of #13, and it assumes that you have big-endian or little-endian
hardware.</quote> To Henry Spencer's commandments, Albert replied, <quote
who="Albert D. Cahalan">That was before the 1989 ANSI C standard. That was
before the world decided that all workstation and server CPUs would address
8-bit units of memory and have registers in nice power-of-two sizes. That
was long long before the 1999 ISO C standard.</quote> Close by in the
thread, Tigran Aivazian also remarked, <quote who="Tigran Aivazian">Albert's
collection of valid assumptions in one message was actually very useful - I
even printed them out.</quote> [...] <quote who="Tigran Aivazian">I think it
is one of Linux's few remaining problems that assumptions are not readily
spelled out - so one has to study the code in every detail to extract the
assumptions.</quote></p>

<p>Simon Richter was not so happy with Albert's list, replying to Tigran,
<quote who="Simon Richter">Yes, but these assumptions are one of Linux's
remaining problems. Code which is based on them will not be portable to
other arches. But since noone cares about them anyway, we might as well
declare Linux i386 only, it would at least stop the BSD people laughing
because our "stable" kernel doesn't compile on all "supported"
archs.</quote> Elsewhere there was more discussion, with folks arguing back
and forth about the relative correctness of one or the other of Albert's and
Larry's assumptions and commandments.</p>

</section>

<section
  title="Some Explanation Of Variable Initialization"
  subject="[PATCH] rivafb bugfixes"
  archive="http://kernelnotes.org/lnxlists/linux-kernel/lk_0006_04/msg01156.html"
  posts="11"
  startdate="28 Jun 2000 00:00:00 -0800"
  enddate="05 Jul 2000 00:00:00 -0800"
>
<topic>Framebuffer</topic>

<p>Ferenc Bakonyi posted a patch to fix various things with the framebuffer.
Jeff Garzik liked the patch, but objected to Ferenc initializing certain
variables to zero, since the kernel would initialize them to zero
automatically itself. If it didn't, he said, that would be a bug that should
be identified. This explanation of the kernel's behavior didn't make much
sense to Bill Suetholz, who objected, <quote who="Bill Suetholz">What do you
mean don't initialize variables??? If you don't, then on some OS's you will
get random garbage in the variable. Granted Linux currently seems to
initialize your memory to zeroes, but do you really want to depend on
that?</quote> Jeff explained, <quote who="Jeff Garzik">Yes. Otherwise you
bloat the kernel image size with zeroed data.</quote></p>

</section>

<section
  title="Killing Processes When Out Of Memory"
  subject="VM in 2.2.17pre9 : a success ?"
  archive="http://kernelnotes.org/lnxlists/linux-kernel/lk_0006_04/msg01240.html"
  posts="6"
  startdate="29 Jun 2000 00:00:00 -0800"
  enddate="04 Jul 2000 00:00:00 -0800"
>

<mention>Rik van Riel</mention>

<p>In the course of discussion, Rik van Riel announced a patch to intelligently
kill processes on OOM conditions. Willy Tarreau volunteered to test it, and
Rik posted a <a href="http://www.surriel.com/patches/">URL to the patch</a>.
Willy reported:</p>

<quote who="Willy Tarreau">

<p>I've just tested your patch on 2.2.17pre9 +
andrea's GFP-race-fix-3. It seems smart about which process to kill, and I
can no longer hang my system with mmap. I even tried several simultaneous
mmap + malloc (hang guaranted without the patch). I saw cool messages about
mmap and malloc being killed, preserving other processes such as syslogd and
init.</p>

<p>Although I'm not for killing hungry processes, I think in this case this is
better than letting all the system die (or at least hang for hours). But I
don't know what this will lead to for daemons which use lots of
mmaps.</p>

</quote>

<p>There was no reply.</p>

</section>

<section
  title="Petitioners Request Real-Time Latency In The Kernel"
  subject="a joint letter on low latency and Linux"
  archive="http://kernelnotes.org/lnxlists/linux-kernel/lk_0006_04/msg01252.html"
  posts="259"
  startdate="28 Jun 2000 00:00:00 -0800"
  enddate="09 Jul 2000 00:00:00 -0800"
>
<topic>Big O Notation</topic>
<topic>Real-Time: RTLinux</topic>
<topic>Sound: MIDI</topic>

<mention>Steve VanDevender</mention>
<mention>Benno Senoner</mention>
<mention>Richard Gooch</mention>

<p>Paul Barton-Davis posted a petition to Linus Torvalds, asking that "real
time" features be added to the kernel. He posted:</p>

<quote who="Paul Barton-Davis">

<p>we are a group of programmers designing,
writing and extending audio+MIDI (and in some cases, video) applications for
Linux. As you could tell from the list of signees below, we represent the
developers of many significant and substantial audio+MIDI applications for
Linux, as well as members/employees of several well known music and audio
research institutions and companies.</p>

<p>(If you want to get an overview of the current state for audio+MIDI under
Linux, there is no better source than Dave Phillip's magnificently
comprehensive web site <a
href="http://www.bright.net/~dlphilp/linuxsound/">http://www.bright.net/~dlphilp/linuxsound/</a>).</p>

<p>One member of our group, Benno Senoner, did a lot of work last year in
investigating and documenting problems involved in using Linux for real-time
audio applications. Others, such as Juhana Sadeharju, had long noted
problems using Linux for hard disk recording of audio data. Partly as a
result of Benno's work, Ingo Molnar did a fantastic job of coming up with a
patch for the 2.2 series that dramatically improved the latencies that could
be obtained from Linux.</p>

<p>How good? Well, good enough that members of our community who were convinced
that RTLinux was needed to do a professional job with audio changed their
minds. Good enough that we were close to (or sometimes better than) BeOS, an
OS that has had a lot of excellent press in the audio world as a replacement
for the known-to-be-problematic Windows and MacOS systems. Good enough that
in some cases, Linux is as good as dedicated hardware solutions, offering
latencies in the realm of 2-3ms for our applications.</p>

<p>There was a lot of excitement that 2.4 might include a version of the low
latency patches. The excitement came from the possibility that the next
release of the various distributions of Linux would represent a set of
"desktops" that were ready for excellent, "real-time" audio and MIDI
applications. CPU and disk performance has improved to the point where we
are on the threshold of a revolution in the way that sound synthesis and
processing is done, and many of us want to ride Linux into the heart of that
revolution.</p>

<p>However, it turns out, as best we can gather, that you were not happy with
the basic structure of some or all of Ingo's low latency work. Our
impression is that you want to see more careful code design that avoids
interrupt disabling or holding high level locks for too long, rather than
using preemption points. So, as far as we can tell right now, 2.4 will
represent more of the same as far as low latency limitations, and for us,
more of the same means performance much worse than Windows or MacOS present.</p>

<p>How much worse ? Linux currently offers worst-cases latencies that are
*10-15* times worse than Windows or MacOS. Developers for those platforms
still complain about their performance with respect to latency - imagine
their response to the situation with Linux as it stands today!</p>

<p>We understand that we could try to maintain a version of Ingo's low latency
patches in parallel to the current kernel. But this is not a good situation
for us. We would like to persuade several companies that produce
applications and API's for audio+MIDI work to make their code, designs and
programs available for Linux. We would like to be able to produce our own
"real-time" applications and not have to tell users (who will likely know
nothing about Linux, or computers in general) that they need to patch their
kernel before using them. Neither of these goals are realistic given the
current state of low latency support in the emerging 2.4.</p>

<p>We would like to know:</p>

<ul>

<li>what are your general feelings on modifying Linux to support the kind of
applications we are concerned with ?</li>

<li>what kinds of compromises, if any, you might accept in order to get good
low latency performance into the kernel sooner, rather than later ?</li>

<li>what design goals you have in mind when you talk about doing low latency
"right", rather than "wrong, as in Ingo's approach" ?</li>

<li>to what extent are you willing to enter into a debate about the merits
of a preemption-point-based approach to lowering kernel latency ?</li>

</ul>

<p>Above all, we are all interested in having fun with Linux and
audio/music/MIDI. We would invite you to come tour a professional studio,
watch the cool and wonderful stuff that can be done right now (with lots of
annoying problems) on machines that runs Windows and MacOS, and get a sense
of the extent to which general purpose computers are about to replace a
whole bunch of expensive stuff sitting around in a typical studio. We want
to see penguins there, and soon!</p>

<p>Several of the signees below have noted that lowering latency improves the
quality of games, most kinds of multimedia and many non-hard-real-time
automated systems. Incorporating a low-latency patch could be seen as
extremely helpful in providing competitive performance in areas outside of
audio as well.</p>

<p>Thank you for your consideration, for Linux and your benign
dictatorship.</p>

</quote>

<p>At the bottom of the letter, he listed 77 signees of the petition. A very
long discussion followed.</p>

<h3>Events Surrounding The Letter</h3>

<p>First, there was some confusion surrounding the historical events
themselves. Ingo Molnar spoke up to correct the idea that Linus had been
"unhappy" with Ingo's patch. He said:</p>

<quote who="Ingo Molnar">

<p>*I* was unhappy with the structure of that patch to
begin with. The patch is ugly and unacceptable (read: a kludge) for
inclusion into the mainstream kernel, period. I also said that i'll send a
similar patch for 2.4 as well, once the 2.4 codebase stabilizes. (right now
we still have a high flux of fixes coming in - but i'll soon port the patch
to 2.4)</p>

<p>so please, do not make this appear as some 'fault' of Linus. Linus is
rightfully (and thankfully) watching the quality of the mainstream kernel,
and ugly patches are simply not accepted, regardless of the usefulness of a
given patch. In fact it's my fault of not submitting those patches in a
saner way. I'll fix this in the coming weeks.</p>

</quote>

<p>Paul replied to this, first of all apologizing for not sending the letter to
Ingo before Linus. Apparently he'd intended to as a courtesy, but it had
slipped his mind during his final preparations. He also addressed Ingo's
point about Ingo disapproving of the patch himself. Paul said he remembered
Ingo trying several times to persuade Linus to include the patch, until
Linus had flatly refused. But to this recollection of Paul's, Ingo replied
that Paul had confused two entirely different patches. Ingo said the patch
Linus had rejected had used a completely different approach than the "low
latency" patch Paul had described in the petition.</p>

<p>There was no reply to this, but Larry McVoy also replied to Paul, with his
own take on the sincerity of the folks involved. He remarked, <quote
who="Larry McVoy">I have a little background on this, I was asked to support
this letter by using LMbench to "show" that there were no problems with the
Ingo patches and declined. I felt that what I was asked to do was misleading
and I didn't agree with what was in the letter.</quote></p>

<p>Paul took umbrage at this, and replied, <quote who="Paul Barton-Davis">One
clarification here. Benno Senoner asked Larry about this, and it was not
part of the process of gathering support for the letter. I was actually
unhappy that Benno had asked Larry to do this. Not because I dislike Larry,
but I considered it to be inappropriate at that time. So be it.</quote></p>

<h3>RTLinux Is Put Forward</h3>

<p>In his same post, Larry went on to give a more technical response to the
petitioners. He said:</p>

<quote who="Larry McVoy">

<p>Paul and the others in favor of the low latency
fixes are fond of pointing out that they must be good because this is how
IRIX and BeOS solve the problem. That's never a good reason to do anything -
fortunately for all of us, Linus evaluates things on their technical merits.
And "IRIX does it" has no technical merit whatsoever.</p>

<p>I and others have pointed out that if you need hard real time then what you
do is use RT Linux and you can get exactly what you need. I've heard two
arguments against this:</p>

<ol>

<li>``Other operating systems offer "soft realtime" and we don't want to
port our code from that to the RT Linux model.'' Translation: ``other
operating systems have made poor design decisions, let's try and pressure
Linus into doing the same thing with Linux.'' That's a poor approach to the
problem. Just saying that NT does it does not make it right. Linux has a
large, quickly growing, market share. In my opinion, it is better to do the
right thing, wait until Linux is the market leader, and then laugh at the
screwed up systems that made the wrong choices. Screwing up Linux so it has
the same problems that other systems have in the name of portablility is not
the Linux way.</li>

<li>``If we take the RT Linux path then Linus will never add the low latency
features we want.'' I love this argument. It implies knowledge that there is
a better way, that if you use the better way then there is no need to do
what Linus doesn't really want to do. Exactly.</li>

</ol>

<p>In fairness to the low latency application people, I think that the RT Linux
folks need to provide skeleton "apps" that show how to solve problems in the
RT Linux space. Whether that happens or not, the RT Linux approach is really
brilliant and it is the right approach to the problem space, and I'm more
than a little sick of hearing people avoid using it. Get with the program,
folks, use the best tool for the job. No matter what Ingo does, it is a
_fact_ that you can not get both good performance for a multi user time
sharing operating system and real time applications.</p>

<p>Please understand that it might be that some of Ingo's work is a good thing
and that it will go into the kernel. I am not sure about that one way or the
other. What I am sure about is that putting features into the kernel for the
benefit of real time applications is a slippery slope that just leads to bad
change on top of bad change. It effects the scheduler, the I/O paths, the
interrupt handling, and probably a bunch of other places I'm forgetting. The
changes are at direct odds with time sharing performance and the proponents
of the changes will argue each one in isolation, rather than looking at the
effects of all of them.</p>

<p>My advice, heeded or not, is to just say no.  We have an excellent answer
for realtime, it's called RT Linux. Go use it - it's better than any other
answer.</p>

</quote>

<p>Linus Torvalds replied to this:</p>

<quote who="Linus Torvalds">

<p>Just to clear up my opinion a bit:</p>

<ul>

<li>I'm definitely not against low latency. I think latency is hugely
important, mostly more so than throughput (within reason, of course: all
this is very much a balancing issue).</li>

<li>I'm not even against well-defined and well-thought-out "scheduling
points". They are hackish, but if there is one or two of them to cover some
specific behaviour then that's ok. Not a big deal.</li>

<li>I _am_ against patches whose only purpose in life is to run some
arbitrary benchmark, and try to make that benchmark look good.</li>

</ul>

<p>Most of the low-latency patches I've seen have been of the third kind, I'm
afraid.</p>

<p>For example, I would probably accept a patch that adds a simple</p>

<blockquote>

<p>        if (current-&gt;need_resched) schedule();</p>

</blockquote>

<p>to the case of generic_file_write/generic_file_read. Why? Because that case
is a real-world case where it's obvious that with huge caches a normal user
can quite simply cause bad latencies, and this is not an issue that needs
all that much discussion - it's an obvious hack, but is't also equally
obvious why it's there, and what the point of it is. We've had a few of
these before: I think the /dev/null driver already does exactly this.</p>

<p>In fact, because we should look at the "UP threading code" for 2.5.x anyway
(ie using the spinlocks on UP to generate a fairly well-threaded UP kernel
without any source modifications), the one-liner if-statement should
probably be a #define with a simple-to-grep-for name so that it can be
easily removed.</p>

<p>Why just "probably"? A few reasons:</p>

<ul>

<li>

<p>I suspect that especially if we generate such a macro, people will start
sprinkling it around at various random places. And I do not want such a
simple hack to spread out any more than necessary. One or two places are
fine. So is four. Numerous places in the networking code, device drivers and
filesystems doing it is _not_. At that point it has gone from a very
specific and slightly tasteless hack to an ugly architecture.</p>

<p>This could probably be avoided by giving it a clear comment and a
discouraging name.</p>

</li>

<li>

<p>I do think the "copy_to/from_user()" case is the cleaner one, but I'd
hate to do the test in-line, and I'd hate to do it all over the place. And
if we do it in copy_to/from_user(), we don't do it _anywhere_ else: again
the difference is one between a slightly tasteless hack, and a ugly rule of
life.</p>

<p>This is the more complex case, and requires more careful code in
&lt;asm/uaccess.h&gt;. The "generic" arbitrarily-sized functions should
probably be moved out-of-line into arch/xxx/lib/uaccess.c, because that test
is no longer worth doing inline. Together with benchmark runs.</p>

</li>

</ul>

<p>See? "slightly tasteless" and "strictly localized" are ok. Anything more
hackish than that is not.</p>

</quote>

<p>This non-rejection of RTLinux may have been taken by some as an additional
endorsement, because much of the thread focused on that alternative. For
instance, elsewhere in the thread Victor Yodaiken also extolled RTLinux,
putting in, <quote who="Victor Yodaiken">RTLinux now works on Linux all
Linux versions up to 2.4.test and PowerPC,Alpha, as well as x86 (Mips
soon).</quote> He added, <quote who="Victor Yodaiken"> The RTLinux patch was
always small. The complexity is in what it does. Despite my complaints, Ingo
and Linus, with a small contribution from yours truly, have really
simplified the 2.3 irq interface and made it easier to track in
RTLinux.</quote></p>

<p>There were also variations on the RTLinux theme: Richard Gooch proposed the
idea of having two schedulers, a real-time scheduler and the normal Linux
scheduler. As he envisioned it, different apps would use the scheduler
appropriate to their needs. This idea did not find much support however.</p>

<p>Folks like Steve VanDevender characterized the main debate as being between
two fundamentally opposed ideas. They argued that Linux was a time-sharing
operating system, designed to distribute resources fairly among multiple
users, while real-time systems needed to preemptively take control of all
needed resources, whether other processes wanted them or not. To Steve and
others, this issue simply could not be fully resolved.</p>

<h3>Low Latency In The Main Kernel</h3>

<p>Surprisingly, Linus later came out against this very wing of discussion that
had seemed to support his position. At one point, he said:</p>

<quote who="Linus Torvalds">

<p>I personally would rather see that nobody ever
needed RTlinux at all. I think hard realtime is a waste of time, myself, and
only to be used for the case where the CPU speed is not overwhelmingly fast
enough (and these days, for most problems the CPU _is_ so overwhelmingly
"fast enough" that hard realtime should be a non-issue).</p>

<p>I definitely agree with low-latency requirements even in a standard Linux. I
just disagree violently with doing them with horrible cludges instead of
working on doing it right.</p>

</quote>

<p>In a seperate post, he went on:</p>

<quote who="Linus Torvalds">

<p>_if_ there are truly hard guarantee
requirements, RTLinux is the way to go.</p>

<p>The number of problems that really need RT-linux is practically zero for
normal uses. This is, btw, why I've never applied the RTLinux patches to the
standard kernel tree. My personal opinion is that the RTLinux patches should
_not_ be available by default, so that only people who really need the
functionality start using it.</p>

<p>Having non-hard-RT users start using the RTLinux functionality would be a
disaster, in my opinion. The programming-interfaces are much more
cumbersome, and the ways of making the system lock up hard are many and
varied.</p>

<p>If you do a computer-controlled radiation-dose machine for treating
patients, and the latency guarantees have to be in the sub-100ms range, THEN
you should use RTLinux.</p>

<p>If you're doing just audio that needs approximately 1% fo the CPU resources,
and you have to use hard-realtime, the system needs work. Using RTLinux is a
way of saying "oh, we can't fix this properly".</p>

<p>NOTE: I'm fully aware of the fact that Linux needs improvment in this area.
I've tried to explain that my beef with the low-latency patches has never
been that I don't believe it is a worthy goal. It's just that I also firmly
believe that there are right ways of doing this. Without ugly patches that
add random stuff to random places.</p>

</quote>

<p>In light of these posts, Larry also clarified his own position:</p>

<quote who="Larry McVoy">

<p>I guess the problem I have is that I don't see a
clean way to make sure that no high latency events ever creep into the
kernel. I'm 100% in agreement with the idea that all code paths through the
kernel should be short and sweet, but that isn't always the case. All it
takes is one misbehaving driver that hangs onto the CPU too long and you
missed your deadline.</p>

<p>I'm not a fan of realtime either but I hate half assed realtime creeping
into a time sharing kernel - everything I know personally or have read about
says that this is a bad idea.</p>

<p>Given all that, if you want to take a Linux box and use it to drive a pile
of devices with hard guarentees (think factory floor, CNC devices, mixers,
lots of stuff that is currently done in ASICs), then you need a better
answer than Linux gives, even with the Ingo patches.</p>

</quote>

<p>He added in the same post, <quote who="Larry McVoy">I'd rather support
RTLinux than see lots of kludges being slipped into the generic
kernel.</quote></p>

<p>Here Linus agreed that badly written drivers would be a problem, but he
pointed out that <quote who="Linus Torvalds">the approach that the patches
so far have taken is to just add scheduling points all over the map.</quote>
And regarding RTLinux he reiterated, <quote who="Linus Torvalds">In many
cases I just think that RTLinux is a worse fix than the disease. I think
RTLinux is perfect for those things that truly need latency guarantees: no
OS at _all_ in the way. But using it for "normal" stuff like just streaming
audio and video is overkill. They don't have microsecond latency
requirements.</quote></p>

<p>Up until this general area of the discussion, the proponents of low-latency
had argued against the RTLinux faction on several grounds. Firstly they felt
that it would not answer all their technical needs, i.e. they claimed it was
simply not a good solution for various reasons. Secondly, because RTLinux
was not part of the mainstream kernel and was not found in any major
distribution, they argued that the audio/video applications they wanted to
develop would be unable to run on most systems. Those in favor of RTLinux
had argued that RTLinux would get into more distributions if the software
apps were made available; and they also argued that RTLinux was not as
technically deficient as the petitioners had thought. There had been a lot
of discussion back and forth on these points, but now Benno Senoner (one of
the proponants of the real-time petition) replied to Linus with relief. He
felt that Linus' remarks were right in line with what he and others wanted
to hear, and asked if Linus would apply properly done low latency patches to
2.4, or if it would have to wait until 2.5; Linus replied:</p>

<quote who="Linus Torvalds">

<p>I can apply the obvious stuff today. But it
would need to be a clean patch, and I suspect that the only part that I
would consider truly obvious would be the user copy part. And adding a test
for "need_resched" does imply not inlining them any more, it's already
border-line, and the re-scheduling makes it obviously so (by the time you
can potentially call "schedule()", the compiler has to save/restore all the
call-clobbered registers anyway, so 90% of the advantages of inlining have
been destroyed, making the disadvantages like icache footprint etc clear).</p>

<p>Note that regardless of _what_ the problem is, I always prefer incremental
patches anyway. Maybe people in the end can convince me that every single
scheduling point makes 100% sense, and is not a hack at all but a natural
thing. Even if that were the case, I'd like to get the thing in smaller and
explainable pieces..</p>

</quote>

<p>Paul replied here, finding Linus' statement about accepting scheduling
points to be possibly inconsistant with an earlier statement, that he
refused to have a kernel that was "bogged down with random crap all over the
place". Paul went on:</p>

<quote who="Paul Barton-Davis">

<p>Maybe its just that I'm too philosophical and
you're too pragmatic. I can see 2 possibilities from here:</p>

<ol>

<li>your revulsion at "random" scheduling points is a really strong belief
that would likely make convincing you of the value of each particular point
impossible,</li>

<li>you you accept the idea that there may need to be a bunch of "random"
scheduling points for this to work, and whilst you consider this ugly, you
accept that there isn't much of an alternative. people will have to have a
lot of good numbers to convince you to apply a patch that adds a scheduling
point.</li>

</ol>

<p>Do either of these sound like a reasonable summary of your position, or is
there some other precis?</p>

</quote>

<p>Linus replied:</p>

<quote who="Linus Torvalds">

<p>I _am_ pragmatic. That which works, works, and
theory can go screw itself.</p>

<p>However, my pragmatism also extends to maintainability, which is why I also
want it done well.</p>

</quote>

<p>He also replied to each of Paul's two interpretations of his position. To
the first, Linus said:</p>

<quote who="Linus Torvalds">

<p>I want more than an explanation like "I ran our
latency tester, and this point seemed to be really bad, so I added a
scheduling point here".</p>

<p>For example, for the specific read/write user-copy code, I don't even need
to get numbers. It's clear that with a machine that has tons of memory, and
where the data is cached, we can generate a "read()" system call that spends
quite a lot of time without needing any active re-scheduling. This is not a
random point: it's something that can be clearly explained from the sources,
and a case where there clearly is no better solution unless you fully thread
the thing.</p>

</quote>

<p>To the second, Linus said, <quote who="Linus Torvalds">More than just
numbers, but yes. I'd like to know that the code isn't just crap. For
example, let's say that something uses an O(n^3) algorithm, and to
"overcome" the expense of this thing we add scheduling points in it. That's
the easy way to do it. But maybe the right thing to do is to realize that
the code may be badly structured in the first place?</quote></p>

<p>So to sum up the discussion, it appears that Linus is at least willing to
consider patches that would make the petitioners happy, but he has some
strict views on what would be acceptible. It's not clear that any solution
will definitely be found or is even possible, but the guidelines have been
set for future development. In the meantime, RTLinux remains at least a
plausible interim solution for people needing to do their streaming
audio/video work under Linux now.</p>

<p>RTLinux first came up in <kcref subject="Linux Kernel constraints!"
startdate="21 Jan 1999 00:00:00 -0800"></kcref>. Then (aside from a couple very brief
mentions) not until <kcref subject="user-mode kernel 2.3.15-2um"
startdate="04 Sep 1999 00:00:00 -0800"></kcref>, where it was asserted that RTLinux would
not always be needed for real-time audio. RTLinux was involved in a bit of a
trademark discussion in <kcref subject="Linux trademark garbage"
startdate="06 Feb 2000 00:00:00 -0800"></kcref>. RTLinux was most recently put forward as a
solution for real-time needs in <kcref subject="System response time for
Linux" startdate="10 May 2000 00:00:00 -0800"></kcref>.</p>

<p>Other discussions of real-time needs were covered in <kcref subject="Real
Time scheduler?" startdate="07 Feb 1999 00:00:00 -0800"></kcref>. A battle to make the
standard Linux scheduler more real-time was fought in <kcref subject="2.2.2:
2 thumbs up from lm" startdate="24 Feb 1999 00:00:00 -0800"></kcref>. Most recently the need
for real-time scheduling was again suggested in <kcref subject="MP3 skippety
skip skipageness" startdate="09 Mar 1999 00:00:00 -0800"></kcref>.</p>

</section>

<section
  title="Linus Inadvertantly Steps Into Minor Filesystem Dispute"
  subject="[patch-2.4.0-test3-p2] misc fixes."
  archive="http://kernelnotes.org/lnxlists/linux-kernel/lk_0006_05/msg00257.html"
  posts="5"
  startdate="30 Jun 2000 00:00:00 -0800"
  enddate="06 Jul 2000 00:00:00 -0800"
>

<mention>Philipp Rumpf</mention>

<p>Tigran Aivazian posted a patch, and explained:</p>

<quote who="Tigran Aivazian">

<p>This patch does:</p>

<ol>

<li>small fix to microcode driver - the "cc clobber" directive is not needed
for cpuid instruction as it doesn't change EFLAGS. Neither it is needed in
general in asm-i386/processor.h:cpuid() inline (this was pointet out by
Philipp Rumpf but for some reason didn't appear in test3-preX)</li>

<li>amended comment in fs/inode.c:iput() to reflect the truth, i.e. it is
not a "magic nfs path" but the fact that anonymous inodes are not put on
unused list</li>

<li>documented the fact that for FS_SINGLE filesystems the driver must call
kern_mount() after register_filesystem(). This already confused others (e.g.
Richard Gooch) so imho it is worth pointing out.</li>

<li>kern_mount() is supposed to be used only with FS_SINGLE filesystems but
the code doesn't enforce it. This patch makes kern_mount() fail with EINVAL
on attempt to call it on non-FS_SINGLE filesystems.</li>

</ol>

</quote>

<p>Linus Torvalds replied to the fourth item, <quote who="Linus Torvalds">Ugh.
Would it not be 100% cleaner to just do this automatically for FS_SINGLE
filesystems upon register/unregister?</quote> Richard Gooch replied, <quote
who="Richard Gooch">That's what I said weeks ago! But Al preferred to keep
the two operations separate,</quote> and Tigran quoted Alexander Viro in an
discussion on the fsdevel mailing list, where Alexander said, <quote
who="Alexander Viro">I don't think so. They are different operations and I'm
not too happy about mixing them together. Matter of taste, but...</quote></p>

<p>There was no reply to Tigran on linux-kernel, but in that fsdevel
discussion, Richard had replied to Alexander, <quote who="Richard
Gooch">Yeah, I know. Having it documented would satisfy me. Getting a kernel
BUG after adding FS_SINGLE was a shock: "what the %@$&amp; ?!?".</quote></p>

</section>

<section
  title="More Flames Over Latency"
  subject="Low Latency Patch"
  archive="http://kernelnotes.org/lnxlists/linux-kernel/lk_0006_05/msg00186.html"
  posts="78"
  startdate="29 Jun 2000 00:00:00 -0800"
  enddate="09 Jul 2000 00:00:00 -0800"
>
<topic>SMP</topic>

<mention>Robert Dinse</mention>

<p>Robert Dinse had been paying attention to the low latency discussion (see
<kcref subject="a joint letter on low latency and Linux"
startdate="28 Jun 2000 00:00:00 -0800"></kcref>), and decided to try out Ingo's patch. He
found interactive response on heavily loaded machines to be drastically
improved. The only problem he found was that they worsened the existing
likelihood of spin-lock deadlocks on Sparc SMP. He voted for including the
patch in the main kernel as a config option. Victor Khimenko replied in
frustration, <quote who="Victor Khimenko">Argh. Have you READ any Linus's
letter on subject ? "It's all about maintability, stupid". If you think tens
(if not hundreds) ifdef's spread all over kernel three is easier to maintain
then external patch then think again. Patch is not accepted NOT since goal
is wrong. It's completely other story: this patch makes maintaining of
kernel sources nightmare. Configuration option can not help maintainers. Not
at all.</quote> Robert felt this was being a bit harsh, and reiterated that
the low-latency patch had a huge impact on performance under load. There
were a lot of angry words between them, and others joined in as well. A lot
of folks pointed to Linus' remarks in other discussions as settling the
issue, and eventually the thread petered out.</p>

</section>

<section
  title="Spinlocks Broken In Some Distributions"
  subject="spinlocks() are severely broken in 2.2.X and 2.4.X for modules"
  archive="http://kernelnotes.org/lnxlists/linux-kernel/lk_0006_05/msg00378.html"
  posts="32"
  startdate="30 Jun 2000 00:00:00 -0800"
  enddate="06 Jul 2000 00:00:00 -0800"
>

<mention>Andi Kleen</mention>

<p>Jeff V. Merkey reported:</p>

<quote who="Jeff V. Merkey">

<p>I have spent the past five and one half weeks
chasing down a severe memory corruption problem in the NWFS LRU. The problem
I am reporting is what has caused ALL the bugs folks have seen over the past
couple of months in NWFS with memory corruption. It's what's held up our
next release by over two months. Despite screaming customers, I have held
off on posting the next release until I understood clearly what was going on
-- now I know -- Linux spinlocks() don't work when used by kernel modules in
linux that include spinlock.h.</p>

<p>NWFS is fully multi-threaded and uses fine grained locking.  Much of Linux
is not fine grained, which would explain why I may be one of the few folks
to first see this problem. Initially, I was under the assumption that the
spinlocks() in Linux worked, and because of this, focused my attention on my
own code rather than scrutinize the code in Linux. I rewrote large sections
of NWFS, put in traps, and checks, list consistency routines, etc. It was
not until I put in a check for multiple users being inside the same lock
that I located the problem. Well, I have completed a very thorough analysis
of generated IA32 code, and I have discovered something rather shocking,
which is that the spinlock code in Linux is severely broken, and this is not
due to a coding error, but a problem with the GCC compiler apparently
generating garbage. There's also several issues with using "lock bts"
instead of "xchg eax, 1", which is the recommended method for implementing
spinlocks() on IA32 intel systems.</p>

<p>What's really scary here is that a great deal of new code has been written
that depends on this spinlock code, and once the spinlock code gets fixed
properly, we may see tons of deadlocks and lockups all over the place since
this code has been there for a very long time.</p>

</quote>

<p>He posted a lot of code and analysis to prove his claim, and various folks
hunted for alternative explanations. At one point the seriousness of the
situation was made clear when Manfred Spraul remarked <quote who="Manfred
Spraul">Changing the spinlock code is IMHO not a solution: we rely on
.text.somewhere_else very often (spinlock, semaphore, exception handler
table, init functions, initcall,...)</quote></p>

<p>Eventually, Jeff reported that he and Andi Kleen had tracked the problem to
a <quote who="Jeff V. Merkey">bug in gas/ld with relocation records for the
.text.lock section being created by the spinlock macro.</quote> After some
more discussion, folks seemed to settle on the idea that the situation
should just be fixed in 'binutils'. But Jeff also remarked, <quote who="Jeff
V. Merkey">The bad news is that the binaries in OpenLinux 2.4 (GLIB/EGCS)
seem to cause this problem when installed by default -- RedHat 6.2 and the
latest Suse Linux were both clean.</quote></p>

<p>Finally, Jeff concluded, <quote who="Jeff V. Merkey">Consider this problem
report to be potentially "bogus" since it was apparently isolated to
OpenLinux 2.4 and does not seem to affect other Linux versions. The
spinlocks aren't broken generally, just in the OpenLinux 2.4 case.</quote></p>

</section>

<section
  title="Small Latency Patch Has Ambiguous Results"
  subject="[PATCH] latency improvements, one reschedule moved"
  archive="http://kernelnotes.org/lnxlists/linux-kernel/lk_0006_05/msg00422.html"
  posts="6"
  startdate="01 Jul 2000 00:00:00 -0800"
  enddate="08 Jul 2000 00:00:00 -0800"
>
<topic>Real-Time</topic>

<mention>Roger Larsson</mention>

<p>For more on latency and real-time issues, see <kcref subject="a joint letter
on low latency and Linux" startdate="28 Jun 2000 00:00:00 -0800"></kcref> and <kcref
subject="Low Latency Patch" startdate="29 Jun 2000 00:00:00 -0800"></kcref>.</p>

<p>Roger Larsson posted a patch to clean up 'kswapd' and move its reschedule
point. As far as he could tell, the patch really improved latency. He
replied to himself a few days later with a new patch to correct some bugs
and other problems with the the previous patch. He reported a slight
performance drop, but an even better latency improvement. Linus included the
patch in 2.4.0-test3-pre4, and Zlatko Calusic reported a pleasing tremor of
the soul. He said:</p>

<quote who="Zlatko Calusic">

<p>The I/O bandwidth has greatly improved and I'm
still trying to understand how can patch this simple be so effective. :)</p>

<p>Great work Roger!</p>

<p>I see this as the first (and most critical) step of returning my faith in
good performing 2.4.0-final.</p>

</quote>

<p>Roger replied that actually, the performance boost Zlatko saw was
unintentional. He speculated briefly, then rushed off to code.</p>

</section>

<section
  title="Latency Profiling"
  subject="[PATCH] latency-profiling for 2.4.0-test3-pre2"
  archive="http://kernelnotes.org/lnxlists/linux-kernel/lk_0007_01/msg00206.html"
  posts="4"
  startdate="03 Jul 2000 00:00:00 -0800"
  enddate="07 Jul 2000 00:00:00 -0800"
>
<topic>Disks: IDE</topic>
<topic>Real-Time</topic>
<topic>SMP</topic>
<topic>Sound: ALSA</topic>

<mention>Benno Senoner</mention>
<mention>Andrew Morton</mention>
<mention>Roger Larsson</mention>

<p>For more on latency and real-time issues, see <kcref subject="a joint letter
on low latency and Linux" startdate="28 Jun 2000 00:00:00 -0800"></kcref>, <kcref
subject="Low Latency Patch" startdate="29 Jun 2000 00:00:00 -0800"></kcref>, and <kcref
subject="[PATCH] latency improvements, one reschedule moved"
startdate="01 Jul 2000 00:00:00 -0800"></kcref>.</p>

<p>Roger Larsson responded to all the recent latency discussion by updating his
latency profiling patch to the latest development kernel, 2.4.0-test3-pre2.
He posted the patch, then replied to himself with an update and a <a
href="http://www.norran.net/nra02596/latency-profiling.html">pointer to more
info</a>. After yet another update, Samuel S Chessman reported:</p>

<quote who="Samuel S Chessman">

<p>I have been following the latency issue for
some time now and I am happy to report great strides have been taken in
improving latency in the Linux 2.4.0-test2-pre? series of patches.</p>

<p>Here is a snapshot of some results that show promise! I hope to repeat them
on an SMP system soon.</p>

<p>Benno Senoner's (sbenno at gardena dot net) latencytest used for these
charts: See <a
href="http://www.gardena.net/benno/linux/audio/latencytest-0.42.tar.gz">http://www.gardena.net/benno/linux/audio/latencytest-0.42.tar.gz</a>
for the source.</p>

<p><a
href="http://www.tux.org/~chessman/bench/latencytest/">http://www.tux.org/~chessman/bench/latencytest/</a>
has preliminary results with charts showing the differences when hdparm
unmaskirq and 32bit are toggled.</p>

<p>I varied the hdparm 16/32 bit I/O and interrupt unmasking, and got a non
intuitive result, better results for 16 bit I/O, unmasking disabled. Tonight
I will run the test with the other two cases and see if it correlates to one
of them.</p>

<p>System under test is a Dell GX1 400MHz PII IDE disk, running</p>

<ul>

<li>linux-2.4.0-test2-pre5</li>
<li>mm/filemap.c patches from Andrew Morton dated Thu Jul 06 2000 - 23:21:48 EDT</li>
<li>ALSA-driver 0.5.8b</li>
<li>XFree86 Version 3.3.6 w/ Mach64, glx.o, agpart kernel module</li>

</ul>

<p>All tests are showing greater than 99% +/- 2ms for the disk tests. The
overruns appear to be mm related, Andrew's patch indicated sys_close() and
sys_exit() still need attention.</p>

<p>This is getting close to usable for my purposes!</p>

</quote>

<p>End Of Thread (tm).</p>

</section>

<section
  title="Latency Benchmarks And Prognosis"
  subject="[DATAPOINT] kernels and latencies"
  archive="http://kernelnotes.org/lnxlists/linux-kernel/lk_0007_01/msg00386.html"
  posts="28"
  startdate="03 Jul 2000 00:00:00 -0800"
  enddate="07 Jul 2000 00:00:00 -0800"
>
<topic>Real-Time</topic>

<mention>Alan Cox</mention>
<mention>Rik van Riel</mention>

<p>For more on latency and real-time issues, see <kcref subject="a joint letter
on low latency and Linux" startdate="28 Jun 2000 00:00:00 -0800"></kcref>, <kcref
subject="Low Latency Patch" startdate="29 Jun 2000 00:00:00 -0800"></kcref>, <kcref
subject="[PATCH] latency improvements, one reschedule moved"
startdate="01 Jul 2000 00:00:00 -0800"></kcref>, and <kcref subject="[PATCH]
latency-profiling for 2.4.0-test3-pre2" startdate="03 Jul 2000 00:00:00 -0800"></kcref>.</p>

<p>Roger Larsson had gone through his collection of data and found that, in
terms of latency, the best kernel not patched with Ingo's latency patches,
was the combination of:</p>

<quote who="Roger Larsson">

<ul>

<li>Linus......... linux-2.4.0-test1</li>

<li>Alan Cox...... linux-2.4.0test1-ac22-riel</li>

<li>Rik van Riel.. mail sent to linux-kernel and linux-mm with a subject of
"[PATCH] -ac22-riel++"</li>

</ul>

</quote>

<p>He reported, <quote who="Roger Larsson">It works perfectly for streaming
read/write/copy (latencies to SCHED_FIFO process below 5 ms !) but fails for
mmap002 with latencies &gt; 180 ms</quote> and gave a pointer to <a
href="http://www.norran.net/nra02596/">his audio page</a> which included his
latency profiling patches.</p>

<p>Andrew Morton replied with some very promising benchmarks of his own, though
he was not in full agreement with Roger's methods. They went back and forth
a bit, and other folks joined in, the upshot being that maintaining low
latency will probably remain fairly difficult for the foreseeable future,
though it should be possible with the proper configuration and hardware (at
one point, Andrew remarked, <quote who="Andrew Morton">In the meanwhile,
this probably means that people who require low latency will need to buy an
RS232 mouse. That's OK.</quote>)</p>

</section>

<section
  title="Dynamic Inode Allocation"
  subject="BK performance tip (22x faster)"
  archive="http://kernelnotes.org/lnxlists/linux-kernel/lk_0007_01/msg00676.html"
  posts="9"
  startdate="05 Jul 2000 00:00:00 -0800"
  enddate="08 Jul 2000 00:00:00 -0800"
>
<topic>FS: sysfs</topic>
<topic>Version Control</topic>

<mention>Andrea Arcangeli</mention>
<mention>Larry McVoy</mention>
<mention>Richard Gooch</mention>

<p>Larry McVoy reported that a BitKeeper performance problem could be traced to
not enough inodes on the system. By default, Linux set 16384 inodes, which
was just under the ammount needed by BitKeeper to house the entire kernel.
By issuing the command 'echo 65536 &gt; /proc/sys/fs/inode-max', Larry was
able to raise the number of inodes and reduce BitKeeper's running time by a
huge amount. He suggested raising the default number of inodes to 32K or
more. Richard Gooch replied that he'd had a similar problem, and had used
the same solution, but had noticed that 2.3.99 and later kernels didn't have
the control Larry'd used. He asked if inode generation had become dynamic in
the later kernels, and Andrea Arcangeli replied that yes, it had; and Chuck
Lever explained, <quote who="Chuck Lever">2.3/4 kernels use a SLAB cache for
inodes, instead of an ad hoc cache. the old limit was used to determine when
to reap inodes. the new system reaps them automatically when system memory
is short.</quote> Richard was thrilled to hear this, and the thread skewed
off and petered out.</p>

</section>

<section
  title="Configuring Number Of CPUs On SMP Systems"
  subject="CONFIG_SMP_CPUS"
  archive="http://kernelnotes.org/lnxlists/linux-kernel/lk_0007_02/msg00163.html"
  posts="8"
  startdate="09 Jul 2000 00:00:00 -0800"
  enddate="10 Jul 2000 00:00:00 -0800"
>
<topic>SMP</topic>

<mention>Matthew Wilcox</mention>
<mention>Ingo Molnar</mention>

<p>Matthew Wilcox posted a small patch to make the number of processors on SMP
systems a config option, rather than a hard coded value in the source code.
Ingo Molnar replied that he'd been doing this for a long time himself, and
could vouch for the stability of the patch; but he cautioned that if the
number of CPUs exceeded the amount configured, the machine could crash in
subtle and hard-to-debug ways. He posted a patch of his own to take care of
that, and Dimitris Michailidis proposed, <quote who="Dimitris Michailidis">A
better solution is to group the various per-cpu data into a single structure
instead of having them scattered as they are now, and then allocate as many
of these structures as there are CPUs. This allocation can be done
automatically by the CPU detection and boot-up code, you don't have to
specify manually the number of CPUs. This also allows the same compiled
kernel to be used on machines with different numbers of CPUs. Have a look at
my PDA patch at <a
href="http://reality.sgi.com/dimitris_engr/pda_patch-2.4.0-1">http://reality.sgi.com/dimitris_engr/pda_patch-2.4.0-1</a>
for how this can be done.</quote> There was no reply.</p>

</section>

</kc>
