Advertisement
cae7291

irqtune FAQ version 0.6

Dec 17th, 2015
499
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 46.83 KB | None | 0 0
  1. IRQTUNE -- A Linux IRQ Priority Optimizer file:///tmp/irqtune.html
  2.  
  3.  
  4. IRQTUNE -- A Linux IRQ Priority
  5. Optimizer
  6.  
  7.  
  8. Copyright 1996, 1997 by Craig Estey.
  9.  
  10. irqtune version 0.6
  11.  
  12. Last updated: Sun Oct 19 16:35:00 PDT 1997
  13. See the Changes section at the bottom of this document.
  14. Table of Contents
  15.  
  16.  
  17. irqtune changes the IRQ priority of devices to allow devices that require high priorityand fast service (e.g. serial ports, modems) to have it.
  18.  
  19. With irqtune, a 3X speedup of serial/modem throughput is possible.
  20.  
  21. Where do I get irqtune?
  22.  
  23. irqtune is free software under the terms and conditions of the GNU Public License.
  24. See the file COPYING, included in the distribution, for details.
  25.  
  26.  
  27. The author is Craig Estey, (cae@best.com).
  28. This FAQ is available online via http://www.best.com/~cae/irqtune. This is the
  29. most authoritative reference and will always contain the most up-to-dateinformation.
  30. The distribution is a gzipped tar archive that contains all programs, sources, andthis FAQ (in both HTML and text versions). It is available from:
  31. http://www.best.com/~cae/irqtune/irqtune.tgz
  32. ftp://shell5.ba.best.com/pub/cae/irqtune.tgz
  33. How do I know if I need irqtune?
  34.  
  35. You are running Linux on an x86 PC, other architectures to be implementedlater--Sorry.
  36.  
  37. You probably need irqtune, if you are experiencing any of the following:
  38.  
  39.  
  40. SLIP/PPP transfers seem slow. For example, using a 28.8 (or better) modem, theeffective throughput is approximately 700 bytes/second instead of the expected2500 bytes/second.
  41. A running serial or SLIP/PPP connection is slow, drops data, hangs, or times out.
  42. 1 of 22 03/02/2013 11:36 PM
  43.  
  44.  
  45. IRQTUNE -- A Linux IRQ Priority Optimizer file:///tmp/irqtune.html
  46.  
  47.  
  48. Netscape hangs mysteriously or stalls when trying to access a web page.
  49. Equivalent serial/PPP programs under Windoze run much faster than underLinux.
  50. Disk accesses seem to interfere with SLIP/PPP.
  51. Interrupt handlers for specialized, time critical devices don't get control whenthey need to.
  52. What is actually happening to causethese problems?
  53.  
  54. When the PC boots Linux, the timer is given, by default, the highest IRQ priority inthe system (it's IRQ 0 and thus, priority 0). On a standard configuration, the serialports are priority 11 and 12!!! This means that 10 other devices have higher priority.
  55.  
  56. Q: So what does IRQ priority do?
  57. When multiple devices are in contention to interrupt the CPU, their priority decideswhich interrupts will occur in what order.
  58.  
  59. Q: When does this contention occur?
  60. After an arbitrary period of having interrupts disabled (e.g after a cli), at the pointwhere they're reenabled (sti). This can happen in several places:
  61.  
  62.  
  63. In an ISR that runs with interrupts locked, it happens in the epilog, just before
  64. attempting to execute the bottom-half.
  65. The bottom-half itself may do a lock and unlock.
  66. When a task that enters the kernel to do a system call, the system call handlermay lock and unlock interrupts briefly.
  67. Almost anywhere in the kernel are brief periods where it does a cli to lock
  68. interrupts and then an sti to unlock them again.
  69. Under Linux, from the moment the first instruction of the ISR prolog is executed
  70. until an sti is done (This occurs even in slow interrupts where the prolog does an
  71. sti after just a few instructions).
  72. Q: If there are multiple interrupts now pending, which one getsthe service, the serial or some other?
  73. In the default configuration, the serial ISR will usually lose as it's priority 11.
  74.  
  75. 03/02/2013 11:36 PM
  76.  
  77. 2 of 22
  78.  
  79.  
  80.  
  81. IRQTUNE -- A Linux IRQ Priority Optimizer file:///tmp/irqtune.html
  82.  
  83. How does irqtune help this?
  84.  
  85. irqtune gives priority 0 to whatever device we specify. If we specify a serial device,
  86. irqtune guarantees that the serial ISR gets control whenever a contention occurs.
  87.  
  88. Why does the serial interrupt servicerequire the highest priority?
  89.  
  90. Q: Why does the serial device merit such special treatment?
  91. Serial devices are somewhat unique. Even though they have one of the slowest datarates (relative to a disk), they are the largest consumer of interrupts and areextremely sensitive to interrupt latency (the time from when a device yanks the IRQ
  92. line until its ISR is executed).
  93.  
  94. Q: Could you give a concrete example of this?
  95. For a modem running at 33.6, we can have a peak maximum (with compression)
  96. of 6700 bytes/second. The serial driver programs the silo to interrupt after 8bytes, leaving a latency window of 8 bytes. This means that when the serial portyanks its IRQ line, it can still absorb 8 more characters before its buffer willoverflow and data will be dropped
  97. In terms of time, this means that the maximum that the serial ISR may bedelayed is (8 / 6700) seconds or 1194 microseconds. It also means that the serialISR will require 838 interrupts/second.
  98. Currently there are 52 devices that install their ISR with the SA_INTERRUPToption. This means that they wish to run with interrupts disabled. I have notlooked at all the devices, but just assume for the moment that all will run withinterrupts locked for an arbitrary period.
  99. Assume we've got 4 of them pending (remember, at higher priority). Assume thatthey will lock interrupts individually for 320, 300, 190, and 500 microseconds,
  100. respectively. Assume that the serial ISR also wants an interrupt.
  101. This means that the serial ISR will have to wait for (320 + 300 + 190 + 500) or1310us for these other higher priority ISR's to run to completion. This is greaterthan the maximum of 1194 us.
  102. With internal modems, we probably just see start/stop behavior causing aslowdown. With an external modem, data will be dropped. This will cause PPP
  103. to see a CRC error and request transmission. Remember, the entire packet mustbe retransmitted, which means we just wasted 296-1500 bytes (depending on theselected MRU). With an MRU of 1500 bytes, we just wasted 23.4% of thebandwidth in a given second--all for the loss of a single byte!
  104. 03/02/2013 11:36 PM
  105.  
  106. 3 of 22
  107.  
  108.  
  109.  
  110. IRQTUNE -- A Linux IRQ Priority Optimizer file:///tmp/irqtune.html
  111.  
  112.  
  113.  
  114. Worse yet, consider a 115 Kbps ISDN card that is masquerading as a serialdevice (Yes, I know it should be a DMA device). In this case, the maximum delaythe serial ISR can wait is 695 us. And that's just one ISDN channel. Try addingthe other and, well, golly :-).
  115. Q: In this example, how would boosting serial IRQ priority help?
  116. If the serial IRQ had priority 0, it would get in before the others. It could also
  117. re-interrupt after any individual lockout window. Thus, the maximum it wouldbe forced to wait would be largest individual time, not the summation of all of
  118. these times. In this example, this means 500 us. which is now within the 1194 us.
  119. maximum for the serial ISR.
  120. It has been my experience that the serial device must always win these battles
  121. for contention. When serial devices don't get what they need, when they need it,
  122. they slow horribly or drop data outright.
  123. Isn't that example very unlikely under
  124. Linux?
  125.  
  126. Unlikely doesn't mean never. There are places were the contention period must
  127. occur, no matter how we program the CPU.
  128.  
  129. Variations in CPU speed, RAM size, RAM speed, cache size, disk speed, disk rotationalposition, number and type of other devices, system workload, etc, etc etc, allcontribute to variations of order and timing of internal OS events.
  130.  
  131. Unlikely on one system may mean 1/1000th % chance. On another system, it may
  132. mean happens 50 times/second. Beyond a certain point, it all comes down to
  133. measurement.
  134.  
  135. Tight, accurate, repeatable measurement is the key to system tuning. If we can'tmeasure it, we can't tune it. Once we can measure these things, we can then tryvarious combinations until we achieve our desired results. It can often be pointless toguess at performance.
  136.  
  137. In fact, the interrupt disable windows themselves are used to prevent data corruptioncaused by various parts of the kernel that try to update a data structuresimultaneously and get corrupted. Many of these windows are put there in theunlikely case that such corruption would occur. In this context, unlikely is never
  138. considered a reason to forego interrupt locking. Eliminating a necessary interruptlock window could result in kernel panics, RAM corruption, disk data corruption, etc.
  139.  
  140. Doesn't this hurt the performance ofother devices?
  141.  
  142. 4 of 22 03/02/2013 11:36 PM
  143.  
  144.  
  145. IRQTUNE -- A Linux IRQ Priority Optimizer file:///tmp/irqtune.html
  146.  
  147.  
  148. Not really.
  149.  
  150. In actual practice, most devices don't even notice the difference. Most other devices
  151.  
  152. (e.g. disks, tape, ethernet) are DMA devices. The DMA does most of the work, thus
  153. greatly reducing their need for interrupts. If the device allows a request queue, it mayfunction autonomously on several requests, producing only one interrupt for theentire batch.
  154. Furthermore, serial interrupt services are, themselves, very fast. They slam their dataas quickly as possible and get out ASAP. No fancy calculations, just the minimum,
  155. mindless data transfer. Almost everything else is handled later, in the bottom-half with
  156. interrupts enabled. In fact, a serial ISR may have to re-interrupt it's own bottom-half
  157. several times.
  158.  
  159. Those devices that do experience some slight slowdown are more likely to have longinterrupt disable windows themselves. Having several smaller cli/sti windows is much
  160. better than one large cli/sti window--It's just harder to program.
  161.  
  162. Q: But suppose I want a balanced priority system?
  163. Well, actually a prioritized system behaves like a balanced system--most of the time.
  164. This occurs when all devices have short interrupt lockout windows and short ISRexecution times. The priority mechanism is like a safety valve--it only really matterswhen some device or combination of devices has held interrupts locked for anextended period of time.
  165.  
  166. Q: But doesn't that seem unfair
  167. to other devices?
  168. When a disk ISR gets delayed, that's all that happens, a slight delay--disks and tapes
  169. are not real-time devices. When a serial ISR gets delayed, data is destroyed--serial
  170. devices are real-time devices that dictate the cadence of the entire system.
  171.  
  172. It may sound cruel, but you just can't be fair.
  173.  
  174. And speaking of sound, if the sound card gets delayed, we hear an annoying pop rightin the middle of our favorite piece of music.
  175.  
  176. These are real-time devices that can not tolerate excessive delays. If we must defersome less time critical devices to meet the minimum real-time criteria of devices, then
  177. that's a bargain.
  178.  
  179. Q: But suppose I really want both fast serial and fast disk?
  180. Ultimately, it's a bit of a compromise. Which is better:
  181.  
  182.  
  183. Reliable serial and slightly slower disk.
  184. Slightly faster disk and unreliable serial/modem support.
  185. When paying an ISP for Internet access in $$$/hour, it's an easy decision :-).
  186.  
  187. 03/02/2013 11:36 PM
  188.  
  189. 5 of 22
  190.  
  191.  
  192.  
  193. IRQTUNE -- A Linux IRQ Priority Optimizer file:///tmp/irqtune.html
  194.  
  195. Isn't this IRQ priority thing a bit of anew idea?
  196.  
  197. No. It's actually an old idea. I've been doing device drivers since 1977 and Unixkernel work since 1981. I've personally written 8 serial drivers have used this manytimes commercially. Giving the serial device the highest priority is actually standardpractice in many systems. With a 4Mhz CPU, these problems used to occur at 1200
  198. baud :-)
  199.  
  200. How do I install irqtune?
  201.  
  202. Q: Where should I place irqtune
  203. files?
  204. Decide what directory you would like to contain irqtune's home directory. Some
  205. good choices are: /usr/local, /usr/lib, /usr/lib/hwtools, /home.
  206. Exactly where depends upon your local conventions.
  207. In this example, we'll use /usr/local.
  208. Q: How do I unpack the archive?
  209. Go to the containing directory.
  210. cd /usr/local
  211.  
  212.  
  213. Unpack the tar file:
  214. tar zxvf irqtune.tgz
  215.  
  216.  
  217. This will create a directory, irqtune in /usr/local. This is /usr/local/irqtune. We
  218. will call this IRQTUNE_HOME.
  219. Note: If tar's z option has problems:
  220.  
  221.  
  222. An alternate unpack command:
  223. gzip -d < irqtune.tgz | tar xvf
  224.  
  225.  
  226. Q: How do I do a simple installation?
  227. Go to the IRQTUNE_HOME directory:
  228. cd /usr/local/irqtune
  229.  
  230.  
  231. To install irqtune, enter:
  232. make install
  233.  
  234.  
  235. This will install the files:
  236. /sbin/irqtune
  237. /sbin/irqtune_mod.o
  238. /sbin/irqtune_npr.o
  239.  
  240.  
  241. Q: Why are .o files being placed in the /sbin directory?
  242. As a note to purists, the installation directory is completely arbitrary. /sbin is short,
  243. sweet, and easy to type.
  244.  
  245. 6 of 22 03/02/2013 11:36 PM
  246.  
  247.  
  248. IRQTUNE -- A Linux IRQ Priority Optimizer file:///tmp/irqtune.html
  249.  
  250.  
  251. The standard convention would be to install irqtune as /sbin/irqtune and the .o files
  252. as, say, /usr/lib/irqtune/*.o. irqtune uses a slightly different convention. It wants allinstalled files to be in the same directory. This works fine because argv[0] will point tothe .o files. This also allows:
  253.  
  254.  
  255. Multiple versions of irqtune
  256. to be installed simultaneously (in different
  257. directories).
  258. Simplifies testing of new versions.
  259. Provides better assurance that the built version is correct.
  260. Using one directory produces less clutter.
  261. One directory is more portable across all the myriad kernel revisions.
  262. Future versions of irqtune may imbed the .o's directly into irqtune.
  263. Q: What if I really don't want .o files in /sbin?
  264. If placing .o files in /sbin is deemed to be an anathema, we have two options:
  265.  
  266.  
  267. Simply use another directory in place of /sbin:
  268. make SBIN=/whatever install
  269.  
  270.  
  271. Install with a stub (This will install /sbin/irqtune as a shell script and useIRQTUNE_HOME/sbin/irqtune_*.o):
  272. make INSTALL=sh install
  273.  
  274. Q: Are there any special considerations for this alternateinstallation method?
  275. Yes. If the shell/stub installation method is used:
  276.  
  277.  
  278. IRQTUNE_HOME must not be removed.
  279. If using irqtune from an /etc/rc.d/rc.* file and irqtune
  280. will be invoked before
  281. secondary mounts are done, IRQTUNE_HOME should be placed on the root
  282. device.
  283. How do I use irqtune? Don't I have to
  284. rebuild my kernel?
  285.  
  286. No, we do not have to rebuild the kernel. irqtune uses insmod and rmmod to
  287. dynamically load and unload a kernel module. But it is correct to sense that irqtune isa kernel patch.
  288.  
  289. Q: Ok, if it's a kernel patch, why not just issue a kernel patch likeeverybody else does (e.g. diff -u output)?
  290. irqtune will work even if we don't have the kernel source loaded. It uses insmod to
  291. load the patch, invoke it, and then unload it. The IRQ priority changes will last so longas the kernel is booted.
  292.  
  293. 03/02/2013 11:36 PM
  294.  
  295. 7 of 22
  296.  
  297.  
  298.  
  299. IRQTUNE -- A Linux IRQ Priority Optimizer file:///tmp/irqtune.html
  300.  
  301.  
  302. Q: How do we invoke it?
  303. irqtune takes two arguments optional arguments:
  304.  
  305.  
  306. irqtune master slave
  307. The default is 3 14 which will work for many standard configurations. See What about
  308. my non-standard hardware configuration? for details.
  309.  
  310.  
  311. Here is the usage output from irqtune:
  312. usage: irqtune [options] [master] [slave]
  313.  
  314. version: 0.6
  315.  
  316. arguments:
  317.  
  318. master -- high priority IRQ on PIC master (DEFAULT: 3)
  319.  
  320. slave -- high priority IRQ on PIC slave (DEFAULT: 14)
  321.  
  322. general options:
  323.  
  324. -h -- display help
  325.  
  326. -v -- display irqtune version
  327.  
  328. -o -- reset to original values (0/8)
  329.  
  330. priority table options:
  331.  
  332. -q -- suppress priority table printing
  333.  
  334. -s -- sort table by priority
  335.  
  336. -x -- show inactive devices in table
  337.  
  338. error control options:
  339.  
  340. -e -- show full errors
  341.  
  342. -f -- force loading even if probe detects errors
  343.  
  344. -u -- force module unload
  345.  
  346. -V -- insmod verbose mode
  347.  
  348. -w -- treat warnings as errors
  349.  
  350. documentation options:
  351.  
  352. -F<file> -- use <file> instead of /proc/interrupts
  353.  
  354. -i -- install program
  355.  
  356. -L<directory> --directory to search for insmod
  357.  
  358. -n -- nogo mode (just show what would happen)
  359.  
  360. Q: Could we do this from my /etc/rc.d/rc.local file?
  361. Yes. Just add a /sbin/irqtune line to this file and we're in business. We may also issue
  362. another irqtune command at any time.
  363.  
  364. Q: What if irqtune fails to load?
  365. See the What about irqtune load failures or incompatibilities with kernel revisions?
  366. section.
  367.  
  368. Q: After irqtune
  369. sets a priority, how can we query the results later?
  370. We can't.
  371.  
  372. Due to a limitation of the PC interrupt hardware, it is not possible to read back values
  373. set previously.
  374.  
  375. irqtune will attempt to place a message in the system log (/usr/spool/syslog/syslog)
  376. when it changes the configuration. Examining this log file, or simply invoking irqtune
  377. again, may be the best ways to work around the hardware limitations.
  378.  
  379. 03/02/2013 11:36 PM
  380.  
  381. 8 of 22
  382.  
  383.  
  384.  
  385. IRQTUNE -- A Linux IRQ Priority Optimizer file:///tmp/irqtune.html
  386.  
  387. Note: Some users have tried to use the "-n" option, thinking it will act as a "query"
  388. mode. This option is used, primarily, to generate examples in this document and willnot have the desired effect.
  389.  
  390. What about my non-standard hardwareconfiguration?
  391.  
  392. irqtune defaults for a standard IRQ configuration. It assumes that the highest prioritydevice should be on IRQ 3. This is normally the first serial port on standardconfigurations, which is what you want.
  393.  
  394. Q: How do I determine what my IRQ configuration is?
  395. NOTE: For brevity, we've combined the non-sorted and sorted output in theseexamples.
  396.  
  397.  
  398. Just type /sbin/irqtune -n -o and we'll get something like:
  399. SORTED BY IRQ: SORTED BY PRIORITY:
  400. I00/P00: 8578913 timer I00/P00: 8578913 timer
  401. I01/P01: 109547 keyboard I01/P01: 109547 keyboard
  402. I02/P02: 0 + cascade I02/P02: 0 + cascade
  403. I03/P10: 86470 + serial I11/P05: 197648 + sermux
  404. I04/P11: 197648 + serial I12/P06: 17968 + eth
  405. I11/P05: 197648 + sermux I13/P07: 1 math error
  406. I12/P06: 17968 + eth I14/P08: 93123 + Ux4F
  407. I13/P07: 1 math error I03/P10: 86470 + serial
  408. I14/P08: 93123 + Ux4F I04/P11: 197648 + serial
  409.  
  410. NOTE: /proc/interrupts, and therefore irqtune, only reports on active devices. So toscope out the serial IRQ's, ideally, you'd have X Windows up with your serial mouseand be connected via PPP to the net.
  411.  
  412. Q: OK, we've got the output from /sbin/irqtune -n -o, what do we dowith it?
  413. The leftmost number is the IRQ number. The next number is the priority. Therightmost column is the internal device name (not to be confused with /dev names).
  414. In the above case, the two serial ports are on IRQ 3 and IRQ 4. Just use the lowernumber, in this case 3:
  415.  
  416.  
  417. /sbin/irqtune 3
  418. This sets IRQ 3 to the highest priority.
  419.  
  420.  
  421. After this command, the IRQ priorities are now:
  422. SORTED BY IRQ: SORTED BY PRIORITY:
  423. I00/P05: 8578913 timer I03/P00: 86470 + serial
  424. I01/P06: 109547 keyboard I04/P01: 197648 + serial
  425. I02/P07: 0 + cascade I00/P05: 8578913 timer
  426. I03/P00: 86470 + serial I01/P06: 109547 keyboard
  427. I04/P01: 197648 + serial I02/P07: 0 + cascade
  428.  
  429. 9 of 22 03/02/2013 11:36 PM
  430.  
  431.  
  432. IRQTUNE -- A Linux IRQ Priority Optimizer file:///tmp/irqtune.html
  433.  
  434.  
  435. I11/P12: 197648 + sermux I14/P07: 93123 + Ux4F
  436. I12/P13:
  437. I13/P14:
  438. 17968 + eth
  439. 1 math error
  440. I11/P12:
  441. I12/P13:
  442. 197648 + sermux
  443. 17968 + eth
  444. I14/P07: 93123 + Ux4F I13/P14: 1 math error
  445.  
  446. Q: BTW, What's the cascade device I saw in the output of irqtune?
  447. Glad you asked. There are actually two interrupt controllers, a master and a slave.
  448. The slave is cascaded to the master via its IRQ 2. The master controls IRQ's 0-7 and
  449. the slave controls IRQ's 8-15.
  450.  
  451. You actually may select two high IRQ priorities, one for the master and one for the
  452. slave. irqtune defaults the slave to IRQ 14, which is normally the disk controller.
  453.  
  454. In fact, cascade is sort of a "zero width" device as it does not contribute to interruptlatency. Setting the cascade to top priority on the master has an interesting effect
  455. which we'll see shortly.
  456.  
  457. Q: But we've also got an Ethernet controller on IRQ 12. Whatabout that?
  458. In this case, we might want to use:
  459.  
  460.  
  461. /sbin/irqtune 3 12
  462. because we want our ethernet card to have a higher priority than the disk controller.
  463. Actually if we did have this configuration, setting 3 14 (the default) would make theethernet card, the lowest priority device in the system.
  464.  
  465.  
  466. The resulting priority would be:
  467. SORTED BY IRQ: SORTED BY PRIORITY:
  468. I00/P05: 8578913 timer I03/P00: 86470 + serial
  469. I01/P06: 109547 keyboard I04/P01: 197648 + serial
  470. I02/P07: 0 + cascade I00/P05: 8578913 timer
  471. I03/P00: 86470 + serial I01/P06: 109547 keyboard
  472. I04/P01: 197648 + serial I02/P07: 0 + cascade
  473. I11/P14: 197648 + sermux I12/P07: 17968 + eth
  474. I12/P07: 17968 + eth I13/P08: 1 math error
  475. I13/P08: 1 math error I14/P09: 93123 + Ux4F
  476. I14/P09: 93123 + Ux4F I11/P14: 197648 + sermux
  477.  
  478.  
  479. Q: What about the serial multiplexer card on IRQ 11?
  480. This is a bit tricky because now we've got a serial device on the slave controller. It
  481. would be much better to put all serial cards on the master controller. Things would
  482. stay much simpler.
  483.  
  484. In this case we would want to use:
  485.  
  486.  
  487. /sbin/irqtune 11
  488. The resulting priorities would be more complex and would result in somethinglike:
  489. SORTED BY IRQ: SORTED BY PRIORITY:
  490. I00/P13: 8578913 timer I02/P00: 0 + cascade
  491. I01/P14: 109547 keyboard I11/P00: 197648 + sermux
  492.  
  493.  
  494. 03/02/2013 11:36 PM
  495.  
  496. 10 of 22
  497.  
  498.  
  499.  
  500. IRQTUNE -- A Linux IRQ Priority Optimizer file:///tmp/irqtune.html
  501.  
  502.  
  503. I02/P00: 0 + cascade I12/P01: 17968 + eth
  504. I03/P08: 86470 + serial I13/P02: 1 math error
  505. I04/P09: 197648 + serial I14/P03: 93123 + Ux4F
  506. I11/P00: 197648 + sermux I03/P08: 86470 + serial
  507. I12/P01: 17968 + eth I04/P09: 197648 + serial
  508. I13/P02: 1 math error I00/P13: 8578913 timer
  509. I14/P03: 93123 + Ux4F I01/P14: 109547 keyboard
  510.  
  511.  
  512. Q: Wait a minute. didn't we just specify a slave
  513. IRQ number as the
  514. master
  515. to irqtune?
  516. Yes, this is shorthand way of saying 2 11. You can make a slave device top priority, but
  517. we get no options for the master IRQ. It will always be 2, the cascade device.
  518. Remember, the cascade device contributes no latency delay by itself.
  519.  
  520. Q: So why is this configuration so bad?
  521. Well, we boosted the priority of the serial multiplexer at the expense of the regularserial ports. The only way to allow all serial ports equally high priority is to groupthem on consecutive IRQ's and set the high priority for the lowest of those IRQ's.
  522.  
  523. Q: How can we fix this with software?
  524. We can't.
  525.  
  526. We're limited by the architecture of the PC and its interrupt controllers. Wemust change the IRQ of a device by physical restrapping--we can't do it byreprogramming the priority alone.
  527.  
  528. We'll go back to the earlier example. We'll wave a magic wand and Poof!--assume we
  529. just restrapped the serial multiplexer to IRQ 5:
  530.  
  531.  
  532. /sbin/irqtune 3
  533. The resulting priorities would be:
  534. SORTED BY IRQ: SORTED BY PRIORITY:
  535. I00/P05: 8578913 timer I03/P00: 86470 + serial
  536. I01/P06: 109547 keyboard I04/P01: 197648 + serial
  537. I02/P07: 0 + cascade I05/P02: 197648 + sermux
  538. I03/P00: 86470 + serial I00/P05: 8578913 timer
  539. I04/P01: 197648 + serial I01/P06: 109547 keyboard
  540. I05/P02: 197648 + sermux I02/P07: 0 + cascade
  541. I12/P13: 17968 + eth I14/P07: 93123 + Ux4F
  542. I13/P14: 1 math error I12/P13: 17968 + eth
  543. I14/P07: 93123 + Ux4F I13/P14: 1 math error
  544.  
  545.  
  546. Q: Could we do more of this restrapping, say, with the ethernetcontroller?
  547. Sure. Waving the wand again, we restrap the ethernet card to IRQ 6.
  548.  
  549.  
  550. /sbin/irqtune 3
  551. The resulting priorities would be:
  552. SORTED BY IRQ: SORTED BY PRIORITY:
  553. I00/P05: 8578913 timer I03/P00: 86470 + serial
  554.  
  555.  
  556. 03/02/2013 11:36 PM
  557.  
  558. 11 of 22
  559.  
  560.  
  561.  
  562. IRQTUNE -- A Linux IRQ Priority Optimizer file:///tmp/irqtune.html
  563.  
  564.  
  565. I01/P06: 109547 keyboard I04/P01: 197648 + serial
  566. I02/P07: 0 + cascade I05/P02: 197648 + sermux
  567. I03/P00: 86470 + serial I06/P03: 17968 + eth
  568. I04/P01: 197648 + serial I00/P05: 8578913 timer
  569. I05/P02: 197648 + sermux I01/P06: 109547 keyboard
  570. I06/P03: 17968 + eth I02/P07: 0 + cascade
  571. I13/P14: 1 math error I14/P07: 93123 + Ux4F
  572. I14/P07: 93123 + Ux4F I13/P14: 1 math error
  573.  
  574.  
  575. So in order to get the best overall system, we may need to changeIRQ priority and
  576. physically change the hardware IRQ
  577. configuration?
  578.  
  579. Exactly.
  580.  
  581. Different systems may have highly different criteria for what is optimum. It is,
  582. ultimately, a choice that each system administrator must make based upon thespecific requirements for the particular system in question. We can only provide toolsto do the job, but the final choice is ultimately decided on a case-by-case basis. Thereis no one size fits all solution.
  583.  
  584. What about irqtune load failures or
  585. incompatibilities with kernelrevisions?
  586.  
  587. Q: What's the bottom line?
  588. irqtune makes every attempt to load its kernel module. irqtune probes the kernel,
  589. /proc/ksyms, and insmod. It attempts to detect, correct, or work around anydifficulties. If the problems are truly severe, irqtune will report this also. Normally,
  590. irqtune probes silently, only reporting the results of the local system configuration ifthere's an non-recoverable error.
  591.  
  592.  
  593. To show what irqtune actually checks for each time it's invoked, here is the fullerror output (-e) from irqtune:
  594. irqtune: version is 0.6
  595. irqtune: kernel version 2.0.30
  596. probe: irqtune must be invoked via the full path -- OK
  597. probe: /sbin in $PATH --YES
  598. probe: insmod found in $PATH (/sbin) -- OK
  599. probe: insmod simple execution --OK
  600. probe: insmod has version (2.0.0) -- YES
  601. probe: rmmod found in insmod directory --OK
  602. probe: insmod version supports command line options -- OK
  603. probe: insmod version (2.0.0) compatible with kernel version (2.0.30) -- OK
  604. probe: insmod version should be 2.1.34 (or better) --WARNING
  605. probe: insmod and kernel compatible with CONFIG_MODVERSIONS --OK
  606. probe: irqtune_mod loading will be tried -- OK
  607. probe: kernel version irqtune built under (1.0.0) matches current system -- NO
  608. probe: kernel IRQ handling is compatible -- OK
  609. probe: kernel has module support (CONFIG_MODULES) -- OK
  610.  
  611. 12 of 22 03/02/2013 11:36 PM
  612.  
  613.  
  614. IRQTUNE -- A Linux IRQ Priority Optimizer file:///tmp/irqtune.html
  615.  
  616.  
  617. probe: kernel has symbols -- OK
  618. probe: kernel is using versions (CONFIG_MODVERSIONS) -- NO
  619. probe: kernel symbols are checksummed (CONFIG_MODVERSIONS) -- NO
  620. probe: kernel has /proc/interrupts -- OK
  621. irqtune: simulating IRQ priority of 3/14
  622. I00/P05: 8578913 timer
  623. I01/P06: 109547 keyboard
  624. I02/P07: 0 + cascade
  625. I03/P00: 86470 + serial
  626. I04/P01: 197648 + serial
  627. I11/P12: 197648 + sermux
  628. I12/P13: 17968 + eth
  629. I13/P14: 1 math error
  630. I14/P07: 93123 + Ux4F
  631. irqtune: complete
  632.  
  633.  
  634.  
  635. irqtune probes report YES/NO for informative messages. These may be ignored.
  636. irqtune will automatically compensate for any irregularities found.
  637. irqtune probes report OK/WARNING for problems that may prevent properoperation. These may require changes to the local configuration. Generally, thesemay be ignored unless irqtune fails to load.
  638. irqtune probes report OK/ERROR for problems that will prevent properoperation. These will require changes or upgrades to the local configuration.
  639. If it is believed that the probes are reporting errors when none actually exist, the-f option may be used to force irqtune to continue anyway.
  640. No matter what happens with probes or loads, irqtune will report the final completion
  641. status as its last line: complete or error.
  642.  
  643. Q: What should be checked first?
  644. If we did a simple installation, we must specify the full pathname, even if irqtuneis placed in a directory that is in $PATH. This is required because irqtune uses
  645. argv[0] to locate its irqtune_mod.o file.
  646. /sbin should be in $PATH--this is the probable place for insmod. As a
  647. convenience, irqtune will add /sbin to $PATH automatically.
  648. Be sure that the kernel was built with modules support (CONFIG_MODULES)
  649. enabled. irqtune will probe for and report this condition.
  650. Q: What if the current kernel revision is different from the kernel
  651. revision in the prebuilt modules?
  652. This does not matter. irqtune is 99.44% kernel revision independent. It is almostnever necessary to rebuild the prebuilt modules. If irqtune fails to load the modules,
  653. consider everything in this section carefully before rebuilding irqtune.
  654.  
  655. Notes to programmers:
  656.  
  657.  
  658. The "kernel_version[]" does not need to match the kernel revision for a module
  659. to load successfully.
  660. A module does not need MODVERSIONS to load in a MODVERSIONS kernel.
  661. Rebuilding the binaries before exploring the other options is a lot like Vonnegut'sOFF
  662. switch--it's comforting but not connected to anything :-)
  663.  
  664. 03/02/2013 11:36 PM
  665.  
  666. 13 of 22
  667.  
  668.  
  669.  
  670. IRQTUNE -- A Linux IRQ Priority Optimizer file:///tmp/irqtune.html
  671.  
  672.  
  673. Q: Are there any kernel revisions that irqtune
  674. won't work with?
  675. When irqtune was first released, some experimental changes were made to the kernelto solve the IRQ priority problem by use of a round-robin, balanced priority systemthat was incompatible with irqtune. These changes were ultimately removed but
  676. irqtune will not work with kernel revisions 2.0.15 to 2.0.18. irqtune will detect this
  677. condition and report an error. See the Where can I find additional documentation or
  678. downloads? section.
  679.  
  680. Q: Are there any insmod
  681. revisions that are incompatible?
  682. irqtune first trys to load irqtune_mod.o and falls back to irqtune_npr.o if it detects a
  683. load error in insmod.
  684.  
  685. Some versions of insmod have severe difficulty loading modules when the kernel isusing MODVERSIONS. There is a known bug in insmod:
  686.  
  687.  
  688. 2.1.X insmod prior to 2.1.34 (e.g. 2.1.23)
  689. 2.0.X kernel
  690. kernel built with CONFIG_MODVERSIONS
  691. Loading irqtune_mod.o will crash insmod, partially lock up irqtune's module. irqtunewill detect this and skip the irqtune_mod.o loading entirely.
  692.  
  693. Generally, we should not use an older insmod with a newer kernel (e.g. using a 2.0.X
  694. insmod on a 2.1.X kernel). irqtune will detect and report this.
  695.  
  696. If insmod still has difficulties, we may want to upgrade it to 2.1.34 (or better). Newerversions of insmod are guaranteed to be backward compatible to older kernels. Thiswill increase the probability that the irqtune_mod.o will load and irqtune will not have
  697. to fallback to irqtune_npr.o. Note: insmod is actually part of the modutils package.
  698. modutils under 2.0.X is called modules. See the Where can I find additional
  699. documentation or downloads? section.
  700.  
  701. Q: What is the difference between irqtune_mod.o
  702. and
  703. irqtune_npr.o?
  704. The only kernel symbol that irqtune's kernel module (irqtune_mod.o) uses is printk (to
  705. print a confirmation message to syslog). The irqtune_npr.o module is exactly the same
  706. as irqtune_mod.o except that it does not use printk. Since irqtune pre-checks allparameters before attempting to load the kernel module, the confirmation message isa nicety but not a necessity.
  707.  
  708. Q: What if we don't have ELF binary support?
  709. Well, we should upgrade the kernel as ELF binaries are cool :-). But if that's not
  710. possible, we'll just have to recompile irqtune to create a.out binaries. This is, perhaps,
  711. the only justification for rebuilding irqtune. Just be sure that /usr/src/linux/include
  712. is installed. The exact procedure for building a.out binaries can vary with compilerrevision, so it's important to check the documentation on this (a parameter or twomay need to be added).
  713.  
  714. 03/02/2013 11:36 PM
  715.  
  716. 14 of 22
  717.  
  718.  
  719.  
  720. IRQTUNE -- A Linux IRQ Priority Optimizer file:///tmp/irqtune.html
  721.  
  722.  
  723.  
  724. Then, just type:
  725. make warp9
  726.  
  727.  
  728. Here is the makefile's own documentation:
  729. INSTALLATION:
  730.  
  731. install install prebuilt binaries in /sbin
  732.  
  733. custom create custom installation -- Normally _not_ required -- Try
  734.  
  735. install first (EQUIVALENT: kvers sbin install)
  736.  
  737. uninstall remove prebuilt binaries from /sbin
  738.  
  739. INSTALLATION OVERRIDES:
  740.  
  741. SBIN SBIN=/whatever specify installation directory (DEFAULT: /sbin)
  742.  
  743. INSTALL INSTALL=simple simple installation (DEFAULT: simple)
  744.  
  745. INSTALL=sh install as shell stub
  746.  
  747. INSTALLER installation program (bin/install) (DEFAULT: sbin/irqtune)
  748.  
  749. REBUILDING FROM SOURCE:
  750.  
  751. kvers create kernel_version
  752.  
  753. sbin rebuild binaries from source (full or partial)
  754.  
  755. FORCE FULL REBUILD (requires /usr/src/linux/include):
  756.  
  757. clean remove .o files to force full recompile)
  758.  
  759. warp9 rebuild all (EQUIVALENT: clean kvers sbin install)
  760.  
  761. Q: What about IRQ sharing of serial ports?
  762. Under the 2.0.X (and later) kernels, use of IRQ sharing will defeat IRQ prioritybecause the serial port ISR's are installed as slow rather than fast interrupts (e.g.
  763. they don't use the SA_INTERRUPT flag).
  764.  
  765.  
  766. Change the serial port IRQ configuration so that ports don't share IRQ's
  767. The other option is a kernel source patch to drivers/char/serial.c:
  768. Change the following line:
  769. #define IRQ_T(info) ((info->flags & ASYNC_SHARE_IRQ) ? SA_SHIRQ : SA_INTERRUPT)
  770.  
  771. and replace it with:
  772.  
  773. #define IRQ_T(info) (((info->flags & ASYNC_SHARE_IRQ) ? SA_SHIRQ : 0) | SA_INTERRUPT)
  774.  
  775. Under earlier kernels this is not a problem because the serial ISR was alwaysinstalled with SA_INTERRUPT.
  776.  
  777. What about hardware/configproblems?
  778.  
  779. Q: What if the serial port doesn't work?
  780. The First Law of Computing: Make sure it's plugged in.
  781. Double check the strapping for port and IRQ assignments. Verify that theport/IRQ desired is actually the one that is strapped. Some serial ports willappear to work even if the IRQ is wrong--they will just be extremely slow. Some
  782. Plug-N-Play (PnP) ports may need to be explicitly strapped.
  783. Check for port/IRQ conflicts with other devices. Serial ports may share IRQ
  784. 03/02/2013 11:36 PM
  785.  
  786. 15 of 22
  787.  
  788.  
  789.  
  790. IRQTUNE -- A Linux IRQ Priority Optimizer file:///tmp/irqtune.html
  791.  
  792.  
  793. assignments but sharing an IRQ between a serial port and something else (e.g.
  794. an ethernet card) is fraught with peril. See the previous section about serial IRQsharing under 2.0.X kernels.
  795.  
  796.  
  797. Verify that the IRQ that the kernel reports as a result of auto-detection is the IRQthat was strapped. Some serial ports or hardware configurations can fool theauto-detect. If necessary, use the setserial program (in /etc/rc.d/rc.local) toforce the kernel port/IRQ settings to match the hardware strapping.
  798. Verify that irqtune got the correct IRQ numbers for the specific configuration.
  799. For example, suppose our primary serial port is on IRQ 3, but we gave irqtune
  800. the value 4. We just made the serial device on IRQ 3 into priority 14, not priority
  801. 0.
  802. Verify that the serial port baud rate is set correctly. That is, it is the same aswhat the modem expects. The serial port baud rate also has performanceimplications (See Q: What about increasing the serial port baud rate? for
  803. details).
  804. Q: What if PPP doesn't work?
  805. See the PPP man page and PPP-Howto for best information, but some recommendedoptions:
  806.  
  807.  
  808. asyncmap 0
  809. crtscts
  810. defaultroute
  811. modem
  812. mru 296 mtu 296
  813. passive
  814. AT-like modems have a special character to escape from data mode to commandmode. To avoid confusion here, we'll call this modem escape character a guardcharacter.
  815.  
  816. The default guard character is '+' (decimal 43, hex 2B). Normally, 3 such charactersare required within a special timing sequence.
  817.  
  818. Although it is unlikely, it is still possible that some PPP packets could generate the
  819. guard sequence inadvertantly. To prevent this, we may want to inhibit the generation
  820. of the guard
  821. character in a data sequence. To do this, we would add the additional
  822. PPP option:
  823.  
  824.  
  825. escape 2B
  826. Since '+' is a common ASCII character (PPP escaped characters generate twocharacters), we may wish to use a less common value for the guard character. For
  827. example, a less common value might be (decimal 200, hex C8). We would add anATS2=200 command to our modem dialer script and change the PPP escape option
  828. to C8.
  829.  
  830. Q: Why does PPP consistently drop every second packet sent from
  831. 03/02/2013 11:36 PM
  832.  
  833. 16 of 22
  834.  
  835.  
  836.  
  837. IRQTUNE -- A Linux IRQ Priority Optimizer file:///tmp/irqtune.html
  838.  
  839.  
  840. Linux, resulting in a 50% packet loss?
  841.  
  842. Some braindamaged PPP implementations do not handle PPP flagoptimization!
  843.  
  844. The PPP protocol uses a flag byte to separate packets. Each packet begins with a flagand ends with a second flag.
  845.  
  846.  
  847. Loosely, each packet looks something this:
  848. <FLAG> <PACKET (e.g. header, data, CRC)> <FLAG>
  849.  
  850.  
  851. Thus, a sequence of packets might look like this:
  852. <FLAG><PACKET1><FLAG> <FLAG><PACKET2><FLAG> <FLAG><PACKET3><FLAG> ...
  853.  
  854.  
  855. However, as an optimization, the PPP protocol permits trailing and leading flag
  856. bytes to be combined within a sequence of packets:
  857. <FLAG> <PACKET1> <FLAG> <PACKET2> <FLAG> <PACKET3> <FLAG> ...
  858.  
  859. Although the PPP protocol requires implementations receiving packets to handle flagoptimization, some broken PPP implementations do not understand it!
  860.  
  861. These implementations see the trailing flag, process the packet, then look for a fresh
  862. flag. They don't realize that the trailing flag of PACKET1 may perform double duty as
  863. the leading flag of PACKET2. They will ignore all data until they see a new flag(which, in this example, is the flag between PACKET2 and PACKET3). Thus, PACKET2will be seen as noise data and be ignored. These implementations will only see onlythe odd number packets (e.g. PACKET1, PACKET3, PACKET5, etc.), resulting in a 50%
  864. packet loss!
  865.  
  866. Linux PPP implements flag optimization correctly and enables it by default. As charity
  867. to others, Linux does allow flag optimization to be turned off, but currently, this thisrequires the kernel to be rebuilt.
  868.  
  869. In Linux, to turn off flag optimization on transmit, do the following:
  870.  
  871.  
  872. Edit the file drivers/net/ppp.c
  873. Change the line:
  874. static int flag_time = OPTIMIZE_FLAG_TIME;
  875.  
  876.  
  877. Replace this with:
  878. static int flag_time = 0;
  879.  
  880.  
  881. Rebuild the kernel.
  882. Note: A better solution is to return the defective PPP implementation to the vendorand demand a refund or replacement!
  883.  
  884. Q: How can we be certain that the PPP flag
  885. optimzation loss is
  886. occuring?
  887. By lowering the baud rate to something that is guaranteed not to drop data due tospeed problems (e.g. 300 baud). If we get a consistent 50% loss at this low rate, thisis almost certain proof of the flag optimization problem.
  888.  
  889. 03/02/2013 11:36 PM
  890.  
  891. 17 of 22
  892.  
  893.  
  894.  
  895. IRQTUNE -- A Linux IRQ Priority Optimizer file:///tmp/irqtune.html
  896.  
  897.  
  898. What other performance softwareremedies must be done?
  899.  
  900. Q: What about using hdparm -u to set the interrupt-unmask flag in
  901. the hard disk driver?
  902. This is only necessary for the IDE driver. The SCSI driver has short disable windows
  903. by default. This will shorten the IDE interrupt disable windows.
  904.  
  905. Beware: Without this option, IDE disk activity will almost certainly cause serial datadropouts. If we have an IDE disk, this is mandatory.
  906.  
  907. Q: What about disabling Van Jacobsen header compression in PPP?
  908. This reduces the amount of bottom-half processing the system has to do at theexpense of larger packets being sent. This may be helpful on slower CPU's or heavilyloaded configurations.
  909.  
  910. Q: What about adjusting the MRU/MTU numbers in PPP?
  911. Reducing the MRU/MTU to a minimum (296) reduces the bottom-half processing andflip-buffer latency at the expense of adding extra overhead bytes due to the reducedpacket size. The optimal value will vary from configuration to configuration.
  912.  
  913. Beware: Start with 296 as the optimal may not be 1500.
  914.  
  915. The flip-buffer is a double buffer mechanism in the serial/tty drivers through which
  916. all data must pass. It has a fixed size of only 512 bytes. MRU/MTU greater than the
  917. flip-buffer size may create an internal race condition that may cause dropouts onslower CPU's or heavily loaded configurations.
  918.  
  919. Q: What about going to newer kernel revisions?
  920. Although irqtune will work surprisingly well with just about any kernel revision, thelow level IRQ handlers and device drivers have been vastly improved in the 2.0.Xkernels. This will only improve irqtune's effect.
  921.  
  922. Q: What about increasing the serial port baud rate?
  923. The serial port baud rate should be high enough to support the maximum expectedtransfer rate--but no higher. Higher speed settings place extra strain on the CPU,
  924. increasing the likelihood of overruns.
  925.  
  926. For a 33.6 modem, the minimum baud rate would be 38400. However, with
  927. compression, the expected transfer rate can be as high as 6 KB/second. This wouldrequire a baud rate of 57600. This may strain the CPU, and since the transfer rate isnominally about 4 KB/second, a lower baud rate may be a good compromise.
  928.  
  929. 03/02/2013 11:36 PM
  930.  
  931. 18 of 22
  932.  
  933.  
  934.  
  935. IRQTUNE -- A Linux IRQ Priority Optimizer file:///tmp/irqtune.html
  936.  
  937. The best way is to try several rates, then benchmark them to see which provides thebest overall performance.
  938.  
  939. Note:
  940. Because of backward compatibility to older systems, we can't just set 57600directly with stty, kermit, pppd, etc. Specify 38400 to these programs, and use the
  941. setserial program with an option of spd_hi. For ISDN speeds, use spd_vhi. Other
  942. options are possible so be sure to consult the manpage.
  943.  
  944. How can I tell if irqtune actually didanything for me?
  945.  
  946. Well, first off, if PPP/SLIP was dying mysteriously, it will probably be more reliable.
  947.  
  948. Q: How can we benchmark irqtune?
  949. Run without it and get a feel for the transfer rate:
  950.  
  951.  
  952. Hit many favorite web sites and note the transfer rates in bytes/second. Makelife easy. Netscape is at least one browser that reports transfer rates inbytes/second in the status line.
  953. FTP reports the transfer time of a file in bytes/second. Download (or upload) afew files (300K or greater to smooth out the benchmark) and note the transferrates. Use a mix of ascii and binary files that to see the effect of modem
  954. compression. Binary won't compress too well so the numbers will reflect the real
  955. transfer rate. Ascii files which typically compress 2:1 will up the effective rate by2X, making it more stressful.
  956. Try several things of varying duration, different times of day, different sites toaccomodate variations in network loading. Don't stop until there is an averageset of numbers that are more or less repeatable.
  957. Repeat this using irqtune and note the transfer times again.
  958.  
  959. NOTE: IRQTUNE just won't quit--if you want to test in the original mode again, rebootthe system first.
  960.  
  961. Q: What if we still don't see any real improvement?
  962. It's a matter of probability. Performance measurement is as much art as science.
  963.  
  964.  
  965. We're much more likely to see improvement on a DX2/66 than a Pentium/166.
  966. With the 166, we may be overpowering the problem. We'll still have a problem,
  967. we just won't notice it as much because the Pentium has the extra speed to burn.
  968. A badly tuned Ferrari may still outperform a well-tuned VW :-)
  969.  
  970.  
  971. What problem was occurring before? Which of the symptoms listed earlier ishappening? If performance was 2500 bytes/second before using irqtune, we're
  972. 03/02/2013 11:36 PM
  973.  
  974. 19 of 22
  975.  
  976.  
  977.  
  978. IRQTUNE -- A Linux IRQ Priority Optimizer file:///tmp/irqtune.html
  979.  
  980. less likely to notice the smaller jump to, say, 2800.
  981.  
  982.  
  983. System loading is very light. The problems that irqtune will fix are more likely tohappen when more devices and more work are added. On a certainconfiguration, irqtune had little effect. However, when a brand new SCSI DAT
  984. drive was added, serial performance nosedived. Using irqtune broughtperformance back to the correct level.
  985. We may have a rogue interrupt service that disables interrupts for somethingoutrageous, say 2 ms. This is singularly longer than the 1194 us. in the earlierexample. irqtune will still help, but the real solution here is to reduce interruptlockout times in the other device below the 1194 us. threshold.
  986. Where can I find additional
  987. documentation or downloads?
  988.  
  989.  
  990. man pages for: insmod, hdparm, pppd, setserial
  991. The Linux Documentation Project
  992. Homepage: http://sunsite.unc.edu/LDP
  993. HOWTO's: ftp://sunsite.unc.edu/pub/Linux/doc/HOWTO
  994. The Linux Software Map (Hypertext)
  995. http://www.boutell.com/lsm
  996. Linux v2 Information HQ
  997. http:/www.linuxhq.com
  998. ftp.kernel.org
  999. http://ftp.kernel.org
  1000. 2.0.X kernel and compatible modutils downloads
  1001. ftp://ftp.funet.fi/pub/Linux/kernel/linux/v2.0, ftp://ftp.funet.fi/pub/Linux
  1002. /kernel/linux/v2.0/modules-2.0.0.tar.gz
  1003. ftp://ftp.kernel.org/pub/linux/kernel/v2.0, ftp://ftp.kernel.org/pub/linux
  1004. /kernel/v2.0/modules-2.0.0.tar.gz
  1005. 2.1.X kernel and compatible modutils downloads
  1006. ftp://ftp.funet.fi/pub/Linux/kernel/linux/v2.1, ftp://ftp.kernel.org/pub/linux
  1007. /kernel/v2.1/modutils-2.1.34.tar.gz
  1008. ftp://ftp.kernel.org/pub/linux/kernel/v2.1, ftp://ftp.kernel.org/pub/linux
  1009. /kernel/v2.1/modutils-2.1.34.tar.gz
  1010. 03/02/2013 11:36 PM
  1011.  
  1012. Changes
  1013.  
  1014. Revision 0.2 Changes:
  1015.  
  1016.  
  1017. No code changes
  1018. Major rewrite and expansion of the problem explanation section
  1019. More thorough explanation of how and why irqtune works
  1020. Explanation of why serial devices must be highest priority
  1021. 20 of 22
  1022.  
  1023.  
  1024. IRQTUNE -- A Linux IRQ Priority Optimizer file:///tmp/irqtune.html
  1025.  
  1026.  
  1027.  
  1028. Impact on other devices
  1029. Cleaner and better installation instructions
  1030. Better benchmarking section
  1031. Problem resolution section
  1032. Explanation of my prior misread on the EOI thing
  1033. Revision 0.3 Changes:
  1034.  
  1035.  
  1036. irqtune automatically prints interrupt priority table
  1037. Significantly improved error detection and reporting
  1038. Improved loading under different kernel revisions
  1039. insmod now invoked with -x to improve loading
  1040. Added module without printk's -- irqtune_npr.o
  1041. Special makefile options for difficult or custom rebuilds
  1042. Corrected error in hdparm -u note.
  1043. Improved the non-standard configuration section
  1044. Added note and patch about IRQ sharing under 2.0.X kernels
  1045. Revision 0.4 Changes:
  1046.  
  1047.  
  1048. No code changes
  1049. Updated links in the FAQ to reflect configuration changes at my ISP, best.com.
  1050. Specifically, the FTP address changed from ftp://www.best.com/pub/cae/irqtune.tgz to ftp://ftp.best.com/pub/cae/irqtune.tgz
  1051. irqtune distribution now available via HTTP as well as FTP.
  1052. Consolidated and improved trouble resolution sections.
  1053. Added explanation of irqtune_mod.o vs. irqtune_npr.o.
  1054. Added explanation of /sbin usage.
  1055. Corrected some typos.
  1056. Revision 0.5 Changes:
  1057.  
  1058.  
  1059. Added alternate installation procedure with "INSTALL=" option.
  1060. /sbin is added to $PATH automatically.
  1061. Added "-u" option.
  1062. Consolidated and improved installation documentation.
  1063. Additional trouble resolution documentation.
  1064. Again, updated links in the FAQ to reflect configuration changes at my ISP,
  1065. best.com. Specifically, the FTP address changed from ftp://ftp.best.com/pub/cae/irqtune.tgz to ftp://shell5.ba.best.com/pub/cae/irqtune.tgz
  1066. Revision 0.6 Changes:
  1067.  
  1068.  
  1069. Added an "inb" to force PIC to a determinate state before setting priority.
  1070. Added include of errno.h to allow compilation with newer libc distributions.
  1071. Added code to probe ksyms, kernel, insmod for incompatibilities. Specifically,
  1072. versions of insmod that have bugs (fixed in insmod 2.1.34) are detected andhandled correctly.
  1073. Added "-f" option.
  1074. Added documentation about insmod incompatibilities and upgrades.
  1075. 03/02/2013 11:36 PM
  1076.  
  1077. 21 of 22
  1078.  
  1079.  
  1080.  
  1081. IRQTUNE -- A Linux IRQ Priority Optimizer file:///tmp/irqtune.html
  1082.  
  1083.  
  1084. Added documentation and workaround for broken PPP implementations of PPPflag optimization.
  1085. Added documentation about recommended serial port baud rates.
  1086. Added section with hyperlinks to other documentation and downloads.
  1087. Added irqtune to LSM (finally :-).
  1088. Install script now obsolete. irqtune now self installs. Some moronic systems stilldon't have csh installed.
  1089. Table of Contents
  1090.  
  1091. IRQTUNE -- A Linux IRQ Priority Optimizer
  1092. Where do I get irqtune?
  1093.  
  1094.  
  1095. How do I know if I need irqtune?
  1096. What is actually happening to cause these problems?
  1097. How does irqtune help this?
  1098. Why does the serial interrupt service require the highest priority?
  1099. Isn't that example very unlikely under Linux?
  1100. Doesn't this hurt the performance of other devices?
  1101. Isn't this IRQ priority thing a bit of a new idea?
  1102. How do I install irqtune?
  1103. How do I use irqtune? Don't I have to rebuild my kernel?
  1104. What about my non-standard hardware configuration?
  1105. What about irqtune load failures or incompatibilities with kernel revisions?
  1106. What about hardware/config problems?
  1107. What other performance software remedies must be done?
  1108. How can I tell if irqtune actually did anything for me?
  1109. Where can I find additional documentation or downloads?
  1110. Changes
  1111. Table of Contents
  1112. 03/02/2013 11:36 PM
  1113.  
  1114. 22 of 22
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement