Score:0

เพิ่มการใช้หน่วยความจำบนเซิร์ฟเวอร์ NFS

ธง kw

ฉันกำลังสร้างข้อมูล (ไฟล์ขนาด 100GB) ซึ่งในที่สุดก็คัดลอกไปยังเซิร์ฟเวอร์ผ่าน NFS v4.2 บนเครือข่าย 10Gb ไฟล์เหล่านี้จัดเก็บไว้ใน HDD จำนวนมาก โดยมีรูปแบบ XFS (หนึ่งสำเนาต่อไดรฟ์เป้าหมาย)

เมื่องานคัดลอกกำลังรันอยู่:

  • มีการใช้หน่วยความจำขนาดใหญ่บนไคลเอ็นต์ (อาจมากกว่า 64GB ก็ใช้หน่วยความจำเท่าที่ทำได้)
  • แต่แทบจะไม่ใช้ ram บนเซิร์ฟเวอร์เลย

ฉันต้องการลดการใช้หน่วยความจำบนไคลเอนต์ เนื่องจากพวกเขาสร้างข้อมูลอย่างต่อเนื่องและทำให้ช้าลง ในทางกลับกัน เซิร์ฟเวอร์ส่วนใหญ่ไม่ได้ใช้งาน

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

มีวิธีใดที่จะบังคับให้เซิร์ฟเวอร์แคชข้อมูลเพิ่มเติมหรือไม่ ฉันต้องการจัดลำดับความสำคัญโดยใช้หน่วยความจำเซิร์ฟเวอร์มากกว่าหน่วยความจำไคลเอนต์

การกำหนดค่า NFS:

10.0.3.1:/ /mnt/field nfs nfsvers=4.2,noatime,nodiratime,_netdev,noauto,x-systemd.automount,x-systemd.mount-timeout=10 0 0

/etc/export:

/mnt 10.0.0.0/16(rw,async,fsid=0,no_subtree_check,crossmnt)

การกำหนดค่า Nic บนเซิร์ฟเวอร์:

มทร.9000
รินบัฟเฟอร์ tx 512, rx 1024

การกำหนดค่า Nic บนไคลเอ็นต์:

มทร.9000
รินบัฟเฟอร์ tx 1024, rx 512

แก้ไข: ตามที่ร้องขอ /proc/meminfo:

ลูกค้า ------------------------------------------ เซิร์ฟเวอร์ ------ -------------------------

ป้อนคำอธิบายรูปภาพที่นี่

การตรวจสอบการใช้หน่วยความจำบนไคลเอนต์นี้:

ป้อนคำอธิบายรูปภาพที่นี่

การใช้งานเครือข่าย:

ป้อนคำอธิบายรูปภาพที่นี่

หมายเหตุ: ไคลเอ็นต์ใช้ tmpfs ขนาดใหญ่ (100GB) ในการคำนวณ ฉันคิดว่า tmpfs นี้จะไม่ถูกลบออกจากจำนวนหน่วยความจำที่มีอยู่

แก้ไข 2:

ความสัมพันธ์ระหว่างการใช้เครือข่ายและหน่วยความจำนั้นชัดเจนกว่าในไคลเอนต์อื่น (ฉันควรเริ่มต้นด้วยสิ่งนั้น) ลูกค้ารายนี้ไม่ได้ใช้ tmpfs ใดๆ

ป้อนคำอธิบายรูปภาพที่นี่

ป้อนคำอธิบายรูปภาพที่นี่

John Mahowald avatar
cn flag
โปรดแก้ไขคำถามของคุณเพื่อเพิ่ม `/proc/meminfo` จากไคลเอนต์และเซิร์ฟเวอร์โฮสต์ภายใต้การโหลด
Ealrann avatar
kw flag
ตกลง ฉันเพิ่งเพิ่มเข้าไป
Matthew Ife avatar
jo flag
คุณสามารถให้สำเนาของ `/ etc / exports` ของคุณด้วยได้หรือไม่?
Ealrann avatar
kw flag
ใช่ ฉันเพิ่มเข้าไปแล้ว ฉันวางไว้ที่นี่ด้วยเพื่อความเรียบง่าย: `/mnt 10.0.0.0/16(rw,async,fsid=0,no_subtree_check,crossmnt)`
Score:3
ธง jo

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

คุณรู้เรื่องนี้ได้อย่างไร? หน่วยความจำไคลเอนต์ส่วนใหญ่อยู่ในแคชของหน้า ซึ่งเป็นเรื่องปกติธรรมดา และแม้แต่การปรับปรุงบัฟเฟอร์บนเซิร์ฟเวอร์จะไม่ป้องกันการแคชเชิงรุกของฝั่งไคลเอ็นต์ข้อมูลนี้

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

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

