
{"id":359,"date":"2018-10-21T09:47:58","date_gmt":"2018-10-21T09:47:58","guid":{"rendered":"http:\/\/blog.gordonbuchan.com\/blog\/?p=359"},"modified":"2021-02-07T13:46:22","modified_gmt":"2021-02-07T13:46:22","slug":"fixing-slow-macos-finder-on-samba-file-share-optimizing-for-windows-clients","status":"publish","type":"post","link":"https:\/\/blog.gordonbuchan.com\/blog\/index.php\/2018\/10\/21\/fixing-slow-macos-finder-on-samba-file-share-optimizing-for-windows-clients\/","title":{"rendered":"Fixing slow MacOS Finder on Samba file share, optimizing for Windows clients"},"content":{"rendered":"<p>If you are trying to figure out why your MacOS Finder is slow when it connects to a Samba file share on a Linux server, you are in the right place.<\/p>\n<p>I found the solution in this post:<\/p>\n<p><a href=\"https:\/\/medium.com\/@augusteo\/fixing-slow-macos-finder-connection-to-linux-samba-server-ed7e5ea784c1\">https:\/\/medium.com\/@augusteo\/fixing-slow-macos-finder-connection-to-linux-samba-server-ed7e5ea784c1<\/a><\/p>\n<p>Here is what you need to add to \/etc\/samba\/smb.conf on the Samba server:<\/p>\n<pre id=\"0679\" class=\"graf graf--pre graf-after--p\">vfs objects = fruit\nfruit:aapl = yes\nfruit:encoding = native\nfruit:locking = none\nfruit:metadata = stream\nfruit:resource = file<\/pre>\n<p>While I was searching for things that could speed up a MacOS Finder client&#8217;s session, I found a number of optimizations that helped speed Windows clients connected to a Samba file share.<\/p>\n<p>The best of these was a post:<\/p>\n<p><a href=\"https:\/\/eggplant.pro\/blog\/faster-samba-smb-cifs-share-performance\/\">https:\/\/eggplant.pro\/blog\/faster-samba-smb-cifs-share-performance\/<\/a><\/p>\n<p>with these suggestions for \/etc\/samba\/smb.conf on the Samba server:<\/p>\n<pre class=\"pygment seltext\"><span class=\"nb\">[<\/span><span class=\"sx\">global<\/span><span class=\"nb\">]<\/span>\n\n<span class=\"c\"># FORCE THE DISK SYSTEM TO ALLOCATE REAL STORAGE BLOCKS WHEN<\/span>\n<span class=\"c\"># A FILE IS CREATED OR EXTENDED TO BE A GIVEN SIZE.<\/span>\n<span class=\"c\"># THIS IS ONLY A GOOD OPTION FOR FILE SYSTEMS THAT SUPPORT<\/span>\n<span class=\"c\"># UNWRITTEN EXTENTS LIKE XFS, EXT4, BTRFS, OCS2.<\/span>\n<span class=\"c\"># IF YOU USE A FILE SYSTEM THAT DOES NOT SUPPORT UNWRITTEN<\/span>\n<span class=\"c\"># EXTENTS, SET \"strict allocate = no\".<\/span>\n<span class=\"nt\"># NOTE: MAY WASTE DRIVE SPACE EVEN ON SUPPORTED FILE SYSTEMS<\/span>\n<span class=\"nt\"># SEE: <a class=\"nt\" href=\"https:\/\/bugs.debian.org\/cgi-bin\/bugreport.cgi?bug=798532\">https:\/\/bugs.debian.org\/cgi-bin\/bugreport.cgi?bug=798532<\/a><\/span>\n\n   <span class=\"nb\">strict allocate<\/span> <span class=\"o\">=<\/span> <span class=\"sx\">Yes<\/span>\n\n<span class=\"c\"># THIS IS TO COUNTERACT SPACE WASTAGE THAT CAN BE <\/span>\n<span class=\"c\"># CAUSED BY THE PREVIOUS OPTION <\/span>\n<span class=\"nt\"># SEE: <a class=\"nt\" href=\"https:\/\/lists.samba.org\/archive\/samba-technical\/2014-July\/101304.html\">https:\/\/lists.samba.org\/archive\/samba-technical\/2014-July\/101304.html<\/a><\/span>\n\n   <span class=\"nb\">allocation roundup size<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">4096<\/span>\n\n<span class=\"c\"># ALLOW READS OF 65535 BYTES IN ONE PACKET.<\/span>\n<span class=\"c\"># THIS TYPICALLY PROVIDES A MAJOR PERFORMANCE BENEFIT.<\/span>\n\n   <span class=\"nb\">read raw<\/span> <span class=\"o\">=<\/span> <span class=\"sx\">Yes<\/span>\n\n<span class=\"c\"># SERVER SIGNING SLOWS THINGS DOWN WHEN ENABLED.<\/span>\n<span class=\"c\"># THIS WAS DISABLED BY DEFAULT PRIOR TO SAMBA 4.<\/span>\n<span class=\"c\"># Thanks to Joe in the comments section!<\/span>\n\n   <span class=\"nb\">server signing<\/span> <span class=\"o\">=<\/span> <span class=\"sx\">No<\/span>\n\n<span class=\"c\"># SUPPORT RAW WRITE SMBs WHEN TRANSFERRING DATA FROM CLIENTS.<\/span>\n\n   <span class=\"nb\">write raw<\/span> <span class=\"o\">=<\/span> <span class=\"sx\">Yes<\/span>\n\n<span class=\"c\"># WHEN \"strict locking = no\", THE SERVER PERFORMS FILE LOCK<\/span>\n<span class=\"c\"># CHECKS ONLY WHEN THE CLIENT EXPLICITLY ASKS FOR THEM.<\/span>\n<span class=\"c\"># WELL-BEHAVED CLIENTS ALWAYS ASK FOR LOCK CHECKS WHEN IT IS<\/span>\n<span class=\"c\"># IMPORTANT, SO IN THE VAST MAJORITY OF CASES,<\/span>\n<span class=\"c\"># \"strict locking = auto\" OR \"strict locking = no\" IS ACCEPTABLE.<\/span>\n\n   <span class=\"nb\">strict locking<\/span> <span class=\"o\">=<\/span> <span class=\"sx\">No<\/span>\n\n<span class=\"c\"># TCP_NODELAY:<\/span>\n<span class=\"c\">#    SEND AS MANY PACKETS AS NECESSARY TO KEEP DELAY LOW<\/span>\n<span class=\"c\"># IPTOS_LOWDELAY:<\/span>\n<span class=\"c\">#    [Linux IPv4 Tweak] MINIMIZE DELAYS FOR INTERACTIVE TRAFFIC<\/span>\n<span class=\"c\"># SO_RCVBUF:<\/span>\n<span class=\"c\">#    ENLARGE SYSTEM SOCKET RECEIVE BUFFER<\/span>\n<span class=\"c\"># SO_SNDBUF:<\/span>\n<span class=\"c\">#    ENLARGE SYSTEM SOCKET SEND BUFFER<\/span>\n\n   <span class=\"nb\">socket options<\/span> <span class=\"o\">=<\/span> <span class=\"ss\">TCP_NODELAY IPTOS_LOWDELAY SO_RCVBUF<\/span><span class=\"o\">=<\/span><span class=\"mi\">131072<\/span> <span class=\"ss\">SO_SNDBUF<\/span><span class=\"o\">=<\/span><span class=\"mi\">131072<\/span>\n\n<span class=\"c\"># SMBWriteX CALLS GREATER THAN \"min receivefile size\" WILL BE<\/span>\n<span class=\"c\"># PASSED DIRECTLY TO KERNEL recvfile\/splice SYSTEM CALL.<\/span>\n<span class=\"c\"># TO ENABLE POSIX LARGE WRITE SUPPORT (SMB\/CIFS WRITES UP TO 16MB),<\/span>\n<span class=\"c\"># THIS OPTION MUST BE NONZERO.<\/span>\n<span class=\"c\"># THIS OPTION WILL HAVE NO EFFECT IF SET ON A SMB SIGNED CONNECTION.<\/span>\n<span class=\"c\"># MAX VALUE = 128k<\/span>\n\n   <span class=\"nb\">min receivefile size<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">16384<\/span>\n\n<span class=\"c\"># USE THE MORE EFFICIENT sendfile() SYSTEM CALL FOR EXCLUSIVELY<\/span>\n<span class=\"c\"># OPLOCKED FILES.<\/span>\n<span class=\"c\"># NOTE: ONLY FOR CLIENTS HIGHER THAN WINDOWS 98\/Me<\/span>\n\n   <span class=\"nb\">use sendfile<\/span> <span class=\"o\">=<\/span> <span class=\"sx\">Yes<\/span>\n\n<span class=\"c\"># READ FROM FILE ASYNCHRONOUSLY WHEN SIZE OF REQUEST IS BIGGER<\/span>\n<span class=\"c\"># THAN THIS VALUE.<\/span>\n<span class=\"c\"># NOTE: SAMBA MUST BE BUILT WITH ASYNCHRONOUS I\/O SUPPORT<\/span>\n\n   <span class=\"nb\">aio read size<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">16384<\/span>\n\n<span class=\"c\"># WRITE TO FILE ASYNCHRONOUSLY WHEN SIZE OF REQUEST IS BIGGER<\/span>\n<span class=\"c\"># THAN THIS VALUE<\/span>\n<span class=\"c\"># NOTE: SAMBA MUST BE BUILT WITH ASYNCHRONOUS I\/O SUPPORT<\/span>\n\n   <span class=\"nb\">aio write size<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">16384<\/span><\/pre>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>If you are trying to figure out why your MacOS Finder is slow when it connects to a Samba file share on a Linux server, you are in the right place. I found the solution in this post: https:\/\/medium.com\/@augusteo\/fixing-slow-macos-finder-connection-to-linux-samba-server-ed7e5ea784c1 Here is what you need to add to \/etc\/samba\/smb.conf on the Samba server: vfs objects = &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/blog.gordonbuchan.com\/blog\/index.php\/2018\/10\/21\/fixing-slow-macos-finder-on-samba-file-share-optimizing-for-windows-clients\/\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;Fixing slow MacOS Finder on Samba file share, optimizing for Windows clients&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[13,3,1],"tags":[],"class_list":["post-359","post","type-post","status-publish","format-standard","hentry","category-apple","category-linux","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/blog.gordonbuchan.com\/blog\/index.php\/wp-json\/wp\/v2\/posts\/359","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.gordonbuchan.com\/blog\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.gordonbuchan.com\/blog\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.gordonbuchan.com\/blog\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.gordonbuchan.com\/blog\/index.php\/wp-json\/wp\/v2\/comments?post=359"}],"version-history":[{"count":2,"href":"https:\/\/blog.gordonbuchan.com\/blog\/index.php\/wp-json\/wp\/v2\/posts\/359\/revisions"}],"predecessor-version":[{"id":365,"href":"https:\/\/blog.gordonbuchan.com\/blog\/index.php\/wp-json\/wp\/v2\/posts\/359\/revisions\/365"}],"wp:attachment":[{"href":"https:\/\/blog.gordonbuchan.com\/blog\/index.php\/wp-json\/wp\/v2\/media?parent=359"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.gordonbuchan.com\/blog\/index.php\/wp-json\/wp\/v2\/categories?post=359"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.gordonbuchan.com\/blog\/index.php\/wp-json\/wp\/v2\/tags?post=359"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}