Linux内存管理 PageIn 实现资源调度 (pagein linux)

Linux内存管理:PageIn 实现资源调度

Linux操作系统一向以其稳定、可靠和高效著称,其中内存管理是其核心之一。内存管理是操作系统的重要组成部分,它主要管理操作系统对内存空间的分配、回收、保护和共享等工作。在现代操作系统中,由于访问磁盘所需的时间太长,操作系统一般将磁盘上的文件缓存在内存中以提高访问速度,这就需要一个有效的内存管理机制。本文将重点介绍Linux内存管理中的PageIn机制,并探讨它如何实现资源调度。

PageIn机制是Linux内核中的一种内存调度机制。当进程需要访问缺页时,系统会将缺页从虚拟内存中读到内存中,这个过程就是PageIn。当内存中没有足够的空闲空间时,PageIn机制将会自动选择合适的页面进行替换,以满足新的页面进入操作。PageIn机制的主要功能就是通过控制页面的分配和释放,实现对内存的有效管理,从而优化内存的使用情况。PageIn机制可以显著提高系统的性能,是一个非常重要的资源调度机制。

PageIn机制的实现基本上可以分为三个部分:虚拟内存、页面调度和页面替换。虚拟内存是一个总体设计概念,它将主存和磁盘进行统一管理,并利用磁盘上的空间来模拟内存空间,从而扩展了内存容量;页面调度是将可用物理页面分配给进程所需的虚拟页面的过程;而页面替换是当物理内存不足时,通过选择适当的页面替换来释放物理内存的过程。

为了实现PageIn机制,Linux内核中引入了许多相关概念和数据结构。其中比较重要的是页表和页表项。页表是指一张存储虚拟页面与物理页面映射关系的表格,它指示了一个进程的虚拟地址与物理存储地址之间的映射关系。而页表项则是描述一个页面状态信息的数据结构。Linux内核中,页表和页表项都是以分层结构的方式来组织的。

在Linux内存管理中,页表有三个级别:页全局目录(Page Global Directory)、页中间目录(Page Mid Directory)和页表项(Page Table Entry)。其中页全局目录和页中间目录用于将虚拟地址转换成页的物理地址,而页表项则用于描述物理页的状态。对于每个进程,内核都维护了一个页表,这个页表是一个二级页表,其根节点存放在进程控制块中。进程使用虚拟地址访问内存时,Linux内核会建立一个从虚拟地址到物理地址的映射表,从而实现虚拟地址到物理地址的转换。

PageIn机制的主要目标是尽可能地提高系统的性能。为了实现这一目标,Linux内核设计了多种不同的页面替换算法。这些算法的目的是在物理内存满载的情况下选择适当的页面进行替换,从而保证系统性能的稳定和高效。目前,Linux内核中最常用的页面替换算法是LRU(Least recently used)算法。该算法通过维护一个页访问时间戳链表来实现选择最近最少使用的页面进行替换。这种算法的效率很高,因为它可以将最近最少使用的页面快速地剔除出物理内存。同时,由于Linux内核中实现了缓存预取机制,这些替换页面的缓存大部分情况下都会被重复使用。

PageIn机制是Linux内核中一种非常重要的内存调度机制。通过精细的页面调度和页面替换算法,可以很好地提高系统的性能和稳定性。在实际应用中,PageIn机制可以用于管理进程所需的内存资源,并实现进程之间的资源共享。为了更好地实现PageIn机制,我们需要仔细地理解其原理和实现方式,从而能够更加有效地对系统进行优化和调试。

相关问题拓展阅读:

如何测试Linux服务器的性能

################### cpu性能查看 ############################################################

1、查看物理cpu个数:

cat /proc/cpuinfo |grep “physical id”|sort|uniq|wc -l

2、查看每个物理旦旁cpu中的core个数:

cat /proc/cpuinfo |grep “cpu cores”|wc -l

3、逻辑cpu的个数:

cat /proc/cpuinfo |grep “processor”|wc -l

物理cpu个数*核数=逻辑cpu个数(不支持超线程技术的情况下)

