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}