pdflush, kjournald, swapd, interoperate ฯลฯ ทำอย่างไร?


17

เพิ่งเห็นคำถามที่จุดประกายความคิดนี้ ไม่พบคำตอบจริงๆที่นี่หรือผ่านเครื่อง Google โดยทั่วไปฉันสนใจที่จะรู้ว่าเคอร์เนลสถาปัตยกรรม I / O เป็นชั้น ตัวอย่างเช่นkjournaldส่งไปยังpdflushหรือในทางอื่น ๆ ? ข้อสันนิษฐานของฉันคือpdflush(เป็นแบบทั่วไปสำหรับ I / O ที่เก็บข้อมูลขนาดใหญ่) จะอยู่ในระดับที่ต่ำกว่าและเรียกใช้ SCSI / ATA / คำสั่งใดก็ตามที่จำเป็นในการดำเนินการเขียนจริงและkjournaldจัดการโครงสร้างข้อมูลระบบแฟ้มระดับสูงขึ้นก่อนการเขียน ฉันสามารถดูวิธีอื่น ๆ เช่นกันด้วยการkjournaldเชื่อมต่อโดยตรงกับโครงสร้างข้อมูลของระบบแฟ้มและpdflushตื่นขึ้นมาทุกขณะแล้วเขียนหน้า pagecache สกปรกไปยังอุปกรณ์ผ่านkjournald. อาจเป็นไปได้ว่าทั้งสองไม่โต้ตอบเลยด้วยเหตุผลอื่น

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


1
นี่คือสิ่งที่คุณกำลังมองหา? oss.org.cn/ossdocs/linux/kernel/a1/index.html
slm

1
นอกจากนี้ยังมีการนำเสนอนี้: สไลด์ที่ 7 ใน: slideshare.net/LukCzerner/local-file-systems-update
slm

1
มีแผนภาพนี้ที่ฉันพบด้วยเช่นกัน: thomas-krenn.com/en/oss/linux-io-stack-diagram/ …
slm

1
ฉันพบแผนที่เคอร์เนลเชิงโต้ตอบนี้ซึ่งช่วยในการแสดงให้เห็นว่าองค์ประกอบต่างๆของเคอร์เนลทำงานร่วมกันอย่างไร: makelinux.net/kernel_map
slm

1
หนึ่งทรัพยากรมากขึ้นหน้า 19-24: ลินุกซ์ประสิทธิภาพและการปรับแต่งแนวทาง อันนี้ดูเหมือนสิ่งที่คุณกำลังมองหา
slm

คำตอบ:


21

