使用挂载选项“ssd”打开了哪些优化?

使用挂载选项“ssd”打开了哪些优化?

“使用 BTRFS 进行 Debian 12 Bookworm 最小安装”作者:JustAGuy Linux 于 8:28他为SSD设置了一个选项,

mount -o ... ssd ...

有什么选择ssd?什么时候该用,什么时候不该用?我没有看到它记录在man mount.但我确实在网上找到了https://btrfs.readthedocs.io/en/latest/btrfs-man5.html

它说,

自 4.14 起,块布局优化已被删除。这用于帮助第一代 SSD 设备。他们的 FTL(闪存转换层)效果不佳,优化旨在通过更好地对齐块来改善磨损。对于现代 SSD 设备来说,情况已不再如此,并且优化没有真正的好处。此外,它还导致碎片增加。选项 ssd_spread 的布局调整保持不变。

如果没有“块布局优化”,ssd 选项还能做什么来“控制 SSD 分配方案”?

答案1

在Linux 6.5-rc3中,只有三个提到SSD选项。

fetch_cluster_info,SSD选项将分配更大的集群:

if (space_info->flags & BTRFS_BLOCK_GROUP_METADATA) {
    ret = &fs_info->meta_alloc_cluster;
    if (btrfs_test_opt(fs_info, SSD))
        *empty_cluster = SZ_2M;
    else
        *empty_cluster = SZ_64K;
} else if ((space_info->flags & BTRFS_BLOCK_GROUP_DATA) &&
           btrfs_test_opt(fs_info, SSD_SPREAD)) {
    *empty_cluster = SZ_2M;
    ret = &fs_info->data_alloc_cluster;
}

btrfs_find_space_cluster,SSD 选项将不允许任何碎片:

/*
 * Choose the minimum extent size we'll require for this
 * cluster.  For SSD_SPREAD, don't allow any fragmentation.
 * For metadata, allow allocates with smaller extents.  For
 * data, keep it dense.
 */
if (btrfs_test_opt(fs_info, SSD_SPREAD)) {
    cont1_bytes = bytes + empty_size;
    min_bytes = cont1_bytes;
} else if (block_group->flags & BTRFS_BLOCK_GROUP_METADATA) {
    cont1_bytes = bytes;
    min_bytes = fs_info->sectorsize;
} else {
    cont1_bytes = max(bytes, (bytes + empty_size) >> 2);
    min_bytes = fs_info->sectorsize;
}

btrfs_sync_log:

/* when we're on an ssd, just kick the log commit out */
if (!btrfs_test_opt(fs_info, SSD) &&
    test_bit(BTRFS_ROOT_MULTI_LOG_TASKS, &root->state)) {
    mutex_unlock(&root->log_mutex);
    schedule_timeout_uninterruptible(1);
    mutex_lock(&root->log_mutex);
}

作为旁注,这个问题2020 年 3 月 26 日在邮件列表中出现过一次

相关内容