########################### 内存查看 ################################################################

1、查看内存使用情况:

free -m

totalusedfree shared buffers cached

Mem:

-/+ buffers/cache:

Swap:

total:内存总数

used:已经使用的内存数

free:空闲内存数

shared:多个进程共享的内存总额

– buffers/cache:(已用)的内存数,即used-buffers-cached

+ buffers/cache:(可用)的内存数,即free+buffers+cached

Buffer Cache用于针对磁盘块的读写;Page Cache用于针对文件inode的读写,这些Cache能有效地缩短I/O系统调用的时间。

对于操作系统来说free/used是系统可用/占用的内存;而对于应用程序来说-/+ buffers/cache是可用/占用内存,因为buffers/cache很快就会被使用。我们工作时候应该从应仿迟丛用角度来看。

################# 硬盘查看 ##########################################################################

1、查看硬盘及分区信息:

fdisk -l

2、查看文件系统的磁盘空间占用情况:

df -h

3、查看硬盘的I/O性能(每隔一秒显示一次,显示5次):

iostat -x 1 5

iostat是含在套装systat中的,可以用yum -y install systat来安装。

常关注的参数:

如果%util接近100%,说明产生的I/O请求太多,I/O系统已经满负荷,该磁盘可能存在瓶颈。

如果idle小于70%,I/O的压力就比较大了,说明读取进程中有较多的wait。

4、查看linux系统中某目录的大小:

du -sh /root

如发现某个分区空间接近用完,可以进入该分区的挂载点,用以下命令找出占用空间最多的文件或目录,然后按照从大到小的顺序,找出系统中占用最多空间的前10个文件或目录:

du -cksh *|sort -rn|head -n 10

############################################ 查看平均负载 ####################################

有时候系统响应很慢,但又找不到原因,这时就要查看平均负载了,看它是否有大量的进程在排队等待。

最简单的命令:

uptime

查看过去的1分钟、5分钟和15分钟内进程队列中的平均进程数量。

还有动态命令:

top

我们只关心以下部分:

top – 21:33:09 up 1:00, 1 user, load average: 0.00, 0.01, 0.05

如果每个逻辑cpu当前的活动进程不大于3,则系统性能良好;

如果每个逻辑cpu当前的活动进程不大于4,表示可以接受;

如果每个逻辑cpu当前的活动进程大于5,则系统性能问题严重。

一般计算方法:负载值/逻辑cpu个数

还可以结合vmstat命令来判断系统是否繁忙,其中:

procs

r:等待运行的备樱进程数。

b:处在非中断睡眠状态的进程数。

w:被交换出去的可运行的进程数。

memeory

swpd:虚拟内存使用情况,单位为KB。

free:空闲的内存,单位为KB。

buff:被用来作为缓存的内存数,单位为KB。

swap

si:从磁盘交换到内存的交换页数量,单位为KB。

so:从内存交换到磁盘的交换页数量,单位为KB。

io

bi:发送到块设备的块数,单位为KB。

bo:从块设备接受的块数,单位为KB。

system

in:每秒的中断数,包括时钟中断。

cs:每秒的环境切换次数。

cpu

按cpu的总使用百分比来显示。

us:cpu使用时间。

sy:cpu系统使用时间。

id:闲置时间。

标准情况下r和b的值应该为:

r

假设输出的信息中:

如果r经常大于3或4,且id经常少于50,表示cpu的负荷过重。

pi、po长期不等于0,表示内存不足。

bi经常不等于0,且在b中的队列大于2或3,表示io的性能不好。

################################# 其他参数 #####################################

查看内核版本号:

uname -a

简化命令:

uname -r

查看系统是32位还是64位的:

file /in/init

查看发行版:

cat /etc/issue

或l_release -a

查看系统已载入的相关模块:

lod

查看pci设置:

lspci

linux硬盘掉线挂载信息还在

不在了!1 查看已挂载磁盘信息

df -h

蠢告

2.查看磁盘信息

fdisk -l

4.挂载磁盘(把 /dev/sda3 挂载到 /data目录)

