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)