ประสิทธิภาพการถ่ายโอน NFS ช้าของไฟล์ขนาดเล็ก


12

ฉันใช้ Openfiler 2.3 บน HP ML370 G5, Smart Array P400, ดิสก์ SAS รวมกันโดยใช้ RAID 1 + 0

ฉันตั้งค่าการแชร์ NFS จากพาร์ติชัน ext3 โดยใช้การกำหนดค่าบนเว็บของ Openfiler และฉันประสบความสำเร็จในการเมาท์การแชร์จากโฮสต์อื่น โฮสต์ทั้งสองเชื่อมต่อกันโดยใช้ลิงค์กิกะบิตเฉพาะ

มาตรฐานที่เรียบง่ายโดยใช้dd:

 $ dd if=/dev/zero of=outfile bs=1000 count=2000000
 2000000+0 records in
 2000000+0 records out
 2000000000 bytes (2.0 GB) copied, 34.4737 s, 58.0 MB/s

ฉันเห็นว่ามันสามารถบรรลุความเร็วการถ่ายโอนระดับปานกลาง (58.0 MB / s)

แต่ถ้าฉันคัดลอกไดเรกทอรีที่มีไฟล์ขนาดเล็กจำนวนมาก ( .phpและ.jpgประมาณ 1-4 kB ต่อไฟล์) ขนาดรวม ~ 300 MB cpกระบวนการจะสิ้นสุดในเวลาประมาณ 10 นาที

NFS ไม่เหมาะสำหรับการถ่ายโอนไฟล์ขนาดเล็กเช่นกรณีข้างต้นหรือไม่? หรือมีพารามิเตอร์บางอย่างที่ต้องปรับ?


สิ่งนี้ตอบคำถามของคุณหรือไม่ NFS ประสิทธิภาพการเขียนไม่ดี
Aleksandr Dubinsky

คำตอบ:


7

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

คุณสามารถลองเพิ่มrsizeและwsizeพารามิเตอร์ของคุณเป็นเมาท์ NFS และดูว่าจะช่วยให้ประสิทธิภาพการทำงานเล็กน้อย ตรวจสอบคำถามนี้ในการปรับแต่ง NFS สำหรับเวลาแฝงต่ำสุดเนื่องจากมีคำแนะนำที่เป็นประโยชน์มากมายที่จะช่วยในกรณีที่มีการถ่ายโอนไฟล์ขนาดเล็กจำนวนมาก


8

ฉันมีประสบการณ์ NFS ไม่มาก แต่ประสบการณ์ของฉันกับโปรโตคอลการแชร์ไฟล์เครือข่ายอื่นบอกว่าประสิทธิภาพการทำงานในสถานการณ์ "ไฟล์ขนาดเล็กจำนวนมาก" เกือบจะครอบคลุมทั่วโลก คุณเกิดความล่าช้าในการเดินทางไปกลับและในกลุ่มไฟล์ขนาดใหญ่ที่มีความหน่วงแฝงเพิ่มขึ้น


4

คุณได้ลองกับระบบไฟล์อื่นเช่น XFS หรือไม่? มันแก้ไขปัญหาทั้งหมดของฉันเมื่อทำการถ่ายโอนบล็อกขนาดเล็ก iSCSI ไม่รู้ว่าทำไม

นอกจากนี้ iSCSI / NFS มักจะถูกกำหนดค่าสำหรับดาต้าเฟรมขนาดใหญ่ (เฟรมจัมโบ้และอื่น ๆ ) มันอาจทำให้คุณเจ็บหากคุณกำลังคัดลอกไฟล์เล็ก ๆ ทีละไฟล์ อาจจะไม่ทันเวลาแล้วการโอนย้ายจะช่วยคุณได้


1
ใช่การทดสอบของฉันแสดงการปรับปรุงโดยใช้ XFS มากกว่า ext3 (~ 8 นาทีเทียบกับ ~ 14 นาที)
Arie K

1
บาง? ผมว่า thats การปรับปรุงใหญ่สวย :)
pauska

1

ตรวจสอบว่าคุณกำลังใช้การเชื่อมต่อ TCP ( mount -t nfs -o tcp host: / mount / target ) ประสิทธิภาพของระบบที่ทันสมัยจะไม่ได้รับผลกระทบ แต่ IOs ขนาดเล็กอาจปรับปรุงได้ดีหากเครือข่ายของคุณโหลด

และคุณควรลองระบบไฟล์อื่น ๆ ext3 นั้นช้าที่สุดของทั้งหมด เป็นไฟล์ที่รู้จักกันดี แต่ค่อนข้างไม่เหมาะสมกับไฟล์เซิร์ฟเวอร์ XFS นั้นดีกว่าและ reiserfs ก็ดีกว่าใน IOs เล็ก ๆ เช่นกัน


1

หากคุณต้องการถ่ายโอนทรีไดเรกทอรีขนาดใหญ่ของไฟล์ขนาดเล็กผ่าน NFS และคุณสามารถเข้าสู่เซิร์ฟเวอร์วิธีที่ดีที่สุดในการทำคือสร้างไฟล์ tar ที่แยกโดยอัตโนมัติบนไคลเอ็นต์ดังนี้:

tar c mydirectory | ผู้ใช้ ssh @ host tar -xf - -C destdir

ด้วยวิธีการเพียงไฟล์เดียวเท่านั้นที่จะถูกถ่ายโอนข้ามเครือข่ายและคุณมีไฟล์ทั้งหมดของคุณบนโฮสต์ทันที


0

เพียงเพิ่มคำตอบของ Evan คุณยังมีค่าใช้จ่ายทั้งหมดในการสร้างข้อมูลเมตา (รายการไดเรกทอรีและอื่น ๆ ) สำหรับแต่ละไฟล์ที่คุณกำลังคัดลอก


0

โซลูชันที่คล้ายกันกับคำตอบของ Chris คือการซิงค์ไฟล์ของคุณไปยังลูกค้าเป็นระยะ หากคุณต้องการเปลี่ยนแปลงสองทางคุณสามารถใช้พร้อมกันได้


0

ปัญหาคือการแชร์ของคุณจะถูกส่งออกด้วยsyncตัวเลือก (ค่าเริ่มต้น) ใช้asyncเพื่อเพิ่มความเร็วในการเขียนอย่างมาก ดูที่ nfs.sourceforge.net/nfs-howto/ar01s05.html

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