การปรับแต่ง NFS ไคลเอ็นต์ / เซิร์ฟเวอร์สแต็ก


10

ฉันมีเซิร์ฟเวอร์ CentOS 5 VMWare ที่เชื่อมต่อกับเครื่อง OpenSolaris 2009.06 ผ่าน NFS ที่เก็บอิมเมจของดิสก์ เครื่องเสมือนของฉันดูเหมือนจะถูกผูกมัดโดย IO ช้าดังนั้นฉันต้องการทำทุกอย่างที่ทำได้เพื่อเพิ่มประสิทธิภาพการเชื่อมต่อ

ฉันไม่แน่ใจว่าวิธีที่ดีที่สุดในการวัดทรูพุตบนระบบการผลิต แต่การทดสอบที่ไม่มีหลักวิทยาศาสตร์บางอย่างโดยใช้การdd bs=1024k count=400แสดง show local (OpenSolaris) เขียนของ ~ 1.6GB / s และ remote (CentOS) เขียน ~ 50MB / s ฉันคิดว่าสิ่งเหล่านี้ต่ำกว่าที่ฉันได้รับจริงเนื่องจากมี 7 VMs กำลังทำงานผ่านการเชื่อมต่อ

ปัจจุบันเครื่อง 2 เครื่องนั้นเชื่อมต่อโดยตรงกับ gigE พร้อมจัมโบ้เฟรมที่เปิดใช้งานบน NIC ทั้งสอง (MTU = 9000) นอกเหนือจากนั้นยังไม่มีการเพิ่มประสิทธิภาพ NFS mount / export กำลังใช้ค่าเริ่มต้น

ฉันจะเริ่มหมุนลูกบิดเพื่อปรับปรุงประสิทธิภาพได้อย่างไร


ปริมาณงานไม่ควรมากเกินไป ข้อกำหนดฮาร์ดแวร์พื้นฐานบนระบบที่ใช้ OpenSolaris คืออะไร คุณมีดิสก์ / แกนกี่อัน แรมเท่าไหร่
ewwhite

12 ดิสก์กระจายทั่วทั้ง 2 raidz1 พูลบนคอนโทรลเลอร์เดียวที่มี RAM 4GB หากปริมาณงานไม่สำคัญฉันควรดูการวัดอะไร
Sysadminicus