mount /dev/sda3 /data/

以上亲测有效!

5.实现自动挂载(注意:自动挂载,实测开不了机,还未找到解决方案)

vi /etc/fstab

添加如下内容:

/dev/sda3 /data/ ext4 default 0 0

将上面的命令添加进fstab后,为了避免可能的错误,我们可以使用mount -a 命令带亏明来检验编辑的内容是否有错。执行mount -a命令后,用df -h查看会发现磁盘已经挂载成功,说明输入没有错误。下次重启的空侍时候系统就可以自动进行挂载了。

磁盘挂载与卸载

磁盘分区完之后需要格式化,格式化之后需要挂载磁盘。

格式化后的磁盘恰是是一个块设备文件,类型为b。

在挂载某个分区前需要先建立一个挂载点,这个挂载点是以目录的形式出现的。一旦把某个分区挂载到了这个挂载点(目录)下,那么再往这个目录写数据时,则会写到该分区中。需要注意正尺带!

在挂载该分区前,挂载点(目录)下必须是个空目录。其实目录不为空并不影响所挂载分区的使用。但是一旦挂载上了,那么该目录下以前的东西就看不到了。只有卸载掉该分区后才能看到。

命令:mount

单一文件系统不应该被重复挂载在不同的挂载点中

单一目录不应该重复挂载多个文件系统

作为挂载点的目录理论上应该都是空目录

语法:mount

vfstype>

options> device

dir

1.-t

vfstype 指定文件系统的类型,通常不必指定。

2.-o

options 主要用来描述设备或档案的挂接方式。

3.device

要挂接(mount)的设备。

4.dir设备在系统上的挂接点(mount

point)。

选项:

-a:依照配置文件/etc/fstab

的数据将所有未挂载的磁盘都挂载上来

-l:单纯输入mount会显示目前挂在信息,加上-l

可增列LABEL名称

-t:可加上文件系统种类来指定欲挂载的类型

-n:在默认情况下,系统会将实际挂载的情况实时写人/etc/mtab中,以利其他系统运行,但在某些情况下欲避免问题,会刻意不写入,此时就要加-n选项。

-L:系统除了可以利用设备文件名之外,还可以利用文件系统的卷标名称来进行挂载

-o:后面可以接一些挂载时额困漏外加上的参数:

常用的选项有:-a、-t、-o.

如果不加任何选项,直接运行mount命令,会显示如下信息:

# mount

/dev/sda3 on / type ext4 (rw)

proc on /proc type proc (rw)

sysfs on /sys type sysfs (rw)

devpts on /dev/pts type devpts

(rw,gid=5,mode=620)

tmpfs on /dev/shm type tmpfs (rw)

/dev/sda1 on /boot type ext4 (rw)

none on /proc/sys/fs/binfmt_misc type

binfmt_misc (rw)

mount命令举芦可以查看当前系统已经挂载的所有分区,以及分区文件系统的类型,挂载点和一些选项等信息。所以如果想知道某个分区的文件系统类型直接用该命令查看即可。

例:

建一个空目录,然后在目录里建一个空白文档。

# mkdir /newdir

# touch

/newdir/newfile.txt

# ls

/newdir/newfile.txt

/newdir/newfile.txt

然后把格式化的 /dev/sdb5挂载到

/newdir上。

mount: wrong fs type, bad option, bad

superblock on /dev/sdb5,

missing codepage or helper program, or

other error

In some cases useful info is found in

syslog – try

dmesg | tail or so

不能完成挂载,根据以上挂载错误的提示:

# dmesg |tail

Addingk swap on /dev/sda2.

Priority:-1 extents:1 across:k

NET: Registered protocol family 10

lo: Disabled Privacy Extensions

ip6_tables: (C)Netfilter Core

Team

nf_conntrack version 0.5.0 (16100

buckets,max)

ip_tables: (C)Netfilter Core

Team

eth0: link up

eth0: no IPv6 routers present

EXT4-fs (sdb5): bad block size

8192

EXT4-fs (sdb5): bad block size

8192

