Score:0

ล้างแคชการเขียนหากไม่มีกิจกรรมการอ่านเท่านั้น

ธง in

โดยปกติแล้ว Linux Kernel จะล้างแคชการเขียนหากมีการดำเนินการเกินเวลาที่กำหนดหรือแคชเต็ม สิ่งนี้นำไปสู่การหยุดชะงักของ HDD เนื่องจากกระบวนการเขียนทำให้กระบวนการอ่านช้าลงมาก

นั่นเป็นเหตุผลที่ฉันต้องการหลีกเลี่ยงการล้างแคชการเขียนหากมีกิจกรรมการอ่านเพียงเล็กน้อย เนื่องจากฉันมี RAM 40 GB จึงไม่น่ามีปัญหา ความคิดของฉันคือตั้งเวลาจำกัดเป็นห้านาที ปรับขนาดแคชการเขียนตามความต้องการของคุณ และเขียนสคริปต์ที่ล้างแคชเฉพาะในกรณีที่มีกิจกรรมการอ่านเป็น 0 ฉันไม่รู้ว่าจะทำอย่างไรเชลล์จะสั่ง ซิงค์ ให้ประสิทธิภาพที่ดีเพียงพอ?

เป้าหมายของฉันคือการมีแคชเขียนที่มีขนาด 1, 2 GB การล้างนี้จะใช้เวลานาน มีอะไรที่สามารถหยุดได้ทันทีที่มีการอ่านกิจกรรมอีกครั้งหรือ PSI ของดิสก์ที่สูงขึ้น (นั่นจะตอบสนองเร็วพอไหม??)

ฉันมีไดรฟ์ Seagate (ไม่ใช่ smr?) สองตัว: ST1000DM010-2EP102 - แต่ฉันเดาว่าข้อมูลนั้นไม่จำเป็น

กับ อัตราส่วนสกปรก ขณะนี้ฉันตั้งค่าขนาดแคชแบบไดนามิก

เสียงสะท้อน 360000 > /proc/sys/vm/dirty_expire_centisecs
เสียงสะท้อน 360000 > /proc/sys/vm/dirty_writeback_centisecs

สิ่งนี้จะกำหนดเวลาสูงสุดในการเริ่มล้างแคชการเขียนเป็น 1 ชั่วโมง

อ้างอิง: https://unix.stackexchange.com/questions/30286/can-i-configure-my-linux-system-for-more-aggressive-file-system-caching

คำสั่งที่เป็นประโยชน์:

ด้วยคำสั่งต่อไปนี้ คุณสามารถดูจำนวนแคชการเขียน:

แมว /proc/meminfo | สกปรก

เอาท์พุต:

สกปรก: 104 กิโลไบต์

แต่ก็ไม่สำคัญมาก..

ฉันติดอยู่ตรงไหน?

ฉันต้องการที่จะสามารถยกเลิกคำสั่งซิงค์ได้เกือบจะทันที (เป็นไปได้ไหม) และฉันต้องการทราบว่ามีการอ่านกระบวนการหรือไม่ นั่นคือทั้งหมดที่ฉันต้องเขียนสคริปต์

ฉันพบสคริปต์เก่าที่สามารถตรวจสอบกิจกรรมการอ่าน: awk '{พิมพ์ $1}' /sys/block/sdb/stat

วิธีการใช้นี้?

ถ้า [ $old-value -lt $new-value ];แล้ว COMMAND;fi
france1 avatar
in flag
ขนาดแคชการเขียนคงที่หรือดีกว่าเป็นเปอร์เซ็นต์หรือไม่
jp flag
สิ่งนี้ตอบคำถามของคุณหรือไม่ [จำกัดการล้างพื้นหลังของ Linux (หน้าสกปรก)](https://serverfault.com/questions/126413/limit-linux-background-flush-dirty-pages)
france1 avatar
in flag
ไม่ ฉันเห็นโพสต์นี้แล้ว แต่พวกเขาต้องการตั้งค่าแคชการเขียนให้ต่ำที่สุดเท่าที่จะเป็นไปได้ นั่นไม่ใช่สิ่งที่ปรับปรุงประสิทธิภาพบน hdds
france1 avatar
in flag
https://www.kernel.org/doc/html/latest/block/stat.html - ใช้สำหรับ /sys/block/sdb/stat
Score:0
ธง in

แหล่งที่มาที่ใช้: https://askubuntu.com/questions/184204/how-do-i-fetch-only-numbers-in-grep https://www.kernel.org/doc/html/latest/block/stat.html https://askubuntu.com/questions/184204/how-do-i-fetch-only-numbers-in-grep

สคริปต์ที่ฉันเข้ารหัส:

#!/bin/bash                                                                                                                                                                                                

oldreads=0
ถูกฆ่า=จริง
ในขณะที่ (จริง)
ทำ
    reads=`awk '{พิมพ์ $1}' /sys/block/sdb/stat`
    ถ้า [ "$oldreads" == "$reads" ]
    แล้ว
        ถ้า [ $(grep -o '[[:digit:]]*'<<<$(cat /proc/meminfo | grep Dirty)) -gt 10240 ]
        แล้ว
            ก้อง "ซิงค์"
            ซิงค์&
            syncPid="$!"
            oldreads="$reads"
            ฆ่า = เท็จ
        อื่น
            echo "มีบัฟเฟอร์การเขียนไม่เกิน 10 MB ไม่ซิงค์"
        ไฟ
    elif [ $killed == False ]
    แล้ว
         ก้อง "ฆ่า"
         ฆ่า "$syncPid"
         ถูกฆ่า=จริง
    อื่น
        echo "$oldreads => $reads"
        oldreads="$reads"
    ไฟ
    นอน1
เสร็จแล้ว
france1 avatar
in flag
ฉันไม่แน่ใจว่าคำสั่ง sync หยุด w/SIGINT จริงหรือไม่ :(
in flag
นี่เป็นวิธีแก้ปัญหาของคุณหรือเป็นเพียงสิ่งที่คุณลองแล้วแต่ยังไม่ได้ผล
jp flag
การฆ่า `sync` จะไม่ทำอะไรเลย
france1 avatar
in flag
มันใช้งานได้ แต่อย่างที่ @AlexD พูด การฆ่าการซิงค์ไม่ทำงาน ฉันสามารถใช้สิ่งอื่นที่ตอบสนองต่อสัญญาณ 15 ได้หรือไม่

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา