ปรับพฤติกรรมแคชดิสก์ Linux เพื่อปริมาณงานสูงสุด


12

ฉันพบปัญหาปริมาณงานมากที่สุดที่นี่และต้องการคำแนะนำเกี่ยวกับวิธีปรับแต่งลูกบิดของฉัน เรากำลังเรียกใช้ 10Gbit fileserver สำหรับการสำรองข้อมูล มันเป็นการติดตั้งดิสก์ S-ATA2 สองตัวใน LSI MegaRAID Controller เซิร์ฟเวอร์ยังมีหน่วยความจำ 24gig

เรามีความจำเป็นในการจำลองการสำรองข้อมูลที่อัปโหลดล่าสุดของเราด้วยปริมาณงานสูงสุด

RAID0 สำหรับการสำรองข้อมูล "ฮอต" ของเราทำให้เรามีการเขียน 260 MB / วินาทีและการอ่าน 275 MB / วินาที tmpfs ที่ทดสอบแล้วที่มีขนาด 20GB ให้เราประมาณ 1GB / วินาที ปริมาณงานประเภทนี้เป็นสิ่งที่เราต้องการ

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

ฉันตั้งค่าระบบต่อไปนี้ แต่พวกเขาไม่ให้ปริมาณงานที่เราคาดหวัง:

# VM pressure fixes
vm.swappiness = 20
vm.dirty_ratio = 70
vm.dirty_background_ratio = 30
vm.dirty_writeback_centisecs = 60000

นี้ควรในทฤษฎีให้เรา 16GB สำหรับแคช I / O และรอบางนาทีจนกว่าการเขียนไปยังดิสก์ เมื่อฉันเปรียบเทียบเซิร์ฟเวอร์ที่ฉันเห็นว่าไม่มีผลต่อการเขียนปริมาณงานไม่เพิ่มขึ้น

ต้องการความช่วยเหลือหรือคำแนะนำ


มันจะไม่สมเหตุสมผลกว่าหรือที่จะเริ่มเขียนโดยเร็วที่สุด? มิฉะนั้นจะถึงขนาดบัฟเฟอร์สูงสุดและหยุดทันที ถ้ามันเขียนตลอดมันจะช่วยให้คุณมีเวลามากขึ้น
Zan Lynx

ฉันมีหน่วยความจำ 20GB สำหรับบัฟเฟอร์เนื่องจากแอปพลิเคชันของฉัน (ฐาน linux + vsftpd) ใช้ต่ำกว่า 4GB (รวม 24GB) สำเนาสำรองของฉันมีขนาด 20GB ถ้าฉันสามารถเขียนมันลงในบัฟเฟอร์แล้วเขียนลงดิสก์ตามลำดับหลังจากการสำรองข้อมูลซึ่งจะช่วยลดการหยุดทำงานของแหล่งข้อมูลสำรองของฉัน (เซิร์ฟเวอร์เสมือน) ได้อย่างมาก PS:เซิร์ฟเวอร์สามารถหยุดหลังจากนั้นไม่มีปัญหา มันมีเวลา 30 นาทีในการกู้คืน :)
ปีเตอร์เมเยอร์

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

ฟังดูเหมือนข้อบกพร่อง: โซลูชันสำรองข้อมูลของคุณไม่ควรกำหนดให้เซิร์ฟเวอร์ปิดการทำงานตลอดเวลา
psusi

1
@PeterMeyer: แม้ว่าคุณจะมี RAM จำนวนมาก แต่ก็ยังคงเป็นความผิดพลาดที่ต้องรอให้การเขียนเริ่มต้น เวลาเดียวที่เหมาะสมก็คือถ้าคุณจะแก้ไขหรือลบไฟล์ (เช่นไฟล์ชั่วคราว) ก่อนที่จะเข้าสู่ดิสก์ การสำรองข้อมูลไม่ทำเช่นนั้น คุณต้องการเริ่มเขียนพื้นหลังโดยเร็วที่สุด ตั้ง background_ratio ของคุณเป็น 1 หรือ 2
Zan Lynx

คำตอบ:


6

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

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

