186d7f5d3SJohn Marino# $FreeBSD: src/sys/ufs/ffs/README,v 1.4 1999/12/03 00:34:26 billf Exp $ 286d7f5d3SJohn Marino# $DragonFly: src/sys/vfs/ufs/README,v 1.4 2004/07/18 19:43:48 drhodus Exp $ 386d7f5d3SJohn Marino 486d7f5d3SJohn MarinoIntroduction 586d7f5d3SJohn Marino 686d7f5d3SJohn MarinoThis package constitutes the alpha distribution of the soft update 786d7f5d3SJohn Marinocode updates for the fast filesystem. 886d7f5d3SJohn Marino 986d7f5d3SJohn MarinoFor More information on what Soft Updates is, see: 1086d7f5d3SJohn Marinohttp://www.ece.cmu.edu/~ganger/papers/CSE-TR-254-95/ 1186d7f5d3SJohn Marino 1286d7f5d3SJohn MarinoStatus 1386d7f5d3SJohn Marino 1486d7f5d3SJohn MarinoMy `filesystem torture tests' (described below) run for days without 1586d7f5d3SJohn Marinoa hitch (no panic's, hangs, filesystem corruption, or memory leaks). 1686d7f5d3SJohn MarinoHowever, I have had several panic's reported to me by folks that 1786d7f5d3SJohn Marinoare field testing the code which I have not yet been able to 1886d7f5d3SJohn Marinoreproduce or fix. Although these panic's are rare and do not cause 1986d7f5d3SJohn Marinofilesystem corruption, the code should only be put into production 2086d7f5d3SJohn Marinoon systems where the system administrator is aware that it is being 2186d7f5d3SJohn Marinorun, and knows how to turn it off if problems arise. Thus, you may 2286d7f5d3SJohn Marinohand out this code to others, but please ensure that this status 2386d7f5d3SJohn Marinomessage is included with any distributions. Please also include 2486d7f5d3SJohn Marinothe file ffs_softdep.stub.c in any distributions so that folks that 2586d7f5d3SJohn Marinocannot abide by the need to redistribute source will not be left 2686d7f5d3SJohn Marinowith a kernel that will not link. It will resolve all the calls 2786d7f5d3SJohn Marinointo the soft update code and simply ignores the request to enable 2886d7f5d3SJohn Marinothem. Thus you will be able to ensure that your other hooks have 2986d7f5d3SJohn Marinonot broken anything and that your kernel is softdep-ready for those 3086d7f5d3SJohn Marinothat wish to use them. Please report problems back to me with 3186d7f5d3SJohn Marinokernel backtraces of panics if possible. This is massively complex 3286d7f5d3SJohn Marinocode, and people only have to have their filesystems hosed once or 3386d7f5d3SJohn Marinotwice to avoid future changes like the plague. I want to find and 3486d7f5d3SJohn Marinofix as many bugs as soon as possible so as to get the code rock 3586d7f5d3SJohn Marinosolid before it gets widely released. Please report any bugs that 3686d7f5d3SJohn Marinoyou uncover to mckusick@mckusick.com. 3786d7f5d3SJohn Marino 3886d7f5d3SJohn MarinoPerformance 3986d7f5d3SJohn Marino 4086d7f5d3SJohn MarinoRunning the Andrew Benchmarks yields the following raw data: 4186d7f5d3SJohn Marino 4286d7f5d3SJohn Marino Phase Normal Softdep What it does 4386d7f5d3SJohn Marino 1 3s <1s Creating directories 4486d7f5d3SJohn Marino 2 8s 4s Copying files 4586d7f5d3SJohn Marino 3 6s 6s Recursive directory stats 4686d7f5d3SJohn Marino 4 8s 9s Scanning each file 4786d7f5d3SJohn Marino 5 25s 25s Compilation 4886d7f5d3SJohn Marino 4986d7f5d3SJohn Marino Normal: 19.9u 29.2s 0:52.8 135+630io 5086d7f5d3SJohn Marino Softdep: 20.3u 28.5s 0:47.8 103+363io 5186d7f5d3SJohn Marino 5286d7f5d3SJohn MarinoAnother interesting datapoint are my `filesystem torture tests'. 5386d7f5d3SJohn MarinoThey consist of 1000 runs of the andrew benchmarks, 1000 copy and 5486d7f5d3SJohn Marinoremoves of /etc with randomly selected pauses of 0-60 seconds 5586d7f5d3SJohn Marinobetween each copy and remove, and 500 find from / with randomly 5686d7f5d3SJohn Marinoselected pauses of 100 seconds between each run). The run of the 5786d7f5d3SJohn Marinotorture test compares as follows: 5886d7f5d3SJohn Marino 5986d7f5d3SJohn MarinoWith soft updates: writes: 6 sync, 1,113,686 async; run time 19hr, 50min 6086d7f5d3SJohn MarinoNormal filesystem: writes: 1,459,147 sync, 487,031 async; run time 27hr, 15min 6186d7f5d3SJohn Marino 6286d7f5d3SJohn MarinoThe upshot is 42% less I/O and 28% shorter running time. 6386d7f5d3SJohn Marino 6486d7f5d3SJohn MarinoAnother interesting test point is a full MAKEDEV. Because it runs 6586d7f5d3SJohn Marinoas a shell script, it becomes mostly limited by the execution speed 6686d7f5d3SJohn Marinoof the machine on which it runs. Here are the numbers: 6786d7f5d3SJohn Marino 6886d7f5d3SJohn MarinoWith soft updates: 6986d7f5d3SJohn Marino 7086d7f5d3SJohn Marino labrat# time ./MAKEDEV std 7186d7f5d3SJohn Marino 2.2u 32.6s 0:34.82 100.0% 0+0k 11+36io 0pf+0w 7286d7f5d3SJohn Marino 7386d7f5d3SJohn Marino labrat# ls | wc 7486d7f5d3SJohn Marino 522 522 3317 7586d7f5d3SJohn Marino 7686d7f5d3SJohn MarinoWithout soft updates: 7786d7f5d3SJohn Marino 7886d7f5d3SJohn Marino labrat# time ./MAKEDEV std 7986d7f5d3SJohn Marino 2.0u 40.5s 0:42.53 100.0% 0+0k 11+1221io 0pf+0w 8086d7f5d3SJohn Marino 8186d7f5d3SJohn Marino labrat# ls | wc 8286d7f5d3SJohn Marino 522 522 3317 8386d7f5d3SJohn Marino 8486d7f5d3SJohn MarinoOf course, some of the system time is being pushed 8586d7f5d3SJohn Marinoto the syncer process, but that is a different story. 8686d7f5d3SJohn Marino 8786d7f5d3SJohn MarinoTo show a benchmark designed to highlight the soft update code 8886d7f5d3SJohn Marinoconsider a tar of zero-sized files and an rm -rf of a directory tree 8986d7f5d3SJohn Marinothat has at least 50 files or so at each level. Running a test with 9086d7f5d3SJohn Marinoa directory tree containing 28 directories holding 202 empty files 9186d7f5d3SJohn Marinoproduces the following numbers: 9286d7f5d3SJohn Marino 9386d7f5d3SJohn MarinoWith soft updates: 9486d7f5d3SJohn Marinotar: 0.0u 0.5s 0:00.65 76.9% 0+0k 0+44io 0pf+0w (0 sync, 33 async writes) 9586d7f5d3SJohn Marinorm: 0.0u 0.2s 0:00.20 100.0% 0+0k 0+37io 0pf+0w (0 sync, 72 async writes) 9686d7f5d3SJohn Marino 9786d7f5d3SJohn MarinoNormal filesystem: 9886d7f5d3SJohn Marinotar: 0.0u 1.1s 0:07.27 16.5% 0+0k 60+586io 0pf+0w (523 sync, 0 async writes) 9986d7f5d3SJohn Marinorm: 0.0u 0.5s 0:01.84 29.3% 0+0k 0+318io 0pf+0w (258 sync, 65 async writes) 10086d7f5d3SJohn Marino 10186d7f5d3SJohn MarinoThe large reduction in writes is because inodes are clustered, so 10286d7f5d3SJohn Marinomost of a block gets allocated, then the whole block is written 10386d7f5d3SJohn Marinoout once rather than having the same block written once for each 10486d7f5d3SJohn Marinoinode allocated from it. Similarly each directory block is written 10586d7f5d3SJohn Marinoonce rather than once for each new directory entry. Effectively 10686d7f5d3SJohn Marinowhat the update code is doing is allocating a bunch of inodes 10786d7f5d3SJohn Marinoand directory entries without writing anything, then ensuring that 10886d7f5d3SJohn Marinothe block containing the inodes is written first followed by the 10986d7f5d3SJohn Marinodirectory block that references them. If there were data in the 11086d7f5d3SJohn Marinofiles it would further ensure that the data blocks were written 11186d7f5d3SJohn Marinobefore their inodes claimed them. 11286d7f5d3SJohn Marino 11386d7f5d3SJohn MarinoCopyright Restrictions 11486d7f5d3SJohn Marino 11586d7f5d3SJohn MarinoPlease familiarize yourself with the copyright restrictions 11686d7f5d3SJohn Marinocontained at the top of either the sys/ufs/ffs/softdep.h or 11786d7f5d3SJohn Marinosys/ufs/ffs/ffs_softdep.c file. The key provision is similar 11886d7f5d3SJohn Marinoto the one used by the DB 2.0 package and goes as follows: 11986d7f5d3SJohn Marino 12086d7f5d3SJohn Marino Redistributions in any form must be accompanied by information 12186d7f5d3SJohn Marino on how to obtain complete source code for any accompanying 12286d7f5d3SJohn Marino software that uses the this software. This source code must 12386d7f5d3SJohn Marino either be included in the distribution or be available for 12486d7f5d3SJohn Marino no more than the cost of distribution plus a nominal fee, 12586d7f5d3SJohn Marino and must be freely redistributable under reasonable 12686d7f5d3SJohn Marino conditions. For an executable file, complete source code 12786d7f5d3SJohn Marino means the source code for all modules it contains. It does 12886d7f5d3SJohn Marino not mean source code for modules or files that typically 12986d7f5d3SJohn Marino accompany the operating system on which the executable file 13086d7f5d3SJohn Marino runs, e.g., standard library modules or system header files. 13186d7f5d3SJohn Marino 13286d7f5d3SJohn MarinoThe idea is to allow those of you freely redistributing your source 13386d7f5d3SJohn Marinoto use it while retaining for myself the right to peddle it for 13486d7f5d3SJohn Marinomoney to the commercial UNIX vendors. Note that I have included a 13586d7f5d3SJohn Marinostub file ffs_softdep.c.stub that is freely redistributable so that 13686d7f5d3SJohn Marinoyou can put in all the necessary hooks to run the full soft updates 13786d7f5d3SJohn Marinocode, but still allow vendors that want to maintain proprietary 13886d7f5d3SJohn Marinosource to have a working system. I do plan to release the code with 13986d7f5d3SJohn Marinoa `Berkeley style' copyright once I have peddled it around to the 14086d7f5d3SJohn Marinocommercial vendors. If you have concerns about this copyright, 14186d7f5d3SJohn Marinofeel free to contact me with them and we can try to resolve any 14286d7f5d3SJohn Marinodifficulties. 14386d7f5d3SJohn Marino 14486d7f5d3SJohn MarinoSoft Dependency Operation 14586d7f5d3SJohn Marino 14686d7f5d3SJohn MarinoThe soft update implementation does NOT require ANY changes 14786d7f5d3SJohn Marinoto the on-disk format of your filesystems. Furthermore it is 14886d7f5d3SJohn Marinonot used by default for any filesystems. It must be enabled on 14986d7f5d3SJohn Marinoa filesystem by filesystem basis by running tunefs to set a 15086d7f5d3SJohn Marinobit in the superblock indicating that the filesystem should be 15186d7f5d3SJohn Marinomanaged using soft updates. If you wish to stop using 15286d7f5d3SJohn Marinosoft updates due to performance or reliability reasons, 15386d7f5d3SJohn Marinoyou can simply run tunefs on it again to turn off the bit and 15486d7f5d3SJohn Marinorevert to normal operation. The additional dynamic memory load 15586d7f5d3SJohn Marinoplaced on the kernel malloc arena is approximately equal to 15686d7f5d3SJohn Marinothe amount of memory used by vnodes plus inodes (for a system 15786d7f5d3SJohn Marinowith 1000 vnodes, the additional peak memory load is about 300K). 15886d7f5d3SJohn Marino 15986d7f5d3SJohn MarinoKernel Changes 16086d7f5d3SJohn Marino 16186d7f5d3SJohn MarinoThere are two new changes to the kernel functionality that are not 16286d7f5d3SJohn Marinocontained in in the soft update files. The first is a `trickle 16386d7f5d3SJohn Marinosync' facility running in the kernel as process 3. This trickle 16486d7f5d3SJohn Marinosync process replaces the traditional `update' program (which should 16586d7f5d3SJohn Marinobe commented out of the /etc/rc startup script). When a vnode is 16686d7f5d3SJohn Marinofirst written it is placed 30 seconds down on the trickle sync 16786d7f5d3SJohn Marinoqueue. If it still exists and has dirty data when it reaches the 16886d7f5d3SJohn Marinotop of the queue, it is sync'ed. This approach evens out the load 16986d7f5d3SJohn Marinoon the underlying I/O system and avoids writing short-lived files. 17086d7f5d3SJohn MarinoThe papers on trickle-sync tend to favor aging based on buffers 17186d7f5d3SJohn Marinorather than files. However, I sync on file age rather than buffer 17286d7f5d3SJohn Marinoage because the data structures are much smaller as there are 17386d7f5d3SJohn Marinotypically far fewer files than buffers. Although this can make the 17486d7f5d3SJohn MarinoI/O spikey when a big file times out, it is still much better than 17586d7f5d3SJohn Marinothe wholesale sync's that were happening before. It also adapts 17686d7f5d3SJohn Marinomuch better to the soft update code where I want to control 17786d7f5d3SJohn Marinoaging to improve performance (inodes age in 10 seconds, directories 17886d7f5d3SJohn Marinoin 15 seconds, files in 30 seconds). This ensures that most 17986d7f5d3SJohn Marinodependencies are gone (e.g., inodes are written when directory 18086d7f5d3SJohn Marinoentries want to go to disk) reducing the amount of rollback that 18186d7f5d3SJohn Marinois needed. 18286d7f5d3SJohn Marino 18386d7f5d3SJohn MarinoThe other main kernel change is to split the vnode freelist into 18486d7f5d3SJohn Marinotwo separate lists. One for vnodes that are still being used to 18586d7f5d3SJohn Marinoidentify buffers and the other for those vnodes no longer identifying 18686d7f5d3SJohn Marinoany buffers. The latter list is used by getnewvnode in preference 18786d7f5d3SJohn Marinoto the former. 18886d7f5d3SJohn Marino 18986d7f5d3SJohn MarinoPackaging of Kernel Changes 19086d7f5d3SJohn Marino 19186d7f5d3SJohn MarinoThe sys subdirectory contains the changes and additions to the 19286d7f5d3SJohn Marinokernel. My goal in writing this code was to minimize the changes 19386d7f5d3SJohn Marinothat need to be made to the kernel. Thus, most of the new code 19486d7f5d3SJohn Marinois contained in the two new files softdep.h and ffs_softdep.c. 19586d7f5d3SJohn MarinoThe rest of the kernel changes are simply inserting hooks to 19686d7f5d3SJohn Marinocall into these two new files. Although there has been some 19786d7f5d3SJohn Marinostructural reorganization of the filesystem code to accommodate 19886d7f5d3SJohn Marinogathering the information required by the soft update code, 19986d7f5d3SJohn Marinothe actual ordering of filesystem operations when soft updates 20086d7f5d3SJohn Marinoare disabled is unchanged. 20186d7f5d3SJohn Marino 20286d7f5d3SJohn MarinoThe kernel changes are packaged as a set of diffs. As I am 20386d7f5d3SJohn Marinodoing my development in BSD/OS, the diffs are relative to the 20486d7f5d3SJohn MarinoBSD/OS versions of the files. Because BSD/OS recently had 20586d7f5d3SJohn Marino4.4BSD-Lite2 merged into it, the Lite2 files are a good starting 20686d7f5d3SJohn Marinopoint for figuring out the changes. There are 40 files that 20786d7f5d3SJohn Marinorequire change plus the two new files. Most of these files have 20886d7f5d3SJohn Marinoonly a few lines of changes in them. However, four files have 20986d7f5d3SJohn Marinofairly extensive changes: kern/vfs_subr.c, vfs/ufs/ufs_lookup.c, 21086d7f5d3SJohn Marinovfs/ufs/ufs_vnops.c, and vfs/ffs/ffs_alloc.c. For these four 21186d7f5d3SJohn Marinofiles, I have provided the original Lite2 version, the Lite2 21286d7f5d3SJohn Marinoversion with the diffs merged in, and the diffs between the 21386d7f5d3SJohn MarinoBSD/OS and merged version. Even so, I expect that there will 21486d7f5d3SJohn Marinobe some difficulty in doing the merge; I am certainly willing 21586d7f5d3SJohn Marinoto assist in helping get the code merged into your system. 21686d7f5d3SJohn Marino 21786d7f5d3SJohn MarinoPackaging of Utility Changes 21886d7f5d3SJohn Marino 21986d7f5d3SJohn MarinoThe utilities subdirectory contains the changes and additions 22086d7f5d3SJohn Marinoto the utilities. There are diffs to three utilities enclosed: 22186d7f5d3SJohn Marino 22286d7f5d3SJohn Marino tunefs - add a flag to enable and disable soft updates 22386d7f5d3SJohn Marino 22486d7f5d3SJohn Marino mount - print out whether soft updates are enabled and 22586d7f5d3SJohn Marino also statistics on number of sync and async writes 22686d7f5d3SJohn Marino 22786d7f5d3SJohn Marino fsck - tighter checks on acceptable errors and a slightly 22886d7f5d3SJohn Marino different policy for what to put in lost+found on 22986d7f5d3SJohn Marino filesystems using soft updates 23086d7f5d3SJohn Marino 23186d7f5d3SJohn MarinoIn addition you should recompile vmstat so as to get reports 23286d7f5d3SJohn Marinoon the 13 new memory types used by the soft update code. 23386d7f5d3SJohn MarinoIt is not necessary to use the new version of fsck, however it 23486d7f5d3SJohn Marinowould aid in my debugging if you do. Also, because of the time 23586d7f5d3SJohn Marinolag between deleting a directory entry and the inode it 23686d7f5d3SJohn Marinoreferences, you will find a lot more files showing up in your 23786d7f5d3SJohn Marinolost+found if you do not use the new version. Note that the 23886d7f5d3SJohn Marinonew version checks for the soft update flag in the superblock 23986d7f5d3SJohn Marinoand only uses the new algorithms if it is set. So, it will run 24086d7f5d3SJohn Marinounchanged on the filesystems that are not using soft updates. 24186d7f5d3SJohn Marino 24286d7f5d3SJohn MarinoOperation 24386d7f5d3SJohn Marino 24486d7f5d3SJohn MarinoOnce you have booted a kernel that incorporates the soft update 24586d7f5d3SJohn Marinocode and installed the updated utilities, do the following: 24686d7f5d3SJohn Marino 24786d7f5d3SJohn Marino1) Comment out the update program in /etc/rc. 24886d7f5d3SJohn Marino 24986d7f5d3SJohn Marino2) Run `tunefs -n enable' on one or more test filesystems. 25086d7f5d3SJohn Marino 25186d7f5d3SJohn Marino3) Mount these filesystems and then type `mount' to ensure that 25286d7f5d3SJohn Marino they have been enabled for soft updates. 25386d7f5d3SJohn Marino 25486d7f5d3SJohn Marino4) Copy the test directory to a softdep filesystem, chdir into 25586d7f5d3SJohn Marino it and run `./doit'. You may want to check out each of the 25686d7f5d3SJohn Marino three subtests individually first: doit1 - andrew benchmarks, 25786d7f5d3SJohn Marino doit2 - copy and removal of /etc, doit3 - find from /. 25886d7f5d3SJohn Marino 25986d7f5d3SJohn Marino==== 26086d7f5d3SJohn MarinoAdditional notes from Feb 13 26186d7f5d3SJohn Marino 26286d7f5d3SJohn MarinoWhen removing huge directories of files, it is possible to get 26386d7f5d3SJohn Marinothe incore state arbitrarily far ahead of the disk. Maintaining 26486d7f5d3SJohn Marinoall the associated depedency information can exhaust the kernel 26586d7f5d3SJohn Marinomalloc arena. To avoid this senario, I have put some limits on 26686d7f5d3SJohn Marinothe soft update code so that it will not be allowed to rampage 26786d7f5d3SJohn Marinothrough all of the kernel memory. I enclose below the relevant 26886d7f5d3SJohn Marinopatches to vnode.h and vfs_subr.c (which allow the soft update 26986d7f5d3SJohn Marinocode to speed up the filesystem syncer process). I have also 27086d7f5d3SJohn Marinoincluded the diffs for ffs_softdep.c. I hope to make a pass over 27186d7f5d3SJohn Marinoffs_softdep.c to isolate the differences with my standard version 27286d7f5d3SJohn Marinoso that these diffs are less painful to incorporate. 27386d7f5d3SJohn Marino 27486d7f5d3SJohn MarinoSince I know you like to play with tuning, I have put the relevant 27586d7f5d3SJohn Marinoknobs on sysctl debug variables. The tuning knobs can be viewed 27686d7f5d3SJohn Marinowith `sysctl debug' and set with `sysctl -w debug.<name>=value'. 27786d7f5d3SJohn MarinoThe knobs are as follows: 27886d7f5d3SJohn Marino 27986d7f5d3SJohn Marino debug.max_softdeps - limit on any given resource 28086d7f5d3SJohn Marino debug.tickdelay - ticks to delay before allocating 28186d7f5d3SJohn Marino debug.max_limit_hit - number of times tickdelay imposed 28286d7f5d3SJohn Marino debug.rush_requests - number of rush requests to filesystem syncer 28386d7f5d3SJohn Marino 28486d7f5d3SJohn MarinoThe max_softdeps limit is derived from vnodesdesired which in 28586d7f5d3SJohn Marinoturn is sized based on the amount of memory on the machine. 28686d7f5d3SJohn MarinoWhen the limit is hit, a process requesting a resource first 28786d7f5d3SJohn Marinotries to speed up the filesystem syncer process. Such a 28886d7f5d3SJohn Marinorequest is recorded as a rush_request. After syncdelay / 2 28986d7f5d3SJohn Marinounserviced rush requests (typically 15) are in the filesystem 29086d7f5d3SJohn Marinosyncers queue (i.e., it is more than 15 seconds behind in its 29186d7f5d3SJohn Marinowork), the process requesting the memory is put to sleep for 29286d7f5d3SJohn Marinotickdelay seconds. Such a delay is recorded in max_limit_hit. 29386d7f5d3SJohn MarinoFollowing this delay it is granted its memory without further 29486d7f5d3SJohn Marinodelay. I have tried the following experiments in which I 29586d7f5d3SJohn Marinodelete an MH directory containing 16,703 files: 29686d7f5d3SJohn Marino 29786d7f5d3SJohn MarinoRun # 1 2 3 29886d7f5d3SJohn Marino 29986d7f5d3SJohn Marinomax_softdeps 4496 4496 4496 30086d7f5d3SJohn Marinotickdelay 100 == 1 sec 20 == 0.2 sec 2 == 0.02 sec 30186d7f5d3SJohn Marinomax_limit_hit 16 == 16 sec 27 == 5.4 sec 203 == 4.1 sec 30286d7f5d3SJohn Marinorush_requests 147 102 93 30386d7f5d3SJohn Marinorun time 57 sec 46 sec 45 sec 30486d7f5d3SJohn MarinoI/O's 781 859 936 30586d7f5d3SJohn Marino 30686d7f5d3SJohn MarinoWhen run with no limits, it completes in 40 seconds. So, the 30786d7f5d3SJohn Marinotime spent in delay is directly added to the bottom line. 30886d7f5d3SJohn MarinoShortening the tick delay does cut down the total running time, 30986d7f5d3SJohn Marinobut at the expense of generating more total I/O operations 31086d7f5d3SJohn Marinodue to the rush orders being sent to the filesystem syncer. 31186d7f5d3SJohn MarinoAlthough the number of rush orders decreases with a shorter 31286d7f5d3SJohn Marinotick delay, there are more requests in each order, hence the 31386d7f5d3SJohn Marinoincrease in I/O count. Also, although the I/O count does rise 31486d7f5d3SJohn Marinowith a shorter delay, it is still at least an order of magnitude 31586d7f5d3SJohn Marinoless than without soft updates. Anyway, you may want to play 31686d7f5d3SJohn Marinoaround with these value to see what works best and to see if 31786d7f5d3SJohn Marinoyou can get an insight into how best to tune them. If you get 31886d7f5d3SJohn Marinoout of memory panic's, then you have max_softdeps set too high. 31986d7f5d3SJohn MarinoThe max_limit_hit and rush_requests show be reset to zero 32086d7f5d3SJohn Marinobefore each run. The minimum legal value for tickdelay is 2 32186d7f5d3SJohn Marino(if you set it below that, the code will use 2). 322