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

ฉันใช้เซิร์ฟเวอร์รูท Hetzner EX4Sเป็นไฮเปอร์ไวเซอร์ KVM เซิร์ฟเวอร์กำลังเรียกใช้ Debian Wheezy Beta 4 และการจำลองเสมือนของ KVM ใช้งานผ่าน LibVirt

เซิร์ฟเวอร์มีฮาร์ดไดรฟ์ 3TB ที่แตกต่างกันสองตัว เนื่องจากฮาร์ดไดรฟ์ตัวใดตัวหนึ่งถูกแทนที่หลังจากรายงานข้อผิดพลาด SMART ฮาร์ดดิสก์ตัวแรกคือ Seagate Barracuda XT ST33000651AS (ตรรกะ 512 ไบต์ ขนาดเซกเตอร์กายภาพ 4096 ไบต์) อีกอันหนึ่งคือ Seagate Barracuda 7200.14 (AF) ST3000DM001-9YN166 (ขนาดเซกเตอร์แบบลอจิคัลและฟิสิคัล 512 ไบต์) มีอุปกรณ์ RAID1 ซอฟต์แวร์ Linux สองเครื่อง อันหนึ่งสำหรับพาร์ติชั่นสำหรับเริ่มระบบที่ไม่ได้เข้ารหัส และอีกอันหนึ่งเป็นคอนเทนเนอร์สำหรับส่วนที่เหลือที่เข้ารหัส โดยใช้ฮาร์ดไดรฟ์ทั้งสอง

ภายในอุปกรณ์ RAID รุ่นหลังจะมีคอนเทนเนอร์ LUKS ที่เข้ารหัส AES ภายในคอนเทนเนอร์ LUKS มีฟิสิคัลวอลุ่ม LVM VFS ของไฮเปอร์ไวเซอร์ถูกแบ่งออกเป็นสามโลจิคัลวอลุ่มบนฟิสิคัลวอลุ่ม LVM ที่อธิบายไว้: หนึ่งสำหรับ / หนึ่งรายการสำหรับ /home และอีกหนึ่งรายการสำหรับการแลกเปลี่ยน

นี่คือไดอะแกรมของสแต็คการกำหนดค่าอุปกรณ์บล็อก:

sda (Physical HDD)
- md0 (RAID1)
- md1 (RAID1)

sdb (Physical HDD)
- md0 (RAID1)
- md1 (RAID1)

md0 (Boot RAID)
- ext4 (/boot)

md1 (Data RAID)
- LUKS container
  - LVM Physical volume
    - LVM volume hypervisor-root
    - LVM volume hypervisor-home
    - LVM volume hypervisor-swap
    - … (Virtual machine volumes)

ระบบแขก (เครื่องเสมือน) ส่วนใหญ่ใช้งาน Debian Wheezy Beta 4 ด้วย เรามี Ubuntu Precise อีกหนึ่งตัวอย่าง พวกเขาได้รับอุปกรณ์บล็อกจากฟิสิคัลวอลุ่ม LVM ด้วย ไดรฟ์ข้อมูลสามารถเข้าถึงได้ผ่านไดรเวอร์ Virtio ในโหมดเขียนผ่านเนทีฟ ตัวกำหนดตารางเวลา IO (ลิฟต์) ทั้งบนไฮเปอร์ไวเซอร์และระบบแขกถูกตั้งค่าเป็นค่าdeadlineเริ่มต้นแทนที่จะเป็นการตั้งค่าcfsที่มีประสิทธิภาพสูงสุดตามชุดการทดสอบ bonnie++ ของเรา

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

ในการตั้งค่าแบบเก่า สิ่งต่อไปนี้แตกต่างออกไป:

  • Debian Lenny เป็นระบบปฏิบัติการสำหรับทั้งไฮเปอร์ไวเซอร์และแขกเกือบทั้งหมด
  • การจำลองเสมือนซอฟต์แวร์ Xen (ดังนั้นจึงไม่มี Virtio ด้วย)
  • ไม่มีการจัดการ LibVirt
  • ฮาร์ดไดรฟ์ที่แตกต่างกัน แต่ละขนาด 1.5TB (หนึ่งในนั้นคือ Seagate Barracuda 7200.11 ST31500341AS อีกตัวที่ฉันไม่สามารถบอกได้อีกต่อไป)
  • เราไม่มีการเชื่อมต่อ IPv6
  • ไม่ว่าในไฮเปอร์ไวเซอร์หรือแขก เราไม่มีปัญหาเวลาแฝง I/O ที่เห็นได้ชัดเจน

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

answer

ไดรฟ์ SATA 7200RPM ไม่สามารถทำเวลาแฝง 4.12ms ได้ ซึ่งจะทำให้สามารถทำ IOs 1/4.12ms (ประมาณ 240) ต่อวินาทีซึ่งไม่สมจริง

สูตรที่เหมาะสมในการคำนวณ IOPS สำหรับดิสก์เดียวคือ 1/(avg_seek_time + avg_rotational_latency) ซึ่งสำหรับไดรฟ์ 7200RPM จะเท่ากับ 75 IOPS โดยประมาณ หากคุณมีแผ่นข้อมูลจำเพาะสำหรับดิสก์ คุณจะมีเวลาแฝงสองอันเนื่องจากไดรฟ์สามารถดูดซับการเขียนและอ่านด้วยเวลาแฝงที่แตกต่างกัน แต่มีค่าไม่เกิน +-10%

คุณสามารถคาดหวังเวลาแฝง 13-15ms ต่อ IO จากดิสก์ SATA ในขณะที่คิวของคุณไม่สูงเกินไป ทุกอย่างระหว่าง 10 ถึง 15ms จะถือว่าใช้ได้ 20ms จะบ่งบอกถึงปัญหาเวลาแฝงโดยคิวลึก (หรือขนาดคำขอ IO ที่ใหญ่มาก) และ 30ms หรือสูงกว่าจะชี้ไปที่บางสิ่งทางพยาธิวิทยา ในทางทฤษฎี เปอร์เซ็นไทล์ที่ 95 ของคุณควรต่ำกว่า 15 มิลลิวินาที และระบบจะทำงาน "ปกติ"

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

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

นอกจากนี้ คุณสามารถตรวจสอบได้ว่า HBA ของคุณมี BBWC (หรือเปิดใช้งานแคชการเขียนดิสก์แทน) และระบบไฟล์บนไฮเปอร์ไวเซอร์และภายในแขกไม่ได้ใช้งานสิ่งกีดขวางใช่หรือไม่