什么是瓶颈我的中小企业份额?

我在我的FreeNAS盒子(Xeon E3-1220v5,8GB DDR4 RAM)上build立了一个SMB / CIFS共享,我注意到传输速率被限制在〜70 MB / s,而通过WebDAV我可以很容易地达到110 MB / s。使用iperf我可以达到iperf MBit / s的千兆位连接的完整理论最大值。 根据lspci ,NIC是“Intel Corporation Ethernet Connection(2)I219-LM(rev 31)”。

我的两个testing计算机上的磁盘都足够快,可以很容易地饱和吉比特速度。 我在传输文件时检查了服务器端的CPU和内存使用情况,两者看起来都不错。 在CPU上它不会高于12%左右。 我也跑了一个pingtesting,以获得链接到我的服务器的平均延迟:

 3221 packets transmitted, 3221 received, 0% packet loss, time 656878ms rtt min/avg/max/mdev = 0.083/0.131/0.321/0.028 ms 

我现在的问题是,我怎样才能找出限制速度越来越高的速度? 我期待至less约90 MB /秒的东西。


这里是testparm -vvv的输出:

 # Global parameters [global] bind interfaces only = No config backend = file dos charset = CP437 enable core files = Yes interfaces = multicast dns register = Yes netbios aliases = netbios name = FREENAS netbios scope = realm = server services = s3fs, rpc, nbt, wrepl, ldap, cldap, kdc, drepl, winbindd, ntp_signd, kcc, dnsupdate, dns server string = FreeNAS Server share backend = classic unix charset = UTF-8 workgroup = WORKGROUP browse list = Yes domain master = Auto enhanced browsing = Yes lm announce = Yes lm interval = 60 local master = Yes os level = 20 preferred master = Auto ads dns update = Yes allow dns updates = secure only dns forwarder = dns update command = /usr/local/sbin/samba_dnsupdate machine password timeout = 604800 nsupdate command = /usr/local/bin/samba-nsupdate -g rndc command = /usr/sbin/rndc spn update command = /usr/local/sbin/samba_spnupdate mangle prefix = 1 mangling method = hash2 max stat cache size = 256 stat cache = Yes client ldap sasl wrapping = sign ldap admin dn = ldap connection timeout = 2 ldap delete dn = No ldap deref = auto ldap follow referral = Auto ldap group suffix = ldap idmap suffix = ldap machine suffix = ldap page size = 1000 ldap passwd sync = no ldap replication sleep = 1000 ldap server require strong auth = Yes ldap ssl = start tls ldap ssl ads = No ldap suffix = ldap timeout = 15 ldap user suffix = lock spin time = 200 oplock break wait time = 0 smb2 leases = No debug class = No debug hires timestamp = Yes debug pid = No debug prefix timestamp = No debug uid = No ldap debug level = 0 ldap debug threshold = 10 log file = logging = file log level = 2 max log size = 51200 syslog = 1 syslog only = No timestamp logs = Yes abort shutdown script = add group script = add machine script = add user script = add user to group script = allow nt4 crypto = No delete group script = delete user from group script = delete user script = domain logons = No enable privileges = Yes init logon delay = 100 init logon delayed hosts = logon drive = logon home = \\%N\%U logon path = \\%N\%U\profile logon script = reject md5 clients = No set primary group script = shutdown script = add share command = afs token lifetime = 604800 afs username map = allow insecure wide links = No async smb echo handler = No auto services = cache directory = /var/db/samba4 change notify = Yes change share command = cluster addresses = clustering = No config file = ctdbd socket = ctdb locktime warn threshold = 0 ctdb timeout = 0 default service = delete share command = homedir map = auto.home kernel change notify = No lock directory = /var/lock log writeable files on exit = No message command = nbt client socket address = 0.0.0.0 ncalrpc dir = /var/run/samba4/ncalrpc NIS homedir = No nmbd bind explicit broadcast = Yes panic action = /usr/local/libexec/samba/samba-backtrace perfcount module = pid directory = /var/run/samba registry shares = No remote announce = remote browse sync = reset on zero vc = No smbd profiling level = off state directory = /var/db/samba4 usershare allow guests = No usershare max shares = 0 usershare owner only = Yes usershare path = /var/db/samba4/usershares usershare prefix allow list = usershare prefix deny list = usershare template share = utmp = No utmp directory = wtmp directory = addport command = addprinter command = cups connection timeout = 30 cups encrypt = No cups server = deleteprinter command = disable spoolss = Yes enumports command = iprint server = load printers = No lpq cache time = 30 os2 driver map = printcap cache time = 750 printcap name = /dev/null show add printer wizard = Yes cldap port = 389 client ipc max protocol = default client ipc min protocol = default client max protocol = default client min protocol = CORE client use spnego = Yes dcerpc endpoint servers = epmapper, wkssvc, rpcecho, samr, netlogon, lsarpc, spoolss, drsuapi, dssetup, unixinfo, browser, eventlog6, backupkey, dnsserver defer sharing violations = Yes dgram port = 138 disable netbios = No enable asu support = No eventlog list = large readwrite = Yes max mux = 50 max ttl = 259200 max wins ttl = 518400 max xmit = 65535 min receivefile size = 0 min wins ttl = 21600 name resolve order = lmhosts wins host bcast nbt port = 137 nt pipe support = Yes nt status support = Yes read raw = Yes rpc big endian = No server max protocol = SMB3 server min protocol = LANMAN1 server multi channel support = No smb2 max credits = 8192 smb2 max read = 8388608 smb2 max trans = 8388608 smb2 max write = 8388608 smb ports = 445 139 svcctl list = time server = Yes unicode = Yes unix extensions = Yes use spnego = Yes web port = 901 write raw = Yes algorithmic rid base = 1000 allow dcerpc auth level connect = No allow trusted domains = Yes auth methods = check password script = client ipc signing = default client lanman auth = No client NTLMv2 auth = Yes client plaintext auth = No client schannel = Auto client signing = default client use spnego principal = No dedicated keytab file = encrypt passwords = Yes guest account = nobody kerberos method = default kpasswd port = 464 krb5 port = 88 lanman auth = No log nt token command = map to guest = Bad User map untrusted to domain = No ntlm auth = Yes ntp signd socket directory = /var/run/samba4/ntp_signd null passwords = No obey pam restrictions = Yes old password allowed period = 60 pam password change = No passdb backend = tdbsam passdb expand explicit = No passwd chat = *new*password* %n\n *new*password* %n\n *changed* passwd chat debug = No passwd chat timeout = 2 passwd program = password server = * preload modules = private dir = /var/db/samba4/private raw NTLMv2 auth = No rename user script = restrict anonymous = 0 root directory = samba kcc command = /usr/local/sbin/samba_kcc security = USER server role = standalone server server schannel = Auto server signing = default smb passwd file = /var/db/samba4/private/smbpasswd tls cafile = tls/ca.pem tls certfile = tls/cert.pem tls crlfile = tls dh params file = tls enabled = Yes tls keyfile = tls/key.pem tls priority = NORMAL:-VERS-SSL3.0 tls verify peer = as_strict_as_possible unix password sync = No username level = 0 username map = username map cache time = 0 username map script = aio max threads = 100 deadtime = 15 getwd cache = Yes hostname lookups = Yes keepalive = 300 max disk size = 0 max open files = 233687 max smbd processes = 0 name cache timeout = 660 socket options = TCP_NODELAY IPTOS_LOWDELAY SO_RCVBUF=65536 SO_SNDBUF=65536 use mmap = Yes get quota command = host msdfs = Yes set quota command = create krb5 conf = Yes idmap backend = tdb idmap cache time = 604800 idmap gid = idmap negative cache time = 120 idmap uid = neutralize nt4 emulation = No reject md5 servers = No require strong key = Yes template homedir = /home/%D/%U template shell = /bin/false winbind cache time = 300 winbindd privileged socket directory = /var/run/samba4/winbindd_privileged winbindd socket directory = /var/run/samba4/winbindd winbind enum groups = No winbind enum users = No winbind expand groups = 0 winbind max clients = 200 winbind max domain connections = 1 winbind nested groups = Yes winbind normalize names = No winbind nss info = template winbind offline logon = No winbind reconnect delay = 30 winbind refresh tickets = No winbind request timeout = 60 winbind rpc only = No winbind sealed pipes = Yes winbind separator = \ winbind trusted domains only = No winbind use default domain = No dns proxy = No wins hook = wins proxy = No wins server = wins support = No idmap config *: range = 90000001-100000000 idmap config * : backend = tdb comment = path = administrative share = No browseable = Yes case sensitive = Auto default case = lower delete veto files = No hide dot files = Yes hide files = hide special files = No hide unreadable = No hide unwriteable files = No mangled names = Yes mangling char = ~ map archive = Yes map hidden = No map readonly = yes map system = No preserve case = Yes short preserve case = Yes store dos attributes = Yes veto files = veto oplock files = blocking locks = Yes csc policy = manual fake oplocks = No kernel oplocks = No kernel share modes = Yes level2 oplocks = Yes locking = Yes oplock contention limit = 2 oplocks = Yes posix locking = Yes strict locking = No afs share = No available = Yes copy = delete readonly = No dfree cache time = 0 dfree command = directory name cache size = 0 dmapi support = No dont descend = dos filemode = Yes dos filetime resolution = No dos filetimes = Yes fake directory create times = No follow symlinks = Yes fstype = NTFS include = magic output = magic script = postexec = preexec = preexec close = No root postexec = root preexec = root preexec close = No spotlight = No volume = wide links = No cups options = default devmode = Yes force printername = No lppause command = lpq command = lpq -P'%p' lpresume command = lprm command = lprm -P'%p' %j max print jobs = 1000 max reported print jobs = 0 printable = No print command = lpr -r -P'%p' %s printer name = printing = bsd printjob username = %U print notify backchannel = No queuepause command = queueresume command = use client driver = No acl allow execute always = Yes acl check permissions = Yes acl map full control = Yes durable handles = Yes ea support = Yes map acl inherit = No nt acl support = Yes profile acls = No access based share enum = No acl group control = No admin users = create mask = 0666 directory mask = 0777 force create mode = 0000 force directory mode = 0000 force group = force unknown acl user = No force user = guest ok = No guest only = No hosts allow = hosts deny = inherit acls = No inherit owner = No inherit permissions = No invalid users = only user = No read list = read only = Yes smb encrypt = default username = valid users = write list = aio read size = 0 aio write behind = aio write size = 0 allocation roundup size = 1048576 block size = 1024 max connections = 0 min print space = 0 strict allocate = No strict rename = No strict sync = No sync always = No use sendfile = No write cache size = 0 msdfs proxy = msdfs root = No msdfs shuffle referrals = No ntvfs handler = unixuid, default vfs objects = [...] 

以下是我在传输一个大文件时每个核心具有活动的top屏幕截图:

最佳


由于回答的build议,我启用了巨型帧 (9000),并将TCP窗口大小增加了大约4倍,但仍然没有更好的结果。


更新:我build立了一个Fedora 25机器,并运行相同的testing,由于某种原因,我得到了完整的千兆速度。 所以我的猜测是它与协议(?)Ubuntu(我用于testing迄今为止)正在使用。

Samba是单线程的。 这通常意味着CPU限制取决于select/启用的选项。

第3章Samba体系结构

SMB服务器通常协商小型networking传输大小,介于4 KB和32/64 KB之间。

如果使用Samba,请尝试增加max xmit值。 默认情况下它被设置为16644字节,尝试将其设置得更大(例如65536)。

编辑:好吧,让我们尝试一些其他参数。 如果不行,你可以评论/删除它们:

  • 设置client max protocol = SMB2
  • 设置server max protocol = SMB2

如果尚未完成,请启用巨型帧(在networking接口级别)并设置较大的TCP窗口大小。