blob: 3e99db2cce00eb5eac0ef246f6888ecdab61a289 [file] [log] [blame]
// Copyright 2018 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef SRC_STORAGE_BLOBFS_INCLUDE_BLOBFS_CACHE_POLICY_H_
#define SRC_STORAGE_BLOBFS_INCLUDE_BLOBFS_CACHE_POLICY_H_
namespace blobfs {
// CachePolicy describes the techniques used to cache blobs in memory, avoiding re-reading and
// re-verifying them from disk.
enum class CachePolicy {
// When all strong references to a node are closed, |ActivateLowMemory()| is invoked.
//
// This option avoids using memory for any longer than it needs to, but may result in higher
// performance penalties for blobs that are frequently opened and closed.
EvictImmediately,
// The node is never evicted from memory, unless it has been fully deleted and there are no
// additional references.
//
// This option costs a significant amount of memory, but it results in high performance.
// On systems where kernel page eviction is enabled, if blobfs is in paged mode, this
// memory cost is reduced, since the kernel can reclaim data pages as needed. This is the
// recommended configuration. (Note that the kernel does not reclaim in-memory metadata
// such as merkle trees.)
NeverEvict,
};
} // namespace blobfs
#endif // SRC_STORAGE_BLOBFS_INCLUDE_BLOBFS_CACHE_POLICY_H_