mail perf tuning
authorIan Kelling <ian@iankelling.org>
Thu, 18 Apr 2024 05:22:18 +0000 (01:22 -0400)
committerIan Kelling <ian@iankelling.org>
Thu, 18 Apr 2024 05:22:18 +0000 (01:22 -0400)
mail-setup
mount-latest-subvol

index 08ec7aed2126611e4641cde9924e0dad789e2433..9c466899979bf2e36f99ddade0681b263488f45b 100755 (executable)
@@ -2061,6 +2061,23 @@ protocol lmtp {
 # default is just $mail_plugins
   mail_plugins = $mail_plugins sieve
 }
+
+# /etc/dovecot/conf.d/10-master.conf says the default is 256M.
+# but I started getting oom errors in the syslog
+# Mar 27 15:10:04 sy dovecot[330088]: lmtp(iank)<3839880><gO/BDwtvBGaIlzoA7AdaJQ>: Fatal: master: service(lmtp): child 3839880 returned error 83 (Out of memory (service lmtp { vsz_limit=256 MB }, you may need to increase it) - set CORE_OUTOFMEM=1 environment to get core dump)
+# exim would just queue mail until it eventually succeeded.
+# Deciding what to increase it to, I found this
+# https://dovecot.org/list/dovecot/2011-December/080056.html
+# which suggests 3x the largest dovecot.index.cache file
+# and then I found that
+# md/l/testignore/dovecot.index.cache is 429M, my largest cache file,
+# but that folder only has 2k messages.
+# next biggest is md/l/qemu-devel/dovecot.index.cache 236M
+# which lead to me a search https://doc.dovecot.org/admin_manual/known_issues/large_cache/
+# which suggests 1.5x the maximum cache file size 1G, and
+# that I can safely rm the index.
+default_vsz_limit = 1500M
+
 EOF
       if dpkg --compare-versions "$(dpkg-query -f='${Version}\n' --show dovecot-core)" ge 1:2.3; then
         cat <<EOF
@@ -2084,30 +2101,24 @@ EOF
     fi
 
     rm -fv /etc/dovecot/conf.d/20-lmtp.conf # file from prev version
+
+    # Having backups of indexes is a waste of space. This also means we
+    # don't send them around with btrbk, I think it is probably
+    # preferable use a bit more cpu to recalculate indexes.
+    install -d -o iank -g iank /var/dovecot-indexes
     cat >>/etc/dovecot/local.conf <<EOF
 
-# /etc/dovecot/conf.d/10-master.conf says the default is 256M.
-# but I started getting oom errors in the syslog
-# Mar 27 15:10:04 sy dovecot[330088]: lmtp(iank)<3839880><gO/BDwtvBGaIlzoA7AdaJQ>: Fatal: master: service(lmtp): child 3839880 returned error 83 (Out of memory (service lmtp { vsz_limit=256 MB }, you may need to increase it) - set CORE_OUTOFMEM=1 environment to get core dump)
-# exim would just queue mail until it eventually succeeded.
-# Deciding what to increase it to, I found this
-# https://dovecot.org/list/dovecot/2011-December/080056.html
-# which suggests 3x the largest dovecot.index.cache file
-# and then I found that
-# md/l/testignore/dovecot.index.cache is 429M, my largest cache file,
-# but that folder only has 2k messages.
-# next biggest is md/l/qemu-devel/dovecot.index.cache 236M
-# which lead to me a search https://doc.dovecot.org/admin_manual/known_issues/large_cache/
-# which suggests 1.5x the maximum cache file size 1G, and
-# that I can safely rm the indix
 
-default_vsz_limit = 1500M
+# This will decrease memory use, and seems likely to decrease cpu & disk
+# use since I rarely use dovecot for most folders.
+mail_cache_max_size = 50M
+
 
 # simple password file based login
 !include conf.d/auth-passwdfile.conf.ext
 
 # ian: %u is used for alerts user vs iank
-mail_location = maildir:/m/%u:LAYOUT=fs:INBOX=/m/%u/INBOX
+mail_location = maildir:/m/%u:LAYOUT=fs:INBOX=/m/%u/INBOX:INDEX=/var/dovecot-indexes/%u
 mail_uid = $u
 mail_gid = $u
 
index c66eebc1bd0a97d9cb8513cbedc2a4d4b9faf8ae..eb682f4eebf54212768eb03c0c0a07e4f6114879 100644 (file)
@@ -271,8 +271,10 @@ fi
 fa=(/mnt/o/btrbk/o.*); f=${fa[0]}
 if [[ -e $f ]]; then
   if [[ $o_dev != "$root_dev" ]]; then
+    # ,compress=zstd regardless of mopts since these are all text files
+    # and it cuts disk use by about half.
     fstab <<EOF
-$o_dev  /o  btrfs  noatime,subvol=o$mopts  0 0
+$o_dev  /o  btrfs  noatime,subvol=o${mopts/,compress=zstd/},compress=zstd  0 0
 EOF
   fi
   fstab <<EOF