2017-03-03 14 views
3

在編寫需要將數據緩存在磁盤上的軟件時,有沒有libc方式或特定於某個文件系統(如ext4)的方式來創建文件並將其標記爲適合自動刪除(由內核)如果分區幾乎變滿了?創建一個緩存文件,當libc(所有文件系統)或ext4中的分區幾乎滿時會自動刪除它?

存儲頁面有類似的東西:madvise(…, MADV_FREE)

有些系統通過編寫一個守護進程來實現這個功能,該守護進程監視分區的完整性,並在超過某個填充級別時手動刪除某些預定義的路徑。如果可能的話,我希望避免這種情況,因爲它不具有可伸縮性:每個應用程序在創建新緩存路徑時都必須通知守護進程,這可能會經常發生。如果這是在內核中,每個inode可以保存一個標誌,指示它是否是緩存文件。

對此有一個標準化的守護進程也是可以接受的。目前看來,不同的主要系統集成商都發明瞭自己的產品。

+1

我不認爲這存在。但是,是什麼讓你認爲內核解決方案比用戶空間守護進程擴展得更好呢?當然,它可能會稍微快一點,但我不明白它爲什麼會以不同的方式縮放。如果你擔心在文件系統運行完後發現太遲,請查看[fanotify](http://man7.org/linux/man-pages/man7/fanotify.7.html)。 – Phillip

+0

@Phillip:我認爲在大多數系統中,fanotify會產生比每秒鐘輪詢1次更多的CPU負載。除非你有很多單獨的文件系統,這些文件系統通常是空閒的。我想你可以使用'fanotify'而不需要在整個事件緩衝區中行走。就像在沒有活動期間睡覺的方式一樣。但我猜測在活動期間,即使不查看數據,強制內核寫入fanotify緩衝區也會產生非零開銷。 –

+0

我已經擴展了我在這個問題中'可擴展'的含義。 –

回答

-1

您可以使用crontab作業,並查找特定的文件擴展名並將其刪除。您甚至可以根據時間進行過濾,並保留最近n分鐘內創建的文件。 如果您對此有信心,請告訴我,我會在此處添加更多詳情。

+0

這是一個相當糟糕的解決方案,它涉及定期輪詢文件系統以查看它是否已滿。這是在內核級別應該由文件系統變滿而觸發的功能。 –

相關問題