マウントオプション「ssd」を使用すると、どの最適化が有効になりますか?

マウントオプション「ssd」を使用すると、どの最適化が有効になりますか?

「BTRFSを使用したDebian 12 Bookwormの最小インストール」寄稿者: JustAGuy Linux 時間: 8:28SSDオプションを設定しましたが、

mount -o ... ssd ...

オプションは何ですかssd?いつ使用し、いつ使用してはいけませんか?で文書化されたものを見ませんでしたが、man mountオンラインで見つけました。https://btrfs.readthedocs.io/en/latest/btrfs-man5.html

それは言う、

4.14以降、ブロックレイアウトの最適化は削除されました。これは、第1世代のSSDデバイスをサポートするために使用されました。 FTL(Flash Translation Layer)はうまく機能せず、最適化はブロックをより整列させて摩耗を改善することを目的としています。最新のSSDデバイスでは、もはやそうではなく、最適化による実質的な利点はありません。さらに、断片化も増加します。ssd_spread オプションのレイアウト調整は変更されません。

「ブロックレイアウトの最適化」なしで、SSDオプションは「SSD割り当てスキームを制御する」ために何ができますか?

答え1

Linux 6.5-rc3 では、SSD オプションは 3 回だけ言及されます。

存在する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日、メーリングリストに一度登場しました。

関連情報