cat / proc / mounts คืออะไร grep solaris_server พูดบนไคลเอ็นต์ Linux หรือไม่ Linux เวอร์ชันต่าง ๆ มีตัวเลือกการเมานต์เริ่มต้นที่แตกต่างกัน :(
James

10.10.1.1://ank/vm / vm nfs rw, vers = 3, rsize = 1048576, wsize = 1048576, ยาก, โปรโต = tcp, timeo = 600, retrans = 2, วินาที = sys, addr = 10.10.1.1 0 0
Sysadminicus

ด้วยSolaris 10 บางรุ่น nfs3 ไม่เสถียร หากคุณสามารถย้ายไปที่ nfs4 คุณอาจเห็นการปรับปรุงบางอย่าง แต่เป็นผู้แสดงความคิดเห็นอื่น ๆ ได้กล่าวว่าเห็น 50MB / s ข้ามการเชื่อมโยง gigE อยู่ใกล้กับสูงสุดที่คุณสามารถดู
วอร์เรน

คำตอบ:


2

เพียงชี้แจงคุณจะได้รับ 50MB / วินาทีด้วย NFS ผ่านการเชื่อมต่ออีเธอร์เน็ต Gb เดียว?

และโฮสต์เซิร์ฟเวอร์กำลังเรียกใช้ CentOS พร้อมติดตั้ง VMware Server ซึ่งจะเปิดใช้งาน 7 VMs หรือไม่ มีเหตุผลใดที่คุณรวมกับ CentOS และ VMware Server รวมกันแทนที่จะเป็น VMware ESXi ซึ่งเป็นโซลูชันประสิทธิภาพสูงกว่าหรือไม่

50MB / วินาทีนั้นยอดเยี่ยม แต่ก็ไม่ต่ำกว่าสิ่งที่คุณคาดหวังผ่านสายเคเบิลเครือข่าย Gb เพียงสายเดียวเมื่อคุณใส่ NFS tweaks ที่ผู้คนได้กล่าวถึงข้างต้นแล้วคุณอาจจะมอง 70- 80MB / วินาที ตัวเลือกตามแนว:

"โรยาก intr, retrans = 2 rsize = 32768, wsize = 32768, nfsvers = 3, TCP"

อาจสมเหตุสมผลสำหรับคุณที่ปลายทั้งสองของระบบ

เพื่อให้เหนือกว่านั้นคุณจะต้องดูการ์ดเครือข่ายเป็นคู่ซึ่งควรเพิ่มปริมาณงานของคุณประมาณ 90% คุณอาจต้องสลับที่สนับสนุน 802.3ad เพื่อให้ได้ประสิทธิภาพที่ดีที่สุดกับการรวมลิงค์

สิ่งหนึ่งที่ฉันขอแนะนำคือการรับส่งข้อมูล IO ของคุณบนกล่อง OpenSolaris ฟังดูน่าสงสัยสูงดิสก์ 12 แผ่นไม่น่าจะรองรับปริมาณงาน 1.6GB / วินาทีและอาจถูกแคชอย่างหนักโดย Solaris + ZFS


เรากำลังใช้ CentOS + VMWare Server เพราะมันฟรี ล่าสุดฉันตรวจสอบ ESXi ค่อนข้างแพง ตาม / proc / mounts, rsize / wsize ปัจจุบันคือ 1048576 เพียงเพื่อยืนยันว่าคุณคิดว่าการลดลงเป็น 32k จะช่วยเพิ่มความเร็วหรือไม่ ฉันจะตรวจสอบการรวมลิงค์ ฉันจะทำสิ่งนี้ทั้งสองด้านของการเชื่อมต่อหรืออย่างเดียวหรือไม่ ฉันคิดว่าคุณพูดถูกเกี่ยวกับ IO กระแทกความเร็วของฉันที่มากกว่า 512MB ลดลงอย่างมีนัยสำคัญอัตราการถ่ายโอน (ตั้งแต่ระหว่าง 50-120MB / s)
Sysadminicus

ฉันไม่มีความสามารถใน UI ที่จะยอมรับคำตอบสำหรับคำถามนี้อีกต่อไป แต่ฉันได้อัปเกรดสิ่งนี้เนื่องจากดูเหมือนว่าการรวมลิงก์จะเป็นทางออกที่ดีที่สุดของฉัน
Sysadminicus

ขออภัยสำหรับการตอบกลับล่าช้า ESXi นั้นฟรีในรูปแบบพื้นฐานและจะให้ประสิทธิภาพที่เพิ่มขึ้น แต่ก็มีฟังก์ชั่นที่ จำกัด ดังนั้นจึงอาจไม่เหมาะสำหรับคุณ คุณจะต้องทำการรวมลิงค์ที่ปลายทั้งสองด้านของลิงค์เครือข่ายเพื่อดูการปรับปรุง หวังว่าจะได้ผลกับคุณ
Ewan Leith

1

สำหรับเครื่อง RHEL / CentOS 5 ของเราเราใช้แฟล็กเมานต์ต่อไปนี้

nfsvers = 3, TCP, Timeo = 600, retrans = 2 rsize = 32768, wsize = 32768, ยาก, intr, noatime

เคอร์เนล Linux รุ่นใหม่รองรับพารามิเตอร์ rsize / wsize ที่ใหญ่กว่าได้ แต่ 32k เป็นค่าสูงสุดสำหรับเคอร์เนล 2.6.18 ใน EL5

บนเซิร์ฟเวอร์ NFS อย่างน้อยสำหรับ Linux no_wdelay ที่คาดคะเนช่วยถ้าคุณมีตัวควบคุมดิสก์ที่มี BBWC นอกจากนี้หากคุณใช้แฟล็ก noatime บนไคลเอนต์ก็อาจเหมาะสมที่จะเมาท์ระบบไฟล์บนเซิร์ฟเวอร์ด้วย noatime เช่นกัน

และตามที่ได้กล่าวไปแล้วไม่ต้องกังวลกับ UDP ด้วยเครือข่ายความเร็วสูง (1GbE +) มีขนาดเล็ก แต่ไม่เป็นศูนย์โอกาสของหมายเลขลำดับที่ล้อมรอบทำให้ข้อมูลเสียหาย นอกจากนี้หากมีความเป็นไปได้ของการสูญหายของแพ็กเก็ต TCP จะทำงานได้ดีกว่า UDP

หากคุณไม่ต้องกังวลเกี่ยวกับความถูกต้องของข้อมูลตัวเลือกการส่งออก "async" อาจเป็นการปรับปรุงประสิทธิภาพที่สำคัญ (ปัญหาของ async ก็คือคุณอาจสูญเสียข้อมูลหากเซิร์ฟเวอร์ล่ม)

นอกจากนี้อย่างน้อยสำหรับเซิร์ฟเวอร์ Linux คุณต้องแน่ใจว่าคุณมีเซิร์ฟเวอร์เธรด NFS เพียงพอที่จะทำงาน ค่าเริ่มต้น 8 ต่ำเกินไป


1

ฉันเคยทดสอบกับ dell r710, 1 cpu, 4 GB RAM, 6 SATA ดิสก์พร้อม RAID-10 ลูกค้าเป็นอาร์ท x2100 ทั้งที่มี CentOS 5.3 และ nfs params เหมือนที่กล่าวไว้ข้างต้น

"โรยาก intr, retrans = 2 rsize = 32768, wsize = 32768, nfsvers = 3, TCP"

ติดตั้งบนทั้งสองด้านด้วยเวลากลางคืน

ฉันยังชนถึง nfsds ถึง 256 และใช้ noop scheduler สำหรับ perc6 raid controller อีกสิ่งหนึ่งที่ฉันทำคือจัดพาร์ติชันให้มีขนาดแถบ 64K ของตัวควบคุมการโจมตี

จากนั้นฉันวัดประสิทธิภาพ nfs ด้วย dd - สำหรับการอ่านฉันสามารถเติม gigE ไปป์ได้ แต่สำหรับการเขียนฉันสามารถได้ผลลัพธ์ที่ดีกว่าเล็กน้อยในขณะที่คุณ เมื่อเปิดใช้งาน async ฉันจะได้รับ 70 ถึง 80 MB / s แต่ async ไม่ใช่ตัวเลือกสำหรับฉัน

บางทีคุณอาจจะไม่สามารถรับมากขึ้นด้วย nfs จากลิงค์ gigE?


1

ลองสิ่งนี้: ปิดการใช้งาน ZFS Intent Log (ZIL) ชั่วคราวบนเซิร์ฟเวอร์ OpenSolaris NFS ด้วยสองขั้นตอนต่อไปนี้

  1. echo zil_disable/W0t1 | mdb -kw
  2. ติดตั้งพาร์ติชันทดสอบอีกครั้ง

จากนั้นทดสอบอีกครั้ง คุณสามารถใช้zilstatเพื่อให้แน่ใจว่าไม่มี IO ใน ZIL อีกต่อไป หากการทดสอบรันเร็วกว่าคุณจะรู้ว่าปัญหาด้านประสิทธิภาพนั้นเกี่ยวข้องกับ ZIL ถ้ามันยังทำงานช้าคุณรู้ว่า ZIL ไม่ใช่ผู้ร้ายและการใช้ SSD สำหรับ ZIL ก็ไม่ช่วยอะไรเช่นกัน ดูZFS Evil Tuning Guideสำหรับข้อมูลเพิ่มเติมเกี่ยวกับ ZIL

อีกตัวเลือกหนึ่งคือการจับภาพการรับส่งข้อมูลเครือข่าย (เช่น Wireshark) และดูว่ามีปัญหาใด ๆ เช่นกับเฟรม Jumbo ตรวจสอบว่าแพ็คเก็ตบนสายดูเหมือนที่คุณคาดหวังจากการกำหนดค่าของคุณ มีการแยกส่วนที่ไม่ดีเกิดขึ้นหรือไม่ มีการส่งสัญญาณซ้ำหรือไม่


0

การเพิ่มขนาดอัตราการอ่านและเขียนสามารถช่วยได้ โดยเฉพาะอย่างยิ่งเมื่อใช้ร่วมกับเฟรมขนาดใหญ่

ฉันมักจะหา 32k ให้เหมาะสม

rsize=32768,wsize=32768

การเปลี่ยนไปใช้การขนส่ง UDP นั้นเร็วกว่า TCP เพราะช่วยประหยัดค่าใช้จ่ายในการควบคุมการส่งสัญญาณ แต่ใช้ได้เฉพาะกับเครือข่ายที่เชื่อถือได้และไม่ได้ใช้ NFSv4


ดูเหมือนว่า CentOS กำลังเชื่อมต่อโดยใช้ NFSv3 มีค่าใน NFSv4 สำหรับกรณีการใช้งานของเราหรือไม่? ฉันจะบอกว่าเครือข่ายค่อนข้างน่าเชื่อถือเพราะมีเพียงสายเชื่อมต่อระหว่าง NIC สองตัว
Sysadminicus

2
UDP ไม่คุ้มกับความยุ่งยากอย่างจริงจัง ติดกับ TCP ฉันจะไม่แนะนำให้ลอง NFSv4 จนกว่าคุณจะทำให้ v3 ทำงานได้อย่างถูกต้อง
James

0

ประสิทธิภาพของ NFS บน ZFS นั้นได้รับการปรับปรุงอย่างมากโดยใช้ SSD สำหรับบันทึกเจตนา ZFS (ZIL) เนื่องจากจะช่วยลดความล่าช้าในการปฏิบัติงาน หัวข้อนี้เกี่ยวกับVMWare NFS บนประสิทธิภาพ ZFSในรายชื่อผู้รับจดหมาย OpenSolaris NFS และ ZFS มีข้อมูลเพิ่มเติมรวมถึงเครื่องมือมาตรฐานเพื่อดูว่าประสิทธิภาพของ ZIL เป็นปัญหาคอขวดหรือไม่


0

FYI คำสั่ง dd จะเขียนไปยังแคชและไม่มีดิสก์ซึ่งคุณสามารถรับตัวเลขบ้าเช่น 1.6G / s เพราะคุณกำลังเขียนไปยัง RAM และไม่ใช่ดิสก์บน Solaris คุณสามารถใช้ "-oflag = sync" เพื่อบังคับให้เขียนลงดิสก์

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.