Cloudflare ได้เตรียมแพตช์ที่เพิ่มความเร็วการเข้ารหัสดิสก์ใน Linux ได้อย่างมาก

นักพัฒนาจาก Cloudflare บอก เกี่ยวกับการดำเนินงานเพื่อเพิ่มประสิทธิภาพการเข้ารหัสดิสก์ในเคอร์เนล Linux เป็นผลให้พวกเขาเตรียมพร้อม แพทช์ สำหรับระบบย่อย dm-crypt.php? และ Crypto API ซึ่งทำให้สามารถเพิ่มปริมาณงานการอ่านและเขียนในการทดสอบสังเคราะห์ได้มากกว่าสองเท่า และลดเวลาแฝงลงครึ่งหนึ่ง เมื่อทดสอบกับฮาร์ดแวร์จริง ค่าใช้จ่ายในการเข้ารหัสจะลดลงเหลือเกือบระดับที่สังเกตได้เมื่อทำงานกับดิสก์ที่ไม่มีการเข้ารหัสข้อมูล

Cloudflare ใช้ dm-crypt เพื่อเข้ารหัสข้อมูลบนอุปกรณ์จัดเก็บข้อมูลที่ใช้ในการแคชเนื้อหาบน CDN Dm-crypt ทำงานที่ระดับอุปกรณ์บล็อกและเข้ารหัสคำขอ I/O ที่เขียน และถอดรหัสคำขออ่าน โดยทำหน้าที่เป็นเลเยอร์ระหว่างอุปกรณ์บล็อกและไดรเวอร์ระบบไฟล์

Cloudflare ได้เตรียมแพตช์ที่เพิ่มความเร็วการเข้ารหัสดิสก์ใน Linux ได้อย่างมาก

เพื่อประเมินประสิทธิภาพของ dm-crypt โดยใช้แพ็คเกจ เครื่องทดสอบ I/O ที่ยืดหยุ่น เราวัดความเร็วของการทำงานกับพาร์ติชั่นที่เข้ารหัสและไม่ได้เข้ารหัสบนดิสก์ RAM ที่อยู่ใน RAM เพื่อลดความผันผวนของประสิทธิภาพของดิสก์และมุ่งเน้นไปที่ประสิทธิภาพของโค้ด สำหรับพาร์ติชันที่ไม่ได้เข้ารหัส ประสิทธิภาพการอ่านและเขียนยังคงอยู่ที่ 1126 MB/s แต่ความเร็วจะลดลงเมื่อเปิดใช้งานการเข้ารหัส 7 ในเวลา และมีจำนวน 147 MB/s

ในตอนแรกเกิดความสงสัยเกี่ยวกับการใช้อัลกอริธึมที่ไม่มีประสิทธิภาพในระบบเข้ารหัสเคอร์เนล แต่การทดสอบใช้อัลกอริธึมที่เร็วที่สุด aes-xts พร้อมด้วยคีย์เข้ารหัส 256 คีย์ ซึ่งประสิทธิภาพเมื่อรัน "เกณฑ์มาตรฐานการตั้งค่าการเข้ารหัส" นั้นสูงกว่าผลลัพธ์ที่ได้รับเมื่อทดสอบดิสก์ RAM มากกว่าสองเท่า การทดลองกับแฟล็ก dm-crypt สำหรับการปรับแต่งประสิทธิภาพไม่ได้ให้ผลลัพธ์: เมื่อใช้แฟล็ก “--perf-same_cpu_crypt” ประสิทธิภาพจะลดลงเหลือ 136 MB/s และเมื่อระบุแฟล็ก “--perf-submit_from_crypt_cpus” จะเพิ่มขึ้นเท่านั้น ถึง 166 เมกะไบต์/วินาที

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

Cloudflare ได้เตรียมแพตช์ที่เพิ่มความเร็วการเข้ารหัสดิสก์ใน Linux ได้อย่างมาก

เมื่ออ่าน dm-crypt จะเพิ่มคำขอในคิว "kcryptd_io" ก่อนเพื่อรับข้อมูลจากไดรฟ์ หลังจากผ่านไประยะหนึ่ง ข้อมูลจะพร้อมใช้งานและจะถูกวางไว้ในคิว “kcryptd” เพื่อถอดรหัส
Kcryptd ส่งคำขอไปยัง Linux Crypto API ซึ่งจะถอดรหัสข้อมูลแบบอะซิงโครนัส คำขอไม่ได้ผ่านคิวทั้งหมดเสมอไป แต่ในกรณีที่เลวร้ายที่สุด คำขอเขียนจะจบลงที่คิวสูงสุด 4 ครั้ง และคำขออ่านสูงสุด 3 ครั้ง การเข้าสู่คิวแต่ละครั้งทำให้เกิดความล่าช้า ซึ่งเป็นสาเหตุสำคัญที่ทำให้ประสิทธิภาพ dm-crypt ลดลงอย่างมาก

