NAME
config - configuring MINIX 3 tasks and servers
DESCRIPTION
MINIX 3 has a number of configuration files containing
parameters that can be changed to enable or disable a device
driver, to change the number of times a resource can be
used, or to tune the performance of the system. We will
name the file that contains the parameter, the name of the
parameter, and the values it can be set to. Some comments
are prefixed by "8086" for MINIX 3 running in 16-bit real
mode, "286" for 16-bit protected mode, and "386" for 32-bit
protected mode. Configuration file names can be <file.h>
for a file in /usr/include/, or a simple file name for a
file in /usr/src/.
There may be several definitions for a parameter with only
one that is active. Which one this is is easy to find if
you know that (CPU == INTEL) is true, and _WORD_SIZE equals
2 in 16-bit mode, and 4 in 32-bit mode.
<minix/config.h>
This is the main configuration file for the MINIX 3. It
contains lots of boolean variables to enable or disable
drivers and a number of parameters that specify the sizes of
system data structures:
NR_PROCS
The number of slots in the process table, and thus the
maximum number of processes that can be run con-
currently. Should be increased from the default 32 if
networking is enabled (add 8 for deamons), and if more
users are using the system (add 4 for each active ses-
sion). There are a lot of loops in the kernel scanning
the process table, so setting NR_PROCS too high will
slow things down a little bit, so don't overdo it.
NR_BUFS
The number of disk buffers in the file system server.
It is used to keep frequently used disk blocks in
memory. 8086 & 286: The default is 40, and that's
about as high as it can be set. 386: The default is
80, which is best increased to 1024 if you can spare
the memory. More will help, but the effect won't be as
pronounced as 1024 is more than enough to contain the
working set of one active user.
NR_CTRLRS
Number of tasks used for disk or tape controllers. By
default 2, maximum 4. You need a controller task for
each device class to be handled through a /dev/cn* set
of devices.
ENABLE_CACHE2
If set to 1 allows the RAM disk to be used as a second
level file system cache. Any block that is evicted
from the normal cache is both written to disk (if
dirty), and copied to the second level cache. If it is
needed again then the block is reloaded from the RAM
disk if it is still there. 8086: Forget it, you don't
have any memory for it. 286: Turn it on and set the
boot environment variable ramsize to 512 if you have
the memory. That's enough to contain the working set
of one active user, and is also the maximum FS can han-
dle. 386: The installation scripts sets ramsize to
1024 if there is enough memory. Your first point of
call is to compile a new kernel with ENABLE_CACHE2 off,
NR_BUFS set to a large value, and ramsize set back to
zero. A normal block cache works much better than a
two level arrangement.
ENABLE_AT_WINI
Enables the AT or IDE disk driver. (The IDE interface
grew out of the old AT disk interface.) Any run of the
mill PC needs this driver. You need to assign a driver
like this one to a controller task using one of the cn
boot variables. See boot(8).
ENABLE_BIOS_WINI
Enables the BIOS disk driver. The BIOS driver uses the
system BIOS to read or write disk blocks. 8086: The
preferred disk driver for XT class machines. 286 &
386: Use a native driver if possible to avoid switch-
ing back to real mode to make BIOS calls. Especially
on the 286 this is a painful affair.
ENABLE_ESDI_WINI
Enables the ESDI disk driver. Some PS/2 models have
this disk.
ENABLE_XT_WINI
Enables the XT disk driver. Useful for early IBM/AT
machines that have XT disks. In real mode it is best
to use the BIOS driver.
ENABLE_AHA1540_SCSI
Enables the Adaptec 1540 series SCSI driver.
ENABLE_DOSFILE
Enable the "DOS file as disk" driver that is used when
MINIX 3 is run from MS-DOS to access a large file as a
disk.
ENABLE_FATFILE
Enable the "FAT file as disk" driver that interprets a
FAT file system to find a large file to use as a disk.
This driver combined with a fast native MINIX 3 disk
driver is a better choice then the previous driver.
(And it works when MINIX 3 is not started from MS-DOS.)
This is the last driver that needs to be assigned to a
controller task.
ENABLE_SB16
Enable the Soundblaster-16 audio driver.
ENABLE_PRINTER
Enable the Printer driver.
DMA_SECTORS
The size of the DMA buffer for drivers that use DMA or
other drivers that can only do I/O to a single chunk of
memory. (BIOS, ESDI, XT, DOSFILE.) Choose a number
between 1 and 128 for the sector size of this buffer.
The memory cost is twice this amount, because of trou-
ble getting it aligned in memory properly. A value of
16 is the minimum to work well, choose 64 if you have
enough memory.
NR_CONSOLES
Number of virtual consoles. By default 2, so you can
have two login sessions that can be switched to by
ALT-F1, ALT-F2 or ALT-left/rightarrow. If you have an
EGA screen then you can specify up to 4 virtual con-
soles, for VGA you can have 8. It is best to choose
one less to leave some video memory to keep text scrol-
ling fast. You really should read console(4) on this.
Note also the console boot variable, you can use it to
put more characters on the screen, at the cost of video
memory.
ENABLE_DP8390
Master switch to enable the network drivers. They are
required by the network server, inet. See boot(8) for
information on configuring network support.
ENABLE_WDETH
Enable code for the WD8003 and WD8013 cards in the net-
work driver.
ENABLE_NE2000
Enable code for the NE1000 and NE2000 cards.
ENABLE_3C503
Enable code for the 3Com Etherlink II (3C503).
NR_PTYS
Number of pseudo terminals supported, by default 0,
which disables the driver. Pseudo terminals are used
for incoming network logins by telnet or rlogin. One
pty is needed per session.
NR_RS_LINES
Number of RS-232 lines supported. By default 2 for a
normal kernel, but 0 for a tiny kernel used for XT ins-
tallation. You can save a bit of memory by setting
this parameter to zero if you don't need serial lines.
fs/const.h
This file contains most of the parameters used by the file
system code. Most of these cannot be changed, with the
exception of these four:
NR_FILPS
Maximum number of open file descriptors for all
processes combined. A "File table overflow" error
might indicate that this number must be increased.
NR_INODES
Maximum number of in-use files for all processes com-
bined. Like above a "File table overflow" error may
also indicate that this number should be increased. In
cases like these one usually doubles both parameters.
(If one table runs out then the other one is likely to
run out also anyway.)
NR_SUPERS
Number of file systems that can be mounted. Again a
"file table overflow" error is given if this table is
full, but it will be produced by the mount command, so
you know what's wrong in this case.
NR_LOCKS
Number of active file locks by fcntl(2). These locks
are often used by programs that update a shared file,
like mail programs do with mail boxes. A "no locks
available" error indicates that this table has run out.
kernel/bios_wini.c
kernel/dosfile.c
kernel/fatfile.c
The number of disks each of these drivers can handle is
specified by:
MAX_DRIVES
This parameter is set to 4 for the BIOS and "DOS file"
drivers, and to 2 for the "FAT file" driver. It can be
set as high as you need to allow for more disks, or
files as disks. (The "FAT" driver needs quite some
memory per disk, which is why it by default only allows
2 disks.) You will need to run MAKEDEV(8) to create
the extra disk devices in /dev/.
inet/inet_config.h
The maximum number of TCP/IP networks is:
IP_PORT_MAX
Sets the maximum number of networks that can be defined
in /etc/inet.conf. 8086, 286: By default 2. 386: By
default 4.
inet/buf.c
The number of 512 byte buffers allocated for data within the
TCP/IP server is:
BUF512_NR
These buffers are a shared resource used by the server
for any data it wants to play with. For incoming data
this number of buffers determines the time packets are
kept around, with each new packet evicting an old
packet. It's no big deal if packets get lost before a
user process reads them, packets get lost all the time.
The only real problem is outgoing TCP data. The
default setting for BUF512_NR allows up to four back-
logged TCP streams, i.e. when data is output faster
then it is read. If more buffers are needed then one
of the TCP connections is shut down. When this happens
you will see a "not enough buffers left" error. This
could happen for instance if a MINIX 3 web server is
assaulted by a browser that likes to open several con-
nections to the server simultaneously. The fix is to
increase BUF512_NR to allow more slow outgoing TCP
streams. 86: The default of 32 buffers can be
increased up to 64. (The "TCP window size" has been
limited in 16-bit mode to keep the buffer use by TCP
down.) 386: The default of 128 can be increased to
any value you like, but 512 seems to be more than
enough. Minix-vmd uses 512 by default, and it seems
happy that way.
SEE ALSO
controller(4), usage(8), boot(8), MAKEDEV(8).
NOTES
Associated with drivers there are device files to access the
devices controlled by the drivers that may have to be
created. Let's simplify this sentence: Type ls /dev, note
that there are only c0* and c1* devices, and only for two
disks each. Some devices, like the audio devices, are not
even present. So if you enable a driver, or increase some
limits, you also need to use MAKEDEV(8) in /dev to allow
programs to talk to the drivers.
AUTHOR
Kees J. Bot (kjb@cs.vu.nl)