“使用 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;
}
/* 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 日在邮件列表中出现过一次。