/* * How long mballoc can look for a best extent (in found extents)
*/ #define MB_DEFAULT_MAX_TO_SCAN 200
/* * How long mballoc must look for a best extent
*/ #define MB_DEFAULT_MIN_TO_SCAN 10
/* * with 's_mb_stats' allocator will collect stats that will be * shown at umount. The collecting costs though!
*/ #define MB_DEFAULT_STATS 0
/* * files smaller than MB_DEFAULT_STREAM_THRESHOLD are served * by the stream allocator, which purpose is to pack requests * as close each to other as possible to produce smooth I/O traffic * We use locality group prealloc space for stream request. * We can tune the same via /proc/fs/ext4/<partition>/stream_req
*/ #define MB_DEFAULT_STREAM_THRESHOLD 16 /* 64K */
/* * for which requests use 2^N search using buddies
*/ #define MB_DEFAULT_ORDER2_REQS 2
/* * Number of groups to search linearly before performing group scanning * optimization.
*/ #define MB_DEFAULT_LINEAR_LIMIT 4
/* * Minimum number of groups that should be present in the file system to perform * group scanning optimizations.
*/ #define MB_DEFAULT_LINEAR_SCAN_THRESHOLD 16
/* * The maximum order upto which CR_BEST_AVAIL_LEN can trim a particular * allocation request. Example, if we have an order 7 request and max trim order * of 3, we can trim this request upto order 4.
*/ #define MB_DEFAULT_BEST_AVAIL_TRIM_ORDER 3
/* * Number of valid buddy orders
*/ #define MB_NUM_ORDERS(sb) ((sb)->s_blocksize_bits + 2)
struct ext4_free_data { /* this links the free block information from sb_info */ struct list_head efd_list;
/* this links the free block information from group_info */ struct rb_node efd_node;
/* group which free block extent belongs */
ext4_group_t efd_group;
/* transaction which freed this extent */
tid_t efd_tid;
};
struct ext4_prealloc_space { union { struct rb_node inode_node; /* for inode PA rbtree */ struct list_head lg_list; /* for lg PAs */
} pa_node; struct list_head pa_group_list; union { struct list_head pa_tmp_list; struct rcu_head pa_rcu;
} u;
spinlock_t pa_lock;
atomic_t pa_count; unsigned pa_deleted;
ext4_fsblk_t pa_pstart; /* phys. block */
ext4_lblk_t pa_lstart; /* log. block */
ext4_grpblk_t pa_len; /* len of preallocated chunk */
ext4_grpblk_t pa_free; /* how many blocks are free */ unsignedshort pa_type; /* pa type. inode or group */ union {
rwlock_t *inode_lock; /* locks the rbtree holding this PA */
spinlock_t *lg_lock; /* locks the lg list holding this PA */
} pa_node_lock; struct inode *pa_inode; /* used to get the inode during group discard */
};
enum {
MB_INODE_PA = 0,
MB_GROUP_PA = 1
};
struct ext4_free_extent {
ext4_lblk_t fe_logical;
ext4_grpblk_t fe_start; /* In cluster units */
ext4_group_t fe_group;
ext4_grpblk_t fe_len; /* In cluster units */
};
/* * Locality group: * we try to group all related changes together * so that writeback can flush/allocate them together as well * Size of lg_prealloc_list hash is determined by MB_DEFAULT_GROUP_PREALLOC * (512). We store prealloc space into the hash based on the pa_free blocks * order value.ie, fls(pa_free)-1;
*/ #define PREALLOC_TB_SIZE 10 struct ext4_locality_group { /* for allocator */ /* to serialize allocates */ struct mutex lg_mutex; /* list of preallocations */ struct list_head lg_prealloc_list[PREALLOC_TB_SIZE];
spinlock_t lg_prealloc_lock;
};
/* the best found extent */ struct ext4_free_extent ac_b_ex;
/* copy of the best found extent taken before preallocation efforts */ struct ext4_free_extent ac_f_ex;
/* * goal len can change in CR_BEST_AVAIL_LEN, so save the original len. * This is used while adjusting the PA window and for accounting.
*/
ext4_grpblk_t ac_orig_goal_len;
__u32 ac_flags; /* allocation hints */
__u16 ac_groups_scanned;
__u16 ac_found;
__u16 ac_cX_found[EXT4_MB_NUM_CRS];
__u16 ac_tail;
__u16 ac_buddy;
__u8 ac_status;
__u8 ac_criteria;
__u8 ac_2order; /* if request is to allocate 2^N blocks and
* N > 0, the field stores N, otherwise 0 */
__u8 ac_op; /* operation, for history only */
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.