Linux内核的文件预读值的修改,Linux内核的文件预读readahead

Linux的文件预读readahead,指Linux系统内核将指定文件的某

区域预读进页缓存起来,便于接下来对该区域进行读取时,不会因缺页(page

fault)而阻塞。因为从内存读取比从磁盘读取要快很多。预读可以有效的减少磁盘的寻道次数和应用程序的I/O等待时间,是改进磁盘读I/O性能的重要

优化手段之一。

维基百科上关于readhead的介绍资料:

readahead

is a system call of the Linux kernel that loads a file's contents into

the page cache, providing that way a file prefetching technology. When a

file is subsequently accessed, its contents are read from the main

memory (RAM) rather than from a hard disk drive (HDD), resulting in much

lower file access latencies due to much higher performance of the main

memory.[1][2]

Many

Linux distributions use readahead on a list of commonly used files to

speed up booting. In such a setup, if the kernel is booted with the

profile boot parameter, it will record all file accesses during bootup

and write a new list of files to be read during later boot sequences.

This will make additional installed services start faster, because they

are not included in the default readahead list.[3]

In

Linux distributions that use systemd, readahead binary (as part of the

boot sequence) is replaced by systemd-readahead.[4][5] However, support

for readahead was removed from systemd in its version 219, being

described as unmaintained and unable to provide expected performance

benefits.[6]

Certain experimental page-level prefetching systems have been developed to further improve performance.[7]

查看、设置readhead使用命令blockdev。如下所示:

[root@localhost ~]# /sbin/blockdev

Usage:

blockdev -V

blockdev --report [devices]

blockdev [-v|-q] commands devices

Available commands:

--getsz                        get size in 512-byte sectors

--setro                        set read-only

--setrw                        set read-write

--getro                        get read-only

--getss                        get logical block (sector) size

--getpbsz                      get physical block (sector) size

--getiomin                     get minimum I/O size

--getioopt                     get optimal I/O size

--getalignoff                  get alignment offset

--getmaxsect                   get max sectors per request

--getbsz                       get blocksize

--setbsz BLOCKSIZE             set blocksize on file descriptor opening the block device

--getsize                      get 32-bit sector count

--getsize64                    get size in bytes

--setra READAHEAD              set readahead

--getra                        get readahead

--setfra FSREADAHEAD           set filesystem readahead

--getfra                       get filesystem readahead

--flushbufs                    flush buffers

--rereadpt                     reread partition table

查看磁盘的预读扇区

[root@localhost ~]# /sbin/blockdev --getra /dev/sda

256

[root@localhost ~]# /sbin/blockdev --getra /dev/sdb

256

[root@localhost ~]#

175394931_1_20191111085136596.png

设置磁盘的预读扇区

[root@localhost ~]# /sbin/blockdev --getra /dev/sda

256

[root@localhost ~]# /sbin/blockdev --setra 2048 /dev/sda

[root@localhost ~]# /sbin/blockdev --getra /dev/sda

2048

[root@localhost ~]# /sbin/blockdev --getra /dev/sdb

256

[root@localhost ~]# /sbin/blockdev --setra 2048 /dev/sdb

[root@localhost ~]# /sbin/blockdev --getra /dev/sdb

2048

[root@localhost ~]#

175394931_2_20191111085136815.png

必须将其写入配置文件/etc/rc.local,否则重启就会失效。

[root@localhost ~]# echo '/sbin/blockdev --setra 2048 /dev/sda' >> /etc/rc.local

[root@localhost ~]# more /etc/rc.local

#!/bin/sh

#

# This script will be executed *after* all the other init scripts.

# You can put your own initialization stuff in here if you don't

# want to do the full Sys V style init stuff.

touch /var/lock/subsys/local

/sbin/blockdev --setra 2048 /dev/sda

[root@localhost ~]# echo '/sbin/blockdev --setra 2048 /dev/sdb' >> /etc/rc.local

[root@localhost ~]# more /etc/rc.local

#!/bin/sh

#

# This script will be executed *after* all the other init scripts.

# You can put your own initialization stuff in here if you don't

# want to do the full Sys V style init stuff.

touch /var/lock/subsys/local

/sbin/blockdev --setra 2048 /dev/sda

/sbin/blockdev --setra 2048 /dev/sdb

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值