ฉันกำลังพยายามปรับการตั้งค่าการจัดเก็บข้อมูลบนฮาร์ดแวร์ Sun บางอย่างด้วย Linux ความคิดใด ๆ ที่จะได้รับการชื่นชมอย่างมาก
เรามีฮาร์ดแวร์ดังต่อไปนี้:
- Sun Blade X6270
- 2 * คอนโทรลเลอร์ LSISAS1068E SAS
- 2 * Sun J4400 JBOD ที่มีดิสก์ 1 TB (24 ดิสก์ต่อ JBOD)
- Fedora Core 12
- 2.6.33 เคอร์เนลที่วางจำหน่ายจาก FC13 (ลองด้วยเคอร์เนล 2.6.31 ล่าสุดจาก FC12 ผลลัพธ์เดียวกัน)
นี่คือแผ่นข้อมูลสำหรับฮาร์ดแวร์ SAS:
http://www.sun.com/storage/storage_networking/hba/sas/PCIe.pdf
มันใช้ PCI Express 1.0a, 8x เลน ด้วยแบนด์วิดท์ที่ 250 MB / วินาทีต่อช่องทางเราควรสามารถทำ 2,000 MB / วินาทีต่อคอนโทรลเลอร์ SAS
แต่ละคอนโทรลเลอร์สามารถทำได้ 3 Gb / วินาทีต่อพอร์ตและมีพอร์ต 4 PHY สองพอร์ต เราเชื่อมต่อ PHY ทั้งสองจากตัวควบคุมไปยัง JBOD ดังนั้นระหว่าง JBOD และตัวควบคุมเราจึงมี 2 PHYs * 4 SAS * 3 Gb / วินาที = 24 Gb / วินาทีของแบนด์วิดท์ซึ่งมากกว่าแบนด์วิดท์ PCI Express
ด้วยการเปิดใช้งานแคชการเขียนและเมื่อทำการเขียนขนาดใหญ่แต่ละดิสก์สามารถรักษาประมาณ 80 MB / วินาที (ใกล้จุดเริ่มต้นของดิสก์) ด้วย 24 ดิสก์หมายความว่าเราควรจะสามารถทำ 1920 MB / วินาทีต่อ JBOD
มัลติพา ธ { rr_min_io 100 uid 0 path_grouping_policy multibus คู่มือการย้อนกลับ path_selector "round-robin 0" ลำดับความสำคัญ rr_weight นามแฝง somealias คิว no_path_retry โหมด 0644 gid 0 wwid ไพศาล }
ฉันลองค่า 50, 100, 1,000 สำหรับ rr_min_io แต่ดูเหมือนจะไม่ได้สร้างความแตกต่างมาก
พร้อมด้วย rr_min_io ที่แตกต่างกันฉันพยายามเพิ่มความล่าช้าระหว่างการเริ่มต้นของ dd เพื่อป้องกันไม่ให้พวกเขาทั้งหมดเขียนใน PHY เดียวกันในเวลาเดียวกัน แต่สิ่งนี้ก็ไม่ได้สร้างความแตกต่างดังนั้นฉันคิดว่า I / O กระจายออกไปอย่างเหมาะสม
ตาม / proc / ขัดจังหวะตัวควบคุม SAS กำลังใช้รูปแบบการขัดจังหวะ "IR-IO-APIC-fasteoi" ด้วยเหตุผลบางอย่างเฉพาะ core # 0 ในเครื่องกำลังจัดการการขัดจังหวะเหล่านี้ ฉันสามารถปรับปรุงประสิทธิภาพได้เล็กน้อยโดยการกำหนดคอร์แยกต่างหากเพื่อจัดการอินเตอร์รัปต์สำหรับคอนโทรลเลอร์ SAS แต่ละตัว:
echo 2> / proc / irq / 24 / smp_affinity echo 4> / proc / irq / 26 / smp_affinity
การใช้ dd เพื่อเขียนไปยังดิสก์สร้าง "การเรียกใช้ฟังก์ชันการขัดจังหวะ" (ไม่รู้ว่าสิ่งเหล่านี้คืออะไร) ซึ่งถูกจัดการโดย core # 4 ดังนั้นฉันจึงไม่ให้กระบวนการอื่นออกจากคอร์นี้เช่นกัน
ฉันเรียกใช้ 48 dd (หนึ่งสำหรับแต่ละดิสก์) กำหนดให้กับแกนที่ไม่เกี่ยวข้องกับการขัดจังหวะเช่น:
tasket -c somecore dd if = / dev / ศูนย์ของ = / dev / mapper / mpathx oflag = direct bs = 128M
oflag = direct ป้องกันไม่ให้บัฟเฟอร์แคชทุกประเภทเข้ามาเกี่ยวข้อง
ไม่มีแกนของฉันสูงสุดปรากฏออกมา แกนประมวลผลที่ขัดจังหวะนั้นส่วนใหญ่ไม่ได้ใช้งานและแกนอื่น ๆ ทั้งหมดกำลังรอ I / O ตามที่คาดไว้
Cpu0: 0.0% เรา, 1.0% sy, 0.0% ni, 91.2% id, 7.5% wa, 0.0% hi, 0.2% si, 0.0% st Cpu1: 0.0% เรา, 0.8% sy, 0.0% ni, 93.0% id, 0.2% wa, 0.0% hi, 6.0% si, 0.0% st Cpu2: 0.0% เรา, 0.6% sy, 0.0% ni, 94.4% id, 0.1% wa, 0.0% hi, 4.8% si, 0.0% st Cpu3: 0.0% เรา, 7.5% sy, 0.0% ni, id 36.3%, 56.1% wa, 0.0% hi, 0.0% si, 0.0% st Cpu4: 0.0% เรา, 1.3% sy, 0.0% ni, 85.7% id, 4.9% wa, 0.0% hi, 8.1% si, 0.0% st Cpu5: 0.1% เรา, 5.5% sy, 0.0% ni, id 36.2%, 58.3% wa, 0.0% hi, 0.0% si, 0.0% st Cpu6: 0.0% เรา, 5.0% sy, 0.0% ni, id 36.3%, 58.7% wa, 0.0% hi, 0.0% si, 0.0% st Cpu7: 0.0% เรา, 5.1% sy, 0.0% ni, id 36.3%, 58.5% wa, 0.0% hi, 0.0% si, 0.0% st Cpu8: 0.1% เรา, 8.3% sy, 0.0% ni, id 27.2%, 64.4% wa, 0.0% hi, 0.0% si, 0.0% st Cpu9: 0.1% เรา, 7.9% sy, 0.0% ni, id 36.2%, 55.8% wa, 0.0% hi, 0.0% si, 0.0% st Cpu10: 0.0% เรา, 7.8% sy, 0.0% ni, id 36.2%, 56.0% wa, 0.0% hi, 0.0% si, 0.0% st Cpu11: 0.0% เรา, 7.3% sy, 0.0% ni, id 36.3%, 56.4% wa, 0.0% hi, 0.0% si, 0.0% st Cpu12: 0.0% เรา, 5.6% sy, 0.0% ni, 33.1% id, 61.2% wa, 0.0% hi, 0.0% si, 0.0% st Cpu13: 0.1% เรา, 5.3% sy, 0.0% ni, id 36.1%, 58.5% wa, 0.0% hi, 0.0% si, 0.0% st Cpu14: 0.0% เรา, 4.9% sy, 0.0% ni, 36.4% id, 58.7% wa, 0.0% hi, 0.0% si, 0.0% st Cpu15: 0.1% เรา, 5.4% sy, 0.0% ni, id 36.5%, 58.1% wa, 0.0% hi, 0.0% si, 0.0% st
เมื่อพิจารณาทั้งหมดนี้ปริมาณงานที่รายงานโดยเรียกใช้ "dstat 10" อยู่ในช่วง 2200-2300 MB / วินาที
จากการคำนวณข้างต้นฉันคาดหวังบางสิ่งบางอย่างในช่วง 2 * 1920 ~ = 3600+ MB / วินาที
ใครบ้างมีความคิดใด ๆ ที่แบนด์วิดธ์ที่หายไปของฉันไป?
ขอบคุณ!