การปรับปรุง SAS multipath กับประสิทธิภาพ JBOD บน Linux


10

ฉันกำลังพยายามปรับการตั้งค่าการจัดเก็บข้อมูลบนฮาร์ดแวร์ 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 / วินาที

ใครบ้างมีความคิดใด ๆ ที่แบนด์วิดธ์ที่หายไปของฉันไป?

ขอบคุณ!


แคช LSI SAS คอนโทรลเลอร์ถูกตั้งค่าเป็นเขียนผ่านหรือไม่ (การเขียนกลับจะช้าลงสำหรับเวิร์กโหลดตามลำดับขนาดใหญ่) อาจต้องการทดสอบด้วย bs ที่เล็กลงสำหรับ dd เช่น bs = 1M
ไบรอัน

คำตอบ:


1

เป็นคำถามที่เตรียมมาอย่างดี :)

ฉันเป็น speed'n'feeds-man ด้วยตัวเองและฉันคิดว่าคุณใช้เงินในการซื่อสัตย์ ฉันครึ่งหนึ่งคาดหวังว่าจะเห็นปริมาณงานของคุณต่ำกว่าที่คาดไว้ แต่สิ่งที่ฉันคิดว่าคุณได้รับคือการสะสมตัวเล็กน้อยและไร้ประสิทธิภาพ ตัวอย่างเช่นมันยากมากสำหรับบัส PCIe ที่จะได้รับ 100% ตลอดเวลาดีกว่าที่จะสมมติว่าอัตราโดยรวมต่ำ 90% การกำหนดค่า jitter จะทำให้มันหมายความว่า PHYs จะไม่ถูก 'ป้อน' 100% ตลอดเวลาดังนั้นคุณจึงเสียบิตไปที่นั่นเช่นเดียวกับแคชดิสก์การขัดจังหวะที่ไม่ใช้ถ่านหินการตั้งเวลา IO ฯลฯ โดยทั่วไป มันไร้ประสิทธิภาพเล็กน้อยกว่าคูณด้วยความไร้ประสิทธิภาพน้อย ... และมันก็กลายเป็นมากกว่าความไร้ประสิทธิภาพที่คาดหวัง 5-10% ด้วยตัวเอง ฉันเคยเห็นสิ่งนี้กับเซิร์ฟเวอร์ HP DL ที่พูดคุยกับกล่อง MSA SAS ของพวกเขาโดยใช้ W2K3 แล้วเป็น NLB ' แก้ไขมากกว่า NIC หลายตัว - น่าผิดหวัง แต่เข้าใจได้ฉันเดา นั่นคือ 2c ของฉันต่อไปขออภัยมันไม่ได้บวกเกินไป

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