可以看到,我的/dev/sdb5指定的块值8192不合法,所以只能重新格式化磁盘。

# mke2fs -t ext4 -L TEST

/dev/sdb5

使用默认块值即可。继续挂载sdb5。

# mount /dev/sdb5

/newdir/

# ls /newdir/

lost+found

# df -h

文件系统 容量 已用 可用 已用% 挂载点

Filesystem Size Used

Avail Use% Mounted on

/dev/sda3 7.8G 2.0G 5.5G 27% /

tmpfs 504M 0 504M 0% /dev/shm

/dev/sda1 97M 26M 67M 29% boot

/dev/sdb5 989M 18M 921M 2% /newdir

把/dev/sdb5挂载到/newdir后,原来在/neddir下的newfile.txt被覆盖了,通过df

-h可以看到刚才挂载的分区,我们也可以使用LABEL的方式挂载分区:

# umount /newdir/

# df -h

Filesystem Size Used Avail Use% Mounted

on

/dev/sda3 7.8G 2.0G 5.5G 27% /

tmpfs 504M 0 504M 0% /dev/shm

/dev/sda1 97M 26M 67M 29% /boot

# mount LABEL=TEST

/newdir

# df -h

Filesystem Size Used Avail Use% Mounted

on

/dev/sda3 7.8G 2.0G 5.5G 27% /

tmpfs 504M 0 504M 0% /dev/shm

/dev/sda1 97M 26M 67M 29% /boot

/dev/sdb5 989M 18M 921M 2% /newdir

日常运维工作中会遇到这样的情况,一台服务器上新装了两块磁盘,磁盘a(在服务器上显示为sdc)和磁盘b(在服务器上显示为sdd)。又一次把这两块磁盘都拔掉了,然后再重新插上,重启机器,结果磁盘编号调换了。a变成了sdd,b变化才能了sdc(这是应为把磁盘差错了卡槽)。

通过上面的学习,挂载磁盘是通过/dev/hdb1这样的分区名字来挂载的,如果先前加入到了/etc/fstab中,结果系统启动后则会挂载错分区。

如何避免这种情况发生?这就要用到UUID,可以通过blkid命令获取各分区的UUID:

blkid命令

获取文件系统类型、UUID

在Linux下可以使用blkid命令对查询设备上所采用文件系统类型进行查询。blkid主要用来对系统的块设备(包括交换分区)所使用的文件系统类型、LABEL、UUID等信息进行查询。

# blkid

/dev/sda1:

UUID=”37d8fe31-1cdaaa-1eed” TYPE=”ext4″

/dev/sda2:

UUID=”1ac357d6-af-ba6c-1eabad6aa0f2″ TYPE=”swap”

/dev/sda3:

UUID=”51a8587eea8-85ef-bad6a” TYPE=”ext4″

/dev/sdb5: LABEL=”TEST”

UUID=”b45feba7fb25311e” TYPE=”ext4″

这样可以获得全部磁盘分区的UUID,如果格式化的时候指定了LABLE则该命令也会显示LABEL值,甚至连文件系统类型也会显示。当然这个命令后面也可以指定哪个分区:

# blkid /dev/sdb5

/dev/sdb5: LABEL=”TEST”

UUID=”b45feba7fb25311e” TYPE=”ext4″

获得UUID之后的使用方法:

# umount /newdir

# mount

UUID=”b45feba7fb25311e” /newdir

# df -h

Filesystem Size Used Avail Use% Mounted

on

/dev/sda3 7.8G 2.0G 5.5G 27% /

tmpfs 504M 0 504M 0% /dev/shm

/dev/sda1 97M 26M 67M 29% /boot

/dev/sdb5 989M 18M 921M 2% /newdir

也可以把下面这行写到/etc/fstab中

UUID=b45feba7fb25311e /newdir ext4 defa ults

如果想让某个分区开机后就自动挂载,有两个办法可以实现:在/etc/fstab中添加一行。如上例中那行;把挂载命令写到/etc/re.d/rc.local文件中去,我会经常把想要开机启动的命令加到这个文件中。系统启动后会执行这个文件中的命令,所以只要想开机后运行什么命令统统写入到这个文件下面,直接放到最后面即可,把挂载的命令放在文件最后一行:

