นี่คือคำอธิบายเกี่ยวกับวิธีการfdatasync()ทำงานกับวิธีการfsync()ทำงาน
fdatasync()ล้างข้อมูลบัฟเฟอร์ทั้งหมดของไฟล์ไปยังดิสก์ (ก่อนที่การเรียกระบบจะส่งคืน) มีลักษณะคล้ายกันfsync()แต่ไม่จำเป็นต้องอัปเดตข้อมูลเมตาเช่นเวลาเข้าถึง แอปพลิเคชันที่เข้าถึงฐานข้อมูลหรือไฟล์บันทึกมักจะเขียนชิ้นส่วนข้อมูลขนาดเล็ก (เช่นหนึ่งบรรทัดในไฟล์บันทึก) จากนั้นโทรfsync()ทันทีเพื่อให้มั่นใจว่าข้อมูลที่เขียนถูกจัดเก็บไว้ในฮาร์ดดิสก์ น่าเสียดายที่fsync()จะเริ่มการเขียนสองครั้งเสมอ
- การเขียนหนึ่งครั้งสำหรับข้อมูลที่เขียนใหม่
- การเขียนหนึ่งครั้งเพื่ออัปเดตเวลาแก้ไขที่เก็บไว้ในไอโหนด
หากเวลาการแก้ไขไม่ใช่ส่วนหนึ่งของแนวคิดการทำธุรกรรมคุณfdatasync()สามารถใช้เพื่อหลีกเลี่ยงการเขียนดิสก์ inode ที่ไม่จำเป็น
ในภาษาอังกฤษO_DSYNCจะเร็วกว่าO_DIRECTนับตั้งแต่การO_DIRECTโทรfsync()สองครั้ง (หนึ่งสำหรับบันทึกและหนึ่งสำหรับข้อมูล) และfsync()ตรวจสอบข้อมูลการเขียนผ่านการดำเนินการเขียนที่สอง ใช้O_DSYNCสายและfdatsync() fsync()คุณสามารถคิดว่าfdatasync()ทำแบบอะซิงโครนัสfsync()(ไม่ใช่ข้อมูล verfying)
ดูที่ตัวเลขO_DSYNCเขียน ops สี่ตัวซึ่งสองตัวผ่านการตรวจสอบแล้วในขณะที่ทำการfsync()เขียนสี่ครั้งทั้งหมดจะถูกตรวจสอบในภายหลัง
สรุปผลการศึกษา
O_DSYNC
- เร็วกว่า
O_DIRECT
- ข้อมูลอาจ / อาจไม่สอดคล้องกันเนื่องจากความล่าช้าหรือความผิดพลาดทันที
O_DIRECT
- มีเสถียรภาพมากขึ้น
- ข้อมูลที่สอดคล้องกัน
- ช้าลงตามธรรมชาติ
ฉันหวังว่าคำตอบนี้จะช่วยได้และฉันหวังว่าฉันจะไม่ทำสิ่งที่เลวร้ายสำหรับคุณ