[Dovecot] dovecot and nfs readdir vs readdirplus operations

Angel L. Mateo amateo at um.es
Wed Jul 4 21:49:21 EEST 2012


Hello,

	We are having performance problems trying to migrate our pop/imap 
servers to a new version. Our old servers are 4 debian lenny with 5GB of 
RAM running of XenServer VMs with kernel 2.6.32-4-amd64 and dovecot 
1.1.16. New servers are 4 ubuntu 12.04 with dovecot 2.1.5 running on 
vmware vm with 6 cores and 16GB of RAM and kernel 3.2.0-24-generic. On 
both server we are using nfs 3 with same configuration  (regardless of 
internal kernel differences, but we have no customized any of them, we 
are using vanilla kernels with default configurations).

	The problem we have is that new servers have performance problems. Even 
when have a small part of our total users (about 25%) directed to the 
new farm, performance is very poor, even useless.

	Looking for NFS problems, we have found a lot of differences in nfs 
operations. For example, this is the nfsstat of one of a new servers at 
this moment:

myotis21:~# nfsstat
Client rpc stats:
calls      retrans    authrefrsh
414528349   885        37

Client nfs v3:
null         getattr      setattr      lookup       access 
readlink
0         0% 95673837 23% 3961938   0% 89586364 21% 110097351 26% 
2930961   0%
read         write        create       mkdir        symlink      mknod 

20009850  4% 6065319   1% 3757720   0% 1557      0% 0         0% 0 
    0%
remove       rmdir        rename       link         readdir 
readdirplus
6378134   1% 281       0% 2602358   0% 555097    0% 53126619 12% 
15615402  3%
fsstat       fsinfo       pathconf     commit
113256    0% 26152     0% 0         0% 4026151   0%


	and this is the same on one of the new ones:

amateo_adm at myotis31:~$ nfsstat
Server rpc stats:
calls      badcalls   badclnt    badauth    xdrcall
0          0          0          0          0

Client rpc stats:
calls      retrans    authrefrsh
178040318   675        178040800

Client nfs v3:
null         getattr      setattr      lookup       access 
readlink
0         0% 24350345 13% 5045924   2% 10939469  6% 30185146 16% 142865 
    0%
read         write        create       mkdir        symlink      mknod 

8818016   4% 6058614   3% 2877653   1% 420       0% 0         0% 0 
    0%
remove       rmdir        rename       link         readdir 
readdirplus
2842562   1% 69        0% 2961239   1% 634038    0% 0         0% 
82921863 46%
fsstat       fsinfo       pathconf     commit
70861     0% 18754     0% 9377      0% 152702    0%

	Although nfs configuration is the same, there are a lot of differences 
on readdir vs readdirplus nfs operations. In fact, in the old one we 
have 12% readdir operations and 3% of readdirplus. And in the new one we 
have 46% of readdirplus and no readdir operations.

	Although readdirplus is supposed to be an optimization in nfs3, in 
situations when you have big directories and uses just a few entries of 
these directories it could be worse. So we think if this could be the 
problem (or one of them).

	Any idea of this difference? And if this difference could be significative?

PS: I have attached doveconf -n of the new server.

-- 
Angel L. Mateo Martínez
Sección de Telemática
Área de Tecnologías de la Información
y las Comunicaciones Aplicadas (ATICA)
http://www.um.es/atica
Tfo: 868887590
Fax: 868888337

-------------- next part --------------
# 2.1.5: /etc/dovecot/dovecot.conf
# OS: Linux 3.2.0-24-generic x86_64 Ubuntu 12.04 LTS 
auth_cache_size = 20 M
auth_cache_ttl = 1 days
auth_debug = yes
auth_master_user_separator = *
auth_verbose = yes
default_process_limit = 1000
disable_plaintext_auth = no
log_timestamp = %Y-%m-%d %H:%M:%S
login_trusted_networks = 155.54.211.176/28
mail_debug = yes
mail_location = maildir:~/Maildir:INDEX=/var/indexes/%n
mail_nfs_storage = yes
mail_privileged_group = mail
mdbox_rotate_size = 20 M
passdb {
  args = /etc/dovecot/master-users
  driver = passwd-file
  master = yes
  pass = yes
}
passdb {
  args = /etc/dovecot/dovecot-ldap.conf.ext
  driver = ldap
}
passdb {
  args = session=yes dovecot
  driver = pam
}
plugin {
  lazy_expunge = .EXPUNGED/ .DELETED/ .DELETED/.EXPUNGED/
  sieve = ~/.dovecot.sieve
  sieve_dir = ~/sieve
  sieve_extensions = +imapflags
  sieve_max_redirects = 15
  zlib_save = gz
  zlib_save_level = 6
}
postmaster_address = postmaster at um.es
service anvil {
  client_limit = 2003
}
service auth {
  client_limit = 3000
  unix_listener auth-userdb {
    mode = 0666
  }
}
service doveadm {
  inet_listener {
    port = 24245
  }
}
service imap {
  process_limit = 5120
  process_min_avail = 6
  vsz_limit = 512 M
}
service lmtp {
  inet_listener lmtp {
    port = 24
  }
  process_min_avail = 10
  vsz_limit = 512 M
}
service pop3 {
  process_min_avail = 6
}
ssl = no
ssl_cert = </etc/ssl/certs/dovecot.pem
ssl_key = </etc/ssl/private/dovecot.pem
userdb {
  driver = prefetch
}
userdb {
  args = /etc/dovecot/dovecot-ldap.conf.ext
  driver = ldap
}
protocol lda {
  mail_plugins = " sieve"
}
protocol lmtp {
  mail_plugins = " sieve"
}
protocol pop3 {
  pop3_logout_format = top=%t/%p, retr=%r/%b, del=%d/%m, size=%s, in=%i, out=%o
}
local 155.54.211.160/27/27 {
  doveadm_password = ]dWhu5kB
}


More information about the dovecot mailing list