# cat

/etc/rc.d/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

# vi

/etc/rc.d/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

mount

UUID=”b45feba7fb25311e” /newdir

~

按esc退出,输入:wq,保存退出即可

以上两种方法任选其一。

建议挂载磁盘分区的时候尽量使用UUID或者LABEL这两种方法。

命令:umount

选项:-l,(非常有用,遇到不能卸载的情况用-l)

在上面的例子中,多次用到这个命令。

umount后面可以跟挂载点,也可以跟分区名(/dev/hdb1).

但是不可以跟LABEL和UUID。

# umount /dev/sdb5

# mount

UUID=”b45feba7fb25311e” /newdir

# umount /newdir

# mount

UUID=”b45feba7fb25311e” /newdir

# df -h

Filesystem Size Used Avail Use% Mounted

on

/dev/sda3 7.8G 2.0G 5.5G 27% /

tmpfs 504M 0 504M 0% /dev/shm

/dev/sda1 97M 26M 67M 29% /boot

linux 卸载磁盘后挂载目录还存在

方舟生存进化游戏下载

精选推荐

广告

linux mount 硬盘挂载和卸载

68阅读·0评论·0点赞

2023年11月3日

Linux下mount挂载后,原目录下的内容消失

2.6W阅读·0评论·2点赞

2023年5月5日

Linux实操篇-Linux 磁盘分区、挂载

233阅读·0评论·0点赞

2023年9月3日

新硬盘挂载目录后文件消失解决办法

3.1W阅读·6评论·9点赞

2023年7月29日

linux怎么卸载home文件系统,Linux磁盘和文件系统管理(3)_磁盘挂载 卸载

499阅读·0评论·0点赞

2023年5月14日

ubuntu挂载与卸载

2183阅读·0评论·0点赞

2023年3月20日

三国新模式,由你带兵攻城作战!

精选推荐

广告

【转载】Linux新硬盘挂载某目录后原目录的文件消失

702阅读·1评论·3点赞

2023年6月28日

linux各种挂载点作用,Linux 挂载点目录及其作用

1636阅读·0评论·0点赞

2023年5月16日

【Linux实验】系统分区挂载与卸载配置实验

455阅读·0评论·2点赞

2023年5月15日

解决mount挂载问题:wrong fs type, bad option, bad superblock on

2.8W阅读·0评论·4点赞

2023年6月19日

Linux如何创建挂载点

1.0W阅读·0评论·1点赞

2023年4月8日

Linux 挂载分区到文件夹后,文件夹原来数据哪去了

736阅读·0评论·0点赞

2023年2月3日

ubuntu挂载与卸载硬盘

1567阅读·0评论·1点赞

2023年4月1日

linux挂载前后数据会改变么,linux挂载点变化

321阅读·0评论·0点赞

2023年5月15日

Linux基础知识-挂载一个磁盘再卸载掉

96阅读·0评论·0点赞

2023年2月29日

linux取消目录挂载,Linux取消挂载,删除用户及其目录

261阅读·0评论·0点赞

2023年5月12日

解决办法之Linux新硬盘挂载某目录后原目录的文件消失

8089阅读·0评论·9点赞

2023年3月13日

Linux文件系统的的挂载与卸载(mount、umount)

2771阅读·0评论·1点赞

2023年2月10日

Linux 实用指令(7)–Linux 磁盘分区、挂载

90阅读·0评论·0点赞

2023年9月26日

Linux使用mount把目录挂载到新磁盘后 原目录的内容消失 解决办法

1173阅读·2评论·0点赞

2023年2月26日

去首页

pagein linux的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于pagein linux,Linux内存管理 PageIn 实现资源调度,如何测试Linux服务器的性能,linux硬盘掉线挂载信息还在的信息别忘了在本站进行查找喔。


数据运维技术 » Linux内存管理 PageIn 实现资源调度 (pagein linux)