ก่อนที่เราจะหารือรายละเอียดเกี่ยวกับpdflush, kjournald, andkswapd` ให้แรกได้รับพื้นหลังน้อยของบริบทของสิ่งที่เรากำลังพูดถึงในแง่ของลินุกซ์เคอร์เนล

สถาปัตยกรรม GNU / Linux

สถาปัตยกรรมของ GNU / Linux สามารถพิจารณาเป็น 2 ช่องว่าง:

  • ผู้ใช้งาน
  • เมล็ด

ระหว่างผู้ใช้อวกาศและเคอร์เนลอวกาศนั่ง C Library GNU ( glibc) สิ่งนี้จัดเตรียมอินเตอร์เฟสการเรียกระบบที่เชื่อมต่อเคอร์เนลกับแอ็พพลิเคชันพื้นที่ผู้ใช้

พื้นที่เคอร์เนลสามารถแบ่งย่อยออกเป็น 3 ระดับเพิ่มเติม:

  • อินเตอร์เฟสการโทรของระบบ
  • รหัสเคอร์เนลอิสระสถาปัตยกรรม
  • รหัสขึ้นอยู่กับสถาปัตยกรรม

ส่วนต่อประสานการโทรของระบบตามชื่อแสดงถึงการเชื่อมต่อระหว่างglibcและเคอร์เนล สถาปัตยกรรมอิสระ Kernel รหัสประกอบด้วยหน่วยตรรกะเช่นวีเอฟเอ (Virtual File System) และ VMM (Virtual จัดการหน่วยความจำ) สถาปัตยกรรมขึ้นอยู่กับรหัสเป็นส่วนประกอบที่มีโปรเซสเซอร์และรหัสเฉพาะแพลตฟอร์มสำหรับสถาปัตยกรรมฮาร์ดแวร์ที่กำหนด

แผนผังของ GNU / Linux Architecture

                                 ss ของ gnu / linux arch

สำหรับส่วนที่เหลือของบทความนี้เราจะเน้นความสนใจของเราในหน่วยโลจิคัล VFS และ VMM ภายใน Kernel Space

ระบบย่อยของเคอร์เนล GNU / Linux

                                    ss ของ kernel com

ระบบย่อย VFS

ด้วยแนวคิดระดับสูงว่าโครงสร้างเคอร์เนล GNU / Linux เป็นอย่างไรเราสามารถเจาะลึกเข้าไปในระบบย่อย VFS ได้เล็กน้อย ส่วนนี้มีหน้าที่รับผิดชอบในการให้การเข้าถึงอุปกรณ์จัดเก็บข้อมูลบล็อกต่าง ๆ ซึ่งในที่สุดแผนที่ลงไปในระบบไฟล์ (ext3 / ext4 / ฯลฯ .) บนอุปกรณ์ทางกายภาพ (HDD / ฯลฯ )

ไดอะแกรมของ VFS

เอสเอสของ vfs

แผนภาพนี้แสดงวิธีการwrite()ที่กระบวนการของผู้ใช้สำรวจ VFS และในที่สุดก็ใช้งานได้จนถึงไดรเวอร์อุปกรณ์ที่เขียนไปยังสื่อบันทึกที่เก็บข้อมูลจริง pdflushนี้เป็นสถานที่แรกที่เราพบ นี่คือ daemon ซึ่งรับผิดชอบการล้างข้อมูลที่สกปรกและบล็อกบัฟเฟอร์ข้อมูลเมตาไปยังสื่อบันทึกข้อมูลในพื้นหลัง แผนภาพไม่แสดงสิ่งนี้ แต่มีอีก daemon kjournaldซึ่งตั้งอยู่เคียงข้างpdflushกันดำเนินการคล้ายกับการเขียนบล็อกเจอร์นัลสกปรกไปยังดิสก์ หมายเหตุ:บล็อกเจอร์นัลคือวิธีที่ระบบไฟล์เช่น ext4 & JFS ติดตามการเปลี่ยนแปลงของดิสก์ในไฟล์ก่อนการเปลี่ยนแปลงเหล่านั้นจะเกิดขึ้น

รายละเอียดข้างต้นจะกล่าวถึงต่อไปในบทความนี้

ภาพรวมของwrite()ขั้นตอน

เพื่อให้ภาพรวมอย่างง่ายของการดำเนินการ sybsystem ของ I / O เราจะใช้ตัวอย่างที่write()เรียกใช้ฟังก์ชันโดยแอปพลิเคชัน User Space

  1. กระบวนการร้องขอให้เขียนไฟล์ผ่านการwrite()เรียกของระบบ
  2. เคอร์เนลจะอัพเดตแคชเพจที่แม็พกับไฟล์
  3. เธรดเคอร์เนล pdflush ดูแลการล้างแคชเพจไปยังดิสก์
  4. เลเยอร์ระบบไฟล์ทำให้บัฟเฟอร์บล็อกแต่ละอันรวมกันเป็นbio struct( อ้างถึง 1.4.3,“ บล็อกเลเยอร์” ในหน้า 23 ) และส่งคำขอเขียนไปยังชั้นอุปกรณ์บล็อก
  5. เลเยอร์อุปกรณ์บล็อกได้รับการร้องขอจากชั้นบนและทำการลิฟต์ I / O และทำการร้องขอลงในคิวคำขอ I / O
  6. ไดรเวอร์อุปกรณ์เช่น SCSI หรือไดรเวอร์เฉพาะอุปกรณ์อื่น ๆ จะดูแลการเขียน
  7. เฟิร์มแวร์ของอุปกรณ์ดิสก์ดำเนินการกับฮาร์ดแวร์เช่นการค้นหาส่วนหัวการหมุนและการถ่ายโอนข้อมูลไปยังเซกเตอร์บนแผ่นเสียง

ระบบย่อย VMM

ดำน้ำลึกต่อไปเราสามารถดูระบบย่อย VMM องค์ประกอบนี้มีหน้าที่รับผิดชอบในการรักษาความสอดคล้องระหว่างหน่วยความจำหลัก (RAM), swap และสื่อเก็บข้อมูลจริง bdflushกลไกหลักเพื่อความมั่นคงการรักษาคือ เมื่อเพจของหน่วยความจำมีความสกปรกพวกเขาจำเป็นต้องซิงโครไนซ์กับข้อมูลที่อยู่ในสื่อเก็บข้อมูล bdflushจะประสานงานกับpdflushdaemons เพื่อซิงโครไนซ์ข้อมูลนี้กับสื่อบันทึกข้อมูล

ไดอะแกรมของ VMM

                ss ของ VMM

แลกเปลี่ยน

เมื่อหน่วยความจำระบบขาดแคลนหรือตัวจับเวลาการสลับเคอร์เนลหมดอายุkswapddaemon จะพยายามเพิ่มหน้าให้ว่าง ตราบใดที่จำนวนหน้าฟรียังคงสูงกว่าfree_pages_high, kswapdจะทำอะไร อย่างไรก็ตามหากจำนวนของหน้าว่างลดลงด้านล่างจากนั้นkswapdจะเริ่มกระบวนการจัดทำหน้าใหม่ หลังจากkswapdทำเครื่องหมายหน้าเว็บสำหรับการย้ายใหม่แล้วbdflushจะระมัดระวังในการซิงโครไนซ์การเปลี่ยนแปลงที่โดดเด่นใด ๆ กับสื่อเก็บข้อมูลผ่านทางpdflushdaemons

การอ้างอิงและการอ่านเพิ่มเติม


1
ฉันจะรอหนึ่งวันก่อนที่ฉันจะยอมรับสิ่งนี้เป็นคำตอบและมอบรางวัลให้เพื่อที่จะได้อยู่ในหน้า "เงินรางวัล" วิธีนี้ใครก็ตามที่เคยเห็นมันมาก่อนจะมีโอกาสสังเกตเห็นว่ามันมีคำตอบแล้ว
Bratchley

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