xref: /dflybsd-src/sys/vfs/ufs/README (revision 86d7f5d305c6adaa56ff4582ece9859d73106103)
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