เนื่องจากข้อจำกัดด้านความสอดคล้องนี้ แคชของเพจจึงอาศัยโดยแอ็พพลิเคชันระบบไคลเอนต์ NFS เพื่อให้แน่ใจว่าข้อมูลพร้อมใช้งานสำหรับการอ่านกลับหากจำเป็น

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

สิ่งนี้จะมีผลในการทำให้มั่นใจว่าการเขียนนั้นกระทำกับเซิร์ฟเวอร์ในฝั่งไคลเอนต์ ในขณะที่เซิร์ฟเวอร์จะตอบกลับว่า 'เสร็จสิ้น' เสมอก่อนที่จะทำการยืนยันข้อมูลไปยังดิสก์

สิ่งนี้จะส่งผลกระทบต่อทรูพุตของไคลเอนต์ เนื่องจากคุณจะก่อให้เกิดเวลาแฝงเนื่องจากการตรวจสอบทุกคำขอในฝั่งไคลเอ็นต์ แต่เซิร์ฟเวอร์จะบัฟเฟอร์ข้อมูลมากขึ้นเนื่องจากจะไม่รอให้ข้อมูลลงดิสก์ก่อน คุณอาจต้องการบิด Dirty_write_centisecs และบิตอื่นๆ บนเซิร์ฟเวอร์เพื่อให้บัฟเฟอร์ข้อมูลมากขึ้นในการเขียนกลับ

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

นอกจากนี้ สิ่งนี้จะไม่ส่งผลกระทบต่อการใช้หน่วยความจำสำหรับเพจแคชบนไคลเอ็นต์ซึ่ง NFS ไม่มีการควบคุมอย่างแท้จริง

สรุปแล้ว ฉันสงสัยว่าการลดการใช้หน่วยความจำของไคลเอนต์ (หากเป็นแคชของเพจที่คุณกำลังวัดที่นี่) จะช่วยปรับปรุงประสิทธิภาพไคลเอนต์ของคุณ

Ealrann avatar
kw flag
ขอบคุณสำหรับคำตอบ. ฉันรู้ว่าเพราะชุดแรกผลิตเร็วกว่า แต่ทันทีที่เริ่มทำสำเนา มันจะช้าลงประมาณ 10% ฉันคิดว่ากระบวนการของฉันถูกจำกัดด้วยการเข้าถึงหน่วยความจำ ดังนั้นฉันคิดว่าการใช้หน่วยความจำเพื่อสิ่งอื่น (นี่คือสำเนาเครือข่าย) เป็นสาเหตุของการทำงานช้าลง แต่ก็ไม่ใช่เรื่องใหญ่ ฉันแค่พยายามเพิ่มประสิทธิภาพเล็กน้อย เนื่องจากฉันยอมที่จะสูญเสียข้อมูล ฉันจะลองใช้ `async` ของคุณ
Score:1
ธง cn

ไม่ การบังคับให้ใช้หน่วยความจำน้อยลงมีแนวโน้มที่จะทำให้สิ่งต่างๆ ช้าลง ไม่ใช่เร็วขึ้น คุณกำลังใช้ DRAM เร็วขนาด 188 GB อยู่แล้ว อาจจะใช้มันด้วย

โฮสต์ไคลเอนต์มี MemTotal 188 GB และใช้ 162 GB สำหรับ Cached ความต้องการหน่วยความจำค่อนข้างต่ำจริงๆ โปรดทราบว่ามีหน่วยความจำ 123 GB ที่สามารถปล่อยได้อย่างรวดเร็ว Shmem 40 GB ส่วนใหญ่น่าจะเป็น tmpfs

เนื่องจาก Cached + Shmem รวมกันมากกว่า MemTotal ฉันจึงสงสัยว่ามีการนับ tmpfs สองครั้ง เป็นหน่วยความจำที่ใช้ร่วมกันและในแคช จะอธิบายด้วยว่า Cached ลบ Shmem นั้นประมาณ MemAvailable ได้อย่างไร tmpfs ที่ไม่มีที่เก็บข้อมูลถาวรไม่สามารถทำให้ว่างได้

ฝั่งเซิร์ฟเวอร์ 15 GB และเปลี่ยน MemTotal เป็น 13 GB ใน Cached หน่วยความจำที่มีอยู่มากมายบนโฮสต์นี้ สันนิษฐานได้ว่าส่วนใหญ่ให้บริการไฟล์ไม่ใช่ความต้องการหน่วยความจำอื่น ๆ อีกมากมาย

โดยไม่มีหลักฐานค่าใช้จ่ายเช่น กิจกรรม vmscan หนัก หรือเมมพร้อมใช้งานเหลือน้อย ฉันไม่แนะนำให้ดำเนินการใดๆ

Ealrann avatar
kw flag
ขอบคุณ ฉันจะตรวจสอบกิจกรรม vmscan

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา