Tl; dr - เราไม่สามารถหาสาเหตุของความเร็วในการเขียนที่ จำกัด 60 MB / วินาทีไปยัง NAS ของเราผ่าน SMB และ AFP จากไคลเอนต์ Mac สองตัว ในการเปรียบเทียบ: แล็ปท็อป Windows 7 รุ่นเก่าในเครือข่ายเดียวกันเขียนได้อย่างเสถียร 100 MB / วินาที
ถ้าคุณอ่านคำถามนี้เป็นครั้งแรกโปรดข้ามไปที่การปรับปรุง 4ส่วน rsync
เป็นเหตุผลหลักสำหรับความเร็วต่ำแม้ว่าเราจะไม่เข้าใจว่าทำไม (สำหรับไฟล์เดียว!)
คำถามเดิม: ค้นหาคอขวดความเร็ว SMB3 / NAS กับ Mac OS 10.11.5 ขึ้นไป
เราทดสอบผ่านทางrsync --progress -a /localpath/test.file /nas/test.file
macOS และคัดลอกข้อมูลของ Windows
NAS นั้นเป็น DS713 + ที่ใช้ DSM 6.0.2 ปัจจุบัน (ทดสอบด้วย 5.x ด้วย) โดยมี HGST Deskstar NAS SATA 4TB (HDN724040ALE640) สองตัวใน RAID1 ที่มีส่วนประกอบอีเธอร์เน็ตกิกะบิตเพียงอย่างเดียวและอย่างน้อย Cat5e)
ไคลเอนต์ Mac แรกทำเพียง 20 MB / วินาที แต่การใช้การsigning_required=no
แก้ไข (อธิบายไว้ที่นี่ ) ทำให้ความเร็วในการเขียนเป็น 60 MB / วินาทีผ่านทาง SMB2 และ SMB3 AFP ยังมอบประมาณ 60 MB / วินาที ผลลัพธ์จะแตกต่างกันประมาณ 5 MB / วินาทีขึ้นอยู่กับโปรโตคอลและไคลเอนต์ (Mac)
สิ่งที่เราได้ลองไปแล้ว:
เครือข่าย
- ทดสอบประสิทธิภาพเครือข่ายผ่าน iperf3 ผลลัพธ์: 926 Mbit / s ดูดี.
- พยายามเชื่อมต่อเครือข่าย Dual Link Aggregation / Bonded ไม่มีการเปลี่ยนแปลง.
- เพิ่ม MTU เป็น 6000 และ 9000 ไม่มีการเปลี่ยนแปลง
- ตรวจสอบสายเคเบิลทั้งหมด ทุกอย่างดีอย่างน้อย Cat5e ในสภาพที่ดี
ดิสก์
- ตรวจสอบสมาร์ทดูมีสุขภาพดี
- การทดสอบความเร็วในการเขียนไปยังดิสก์โดยตรงกับ
dd if=/dev/zero of=write.test bs=256M count=4
ต่าง ๆbs
และcount
การตั้งค่า (128/8, 512M / 2, 1024/1) ผลลัพธ์: ประมาณ 120 MB / s (ขึ้นอยู่กับขนาดบล็อก / จำนวน)
SMB / เอเอฟพี
Benchmarked SMB2, SMB3 และ AFP ต่อกัน ประมาณเท่ากัน
ดูการอัปเดตด้านล่าง:ใช้วิธีการที่ผิดเพื่อตัดการใช้งาน SMB ของ macOS SMB บน Windows เร็วขึ้นการตั้งค่า SMB ใหม่ที่มาพร้อมกับ macOS 10.11 และ 10.12 อาจเป็นเหตุผล- พยายามปรับแต่งการตั้งค่า SMB รวมถึงตัวเลือกซ็อกเก็ต (ทำตามคำแนะนำนี้)
- พยายามตั้งค่าแอ๊คล่าช้าเวอร์ชั่นอื่นและ
rsync --sockopts=TCP_NODELAY
(ความคิดเห็น)
ไม่มีการเปลี่ยนแปลงอย่างมีนัยสำคัญของความเร็วในการเขียน เราคู่การตรวจสอบการตั้งค่าที่ถูกโหลดจริงๆและเราได้รับการแก้ไขที่เหมาะสมsmb.conf
ระบบ
- CPU และ RAM ที่รับชม ไม่มีอะไรให้เกิน CPU ประมาณ 20%, RAM ประมาณ 25% ในระหว่างการถ่ายโอน
- ทดสอบ NAS เดียวกันกับ DSM 5.xx ในการตั้งค่าเกือบจะทันที ไม่มีการติดตั้งซอฟต์แวร์เพิ่มเติม หมายเหตุ: เรามีสองสิ่งนี้ในสถานที่ต่างกัน พวกมันซิงค์กันผ่าน CloudSync ของ Synology ผลลัพธ์เดียวกัน
- ปิดการใช้งานทุกอย่างที่ไม่จำเป็นซึ่งสามารถดึงทรัพยากรระบบ
เราคิดว่านี่เป็นการตั้งค่าเริ่มต้นค่อนข้างไม่มีการดัดแปลงแฟนซีลูกค้าหรือส่วนประกอบเครือข่าย ตามตัวชี้วัด Synology เผยแพร่ NAS ควรดำเนินการ 40 MB / s ถึง 75 MB / s เร็วขึ้น แต่เราไม่สามารถหาคอขวดได้
ลูกค้า / NAS
ไคลเอนต์ Mac คือ MacPro 5,1 (สาย NIC แบบมาตรฐาน, รัน 10.12.3 (16D32)) และ MacBookPro10,1 (อะแดปเตอร์เครือข่ายสายฟ้า, วิ่ง 10.11.6) ห่างจาก NAS เพียงประมาณ 2 เมตรเท่านั้น กิกะบิตสวิตช์เป็นแล็ปท็อป Windows ในการทดสอบ
เรามี NASES สองแห่งนี้ในที่ต่างกันและผลลัพธ์ก็เหมือนกัน วินาทีที่ NAS เป็นค่าเริ่มต้นจากโรงงานไม่มากก็น้อย (ไม่ได้ติดตั้งซอฟต์แวร์ของบุคคลที่สาม) เพียงสอง RAID1, EXT4 ฟอร์แมตดิสก์ที่ซิงค์กับ NAS อื่น ๆ ผ่านทาง Synology CloudSync เราไปไกลเท่าที่เชื่อมต่อกับ NAS โดยตรงโดยไม่ต้องใช้สวิตช์ผลลัพธ์เดียวกัน
การปรับปรุงที่สำคัญ
วิธีที่ใช้ในการตัดการใช้งาน SMB ของ macOS / OS X นั้นผิด ฉันทดสอบมันผ่านเครื่องเสมือนโดยสมมติว่ามันจะใช้ SMB เวอร์ชันของตัวเอง แต่เห็นได้ชัดว่าปริมาณการใช้ข้อมูลถูกส่งไปยัง macOS ที่ทำงานผ่าน SMB เวอร์ชันของมัน
ใช้แล็ปท็อป Windows ตอนนี้ฉันสามารถบรรลุเฉลี่ย 100 MB / s การระบุการนำ SMB ไปใช้ / อัพเดตที่มาพร้อมกับ 10.11 และ 10.12 อาจทำให้ประสิทธิภาพต่ำ แม้ว่ามีการตั้งค่าsigning_required
no
จะดีมากถ้ามีคนชี้ให้เห็นการตั้งค่าเพิ่มเติมบางอย่างที่อาจเปลี่ยนแปลงด้วยการอัปเดตและอาจส่งผลต่อประสิทธิภาพ
อัปเดต 2 - ข้อมูลเชิงลึกใหม่
AndrewHenleชี้ให้เห็นในความคิดเห็นที่ฉันควรตรวจสอบการจราจรในรายละเอียดโดยใช้ Wireshark สำหรับข้อมูลเชิงลึกเพิ่มเติม
ฉันจึงวิ่งsudo tcpdump -i eth0 -s 65535 -w tcpdump.dump
บน NAS ในขณะที่ถ่ายโอนไฟล์ทดสอบสองไฟล์หนึ่งไฟล์ที่มี 512 MB และอีกไฟล์หนึ่งที่มี 1 GB และตรวจสอบการถ่ายโอนข้อมูลด้วย Wireshark
สิ่งที่ฉันพบ:
- ทั้ง OS X และ Windows ดูเหมือนจะใช้ SMB2แม้ว่า SMB3 จะเปิดใช้งานบน NAS (อย่างน้อยก็ตาม Wireshark)
- OS X ดูเหมือนว่าจะติดกับMTU แพ็คเก็ตมี 1514 ไบต์นำไปสู่การเพิ่มเครือข่ายค่าใช้จ่ายและส่งแพ็คเก็ต (มองเห็นได้ในการถ่ายโอนข้อมูล)
- Windows ดูเหมือนว่าจะส่งแพ็คเก็ตมากถึง 26,334 ไบต์ (ถ้าฉันอ่านข้อมูลได้อย่างถูกต้องโปรดตรวจสอบ) แม้ว่า MTU ไม่ควรอนุญาตเนื่องจากมันตั้งไว้ที่ 1500 บน NAS การตั้งค่าสูงสุดจะเท่ากับ 9000 (Synology ด้วย ใช้การตั้งค่า 1500 ในการทดสอบ)
- พยายามที่จะ MacOS บังคับให้ใช้ SMB3 โดยการเพิ่ม
smb_neg=smb3_only
ไป/etc/nsmb.confไม่ได้ทำงานหรืออย่างน้อยก็ไม่ได้นำไปสู่การถ่ายโอนได้เร็วขึ้น - การรัน
rsync --sockopts=TCP_NODELAY
ด้วยการรวมกันของการตั้งค่า TCP ล่าช้าแอค (0 ถึง 3) ไม่มีผลกระทบ (หมายเหตุ: ฉันรัน tcpdump ด้วยการตั้งค่าเริ่มต้น ack ที่ 3)
ฉันได้สร้าง 4 dumps เป็นไฟล์. csv, 2 ขณะที่คัดลอก 512 MB (test-2.file) และ 2 ขณะที่คัดลอก 1024 MB (test.file) คุณสามารถดาวน์โหลดการส่งออกของ Wireshark ได้ที่นี่ (25.2 MB) พวกเขาซิปเพื่อประหยัดพื้นที่และตั้งชื่อตนเองอธิบาย
อัปเดต 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
ตั้งค่าในการกำหนดค่าของฉันมีผลต่อความเร็วในการเขียน (~ 20 MB / s เมื่อปรับจูนแล้ว ~ 60 MB / s เมื่อปิด)
อัพเดท 4 - Samba Wars: ความหวังใหม่
มันรู้สึกค่อนข้างน่าอาย แต่ปัญหาหลักที่นี่อีกครั้ง - ดูเหมือนว่าเป็นการวัด
เปลี่ยนrsync --progress -a
ค่าใช้จ่ายประมาณ 30 MB / s ความเร็วในการเขียน การเขียนด้วยdd
การแชร์โดยตรงกับ SMB และการใช้time cp /local/test.file /NAS/test.file
จะเร็วกว่าประมาณ 85-90 MB / s และวิธีที่เร็วที่สุดในการคัดลอกคือ macOS Finder ที่ประมาณ 100 MB / s (ซึ่งเป็นวิธีที่ยากที่สุดในการวัดเนื่องจากไม่มี ตัวบ่งชี้เวลาหรือความเร็ว - ใครต้องการสิ่งนั้นใช่ไหม o_O) เราวัดมันโดยการคัดลอกไฟล์ 1 GB ก่อนแล้วจึงไฟล์ 10 GB โดยใช้นาฬิกาจับเวลา
สิ่งที่เราได้ลองตั้งแต่อัปเดตคำถามนี้ครั้งสุดท้าย
- คัดลอกจากไคลเอนต์ Mac ไปยังไคลเอนต์ Mac ทั้งสองมี SSD (MacPro เขียนด้วย 250 MB / s ไปยังดิสก์ของตัวเอง MacBook Pro 300 MB / s) ผลลัพธ์: เล็กน้อย 65 MB / s ผ่าน
dd
การเขียนจาก MacBook Pro เป็น MacPro (rsync
25 MB / s) การเห็น 25 MB / s เป็นช่วงเวลาที่เราเริ่มตั้งคำถามกับ rsync ยังคงเป็น 65 MB / s ช้ามาก ดังนั้นการนำ SMB มาใช้กับ macOS จึงดูเหมือนว่า ... น่าสงสัย - พยายามตั้งค่า ack ต่าง ๆ ด้วย dd และ cp - ไม่มีโชค
- ในที่สุดเราก็พบวิธีที่จะแสดงรายการตัวเลือก 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 จึงเป็นวิธีที่แพงในการคัดลอกหนึ่ง (1!) ไฟล์ มีการซิงโครไนซ์ / เปรียบเทียบที่นี่มีมากเพียงใด tcpdump ไม่ได้ระบุค่าใช้จ่ายที่เป็นไปได้เช่นกัน
ทำไม
dd
และcp
ช้ากว่าเครื่องมือค้นหา macOS เมื่อโอนไปยังการแชร์ SMB ดูเหมือนว่าเมื่อคัดลอกด้วย Finder จะมีการตอบรับน้อยลงอย่างมากในการสื่อสาร TCP (อีกครั้ง: การตั้งค่า ack เช่นนั้นdelayed_ack=1
ไม่สร้างความแตกต่างสำหรับเรา)ทำไม Windows ดูเหมือนจะเพิกเฉยต่อ MTU ส่งขนาดใหญ่กว่าอย่างมากและดังนั้นจึงแพ็คเก็ต 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.2 MB) ชื่อไฟล์อธิบายสิ่งที่คัดลอกแล้ว (ระบบปฏิบัติการวิธีการถ่ายโอนและขนาดไฟล์)