スケジュールされた同期とキャッシュの消去にはどのような問題がありますか?

スケジュールされた同期とキャッシュの消去にはどのような問題がありますか?

私のプロジェクトには、ファイルの作成後にディスクに保存できない状況があるため、これら2つのスクリプトをバックグラウンドに追加しました。システムのパフォーマンスに影響しますか?

デバイスが再起動またはシャットダウンされるのではなく、予期しない停電が頻繁に発生することがあります。異常な停電が発生する1秒前にファイルに記録されたデータもディスクに保存できることを望んでいますが、実際の状況はディスクに保存できないことが多いです。

私の機器には無停電電源装置システム(UPS)があります。私はC++でプログラミングをしています。

自動同期.sh:

#!/bin/sh

while true; do
    sync
    sleep 1
done

autoCacheFree.sh:

#!/bin/sh

drop_caches() {
    echo "Drop caches."
    sync
    echo 1 > /proc/sys/vm/drop_caches &
    return 0
}

while true; do
    sleep 600
    drop_caches
done

/etc/fstab:

#device         mount-point     type    options         dump    fsck order
/dev/mmcblk3p3  /dobot          ext3    defaults                0       0
/dev/mmcblk3p6  /dobot/userdata ext3    defaults                0       0
proc            /proc           proc    defaults                0       0
tmpfs           /tmp            tmpfs   defaults                0       0
sysfs           /sys            sysfs   defaults                0       0
tmpfs           /dev            tmpfs   defaults                0       0
var             /dev            tmpfs   defaults                0       0
ramfs           /dev            ramfs   defaults                0       0

答え1

autoSync.shsync毎秒1回実行されます。つまり、保留中のすべてのディスク書き込みが毎秒ディスクに強制されます。これがどのように影響するかは、デフォルトのストレージによって異なりますが、すべての場合に書き込まれるデータの量が増えます。通常の操作では、多くの書き込みが最終的に不要になります(後で同じデータを扱う書き込みのために超過または置換されるため)。迅速に削除される一時ファイルへの書き込み)をsync定期的に実行すると、不要な書き込みを防ぐのにかかる時間が短縮されます。

autoCacheFree.shsync10分ごとに実行され、ページキャッシュを消去します。効果はsync前述したものと同じです。ページキャッシュをクリアすると、すべての後続の読み取りをプライマリストレージから読み取る必要があり、これはパフォーマンスにも影響します。

根本的な問題を解決する方が良いでしょう。 「ファイルを作成した後にディスクに保存することはできません」とは何を意味するのかはわかりませんが、編集された質問からプログラムを作成していて、データがファイルにあるかどうかを確認したいと思います。書き込みはできるだけ早くディスクに保存されます。正しい方法は電話することです。fsync各書き込みの後に書き込みに注意を払うと、これらの書き込みとディスクの書き込みがパフォーマンスに与える影響はスクリプトよりはるかに小さくなります。

また、ループを停止する方が簡単なので、これがwhile sleep ...; do ...; doneより良いことに注意してください(キャンセルするとループが終了します)。while true; do ...; sleep ...; donesleep

関連情報