Tl; dr – 두 개의 다른 Mac 클라이언트에서 SMB 및 AFP를 통해 NAS에 60MB / 초의 제한된 쓰기 속도가 필요한 이유를 찾을 수 없습니다. 이에 비해 : 동일한 네트워크에있는 오래된 Windows 7 랩톱은 초당 100MB의 안정적인 속도를 씁니다.
이 질문을 처음으로 읽으면 업데이트 4 섹션으로 건너 뛰십시오 . rsync
왜 우리가 (단일 파일을 위해!) 이해하지 못하더라도 저속의 주된 이유입니다.
원래 질문 : Mac OS 10.11.5 이상에서 속도 병목 현상 SMB3 / NAS 찾기
우리는 rsync --progress -a /localpath/test.file /nas/test.file
macOS와 Windows의 복사 정보를 통해 테스트했습니다 .
NAS는 현재 DSM 6.0.2 (5.x로도 테스트)를 실행하는 DS713 +이며 기가비트 이더넷 구성 요소와 새로운 이더넷 케이블 (최소 Cat5e) 만있는 RAID1에 2 개의 HGST Deskstar NAS SATA 4TB (HDN724040ALE640)가 있습니다.
Mac 클라이언트는 먼저 20MB / 초만 만들었습니다. 그러나 signing_required=no
수정 사항 ( 여기에 설명 됨 )을 적용하면 SMB2 및 SMB3을 통해 쓰기 속도가 60MB / 초로 증가했습니다. AFP는 또한 약 60MB / 초를 제공합니다. 결과는 프로토콜 및 (Mac) 클라이언트에 따라 약 5MB / 초입니다.
우리가 이미 시도한 것 :
회로망
- iperf3를 통한 네트워크 성능 테스트 결과 : 926 Mbit / s. 좋아 보인다
- 이중 링크 집계 / 결합 네트워크 인터페이스를 시도했습니다. 변경 없음.
- MTU가 6000 및 9000으로 증가했습니다. 변경 사항이 없습니다.
- 모든 케이블을 점검하십시오. 좋은 상태에서 적어도 Cat5e는 괜찮습니다.
디스크
- 확인 된 스마트 건강하게 보입니다.
- 와 디스크에 직접 쓰기 속도를 테스트
dd if=/dev/zero of=write.test bs=256M count=4
다양한으로bs
와count
설정 (8분의 128, 512M / 2, 1분의 1,024). 결과 : 약 120MB / s (블록 크기 / 카운트에 따라 다름)
SMB / AFP
SMB2, SMB3 및 AFP가 서로 벤치 마크되었습니다. 거의 같습니다.
아래 업데이트를 참조하십시오 . macOS의 SMB 구현을 배제하기 위해 잘못된 방법을 사용했습니다. Windows의 SMB가 빠르기 때문에 macOS 10.11 및 10.12와 함께 제공되는 새로운 SMB 설정이 그 이유 일 수 있습니다.- 소켓 옵션을 포함하여 SMB 설정을 조정하려고했습니다 (이 지침에 따름 )
- 지연된 ack 설정과
rsync --sockopts=TCP_NODELAY
(의견) 의 다른 버전을 시도했습니다
쓰기 속도에는 큰 변화가 없습니다. 우리는 설정이 실제로로드되었고 올바른 smb.conf를 편집하고 있는지 두 번 확인했습니다 .
체계
- CPU 및 RAM로드를 감시했습니다. 최대치가 없습니다. 전송 중 CPU 약 20 %, RAM 약 25 %
- 거의 즉시 사용 가능한 설정에서 DSM 5.xx로 동일한 NAS를 테스트했습니다. 추가 소프트웨어가 설치되어 있지 않습니다. 참고 : 우리는 서로 다른 위치에 두 가지를 가지고 있습니다. Synology의 CloudSync를 통해 동기화됩니다. 같은 결과입니다.
- 시스템 리소스를 끌어 올 수있는 불필요한 모든 것을 비활성화했습니다.
우리는 이것이 기본 설정이며 멋진 적응, 클라이언트 또는 네트워크 구성 요소가 아니라고 생각합니다. Synology가 게시 한 지표에 따르면 NAS는 40MB / s ~ 75MB / s 더 빠른 성능을 보여야합니다. 그러나 병목 현상을 찾을 수 없습니다.
클라이언트 / NAS
Mac 클라이언트는 MacPro 5,1 (10.12.3 (16D32)을 실행하는 표준 유선 NIC) 및 MacBookPro10,1 (10.11.6을 실행하는 Thunderbolt 네트워크 어댑터)으로 NAS에서 약 2m 거리에 있으며 동일하게 실행됩니다 테스트에서 Windows 노트북으로 기가비트 스위치.
우리는 서로 다른 위치에이 두 개의 NAS가 있으며 결과는 동일합니다. NAS는 공장 출하시 기본 설정입니다 (타사 소프트웨어도 설치되지 않음). Synology CloudSync를 통해 다른 NAS와 동기화하는 RAID1, EXT4 포맷 디스크 2 개만 있습니다. 스위치없이 NAS에 직접 연결하는 것과 동일한 결과를 얻었습니다.
중요 업데이트
macOS / OS X의 SMB 구현을 배제하는 데 사용 된 방법이 잘못되었습니다. 자체 버전의 SMB를 사용한다고 가정하고 가상 머신을 통해 테스트했지만 트래픽이 SMB 버전을 통해 실행되는 macOS로 전달됩니다.
Windows 랩톱을 사용하여 이제 평균 100MB / s를 달성 할 수있었습니다. 10.11 및 10.12와 함께 제공되는 SMB 구현 / 업데이트를 표시하면 성능이 저하 될 수 있습니다. 심지어 경우 signing_required
에 설정됩니다 no
.
누군가 업데이트로 변경되어 성능에 영향을 줄 수있는 추가 설정을 지적 할 수 있다면 좋을 것입니다.
업데이트 2 – 새로운 통찰력
AndrewHenle 은 Wireshark를 사용하여 더 많은 통찰력을 얻으 려면 트래픽을 자세히 조사해야한다는 의견을 지적했습니다.
따라서 sudo tcpdump -i eth0 -s 65535 -w tcpdump.dump
NAS에서 2 개의 테스트 파일 (512MB 및 1GB)을 전송했습니다. Wireshark로 덤프를 검사했습니다.
내가 찾은 것 :
- NAS에서 SMB3가 활성화되어 있지만 OS X와 Windows 모두 SMB2 를 사용하는 것 같습니다 (적어도 Wireshark에 따름).
- OS X은 MTU 를 고수하는 것 같습니다 . 패킷은 1514 바이트로 더 많은 네트워크 오버 헤드 와 전송 된 패킷 (덤프에서 볼 수 있음)으로 이어집니다.
- MTU가 허용하지 않아야하더라도 Windows는 최대 26334 바이트의 패킷 을 보내는 것처럼 보입니다 ( NAT 에서 1500으로 설정되어 있기 때문에 최대 설정은 9000입니다 (Synology도) 테스트에서 1500 설정을 사용합니다).
- /etc/nsmb.conf 에 추가
smb_neg=smb3_only
하여 macOS가 SMB3 을 사용하도록하려는 시도가 작동하지 않거나 최소한 더 빠른 전송으로 이어지지 않았습니다. rsync --sockopts=TCP_NODELAY
TCP 지연 ack 설정 (0-3)의 다양한 조합으로 실행 해도 아무런 영향이 없었습니다 (참고 : 기본 ack 설정 3으로 tcpdump를 실행했습니다).
512MB (test-2.file)를 복사하는 동안 2 개, 1024MB (test.file)를 복사하는 동안 2 개, .csv 파일로 4 개의 덤프를 만들었습니다. Wireshark 내보내기를 여기에서 다운로드 할 수 있습니다 (25.2MB). 공간을 절약하기 위해 압축되었으며 자체 설명이 가능합니다.
업데이트 3 – smbutil 출력
의 출력 smbutil statshares -a
의 요청에 따라 harrymc 코멘트에.
==================================================================================================
SHARE ATTRIBUTE TYPE VALUE
==================================================================================================
home
SERVER_NAME server-name._smb._tcp.local
USER_ID 502
SMB_NEGOTIATE SMBV_NEG_SMB1_ENABLED
SMB_NEGOTIATE SMBV_NEG_SMB2_ENABLED
SMB_NEGOTIATE SMBV_NEG_SMB3_ENABLED
SMB_VERSION SMB_3.0
SMB_SHARE_TYPE DISK
SIGNING_SUPPORTED TRUE
EXTENDED_SECURITY_SUPPORTED TRUE
LARGE_FILE_SUPPORTED TRUE
OS_X_SERVER TRUE
QUERYINFO_NOT_SUPPORTED TRUE
DFS_SUPPORTED TRUE
MULTI_CREDIT_SUPPORTED TRUE
--------------------------------------------------------------------------------------------------
참고 사항 : 여기에 SIGNING_SUPPORTED
있다고 true
해도 구성의 설정이 작동하지 않는다는 의미는 아닙니다. 그러나 NAS에서만 지원됩니다. signing_required
구성 에서 설정 을 변경하면 쓰기 속도에 영향을 미치는지 세 번 확인했습니다 (켜져 있으면 최대 20MB / s, 꺼져 있으면 최대 60MB / s).
업데이트 4 – 삼바 전쟁 : 새로운 희망
다소 당황 스럽지만 여기서 가장 큰 문제는 다시 측정하는 것 같습니다.
rsync --progress -a
약 30MB / s의 쓰기 속도 가 나옵니다 . dd
SMB 공유에 직접 쓰고 사용 time cp /local/test.file /NAS/test.file
하는 속도는 약 85-90MB / s로 빠르며 복사하는 가장 빠른 방법은 약 100MB / s의 macOS Finder입니다 (이는 측정하기가 가장 어려운 방법이기도합니다). 타이밍 또는 속도 표시기 – 누가 필요합니까? 스톱워치를 사용하여 먼저 1GB 파일을 복사 한 다음 10GB 파일을 복사하여 측정했습니다.
이 질문의 마지막 업데이트 이후 우리가 시도한 것.
- Mac 클라이언트에서 Mac 클라이언트로 복사하십시오. 둘 다 SSD가 있습니다 (MacPro는 250MB / s의 디스크를 소유하고 MacBook Pro는 300MB / s의 디스크를 기록합니다). 결과 :
dd
MacBook Pro에서 MacPro (rsync
25MB / s)로 쓰기를 통해 빈약 한 65MB / s. 우리가 rsync에 질문하기 시작한 순간은 25MB / s를 보았습니다. 여전히 65MB / s가 매우 느립니다. 따라서 macOS의 SMB 구현은… 의심 스럽습니다. - dd와 cp로 다른 ack 설정을 시도했지만 운이 없습니다.
- 마지막으로 사용 가능한 모든 nsmb.conf 옵션을 나열하는 방법을 찾았습니다. 간단
man nsmb.conf
합니다. 주의 온라인 버전 이 오래되었습니다!
그래서 몇 가지 설정을 더 시도했습니다.
notify_off=yes
validate_neg_off=yes
read_async_cnt=16
write_async_cnt=16
dir_cache_async_cnt=40
protocol_vers_map=4
streams=no
soft=yes
참고 : smb_neg=smb3_only
이미 예상 한대로 올바른 설정이 아닙니다. protocol_vers_map=4
유효한 동등한 것이어야합니다.
어쨌든 이러한 설정 중 어느 것도 우리에게 아무런 변화가 없었습니다.
한눈에 새로운 질문
rsync가 하나의 파일을 복사하는 데 비용이 많이 드는 이유는 무엇입니까? 동기화 / 비교할 것이 많지 않습니다. tcpdump는 가능한 오버 헤드를 나타내지 않습니다.
왜
dd
와cp
에 따라 SMB 공유에 전송할 때 파인더 맥 OS보다 느리다? Finder로 복사 할 때 TCP 통신에 대한 승인이 상당히 적습니다. (다시 : ack 설정은 예를 들어delayed_ack=1
우리에게 아무런 영향을 미치지 않았습니다.)Windows가 MTU를 무시하고 왜 TCP 패킷을 크게 전송하여 더 적은 수의 TCP 패킷을 전송하여 macOS를 통해 가능한 모든 것에 비해 최고의 성능을 제공하는 것입니까?
이것이 macOS의 패킷 모양입니다 (일정 1514).
"TCP","1514","[TCP segment of a reassembled PDU]"
"TCP","66","445 > 56932 [ACK] Seq=6603 Ack=35239 Win=4505 Len=0 TSval=520980697 TSecr=650208630"
그리고 이것은 Windows에서 제공됩니다 (크기가 다양한 최대 26334).
"SMB2","1466","Write Request Len:65536 Off:196608 File: test.file"
"TCP","26334","[TCP segment of a reassembled PDU]"
"TCP","7354","[TCP segment of a reassembled PDU]"
"TCP","54","445 > 49220 [ACK] Seq=6831 Ack=267030 Win=4074 Len=0"
여기에서 전체 .csv (25.2MB)를 다운로드 할 수 있으며 파일 이름에 복사 된 내용 (OS, 전송 방법 및 파일 크기)이 설명되어 있습니다.