在 SSD 上使用 btrfs 文件系统的相关优化
在 Linux 中挂载 SSD 上的 btrfs,可以采用各种参数进行优化:
# file system mount point type options dump pass UUID= 略 / btrfs defaults,ssd,discard,noatime,compress=lzo,subvol=@ 0 1
这些参数各有优缺点,酌情添加。
btrfs 文件系统有对 SSD 进行优化,在挂载参数中加入 ssd 即可。该参数不会自动启用 TRIM/discard。
discard可以通过以下命令确认 SSD 是否支持 TRIM:
sudo hdparm -I /dev/sdX | grep TRIM * Data Set Management TRIM supported (limit 8 blocks)
若 SSD 支持 TRIM 命令,可以在 /etc/fstab 中启用 discard 参数。建议将 discard 挂载参数作为首选。据 debian wiki 所述,包括三星,镁光,英睿达在内的一些 SSD 在 discard/TRIM 上有问题,不能合适地处理 TRIM 命令。以下是 linux 内核相关处源代码 (2015/10/15):
/* devices that dont properly handle queued TRIM commands */ { "Micron_M500_*", NULL, ATA_HORKAGE_NO_NCQ_TRIM | ATA_HORKAGE_ZERO_AFTER_TRIM, }, { "Crucial_CT*M500*", NULL, ATA_HORKAGE_NO_NCQ_TRIM | ATA_HORKAGE_ZERO_AFTER_TRIM, }, { "Micron_M5[15]0_*"," MU01", ATA_HORKAGE_NO_NCQ_TRIM | ATA_HORKAGE_ZERO_AFTER_TRIM, }, { "Crucial_CT*M550*", "MU01", ATA_HORKAGE_NO_NCQ_TRIM | ATA_HORKAGE_ZERO_AFTER_TRIM, }, { "Crucial_CT*MX100*", "MU01", ATA_HORKAGE_NO_NCQ_TRIM | ATA_HORKAGE_ZERO_AFTER_TRIM, }, { "Samsung SSD 8*", NULL, ATA_HORKAGE_NO_NCQ_TRIM | ATA_HORKAGE_ZERO_AFTER_TRIM, }, { "FCCT*M500*", NULL, ATA_HORKAGE_NO_NCQ_TRIM | ATA_HORKAGE_ZERO_AFTER_TRIM, }, /* devices that dont properly handle TRIM commands */ { "SuperSSpeed S238*", NULL, ATA_HORKAGE_NOTRIM, },
该参数不是必需的,也可以自定义周期性运行 fstrim 命令来取代该参数,使用该命令前要确认 SSD 支持 TRIM,否则可能造成数据丢失。当 SSD 有足够的空余空间或(未分配的)可用空间时不需要该参数。
noatime挂载参数可以加入 noatime,通过禁止更新访问记录来减少不必要的写操作以提高性能。该选项对 HDD 同样有性能提升。btrfs 的默认配置为 relatime。
compress打开压缩功能在通常情况下有利于提高传输性能(并非绝对),也可以节省存储空间。加入以下挂载参数:
compress=lzo compress=zlib
lzo 速度更快,zlib 压缩率更高。注意确认 SSD 主控是否是非压缩主控,若为压缩主控不建议加入该参数。
若 SSD 带有缓存,启用 Write Cache 可以提高性能:Disks - Drive Setting - Enable Write Cache,但在突然断电的情况下可能造成数据丢失。
I/O 调度SSD 结构不同于传统硬盘,寻址时间短,I/O 调度算法可选择 noop 以降低延迟。以下命令可查看与修改调度器:
cat /sys/block/sdX/queue/scheduler # sdX 指你的设备 sudo tee /sys/block/sdX/queue/scheduler noop
注意以上方法并不持久,重启后会重置。如果 SSD 是系统唯一的存储设备,可考虑通过 elevator=noop 内核参数设置 I/O 调度器。也可使用 udev 规则来修改调度器,对多存储设备同样有效:
/etc/udev/rules.d/60-ssd-scheduler.rules # 创建该文件
文件内容如下:
# set deadline scheduler for non-rotating disks ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="0", ATTR{queue/scheduler}="noop"关于在SSD上使用btrfs文件系统需要做的优化 - akarin.cn Solid State Drives - Arch wiki SSD Optimization - debian wiki Btrfs wiki 本文来自云栖社区合作伙伴“Linux中国”,原文发布日期:2015-10-16
相关文章
- MySQL 优化集锦
- 性能优化与测试:性能分析的思路
- 小白也能看的懂的页面性能优化来一波
- 专访阿里巴巴研究员“赵海平”:Facebook的PHP底层性能优化之路(HipHop,HHVM)
- 「mysql优化专题」90%程序员没听过的存储过程和存储函数教学(7)
- 数据库分享一: MySQL的Innodb缓存相关优化
- CentOS 6.5 x64相关安全,优化配置
- MySQL性能优化(三)Buffer Pool实现原理
- 十个关于Argo项目的优秀实践:优化Argo Workflows生产环境配置
- 2021Android性能优化总结最新、最全面、最完整的资料+实战经验分享
- Android优化之电量优化的实现
- 混合精子群优化和万有引力搜索算法 (HSSOGSA)(Matlab完整代码实现)
- 数学建模学习(98):CHIO优化算法
- m基于GA遗传优化算法的认知中继网络最优中继功率分配和最佳中继节点选择算法matlab仿真
- 基于麻雀算法优化的相关向量机RVM回归预测算法
- 【Android 电量优化】JobScheduler 相关源码分析 ( ConnectivityController 底层源码分析 | 构造函数 | 追踪任务更新 | 注册接收者监听连接变化 )
- 【Android 电量优化】JobScheduler 相关源码分析 ( JobSchedulerService 源码分析 | Android 源码在线网址推荐 )
- 性能优化方法论举例(***)
- OS和android游戏纹理优化和内存优化(cocos2d-x)
- 雅虎Yahoo 前段优化 14条军规
- 深度学习必备:随机梯度下降(SGD)优化算法及可视化