dovecot works really well for me on openbsd. i've only used it with maildir
format but with a bit of attention to the documentation and mail list gave
me every bit of information i could possibly use and the performance is
simply EXCELLENT compared to courier (or especially uw-imap.)
Samuel Mo?ux [EMAIL PROTECTED] wrote:
> It seems that Francesco pointed me in the right direction in a private
> message. Cyrus in OpenBSD can't use mmap since it assumes that changes
> in an mmaped file are inmediately seen by VFS system calls. OpenBSD
> hasn't an unified buffer and page cache so this semantic requirement
> of mmap isn't met (requires and explicit msync()). Another
> implementation based in lseek and xmalloc must be used, which performs
> much worse than the mmap based.
>
> I think this explains memory usage, and the high number of IOPS.
>
> Now, I must switch the IMAP server or the operating system.
>
> Thanks to everyone, specially Francesco.
>
> 2007/10/16, Samuel Moqux <[EMAIL PROTECTED]>:
> > Hello everyone,
> >
> > I running into some problems with a Cyrus Imap server. A year ago I
> > asked about sizing the server and it was defined as "overkill" (Dell
> > 1850, Perc 4e/DC, 4 300GB 10krpm disks in Raid 10) for 300 users, but
> > now I'm suffering of really high loads and performance problems. I
> > think it's due I/O contention (more than a thousand t/s in iostat),
> > but don't know why Cyrus is so intensive in I/O that this hardware
> > can't handle it. Memory consumption is also very high.
> >
> > When I started with ~60 users everything was ok, but after surpasing
> > the one hundred, performance problems arised. I added a imap proxy
> > which sited between the server and the webmail(Squirrel) and improved
> > overall performance, but now we have 215 users and the server has
> > severe problems during peak hours, when load can reach values of 12 or
> > more. Users perceive degraded response times.
> >
> > Top usually lota of imap processes waiting for getblk, biowait, lockf,
> > or select. Vmstat also shows always proceses blocked waiting for I/O.
> >
> > I had to tweak default kernel values because server crashed when
> > importing old mailboxes:
> > maxusers 64 # estimated number of users
> > option NKMEMPAGES_MAX=65535
> > option BUFCACHEPERCENT=15
> >
> > Cyrus was compiled from ports, with default options. The server is
> > running Sendmail and a lightly loaded openldap.
> >
> > I don't know where to look at or what to tweak. Any ideas will be welcome.
> >
> > Best regards.
> >
> > Dmesg and other relevant data (non peak hours).
> >
> > load averages: 10.36, 6.97, 5.79
> > 17:59:50
> > 259 processes: 258 idle, 1 on processor
> > CPU states: 3.7% user, 0.0% nice, 20.6% system, 1.9% interrupt, 73.8%
> idle
> > Memory: Real: 1135M/1702M act/tot Free: 312M Swap: 47M/2196M used/tot
> >
> > PID USERNAME PRI NICE SIZE RES STATE WAIT TIME CPU COMMAND
> > 9503 _cyrus 2 0 2716K 4392K sleep select 0:08 1.12% imapd
> > 16618 _cyrus -5 0 3976K 5728K sleep biowai 0:08 1.03% imapd
> > 14158 _cyrus 2 0 3544K 5568K sleep select 0:01 0.68% imapd
> > 23082 _cyrus -5 0 11M 11M sleep getblk 0:06 0.54% imapd
> > 4397 _cyrus 2 0 1664K 3396K sleep select 0:00 0.54% imapd
> > 831 _cyrus -5 0 14M 16M sleep getblk 0:01 0.34% imapd
> > 30096 _cyrus 2 0 6136K 7464K sleep select 0:03 0.29% imapd
> > 10307 _cyrus -5 0 5572K 5908K sleep getblk 0:00 0.29% imapd
> > 28758 _cyrus -5 0 7664K 9412K sleep biowai 0:02 0.20% imapd
> > 27091 _cyrus -5 0 10M 12M sleep getblk 0:02 0.20% imapd
> > 15191 _cyrus 2 0 1740K 3664K sleep select 0:00 0.20% imapd
> > 17387 _cyrus 2 0 2216K 4056K sleep select 0:02 0.15% imapd
> > 25614 _cyrus 2 0 2056K 3952K sleep select 0:02 0.15% imapd
> >
> > # iostat 5 5
> > tty sd0 sd1 cd0
> > fd0 cpu
> > tin tout KB/t t/s MB/s KB/t t/s MB/s KB/t t/s MB/s KB/t t/s
> > MB/s us ni sy in id
> > 0 8 10.77 18 0.19 14.30 242 3.38 0.00 0 0.00 0.00 0
> > 0.00 18 0 5 1 77
> > 0 54 9.93 34 0.33 15.00 956 14.00 0.00 0 0.00 0.00 0
> > 0.00 3 0 13 0 84
> > 0 18 12.07 80 0.95 14.33 615 8.61 0.00 0 0.00 0.00 0
> > 0.00 7 0 15 1 77
> > 0 18 8.68 9 0.08 14.03 575 7.88 0.00 0 0.00 0.00 0
> > 0.00 1 0 6 1 92
> > 0 18 10.21 30 0.30 13.26 709 9.19 0.00 0 0.00 0.00 0
> > 0.00 1 0 9 2 88
> >
> > # vmstat 5 5
> > procs memory page disks traps cpu
> > r b w avm fre flt re pi po fr sr sd0 sd1 int sys cs us sy
> id
> > 7 2 01206040 321392 1719 0 0 11 0 174 12 430 573 4294967005
> > 446 18 6 77
> > 1 7 01200372 329816 7117 0 0 0 0 0 28 1497 1488 8354 1469 11
> 17 72
> > 0 2 01198584 331560 4741 0 0 0 0 0 15 1770 1390 5770 1202 3
> 14 83
> > 0 2 01189932 341820 2549 0 0 0 0 0 37 778 800 2981 592 2 8
> 90
> > 1 5 01196632 334756 5348 0 0 0 0 0 56 1622 1455 6145 1247 3
> 18 78
> >
> >
> > /etc/sysctl.conf :
> >
> > kern.maxproc=1024
> > kern.maxfiles=8000
> > net.inet.tcp.sendspace=65535
> > net.inet.tcp.recvspace=65535
> >
> > # mount
> > /dev/sd0a on / type ffs (local)
> > /dev/sd0i on /home type ffs (local, nodev, softdep)
> > /dev/sd0d on /tmp type ffs (local, nodev, nosuid)
> > /dev/sd0f on /usr type ffs (local, nodev)
> > /dev/sd0e on /var type ffs (local, nodev, nosuid, softdep)
> > /dev/sd0h on /var/spool type ffs (local, noatime, nodev, nosuid, softdep)
> > /dev/sd1a on /das0 type ffs (local, noatime, nodev, nosuid, softdep)
> >
> > # df -h
> > Filesystem Size Used Avail Capacity Mounted on
> > /dev/sd0a 500M 99.9M 375M 21% /
> > /dev/sd0i 50.7G 42.4G 5.8G 88% /home
> > /dev/sd0d 124M 16.0K 117M 0% /tmp
> > /dev/sd0f 7.9G 3.3G 4.2G 44% /usr
> > /dev/sd0e 2.0G 344M 1.5G 18% /var
> > /dev/sd0h 3.9G 55.7M 3.7G 1% /var/spool
> > /dev/sd1a 550G 78.3G 444G 15% /das0
> >
> > # cat /etc/cyrus.conf
> > START {
> > # do not delete this entry!
> > recover cmd="ctl_cyrusdb -r"
> >
> > # this is only necessary if using idled for IMAP IDLE
> > idled cmd="idled"
> > }
> >
> > # UNIX sockets start with a slash and are put into /var/imap/socket
> > SERVICES {
> > # add or remove based on preferences
> > imap cmd="imapd -U 30" listen="imap" prefork=10
> > # imaps cmd="imapd -s" listen="imaps" prefork=0
> > pop3 cmd="pop3d" listen="pop3" prefork=1
> > # pop3s cmd="pop3d -s" listen="pop3s" prefork=0
> > sieve cmd="timsieved" listen="sieve" prefork=1
> >
> > # these are only necessary if receiving/exporting usenet via NNTP
> > # nntp cmd="nntpd" listen="nntp" prefork=0
> > # nntps cmd="nntpd -s" listen="nntps" prefork=0
> >
> > # at least one LMTP is required for delivery
> > # lmtp cmd="lmtpd" listen="lmtp" prefork=0
> > #lmtpunix cmd="lmtpd" listen="/var/imap/socket/lmtp" prefork=1
> > maxchild=40
> > lmtpunix cmd="lmtpd -a" listen="/var/imap/socket/lmtp"
> > prefork=5 maxchild=10
> >
> > # this is only necessary if using notifications
> > notify cmd="notifyd" listen="/var/imap/socket/notify"
> > proto="udp" prefork=1
> > }
> >
> > EVENTS {
> > # this is required
> > checkpoint cmd="ctl_cyrusdb -c" period=30
> >
> > # this is only necessary if using duplicate delivery suppression,
> > # Sieve or NNTP
> > delprune cmd="cyr_expire -E 3" at=0400
> >
> > squatter cmd="squatter -s -r user" at=0100
> > # this is only necessary if caching TLS sessions
> > # tlsprune cmd="tls_prune" at=0400
> > }
> >
> >
> >
> > OpenBSD 3.9-stable (GENERIC) #3: Sat Aug 26 23:30:07 CEST 2006
> > [EMAIL PROTECTED]:/usr/src/sys/arch/i386/compile/GENERIC
> > cpu0: Intel(R) Xeon(TM) CPU 3.20GHz ("GenuineIntel" 686-class) 3.20 GHz
> > cpu0:
> FPU,V86,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR,PGE,MCA,CMOV,PAT,PSE36,CFLUS
> H,ACPI,MMX,FXSR,SSE,SSE2,SS,HTT,TM,SBF,SSE3,MWAIT,CNXT-ID
> > real mem = 2146807808 (2096492K)
> > avail mem = 1779486720 (1737780K)
> > using 4278 buffers containing 280363008 bytes (273792K) of memory
> > mainbus0 (root)
> > bios0 at mainbus0: AT/286+(00) BIOS, date 01/09/06, BIOS32 rev. 0 @ 0xffe90
> > pcibios0 at bios0: rev 2.1 @ 0xf0000/0x10000
> > pcibios0: PCI IRQ Routing Table rev 1.0 @ 0xfb260/304 (17 entries)
> > pcibios0: PCI Interrupt Router at 000:31:0 ("Intel 82801EB/ER LPC" rev
> 0x00)
> > pcibios0: PCI bus #11 is the last bus
> > bios0: ROM list: 0xc0000/0xb000! 0xcb000/0x1000 0xcc000/0x1000
> > 0xcd000/0x2200 0xcf800/0x2200 0xec000/0x4000!
> > ipmi0 at mainbus0: version 1.5 interface KCS iobase 0xca8/8 spacing 4
> > cpu0 at mainbus0
> > pci0 at mainbus0 bus 0: configuration mode 1 (no bios)
> > pchb0 at pci0 dev 0 function 0 "Intel E7520 MCH" rev 0x09
> > ppb0 at pci0 dev 2 function 0 "Intel MCH PCIE" rev 0x09
> > pci1 at ppb0 bus 1
> > ppb1 at pci1 dev 0 function 0 "Intel IOP331 Channel 0" rev 0x06
> > pci2 at ppb1 bus 2
> > ami0 at pci2 dev 14 function 0 "Dell PERC 4e/Di" rev 0x06: irq 7 Dell 16c
> 32b
> > ami0: FW 521X, BIOS vH430, 256MB RAM
> > ami0: 1 channels, 0 FC loops, 1 logical drives
> > scsibus0 at ami0: 40 targets
> > sd0 at scsibus0 targ 0 lun 0: <AMI, Host drive #00, > SCSI2 0/direct fixed
> > sd0: 69880MB, 69880 cyl, 64 head, 32 sec, 512 bytes/sec, 143114240 sec
> total
> > scsibus1 at ami0: 16 targets
> > safte0 at scsibus1 targ 6 lun 0: <PE/PV, 1x2 SCSI BP, 1.0> SCSI2
> > 3/processor fixed
> > ppb2 at pci1 dev 0 function 2 "Intel IOP331 Channel 1" rev 0x06
> > pci3 at ppb2 bus 3
> > ppb3 at pci0 dev 4 function 0 "Intel MCH PCIE" rev 0x09
> > pci4 at ppb3 bus 4
> > ppb4 at pci4 dev 0 function 0 "Intel IOP331 Channel 0" rev 0x07
> > pci5 at ppb4 bus 5
> > ami1 at pci5 dev 14 function 0 "Symbios Logic MegaRAID 320-2E" rev
> > 0x07: irq 7 Dell 2 32b
> > ami1: FW 521X, BIOS vH430, 128MB RAM
> > ami1: 2 channels, 0 FC loops, 1 logical drives
> > scsibus2 at ami1: 40 targets
> > sd1 at scsibus2 targ 0 lun 0: <AMI, Host drive #00, > SCSI2 0/direct fixed
> > sd1: 572160MB, 572160 cyl, 64 head, 32 sec, 512 bytes/sec, 1171783680 sec
> total
> > scsibus3 at ami1: 16 targets
> > ses0 at scsibus3 targ 6 lun 0: <DELL, PV22XS, E.19> SCSI3 3/processor fixed
> > scsibus4 at ami1: 16 targets
> > ppb5 at pci4 dev 0 function 2 "Intel IOP331 Channel 1" rev 0x07
> > pci6 at ppb5 bus 6
> > ppb6 at pci0 dev 5 function 0 "Intel MCH PCIE" rev 0x09
> > pci7 at ppb6 bus 7
> > ppb7 at pci7 dev 0 function 0 "Intel PCIE-PCIE" rev 0x09
> > pci8 at ppb7 bus 8
> > em0 at pci8 dev 7 function 0 "Intel PRO/1000MT (82541GI)" rev 0x05:
> > irq 11, address 00:13:72:5c:87:e9
> > ppb8 at pci7 dev 0 function 2 "Intel PCIE-PCIE" rev 0x09
> > pci9 at ppb8 bus 9
> > em1 at pci9 dev 8 function 0 "Intel PRO/1000MT (82541GI)" rev 0x05:
> > irq 3, address 00:13:72:5c:87:ea
> > ppb9 at pci0 dev 6 function 0 "Intel MCH PCIE" rev 0x09
> > pci10 at ppb9 bus 10
> > uhci0 at pci0 dev 29 function 0 "Intel 82801EB/ER USB" rev 0x02: irq 11
> > usb0 at uhci0: USB revision 1.0
> > uhub0 at usb0
> > uhub0: Intel UHCI root hub, rev 1.00/1.00, addr 1
> > uhub0: 2 ports with 2 removable, self powered
> > uhci1 at pci0 dev 29 function 1 "Intel 82801EB/ER USB" rev 0x02: irq 10
> > usb1 at uhci1: USB revision 1.0
> > uhub1 at usb1
> > uhub1: Intel UHCI root hub, rev 1.00/1.00, addr 1
> > uhub1: 2 ports with 2 removable, self powered
> > uhci2 at pci0 dev 29 function 2 "Intel 82801EB/ER USB" rev 0x02: irq 7
> > usb2 at uhci2: USB revision 1.0
> > uhub2 at usb2
> > uhub2: Intel UHCI root hub, rev 1.00/1.00, addr 1
> > uhub2: 2 ports with 2 removable, self powered
> > ehci0 at pci0 dev 29 function 7 "Intel 82801EB/ER USB2" rev 0x02: irq 5
> > usb3 at ehci0: USB revision 2.0
> > uhub3 at usb3
> > uhub3: Intel EHCI root hub, rev 2.00/1.00, addr 1
> > uhub3: 6 ports with 6 removable, self powered
> > ppb10 at pci0 dev 30 function 0 "Intel 82801BA AGP" rev 0xc2
> > pci11 at ppb10 bus 11
> > vga1 at pci11 dev 13 function 0 "ATI Radeon VE QY" rev 0x00
> > wsdisplay0 at vga1 mux 1: console (80x25, vt100 emulation)
> > wsdisplay0: screen 1-5 added (80x25, vt100 emulation)
> > ichpcib0 at pci0 dev 31 function 0 "Intel 82801EB/ER LPC" rev 0x02
> > pciide0 at pci0 dev 31 function 1 "Intel 82801EB/ER IDE" rev 0x02:
> > DMA, channel 0 configured to compatibility, channel 1 configured to
> > compatibility
> > atapiscsi0 at pciide0 channel 0 drive 0
> > scsibus5 at atapiscsi0: 2 targets
> > cd0 at scsibus5 targ 0 lun 0: <TEAC, CD-ROM CD-224E-N, 3.AB> SCSI0
> > 5/cdrom removable
> > cd0(pciide0:0:0): using PIO mode 4, Ultra-DMA mode 2
> > pciide0: channel 1 disabled (no drives)
> > isa0 at ichpcib0
> > isadma0 at isa0
> > pckbc0 at isa0 port 0x60/5
> > pckbd0 at pckbc0 (kbd slot)
> > pckbc0: using irq 1 for kbd slot
> > wskbd0 at pckbd0: console keyboard, using wsdisplay0
> > pcppi0 at isa0 port 0x61
> > midi0 at pcppi0: <PC speaker>
> > spkr0 at pcppi0
> > npx0 at isa0 port 0xf0/16: using exception 16
> > pccom0 at isa0 port 0x3f8/8 irq 4: ns16550a, 16 byte fifo
> > fdc0 at isa0 port 0x3f0/6 irq 6 drq 2
> > fd0 at fdc0 drive 0: 1.44MB 80 cyl, 2 head, 18 sec
> > biomask ffe5 netmask ffed ttymask ffef
> > pctr: user-level cycle counter enabled
> > uhub4 at uhub3 port 3
> > uhub4: Dell product 0xa001, rev 2.00/0.00, addr 2
> > uhub4: 2 ports with 2 removable, self powered, multiple transaction
> translators
> > dkcsum: sd0 matches BIOS drive 0x80
> > dkcsum: sd1 matches BIOS drive 0x81
> > root on sd0a
> > rootdev=0x400 rrootdev=0xd00 rawdev=0xd02
> > WARNING: / was not properly unmounted
> > arplookup: unable to enter address for 192.168.10.229
> > arplookup: unable to enter address for 192.168.10.243
> > uvm_mapent_alloc: out of static map entries
> > uvm_mapent_alloc: out of static map entries
> > uvm_mapent_alloc: out of static map entries
> > uvm_mapent_alloc: out of static map entries
--
"Give me the power to issue a nation's money, and I care not who writes the
laws" -- Mayer Amschel Rothschild