调优之文件调优

来源:互联网 发布:淘宝食品主图 编辑:程序博客网 时间:2024/05/01 13:04



08 Tunning Filesystem
文件系统调优
==================================================================================

一、了解文件系统

VFS虚拟文件系统

虚拟文件系统向系统调用屏蔽了不同底层文件系统的差异 用户执行一个操作 系统调用 访问的是系统调用

EXT3 Pros & Cons 利与弊
- Repair (fsck) 时间非常长
- 最大支持16TB

EXT4 Pros & Cons 利与弊
- Extent4 使节点表有了非常大的收缩,使节点表访问非常有效。相当于内存普通page和大页
- Extent4 不兼容EXT3, EXT2
- Faster fsck time (较ext3,速度提高10倍)
- Delayed allocation(尽量滞后写,不会立即fsync() )
- 支持更大的文件系统及单个大的文件
- 最大支持RHEL6 16TB,RHEL7 50TB

XFS Pros & Cons
- 针对大存储,性能非常优异
- RHEL7 支持 500TB
- RHEL6 用的太少, RHEL7 默认使用
- 对于大量的小文件,XFS不适合

BTRFS,从甲骨文公司推出的文件系统
- 内部就可以实现RAID和snapshot
- 对于元数据和用户数据的保护是非常强的
- 支持动态拉伸和缩小
- RHEL6 Tech preview技术预览,不支持生产环境
- RHEL7 Tech preview技术预览,作为XFS 备选方案


二、文件系统日志功能 (EXT3/EXT4/XFS)
File System Journaling 文件系统日志
- 日志使恢复提速(并非对数据的恢复)
- 日志可以保证文件系统的完整性

在写数据的时候如果超级块跟后端的实际inode和block块不一致导致文件系统操作 开机会全盘修复检查
写数据先写日志区 写入元数据 再写实际数据到文件系统 最后删除日志区源数据
断电 使用日志区比对
 
日志记录的三种模式
- data=ordered Default,仅记录meta data到journal,而且当所有data被flushed to disk后commit
- data=writeback 仅记录metadata,速率快,但一旦发送crash 不等数据写完到文件返回
- data=journal  写两份,文件meta data和block area都记录到journal,仅适合于大量小数据存储

External Journaling 外部日志  额外找磁盘存放日志
# mkfs.ext4 -O journal_dev -b 4096 /dev/vdb1   格式化为日志设备 -b块设备 常规日志和文件系统在同一个分区
# mkfs.ext4 -J device=/dev/vdb1 -b 4096 /dev/vda3  日志设备和常规文件的block size要相同
# blkid
/dev/vdb1: UUID="b1615781-00c9-4b54-96f9-2f84f0f47ed4" TYPE="jbd"
/dev/vda3: UUID="5a5cc225-ab89-4d36-a214-c7a458384da4" EXT_JOURNAL="b1615781-00c9-4b54-96f9-2f84f0f47ed4

修改文件系统和日志块大小 保持一致
External Journaling on Existed Partition
# tune2fs -l /dev/vda1         检查文件系统的块尺寸
Block size:               1024
# mkfs.ext4 -O journal_dev -b 1024 /dev/vdb2  必须和前面检查的文件块大小一致
# umout /dev/vda1
# tune2fs -O '^has_journal' /dev/vda1    移出存在的日志设备
# tune2fs -j -J device=/dev/vdb2 /dev/vda1      增加新的日志设备
# mount /dev/vda1

可以拿boot分区测试

三、挂载选项调优
========================================================
扩展知识:Relatime 驱动器访问优化 RHEL6开始  延迟更新

atime会大量消耗I/O

POSIX 标​​准​要​求​操​作​系​统​维​护​记​录​每​个​文​件​最​后​一​次​被​访​问​的​文​件​系​统​元​数​据​。​这​个​时​间​戳​被​称​为atime,
维​​护​它​需​要​一​个​重​复​的​对​存​储​的​写​入​操​作​。​这​些​写​入​操​作​让​存​储​是​设​备​及​其​连​接​保​持​忙​碌​和​通​电​状态​​。​因​
为​很​少​应​用​程​序​会​使​用​ atime 数​​据​, 所​​以​这​个​存​储​设​备​活​动​是​在​浪​费​电​力​。​特​别​是​即​使​没​有​从​存​储中​​读​取
该​文​件​也​会​发​生​写​入​存​储​的​事​件​,但​​是​从​缓​冲​中​写​入​。​有​时​,Linux 内​​核​还​支​持​ mount 的​​ noatime选​​项​,并​​
不​在​使​用​此​选​项​挂​载​的​文​件​系​统​中​写​入​ atime。​​但​是​只​是​关​闭​这​个​特​性​是​有​问​题​的​,因​​为​有​些​应用​​程​序​会依​
赖​ atime 数​​据​,并​​在​此​数​据​不​可​用​时​失​败​。

红​​帽​企​业​版​ Linux 6 使​​用​的​内​核​之​后​此​另​一​个​可​替​换​选​项​ -relatime。​​Relatime 维​​护​ atime数​​据​,但不​​是
​每​次​访​问​该​文​件​时​都​更​改​。​启​用​这​个​选​项​,则​​只​在​上​次​更​新​ atime(mtime)后​​修​改​该​文​件​时​, 或​​者最​​后​一​次
​访​问​该​文​件​是​在​相​当​长​一​段​时​间​前​(默​​认​为​一​天​)时​​才​会​将​ atime 数​​据​写​入​磁​盘​。

什么时候更新atime,满足以下条件之一:
1. 修改文件时
2. 最后一次访问文件后,超过一天

默​​认​情​况​下​,所​​有​现​在​挂​载​的​文​件​系​统​都​启​用​ relatime。​​要​在​整​个​系​统​中​限​制​这​个​特​性​,请​​使​用​ boot 参
数​​ default_relatime=0。​​如​果​默​认​在​某​个​系​统​中​启​用​ relatime, 您​​可​以​通​过​使​用​选​项​ norelatime
挂​​载​某​个​系​统​来​限​制​它​在​某​个​具​体​文​件​系​统​中​的​使​用​。​最​后​,要​​使​系​统​更​新​文​件​的​ atime 数​​据​的​默​认​周​期
有​​所​不​同​,请​​使​用​ relatime_interval= 引​​导​参​数​,以​​秒​为​单​位​指​定​周​期​。​默​认​值​为​ 86400。 grub中给内核传参
========================================================


四、增加预读机制
[root@uplook ~]# blockdev --getra /dev/sda
256
[root@uplook ~]# blockdev --setra 512 /dev/sda 设置预读值
[root@uplook ~]# blockdev --getra /dev/sda
512
[root@uplook ~]# echo "blockdev --setra 512 /dev/sda" >> /etc/rc.local


五、文件系统碎片 Fragmentation
[root@uplook ~]# e2freefrag /dev/sda1
[root@uplook ~]# filefrag /file


六、RAID优化
Stripe & Stride sizes


七、设置文件系统的block size
block size文件存储在该文件系统上的最小分配单元
不同的系统其有效范围各有不同:上限为主机系统的最大页(page size)大小,下限取决于所使用的文件系统。
# mkfs.ext4 -b 1024 /dev/vdc1
# mkfs.ext4 -b 2048 /dev/vdc1
# mkfs.ext4 -b 4096 /dev/vdc1
不能超过4096 X86_64 内存最大页1024 超过挂载不上







0 0