1. 程式人生 > >Linux使用noatime提升檔案系統性能

Linux使用noatime提升檔案系統性能

轉載

https://blog.csdn.net/dutsoft/article/details/51074376

預設的方式下linux會把檔案訪問的時間atime做記錄,檔案系統在檔案被訪問、建立、修改等的時候記錄下了檔案的一些時間戳,比如:檔案建立時間、最近一次修改時間和最近一次訪問時間;這在絕大部分的場合都是沒有必要的。 
因為系統執行的時候要訪問大量檔案,如果能減少一些動作(比如減少時間戳的記錄次數等)將會顯著提高磁碟 IO 的效率、提升檔案系統的效能。 
如果遇到機器IO負載高或是CPU WAIT高的情況,可以嘗試使用noatime和nodiratime禁止記錄最近一次訪問時間戳。

修改方法

1.修改/etc/fstab,如下 
/dev/sdb1 /home/disk0 ext4 defaults 0 2 
改成 
/dev/sdb1 /home/disk0 ext4 noatime 0 2 
2.修改/etc/fstab設定後需要重新掛載檔案系統、不必重啟就可以應用新設定。remount分割槽,執行: 
mount -o remount /home/disk0

如果不想改fstab,直接用mount命令: 
mount -o noatime -o nodiratime -o remount /home/disk0

其他

此外,設定 noatime 後,可不必再設定 nodiratime。

給掛在home下的磁碟批量設定noatime 
sed -ri 's/(\/home.*\s+.*\s+)\S+(\s+[[:digit:]]+\s+[[:digit:]]+)/\1noatime\2/' /etc/fstab
--------------------- 
作者:dutsoft 
來源:CSDN 
原文:https://blog.csdn.net/dutsoft/article/details/51074376 
版權宣告:本文為博主原創文章,轉載請附上博文連結!

 

 

轉載

https://www.cnblogs.com/itcomputer/p/4660188.html

一、

1) 藍色:表示經過優化的xfs

mount時的引數
defaults,noatime,nodiratime,nobarrier,discard,allocsize=256m,logbufs=8,attr2,logbsize=256k

2) 灰色:表示預設的xfs

mount時的引數
defaults,noatime,nodiratime,nobarrier

3) 黃色:表示ext4。

mount時的引數:
defaults,noatime,nodiratime,nobarrier

二、

noatime
Do not update inode access times on this filesystem (e.g., for faster access on the news spool to speed up news
servers).

nodiratime
Do not update directory inode access times on this filesystem.

nobarrier
Enable/disable the use of block-layer write barriers. Write barriers ensure that certain IOs make it through the
device cache and are on persistent storage. If disabled on a device with a volatile (non-battery-backed) write-back
cache, the nobarrier option will lead to filesystem corruption on a system crash or power loss.

三、

 /proc/mounts              //檢視詳細的掛載引數(檔案系統),包括未顯示的重要的掛載項.如:/dev/pts 

c121 admin # cat /proc/mounts 
/dev/md2 / ext4 rw,noatime,data=ordered 0 0
proc /proc proc rw,nosuid,nodev,noexec,relatime 0 0
tmpfs /run tmpfs rw,nodev,relatime,size=1623100k,mode=755 0 0
dev /dev devtmpfs rw,nosuid,relatime,size=10240k,nr_inodes=2028409,mode=755 0 0
devpts /dev/pts devpts rw,nosuid,noexec,relatime,gid=5,mode=620 0 0
shm /dev/shm tmpfs rw,nosuid,nodev,noexec,relatime 0 0
sysfs /sys sysfs rw,nosuid,nodev,noexec,relatime 0 0
cgroup_root /sys/fs/cgroup tmpfs rw,nosuid,nodev,noexec,relatime,size=10240k,mode=755 0 0
selinuxfs /sys/fs/selinux selinuxfs rw,relatime 0 0
openrc /sys/fs/cgroup/openrc cgroup rw,nosuid,nodev,noexec,relatime,release_agent=/lib64/rc/sh/cgroup-release-agent.sh,name=openrc 0 0
/dev/md1 /boot ext3 rw,noatime,data=ordered 0 0
/dev/md3 /app ext4 rw,noatime,data=ordered 0 0

四、需要同時設定 noatime 和 nodiratime 嗎

2010年04月1日 

相信對效能、優化這些關鍵字有興趣的朋友都知道在 Linux 下面掛載檔案系統的時候設定 noatime 可以顯著提高檔案系統的效能。預設情況下,Linux ext2/ext3 檔案系統在檔案被訪問、建立、修改等的時候記錄下了檔案的一些時間戳,比如:檔案建立時間、最近一次修改時間和最近一次訪問時間。因為系統執行的時候要訪問大量檔案,如果能減少一些動作(比如減少時間戳的記錄次數等)將會顯著提高磁碟 IO 的效率、提升檔案系統的效能。Linux 提供了 noatime 這個引數來禁止記錄最近一次訪問時間戳。

給檔案系統掛載的時候加上 noatime 引數能大幅提高檔案系統性能:

# vi /etc/fstab

/dev/sda1        /             ext3     defaults,noatime,errors=remount-ro 0 0
devpts           /dev/pts      devpts   gid=5,mode=620             0 0
proc             /proc         proc     defaults                   0 0
/dev/sda2        swap          swap     defaults,noatime           0 0

修改設定後只需要重新掛載檔案系統、不需要重啟就可以應用新設定:

# mount -o remount /

# mount
/dev/sda1 on / type ext3 (rw,noatime,errors=remount-ro)
proc on /proc type proc (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)

網上很多資料都提到要同時設定 noatime 和 nodiratime,不知道這個結論來自哪裡,其實不需要像設定 noatime 那樣設定 nodiratime,最可靠的資料應該是原始碼,VPSee 查了一下原始碼,發現在核心原始碼 linux-2.6.33/fs/inode.c 檔案裡有一個 touch_atime 函式,可以看出如果 inode 的標記位是 NOATIME 的話就直接返回了,根本就走不到 NODIRATIME 那裡去,所以只設置 noatime 就可以了,不必再設定 nodiratime.

void touch_atime(struct vfsmount *mnt, struct dentry *dentry)
1405{
1406        struct inode *inode = dentry->d_inode;
1407        struct timespec now;
1408
1409        if (inode->i_flags & S_NOATIME)
1410                return;
1411        if (IS_NOATIME(inode))
1412                return;
1413        if ((inode->i_sb->s_flags & MS_NODIRATIME) && S_ISDIR(inode->i_mode))
1414                return;
1415
1416        if (mnt->mnt_flags & MNT_NOATIME)
1417                return;
1418        if ((mnt->mnt_flags & MNT_NODIRATIME) && S_ISDIR(inode->i_mode))
1419                return;
...
1435}