โดยทั่วไปคุณควรใช้ตัวชี้วัดบางอย่างเพื่อดูว่าเกิดอะไรขึ้น - คุณเห็นกระบวนการคัดลอกของคุณอยู่ในสถานะ "D" ที่รอให้งาน I / O ทำงานโดย pdflush หรือไม่ คุณเห็นกิจกรรมการเขียนแบบซิงโครนัสอย่างหนักบนดิสก์ของคุณหรือไม่

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

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

แก้ไข:

vm.dirty_ratio = 70

ในทางทฤษฎีควรให้ 16GB ของเราสำหรับแคช I / O และรอสักครู่จนกว่ามันจะเขียนลงดิสก์

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

มีบทความเกี่ยวกับการปรับแต่งสำหรับโหลดการเขียนที่มีข้อมูลเชิงลึกมากขึ้น


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

3

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


ตกลง ไม่มีทางที่สองของ SATA ( SATA ? จริงจัง?) ไดรฟ์จะรักษา 275MB / s และเราไม่ได้พูดถึง IOP สุดซึ้งที่คุณจะได้รับจากพวกเขา
adaptr

1
ฉันสามารถดูได้ว่าเขากำลังมุ่งหน้าไปที่ใด - เนื่องจากนี่เป็นเพียงปลายทางการสำรองข้อมูลเขาไม่สนใจเกี่ยวกับความเป็นไปได้ของการสูญหายของข้อมูลเป็นครั้งคราวเนื่องจากไฟฟ้าดับ และเขาต้องการลดเวลาที่ต้องใช้สำหรับหน้าต่างสำรองข้อมูลโดยการให้ปริมาณงานมากที่สุด - ข้อมูล 20 GB สามารถเขียนได้ภายใน 30 วินาทีด้วยวิธีนี้ หากการสำรองข้อมูลเกี่ยวข้องกับการหยุดทำงานหรือการบริการด้วยเหตุผลบางอย่าง 30 วินาทีนั้นง่ายกว่าที่จะได้รับมากกว่า 20 นาที
the-wabbit

ถูกต้องทั้งหมด ฉันกำลังซิงก์อิมเมจเครื่องเสมือน (เล็กมากสำหรับการคำนวณโหนด) ซึ่งหยุดทำงานในขณะที่ซิงค์ แอปทำงานเหมือน tar | ssh แต่ใช้ ftp และแบบจำลองก็ต้องวิ่ง ... :)
ปีเตอร์เมเยอร์

1
ไม่สำคัญว่าพวกเขาเป็นใครในสายพันธุ์ SATA ดิสก์ที่ไม่ใช่องค์กร 7200RPM นั้นไม่สามารถรับประกันปริมาณงานหรือความหน่วงได้
adaptr

1
@adaptr การสำรองข้อมูลจะเป็นลำดับการเขียน
psusi

1

การใช้แคชหน่วยความจำอาจบ่งบอกถึงการสูญหายของข้อมูลราวกับว่ามีบางอย่างผิดปกติข้อมูลที่อยู่ในหน่วยความจำและไม่ได้บันทึกลงในดิสก์จะหายไป

ที่กล่าวว่ามีการปรับแต่งที่ต้องทำในระดับระบบแฟ้ม

ตัวอย่างเช่นหากคุณใช้ ext4 คุณสามารถลองใช้ตัวเลือกเมานต์:

อุปสรรค = 0

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

เพิ่มเติมได้ที่: http://www.mjmwired.net/kernel/Documentation/filesystems/ext4.txt


ฉันกำลังใช้XFS ที่ได้รับการปรับอย่างหนัก เพิ่มเติมเกี่ยวกับที่ถือว่ามันปรับในความคิดเห็นข้างต้น :)
ปีเตอร์เมเยอร์

ระบบไฟล์ถูกสร้างขึ้นด้วยmkfs.xfs -l lazy-count = 1, รุ่น = 2, ขนาด = 256m -i attr = 2 -d sunit = 512, swidth = 1024และติดตั้งด้วย: rw, noatime, logbufs = 8, logbsize = 256k, osyncisdsync, delaylog, attr2, nobarrier, allocsize = 256k
Peter Meyer
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.