]> CyberLeo.Net >> Repos - FreeBSD/releng/10.0.git/blob - share/man/man7/tuning.7
- Copy stable/10 (r259064) to releng/10.0 as part of the
[FreeBSD/releng/10.0.git] / share / man / man7 / tuning.7
1 .\" Copyright (C) 2001 Matthew Dillon. All rights reserved.
2 .\"
3 .\" Redistribution and use in source and binary forms, with or without
4 .\" modification, are permitted provided that the following conditions
5 .\" are met:
6 .\" 1. Redistributions of source code must retain the above copyright
7 .\"    notice, this list of conditions and the following disclaimer.
8 .\" 2. Redistributions in binary form must reproduce the above copyright
9 .\"    notice, this list of conditions and the following disclaimer in the
10 .\"    documentation and/or other materials provided with the distribution.
11 .\"
12 .\" THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND
13 .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
14 .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
15 .\" ARE DISCLAIMED.  IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE
16 .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
17 .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
18 .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
19 .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
20 .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
21 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
22 .\" SUCH DAMAGE.
23 .\"
24 .\" $FreeBSD$
25 .\"
26 .Dd December 8, 2012
27 .Dt TUNING 7
28 .Os
29 .Sh NAME
30 .Nm tuning
31 .Nd performance tuning under FreeBSD
32 .Sh SYSTEM SETUP - DISKLABEL, NEWFS, TUNEFS, SWAP
33 The swap partition should typically be approximately 2x the size of
34 main memory
35 for systems with less than 4GB of RAM, or approximately equal to
36 the size of main memory
37 if you have more.
38 Keep in mind future memory
39 expansion when sizing the swap partition.
40 Configuring too little swap can lead
41 to inefficiencies in the VM page scanning code as well as create issues
42 later on if you add more memory to your machine.
43 On larger systems
44 with multiple SCSI disks (or multiple IDE disks operating on different
45 controllers), configure swap on each drive.
46 The swap partitions on the drives should be approximately the same size.
47 The kernel can handle arbitrary sizes but
48 internal data structures scale to 4 times the largest swap partition.
49 Keeping
50 the swap partitions near the same size will allow the kernel to optimally
51 stripe swap space across the N disks.
52 Do not worry about overdoing it a
53 little, swap space is the saving grace of
54 .Ux
55 and even if you do not normally use much swap, it can give you more time to
56 recover from a runaway program before being forced to reboot.
57 .Pp
58 It is not a good idea to make one large partition.
59 First,
60 each partition has different operational characteristics and separating them
61 allows the file system to tune itself to those characteristics.
62 For example,
63 the root and
64 .Pa /usr
65 partitions are read-mostly, with very little writing, while
66 a lot of reading and writing could occur in
67 .Pa /var/tmp .
68 By properly
69 partitioning your system fragmentation introduced in the smaller more
70 heavily write-loaded partitions will not bleed over into the mostly-read
71 partitions.
72 .Pp
73 Properly partitioning your system also allows you to tune
74 .Xr newfs 8 ,
75 and
76 .Xr tunefs 8
77 parameters.
78 The only
79 .Xr tunefs 8
80 option worthwhile turning on is
81 .Em softupdates
82 with
83 .Dq Li "tunefs -n enable /filesystem" .
84 Softupdates drastically improves meta-data performance, mainly file
85 creation and deletion.
86 We recommend enabling softupdates on most file systems; however, there
87 are two limitations to softupdates that you should be aware of when
88 determining whether to use it on a file system.
89 First, softupdates guarantees file system consistency in the
90 case of a crash but could very easily be several seconds (even a minute!\&)
91 behind on pending write to the physical disk.
92 If you crash you may lose more work
93 than otherwise.
94 Secondly, softupdates delays the freeing of file system
95 blocks.
96 If you have a file system (such as the root file system) which is
97 close to full, doing a major update of it, e.g.,\&
98 .Dq Li "make installworld" ,
99 can run it out of space and cause the update to fail.
100 For this reason, softupdates will not be enabled on the root file system
101 during a typical install.
102 There is no loss of performance since the root
103 file system is rarely written to.
104 .Pp
105 A number of run-time
106 .Xr mount 8
107 options exist that can help you tune the system.
108 The most obvious and most dangerous one is
109 .Cm async .
110 Only use this option in conjunction with
111 .Xr gjournal 8 ,
112 as it is far too dangerous on a normal file system.
113 A less dangerous and more
114 useful
115 .Xr mount 8
116 option is called
117 .Cm noatime .
118 .Ux
119 file systems normally update the last-accessed time of a file or
120 directory whenever it is accessed.
121 This operation is handled in
122 .Fx
123 with a delayed write and normally does not create a burden on the system.
124 However, if your system is accessing a huge number of files on a continuing
125 basis the buffer cache can wind up getting polluted with atime updates,
126 creating a burden on the system.
127 For example, if you are running a heavily
128 loaded web site, or a news server with lots of readers, you might want to
129 consider turning off atime updates on your larger partitions with this
130 .Xr mount 8
131 option.
132 However, you should not gratuitously turn off atime
133 updates everywhere.
134 For example, the
135 .Pa /var
136 file system customarily
137 holds mailboxes, and atime (in combination with mtime) is used to
138 determine whether a mailbox has new mail.
139 You might as well leave
140 atime turned on for mostly read-only partitions such as
141 .Pa /
142 and
143 .Pa /usr
144 as well.
145 This is especially useful for
146 .Pa /
147 since some system utilities
148 use the atime field for reporting.
149 .Sh STRIPING DISKS
150 In larger systems you can stripe partitions from several drives together
151 to create a much larger overall partition.
152 Striping can also improve
153 the performance of a file system by splitting I/O operations across two
154 or more disks.
155 The
156 .Xr gstripe 8 ,
157 .Xr gvinum 8 ,
158 and
159 .Xr ccdconfig 8
160 utilities may be used to create simple striped file systems.
161 Generally
162 speaking, striping smaller partitions such as the root and
163 .Pa /var/tmp ,
164 or essentially read-only partitions such as
165 .Pa /usr
166 is a complete waste of time.
167 You should only stripe partitions that require serious I/O performance,
168 typically
169 .Pa /var , /home ,
170 or custom partitions used to hold databases and web pages.
171 Choosing the proper stripe size is also
172 important.
173 File systems tend to store meta-data on power-of-2 boundaries
174 and you usually want to reduce seeking rather than increase seeking.
175 This
176 means you want to use a large off-center stripe size such as 1152 sectors
177 so sequential I/O does not seek both disks and so meta-data is distributed
178 across both disks rather than concentrated on a single disk.
179 If
180 you really need to get sophisticated, we recommend using a real hardware
181 RAID controller from the list of
182 .Fx
183 supported controllers.
184 .Sh SYSCTL TUNING
185 .Xr sysctl 8
186 variables permit system behavior to be monitored and controlled at
187 run-time.
188 Some sysctls simply report on the behavior of the system; others allow
189 the system behavior to be modified;
190 some may be set at boot time using
191 .Xr rc.conf 5 ,
192 but most will be set via
193 .Xr sysctl.conf 5 .
194 There are several hundred sysctls in the system, including many that appear
195 to be candidates for tuning but actually are not.
196 In this document we will only cover the ones that have the greatest effect
197 on the system.
198 .Pp
199 The
200 .Va vm.overcommit
201 sysctl defines the overcommit behaviour of the vm subsystem.
202 The virtual memory system always does accounting of the swap space
203 reservation, both total for system and per-user.
204 Corresponding values
205 are available through sysctl
206 .Va vm.swap_total ,
207 that gives the total bytes available for swapping, and
208 .Va vm.swap_reserved ,
209 that gives number of bytes that may be needed to back all currently
210 allocated anonymous memory.
211 .Pp
212 Setting bit 0 of the
213 .Va vm.overcommit
214 sysctl causes the virtual memory system to return failure
215 to the process when allocation of memory causes
216 .Va vm.swap_reserved
217 to exceed
218 .Va vm.swap_total .
219 Bit 1 of the sysctl enforces
220 .Dv RLIMIT_SWAP
221 limit
222 (see
223 .Xr getrlimit 2 ) .
224 Root is exempt from this limit.
225 Bit 2 allows to count most of the physical
226 memory as allocatable, except wired and free reserved pages
227 (accounted by
228 .Va vm.stats.vm.v_free_target
229 and
230 .Va vm.stats.vm.v_wire_count
231 sysctls, respectively).
232 .Pp
233 The
234 .Va kern.ipc.maxpipekva
235 loader tunable is used to set a hard limit on the
236 amount of kernel address space allocated to mapping of pipe buffers.
237 Use of the mapping allows the kernel to eliminate a copy of the
238 data from writer address space into the kernel, directly copying
239 the content of mapped buffer to the reader.
240 Increasing this value to a higher setting, such as `25165824' might
241 improve performance on systems where space for mapping pipe buffers
242 is quickly exhausted.
243 This exhaustion is not fatal; however, and it will only cause pipes
244 to fall back to using double-copy.
245 .Pp
246 The
247 .Va kern.ipc.shm_use_phys
248 sysctl defaults to 0 (off) and may be set to 0 (off) or 1 (on).
249 Setting
250 this parameter to 1 will cause all System V shared memory segments to be
251 mapped to unpageable physical RAM.
252 This feature only has an effect if you
253 are either (A) mapping small amounts of shared memory across many (hundreds)
254 of processes, or (B) mapping large amounts of shared memory across any
255 number of processes.
256 This feature allows the kernel to remove a great deal
257 of internal memory management page-tracking overhead at the cost of wiring
258 the shared memory into core, making it unswappable.
259 .Pp
260 The
261 .Va vfs.vmiodirenable
262 sysctl defaults to 1 (on).
263 This parameter controls how directories are cached
264 by the system.
265 Most directories are small and use but a single fragment
266 (typically 2K) in the file system and even less (typically 512 bytes) in
267 the buffer cache.
268 However, when operating in the default mode the buffer
269 cache will only cache a fixed number of directories even if you have a huge
270 amount of memory.
271 Turning on this sysctl allows the buffer cache to use
272 the VM Page Cache to cache the directories.
273 The advantage is that all of
274 memory is now available for caching directories.
275 The disadvantage is that
276 the minimum in-core memory used to cache a directory is the physical page
277 size (typically 4K) rather than 512 bytes.
278 We recommend turning this option off in memory-constrained environments;
279 however, when on, it will substantially improve the performance of services
280 that manipulate a large number of files.
281 Such services can include web caches, large mail systems, and news systems.
282 Turning on this option will generally not reduce performance even with the
283 wasted memory but you should experiment to find out.
284 .Pp
285 The
286 .Va vfs.write_behind
287 sysctl defaults to 1 (on).
288 This tells the file system to issue media
289 writes as full clusters are collected, which typically occurs when writing
290 large sequential files.
291 The idea is to avoid saturating the buffer
292 cache with dirty buffers when it would not benefit I/O performance.
293 However,
294 this may stall processes and under certain circumstances you may wish to turn
295 it off.
296 .Pp
297 The
298 .Va vfs.hirunningspace
299 sysctl determines how much outstanding write I/O may be queued to
300 disk controllers system-wide at any given time.
301 It is used by the UFS file system.
302 The default is self-tuned and
303 usually sufficient but on machines with advanced controllers and lots
304 of disks this may be tuned up to match what the controllers buffer.
305 Configuring this setting to match tagged queuing capabilities of
306 controllers or drives with average IO size used in production works
307 best (for example: 16 MiB will use 128 tags with IO requests of 128 KiB).
308 Note that setting too high a value
309 (exceeding the buffer cache's write threshold) can lead to extremely
310 bad clustering performance.
311 Do not set this value arbitrarily high!
312 Higher write queuing values may also add latency to reads occurring at
313 the same time.
314 .Pp
315 The
316 .Va vfs.read_max
317 sysctl governs VFS read-ahead and is expressed as the number of blocks
318 to pre-read if the heuristics algorithm decides that the reads are
319 issued sequentially.
320 It is used by the UFS, ext2fs and msdosfs file systems.
321 With the default UFS block size of 32 KiB, a setting of 64 will allow
322 speculatively reading up to 2 MiB.
323 This setting may be increased to get around disk I/O latencies, especially
324 where these latencies are large such as in virtual machine emulated
325 environments.
326 It may be tuned down in specific cases where the I/O load is such that
327 read-ahead adversely affects performance or where system memory is really
328 low.
329 .Pp
330 The
331 .Va vfs.ncsizefactor
332 sysctl defines how large VFS namecache may grow.
333 The number of currently allocated entries in namecache is provided by
334 .Va debug.numcache
335 sysctl and the condition
336 debug.numcache < kern.maxvnodes * vfs.ncsizefactor
337 is adhered to.
338 .Pp
339 The
340 .Va vfs.ncnegfactor
341 sysctl defines how many negative entries VFS namecache is allowed to create.
342 The number of currently allocated negative entries is provided by
343 .Va debug.numneg
344 sysctl and the condition
345 vfs.ncnegfactor * debug.numneg < debug.numcache
346 is adhered to.
347 .Pp
348 There are various other buffer-cache and VM page cache related sysctls.
349 We do not recommend modifying these values.
350 As of
351 .Fx 4.3 ,
352 the VM system does an extremely good job tuning itself.
353 .Pp
354 The
355 .Va net.inet.tcp.sendspace
356 and
357 .Va net.inet.tcp.recvspace
358 sysctls are of particular interest if you are running network intensive
359 applications.
360 They control the amount of send and receive buffer space
361 allowed for any given TCP connection.
362 The default sending buffer is 32K; the default receiving buffer
363 is 64K.
364 You can often
365 improve bandwidth utilization by increasing the default at the cost of
366 eating up more kernel memory for each connection.
367 We do not recommend
368 increasing the defaults if you are serving hundreds or thousands of
369 simultaneous connections because it is possible to quickly run the system
370 out of memory due to stalled connections building up.
371 But if you need
372 high bandwidth over a fewer number of connections, especially if you have
373 gigabit Ethernet, increasing these defaults can make a huge difference.
374 You can adjust the buffer size for incoming and outgoing data separately.
375 For example, if your machine is primarily doing web serving you may want
376 to decrease the recvspace in order to be able to increase the
377 sendspace without eating too much kernel memory.
378 Note that the routing table (see
379 .Xr route 8 )
380 can be used to introduce route-specific send and receive buffer size
381 defaults.
382 .Pp
383 As an additional management tool you can use pipes in your
384 firewall rules (see
385 .Xr ipfw 8 )
386 to limit the bandwidth going to or from particular IP blocks or ports.
387 For example, if you have a T1 you might want to limit your web traffic
388 to 70% of the T1's bandwidth in order to leave the remainder available
389 for mail and interactive use.
390 Normally a heavily loaded web server
391 will not introduce significant latencies into other services even if
392 the network link is maxed out, but enforcing a limit can smooth things
393 out and lead to longer term stability.
394 Many people also enforce artificial
395 bandwidth limitations in order to ensure that they are not charged for
396 using too much bandwidth.
397 .Pp
398 Setting the send or receive TCP buffer to values larger than 65535 will result
399 in a marginal performance improvement unless both hosts support the window
400 scaling extension of the TCP protocol, which is controlled by the
401 .Va net.inet.tcp.rfc1323
402 sysctl.
403 These extensions should be enabled and the TCP buffer size should be set
404 to a value larger than 65536 in order to obtain good performance from
405 certain types of network links; specifically, gigabit WAN links and
406 high-latency satellite links.
407 RFC1323 support is enabled by default.
408 .Pp
409 The
410 .Va net.inet.tcp.always_keepalive
411 sysctl determines whether or not the TCP implementation should attempt
412 to detect dead TCP connections by intermittently delivering
413 .Dq keepalives
414 on the connection.
415 By default, this is enabled for all applications; by setting this
416 sysctl to 0, only applications that specifically request keepalives
417 will use them.
418 In most environments, TCP keepalives will improve the management of
419 system state by expiring dead TCP connections, particularly for
420 systems serving dialup users who may not always terminate individual
421 TCP connections before disconnecting from the network.
422 However, in some environments, temporary network outages may be
423 incorrectly identified as dead sessions, resulting in unexpectedly
424 terminated TCP connections.
425 In such environments, setting the sysctl to 0 may reduce the occurrence of
426 TCP session disconnections.
427 .Pp
428 The
429 .Va net.inet.tcp.delayed_ack
430 TCP feature is largely misunderstood.
431 Historically speaking, this feature
432 was designed to allow the acknowledgement to transmitted data to be returned
433 along with the response.
434 For example, when you type over a remote shell,
435 the acknowledgement to the character you send can be returned along with the
436 data representing the echo of the character.
437 With delayed acks turned off,
438 the acknowledgement may be sent in its own packet, before the remote service
439 has a chance to echo the data it just received.
440 This same concept also
441 applies to any interactive protocol (e.g.,\& SMTP, WWW, POP3), and can cut the
442 number of tiny packets flowing across the network in half.
443 The
444 .Fx
445 delayed ACK implementation also follows the TCP protocol rule that
446 at least every other packet be acknowledged even if the standard 100ms
447 timeout has not yet passed.
448 Normally the worst a delayed ACK can do is
449 slightly delay the teardown of a connection, or slightly delay the ramp-up
450 of a slow-start TCP connection.
451 While we are not sure we believe that
452 the several FAQs related to packages such as SAMBA and SQUID which advise
453 turning off delayed acks may be referring to the slow-start issue.
454 In
455 .Fx ,
456 it would be more beneficial to increase the slow-start flightsize via
457 the
458 .Va net.inet.tcp.slowstart_flightsize
459 sysctl rather than disable delayed acks.
460 .Pp
461 The
462 .Va net.inet.ip.portrange.*
463 sysctls control the port number ranges automatically bound to TCP and UDP
464 sockets.
465 There are three ranges: a low range, a default range, and a
466 high range, selectable via the
467 .Dv IP_PORTRANGE
468 .Xr setsockopt 2
469 call.
470 Most
471 network programs use the default range which is controlled by
472 .Va net.inet.ip.portrange.first
473 and
474 .Va net.inet.ip.portrange.last ,
475 which default to 49152 and 65535, respectively.
476 Bound port ranges are
477 used for outgoing connections, and it is possible to run the system out
478 of ports under certain circumstances.
479 This most commonly occurs when you are
480 running a heavily loaded web proxy.
481 The port range is not an issue
482 when running a server which handles mainly incoming connections, such as a
483 normal web server, or has a limited number of outgoing connections, such
484 as a mail relay.
485 For situations where you may run out of ports,
486 we recommend decreasing
487 .Va net.inet.ip.portrange.first
488 modestly.
489 A range of 10000 to 30000 ports may be reasonable.
490 You should also consider firewall effects when changing the port range.
491 Some firewalls
492 may block large ranges of ports (usually low-numbered ports) and expect systems
493 to use higher ranges of ports for outgoing connections.
494 By default
495 .Va net.inet.ip.portrange.last
496 is set at the maximum allowable port number.
497 .Pp
498 The
499 .Va kern.ipc.somaxconn
500 sysctl limits the size of the listen queue for accepting new TCP connections.
501 The default value of 128 is typically too low for robust handling of new
502 connections in a heavily loaded web server environment.
503 For such environments,
504 we recommend increasing this value to 1024 or higher.
505 The service daemon
506 may itself limit the listen queue size (e.g.,\&
507 .Xr sendmail 8 ,
508 apache) but will
509 often have a directive in its configuration file to adjust the queue size up.
510 Larger listen queues also do a better job of fending off denial of service
511 attacks.
512 .Pp
513 The
514 .Va kern.maxfiles
515 sysctl determines how many open files the system supports.
516 The default is
517 typically a few thousand but you may need to bump this up to ten or twenty
518 thousand if you are running databases or large descriptor-heavy daemons.
519 The read-only
520 .Va kern.openfiles
521 sysctl may be interrogated to determine the current number of open files
522 on the system.
523 .Pp
524 The
525 .Va vm.swap_idle_enabled
526 sysctl is useful in large multi-user systems where you have lots of users
527 entering and leaving the system and lots of idle processes.
528 Such systems
529 tend to generate a great deal of continuous pressure on free memory reserves.
530 Turning this feature on and adjusting the swapout hysteresis (in idle
531 seconds) via
532 .Va vm.swap_idle_threshold1
533 and
534 .Va vm.swap_idle_threshold2
535 allows you to depress the priority of pages associated with idle processes
536 more quickly then the normal pageout algorithm.
537 This gives a helping hand
538 to the pageout daemon.
539 Do not turn this option on unless you need it,
540 because the tradeoff you are making is to essentially pre-page memory sooner
541 rather than later, eating more swap and disk bandwidth.
542 In a small system
543 this option will have a detrimental effect but in a large system that is
544 already doing moderate paging this option allows the VM system to stage
545 whole processes into and out of memory more easily.
546 .Sh LOADER TUNABLES
547 Some aspects of the system behavior may not be tunable at runtime because
548 memory allocations they perform must occur early in the boot process.
549 To change loader tunables, you must set their values in
550 .Xr loader.conf 5
551 and reboot the system.
552 .Pp
553 .Va kern.maxusers
554 controls the scaling of a number of static system tables, including defaults
555 for the maximum number of open files, sizing of network memory resources, etc.
556 As of
557 .Fx 4.5 ,
558 .Va kern.maxusers
559 is automatically sized at boot based on the amount of memory available in
560 the system, and may be determined at run-time by inspecting the value of the
561 read-only
562 .Va kern.maxusers
563 sysctl.
564 Some sites will require larger or smaller values of
565 .Va kern.maxusers
566 and may set it as a loader tunable; values of 64, 128, and 256 are not
567 uncommon.
568 We do not recommend going above 256 unless you need a huge number
569 of file descriptors; many of the tunable values set to their defaults by
570 .Va kern.maxusers
571 may be individually overridden at boot-time or run-time as described
572 elsewhere in this document.
573 Systems older than
574 .Fx 4.4
575 must set this value via the kernel
576 .Xr config 8
577 option
578 .Cd maxusers
579 instead.
580 .Pp
581 The
582 .Va kern.dfldsiz
583 and
584 .Va kern.dflssiz
585 tunables set the default soft limits for process data and stack size
586 respectively.
587 Processes may increase these up to the hard limits by calling
588 .Xr setrlimit 2 .
589 The
590 .Va kern.maxdsiz ,
591 .Va kern.maxssiz ,
592 and
593 .Va kern.maxtsiz
594 tunables set the hard limits for process data, stack, and text size
595 respectively; processes may not exceed these limits.
596 The
597 .Va kern.sgrowsiz
598 tunable controls how much the stack segment will grow when a process
599 needs to allocate more stack.
600 .Pp
601 .Va kern.ipc.nmbclusters
602 may be adjusted to increase the number of network mbufs the system is
603 willing to allocate.
604 Each cluster represents approximately 2K of memory,
605 so a value of 1024 represents 2M of kernel memory reserved for network
606 buffers.
607 You can do a simple calculation to figure out how many you need.
608 If you have a web server which maxes out at 1000 simultaneous connections,
609 and each connection eats a 16K receive and 16K send buffer, you need
610 approximately 32MB worth of network buffers to deal with it.
611 A good rule of
612 thumb is to multiply by 2, so 32MBx2 = 64MB/2K = 32768.
613 So for this case
614 you would want to set
615 .Va kern.ipc.nmbclusters
616 to 32768.
617 We recommend values between
618 1024 and 4096 for machines with moderates amount of memory, and between 4096
619 and 32768 for machines with greater amounts of memory.
620 Under no circumstances
621 should you specify an arbitrarily high value for this parameter, it could
622 lead to a boot-time crash.
623 The
624 .Fl m
625 option to
626 .Xr netstat 1
627 may be used to observe network cluster use.
628 Older versions of
629 .Fx
630 do not have this tunable and require that the
631 kernel
632 .Xr config 8
633 option
634 .Dv NMBCLUSTERS
635 be set instead.
636 .Pp
637 More and more programs are using the
638 .Xr sendfile 2
639 system call to transmit files over the network.
640 The
641 .Va kern.ipc.nsfbufs
642 sysctl controls the number of file system buffers
643 .Xr sendfile 2
644 is allowed to use to perform its work.
645 This parameter nominally scales
646 with
647 .Va kern.maxusers
648 so you should not need to modify this parameter except under extreme
649 circumstances.
650 See the
651 .Sx TUNING
652 section in the
653 .Xr sendfile 2
654 manual page for details.
655 .Sh KERNEL CONFIG TUNING
656 There are a number of kernel options that you may have to fiddle with in
657 a large-scale system.
658 In order to change these options you need to be
659 able to compile a new kernel from source.
660 The
661 .Xr config 8
662 manual page and the handbook are good starting points for learning how to
663 do this.
664 Generally the first thing you do when creating your own custom
665 kernel is to strip out all the drivers and services you do not use.
666 Removing things like
667 .Dv INET6
668 and drivers you do not have will reduce the size of your kernel, sometimes
669 by a megabyte or more, leaving more memory available for applications.
670 .Pp
671 .Dv SCSI_DELAY
672 may be used to reduce system boot times.
673 The defaults are fairly high and
674 can be responsible for 5+ seconds of delay in the boot process.
675 Reducing
676 .Dv SCSI_DELAY
677 to something below 5 seconds could work (especially with modern drives).
678 .Pp
679 There are a number of
680 .Dv *_CPU
681 options that can be commented out.
682 If you only want the kernel to run
683 on a Pentium class CPU, you can easily remove
684 .Dv I486_CPU ,
685 but only remove
686 .Dv I586_CPU
687 if you are sure your CPU is being recognized as a Pentium II or better.
688 Some clones may be recognized as a Pentium or even a 486 and not be able
689 to boot without those options.
690 If it works, great!
691 The operating system
692 will be able to better use higher-end CPU features for MMU, task switching,
693 timebase, and even device operations.
694 Additionally, higher-end CPUs support
695 4MB MMU pages, which the kernel uses to map the kernel itself into memory,
696 increasing its efficiency under heavy syscall loads.
697 .Sh CPU, MEMORY, DISK, NETWORK
698 The type of tuning you do depends heavily on where your system begins to
699 bottleneck as load increases.
700 If your system runs out of CPU (idle times
701 are perpetually 0%) then you need to consider upgrading the CPU
702 or perhaps you need to revisit the
703 programs that are causing the load and try to optimize them.
704 If your system
705 is paging to swap a lot you need to consider adding more memory.
706 If your
707 system is saturating the disk you typically see high CPU idle times and
708 total disk saturation.
709 .Xr systat 1
710 can be used to monitor this.
711 There are many solutions to saturated disks:
712 increasing memory for caching, mirroring disks, distributing operations across
713 several machines, and so forth.
714 If disk performance is an issue and you
715 are using IDE drives, switching to SCSI can help a great deal.
716 While modern
717 IDE drives compare with SCSI in raw sequential bandwidth, the moment you
718 start seeking around the disk SCSI drives usually win.
719 .Pp
720 Finally, you might run out of network suds.
721 Optimize the network path
722 as much as possible.
723 For example, in
724 .Xr firewall 7
725 we describe a firewall protecting internal hosts with a topology where
726 the externally visible hosts are not routed through it.
727 Use 1000BaseT rather
728 than 100BaseT, depending on your needs.
729 Most bottlenecks occur at the WAN link (e.g.,\&
730 modem, T1, DSL, whatever).
731 If expanding the link is not an option it may be possible to use the
732 .Xr dummynet 4
733 feature to implement peak shaving or other forms of traffic shaping to
734 prevent the overloaded service (such as web services) from affecting other
735 services (such as email), or vice versa.
736 In home installations this could
737 be used to give interactive traffic (your browser,
738 .Xr ssh 1
739 logins) priority
740 over services you export from your box (web services, email).
741 .Sh SEE ALSO
742 .Xr netstat 1 ,
743 .Xr systat 1 ,
744 .Xr sendfile 2 ,
745 .Xr ata 4 ,
746 .Xr dummynet 4 ,
747 .Xr login.conf 5 ,
748 .Xr rc.conf 5 ,
749 .Xr sysctl.conf 5 ,
750 .Xr firewall 7 ,
751 .Xr eventtimers 7 ,
752 .Xr hier 7 ,
753 .Xr ports 7 ,
754 .Xr boot 8 ,
755 .Xr bsdinstall 8 ,
756 .Xr bsdlabel 8 ,
757 .Xr ccdconfig 8 ,
758 .Xr config 8 ,
759 .Xr fsck 8 ,
760 .Xr gjournal 8 ,
761 .Xr gstripe 8 ,
762 .Xr gvinum 8 ,
763 .Xr ifconfig 8 ,
764 .Xr ipfw 8 ,
765 .Xr loader 8 ,
766 .Xr mount 8 ,
767 .Xr newfs 8 ,
768 .Xr route 8 ,
769 .Xr sysctl 8 ,
770 .Xr tunefs 8
771 .Sh HISTORY
772 The
773 .Nm
774 manual page was originally written by
775 .An Matthew Dillon
776 and first appeared
777 in
778 .Fx 4.3 ,
779 May 2001.
780 The manual page was greatly modified by
781 .An Eitan Adler Aq eadler@FreeBSD.org