การใช้คิวเกิดจากความจำเป็นในการทำงานในสภาวะที่มีการหยุดชะงัก ในปี 2005 เมื่อมีการนำรูปแบบการทำงานตามคิวปัจจุบันของ dm-crypt มาใช้ Crypto API ยังไม่เป็นแบบอะซิงโครนัส หลังจากที่ Crypto API ถูกถ่ายโอนไปยังโมเดลการดำเนินการแบบอะซิงโครนัส การป้องกันแบบสองชั้นจึงเริ่มถูกนำมาใช้ คิวยังถูกนำมาใช้เพื่อประหยัดการใช้เคอร์เนลสแต็ก แต่หลังจากเพิ่มขึ้นในปี 2014 การปรับให้เหมาะสมเหล่านี้ก็สูญเสียความเกี่ยวข้องไป มีการแนะนำคิวเพิ่มเติม "kcryptd_io" เพื่อแก้ไขปัญหาคอขวด ส่งผลให้ต้องรอการจัดสรรหน่วยความจำเมื่อมีคำขอจำนวนมากมาถึง ในปี 2015 มีการแนะนำขั้นตอนการเรียงลำดับเพิ่มเติมเนื่องจากการร้องขอการเข้ารหัสบนระบบมัลติโปรเซสเซอร์สามารถดำเนินการตามลำดับได้ (แทนที่จะเข้าถึงดิสก์ตามลำดับ การเข้าถึงจะดำเนินการในลำดับแบบสุ่มและตัวกำหนดเวลา CFQ ทำงานอย่างมีประสิทธิภาพ) ขณะนี้เมื่อใช้ไดรฟ์ SSD การเรียงลำดับจะสูญเสียความหมายและตัวกำหนดเวลา CFQ จะไม่ถูกใช้ในเคอร์เนลอีกต่อไป

เมื่อพิจารณาว่าไดรฟ์สมัยใหม่นั้นเร็วขึ้นและชาญฉลาดขึ้น ระบบการกระจายทรัพยากรในเคอร์เนล Linux ได้รับการแก้ไข และระบบย่อยบางส่วนได้รับการออกแบบใหม่ วิศวกรของ Cloudflare เพิ่ม dm-crypt มีโหมดการทำงานใหม่ที่ช่วยลดการใช้คิวที่ไม่จำเป็นและการโทรแบบอะซิงโครนัส โหมดนี้เปิดใช้งานโดยแฟล็ก "force_inline" แยกต่างหาก และนำ dm-crypt มาสู่รูปแบบของพร็อกซีธรรมดาที่เข้ารหัสและถอดรหัสคำขอที่เข้ามา การโต้ตอบกับ Crypto API ได้รับการปรับให้เหมาะสมโดยการเลือกอัลกอริธึมการเข้ารหัสที่ทำงานในโหมดซิงโครนัสอย่างชัดเจนและไม่ใช้คิวคำขอ เพื่อทำงานประสานกับ Crypto API นั่นเอง เสนอ โมดูลที่อนุญาตให้คุณใช้ FPU/AES-NI สำหรับการเร่งความเร็วและส่งต่อคำขอเข้ารหัสและถอดรหัสโดยตรง

เป็นผลให้เมื่อทดสอบดิสก์ RAM เป็นไปได้ที่จะเพิ่มประสิทธิภาพของ dm-crypt มากกว่าสองเท่า - ประสิทธิภาพเพิ่มขึ้นจาก 294 MB/s (2 x 147 MB/s) เป็น 640 MB/s ซึ่งใกล้เคียงกับมาก ประสิทธิภาพของการเข้ารหัสเปล่า (696 MB /s)

Cloudflare ได้เตรียมแพตช์ที่เพิ่มความเร็วการเข้ารหัสดิสก์ใน Linux ได้อย่างมาก

Cloudflare ได้เตรียมแพตช์ที่เพิ่มความเร็วการเข้ารหัสดิสก์ใน Linux ได้อย่างมาก

Cloudflare ได้เตรียมแพตช์ที่เพิ่มความเร็วการเข้ารหัสดิสก์ใน Linux ได้อย่างมาก

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

Cloudflare ได้เตรียมแพตช์ที่เพิ่มความเร็วการเข้ารหัสดิสก์ใน Linux ได้อย่างมาก

ที่มา: opennet.ru

เพิ่มความคิดเห็น