SUSE Linux 异步IO:提升系统效率的利器 (suse linux async io)

在现代计算机系统中,I/O操作通常是最耗费系统资源的操作之一。而Linux操作系统以其稳定性和可靠性,成为了众多企业服务器的首选系统。但为了提高I/O操作的效率,Linux系统需要采用一些高效的技术。其中,异步IO技术是提升Linux系统效率的重要利器之一。

异步IO(Asynchronous IO)是一种用于提高I/O操作效率的技术。它与传统的同步IO(Synchronous IO)不同,同步IO会阻塞进程直到I/O操作完成,而异步IO则不会阻塞进程,而是通过事件通知的方式在后成I/O操作。这种方式可以让程序更为高效地利用系统资源,提高系统的效率。

SUSE Linux是一款基于开源的Linux操作系统,它具有可定制性高、稳定性强、安全性好等特点。SUSE Linux在操作系统中集成了异步IO技术,使得系统能够更高效地处理I/O操作。

在SUSE Linux中使用异步IO技术,可以取得以下几个方面的优化:

1.提高I/O吞吐量

使用异步IO技术可以提高I/O吞吐量,使系统能够更快地处理大量的I/O请求。异步IO技术可以让程序发起一次I/O请求后,立即执行后续的操作,而不必等待I/O操作完成。这样可以让程序更快地完成任务,提高系统的效率。

2.减少系统资源的占用

传统的同步IO操作会阻塞进程,使得进程无法做其他的事情。而异步IO操作能够在I/O操作进行的同时,让进程同时去处理其他任务,减少对系统资源的占用。这种方式可以让系统在I/O操作时不会出现“停滞不前”的情况,提高系统的稳定性。

3.降低延迟

在传统的同步IO操作中,I/O操作完成后进程才能继续执行后续的操作,这样会造成一定的延迟。而异步IO操作可以在进行I/O操作的同时,让进程继续执行后续的操作,这样可以降低延迟,提高系统的响应速度。

通过以上三个方面的优化,SUSE Linux中的异步IO技术为企业提高了系统的效率和稳定性,使得企业能够更好地处理大量的I/O请求。

在使用SUSE Linux的过程中,通过一些优化的技巧,可以进一步提升异步IO的效率。例如:

1.充分利用系统资源

对于高并发的场景,可以充分利用系统资源,使用多线程的方式来处理I/O请求。这样可以让系统更快地处理大量的I/O请求,提高系统的响应速度。

2.调整异步IO的参数

使用异步IO技术时,可以调整操作系统的参数来优化系统的效率,例如调整文件描述符、缓存大小等参数。这样可以使异步IO操作更快地完成任务,提高系统的效率。

3.使用高效的I/O库

在进行I/O操作时,可以使用高效的I/O库来提高系统的效率。例如libo库和epoll库等,这些库可以更快地完成数据的读取和写入,提高系统的效率。

SUSE Linux中的异步IO技术为企业提供了一种高效、稳定的系统解决方案。通过一些优化的技巧,可以进一步提升异步IO的效率,让系统更好地处理大量的I/O请求,提高企业的竞争力。

相关问题拓展阅读:

怎样分析linux的性能指标

LR

监控

UNIX/Linux

系统方法

一、准备工作:

1.

可以通过两种方法验证服务器上是否配置

rstatd

守护程序:

①使用

rup

命令,它用于报告计算机的各种统计信息,其中就包括

rstatd

的配置信息。使用命

rup

10.130.61.203,

此处

10.130.61.203

是要监视的

linux/Unix

服务器的

IP

,如果该命令返回相关的

统计信息。则表示已经配置并且激活了

rstatd

守护进程;若未返回有意义的统计信息,或者出现一

条错误报告,则表示

rstatd

守护进程尚未被配置或有问题。

②使用

find

命令

#find / -name rpc.rstatd,

该命令用于查找系统中是否存在

rpc.rstatd

文件,如果没有,说明系统没

有安装

rstatd

守护程序。

linux

需要下载

个包:

rpc.rstatd-4.0.1.tar.gz

rsh-0.17-14.i386.rpm

rsh-server-0.17-14.i386.rpm

.下载并安装

rstatd

如果服务器上没有安装

rstatd

程序(一般来说

LINUX

都没有安装)

,需伍凳要下载一个包才有这个服

,

rpc.rstatd-4.0.1.tar.gz.

,

,

rstatd

这个地址下载)下载后,开始安装,安装步骤如下:

tar -xzvf rpc.rstatd-4.0.1.tar.gz

cd rpc.rstatd-4.0.1/

./configure

—配置操作

make

—进行编译

make install

—开始安装

rpc.rstatd

—启动

rstatd

进程

rpcinfo -p

”命令来查看当前系统是否已经启动了

rstatd

守护进程

只要保证

Linux

机器上的进程里有

rstatd

xinetd

这二个服务就可以用

LR

去监视了,通过以下

两点可以检查是否启动:

)检查是否启动

: rsh server

监听的

TCP

514

# netstat -an |grep 514

tcp 0 0 0.0.0.0:514 0.0.0.0:* LISTEN

如果能看到

514

在监听说明

rsh

服务器已经启动。

)检查是否启动

: rstatd

输入命令

: rpcinfo -p

如果能看到类似如下信息:

程序版本协议端口

5

udp

937

rstatd

4

udp

937

rstatd

3

udp

937

rstatd

2

udp

937

rstatd

1

udp

937

rstatd

那就说明

rstatd

服务启动了

,(

当然这里也可以用

ps ax

代替

)

.安装

rsh

rsh-server

两个服务包方法

a.

卸载

rsh

# rpm

q

rsh

查看版本号

# rpm

-e

版本号

卸载该版本。

b

.安装

# rpm

ivh rsh-0.17-14.i386.rpm rsh-server-0.17-14.i386.rpm

在启动

rpc.rstatd

时,

会报错

Cannot register service: RPC: Unable to receive; errno = Ction refused

解决方法如下:

# /etc/init.d/portmap start

# /etc/init.d/nfs start

然后再次启动

rpc.rstatd

就好了。

.返橘迅安装

xinetd

方法:

①查看

xinetd

服务:

# rpm -q xinetd

xinetd-2.3.14-10.el5

②安装

xinetd

服务:

# yum install xinetd

如果安装不起

xinetd

服务,执行下列操作命令后再次执行

yum install xinetd

命令进行安装:

yum clean packages

清除缓存目录下的软件包

yum clean headers

清除漏此缓存目录下的

headers

yum clean oldheaders

清除缓存目录下旧的

headers

yum clean, yum clean all (= yum clean packages; yum clean oldheaders)

清除缓存目录下的软件包

及旧的

headers

.启动

xinetd

服务:

在有的系统中,通过如下命令重启:

# service xinetd reload

# /in/service xinetd rstart

suse linux

中如下操作:

cd /etc/init.d/xinetd restart

安装完成后配置

rstatd

目标守护进程

xinetd,

它的主配置文件是

/etc/xinetd.conf ,

它里面内容是

一些如下的基本信息:

#

# xinetd.conf

#

# Copyright (c)SuSE GmbH Nuernberg, Germany.

# Copyright (c) 2023 SuSE Linux AG, Nuernberg, Germany.

#

defaults

{

log_type

= FILE /var/log/xinetd.log

log_on_success = HOST EXIT DURATION

log_on_failure = HOST ATTEMPT

#

only_from

= localhost

instances

= 30

cps

=

#

# The specification of an interface is interesting, if we are on a firewall.

# For example, if you only want to provide services from an internal

# network interface, you may specify your internal interfaces IP-Address.

#

#

interface

= 127.0.0.1

}

includedir /etc/xinetd.d

我们这里需要修改的是

/etc/xinetd.d/

下的三个

conf

文件

rlogin

,rsh,rexec

这三个配置文件

,

打这

三个文件里的

disable = yes

都改成

disable = no ( disabled

用在默认的

{}

中禁止服务

)

或是把

# default:

off

都设置成

on

这个的意思就是在

xinetd

启动的时候默认都启动上面的三个服务

!

说明:我自己在配置时,没有

disable = yes

这项,我就将

# default: off

改为:

default: on

,重启后

(cd /etc/init.d/./xinetd restart

)通过

netstat -an |grep 514

查看,没有返回。然后,我就手动在三个文

件中最后一行加入

disable

=

no

,再重启

xinetd

,再使用

netstat

-an

|grep

514

查看,得到

tcp

0

0

0.0.0.0:514 0.0.0.0:* LISTEN

结果,表明

rsh

服务器已经启动。

看到网上有的地方说使用如下命令:

# service xinetd reload

# /in/service xinetd rstart

不知道是在什么系统用的。

二、监控

linux

资源:

controller

中,将

System resource Graphs

中的

Unix resources

拖到右侧的监控区域中,并单击

鼠标右键选择“

Add

Measurements

,

在弹出的对话框中输入被监控的

linux

系统的

IP

地址,然后选

择需要监控的性能指标,并点击“确定”

,出现如下结果:

Monitor name :UNIX Resources. Cannot initialize the monitoring on 10.10.15.62.

Error while creating the RPC client. Ensure that the machine can be connected and that it runs the

rstat daemon (use rpcinfo utility for this verification).

Detailed error: RPC: Failed to create RPC client.

RPC-TCP: Failed to establish RPC server address.

RPC-TCP: Failed to communicate with the portmapper on host ‘10.10.15.62’.

RPC: RPC call failed.

RPC-TCP: recv()/recvfrom() failed.

RPC-TCP: Timeout reached. (entry point: CFactory::Initialize).

检查原因,发现是

Linux

系统中的防火墙开启了并且阻挡了

LoadRunner

监控

Linux

系统的资源,

因此要将防火墙关闭。

关闭防火墙:

# /etc/init.d/iptables stop;

三、监控

UNIX

lr

监控

UNIX

UNIX

先启动一

rstatd

服务

以下是在

IBM AIX

系统中启动

rstatd

服务的方法:

.使用

telnet

root

用户的身份登录入

AIX

系统

.在命令行提示符下输入:

vi /etc/inetd.conf

.查找

rstatd

,找到

#rstatd

sunrpc_udp

udp

wait

root /usr/in/rpc.rstatd rstatd

、将

#

去掉

:wq

保存修改结果

、命令提示符下输入:

refresh

s inetd

重新启动服务。

这样使用

loadrunner

就可以监视

AIX

系统的性能情况了。

注:在

HP UNIX

系统上编辑完

inetd.conf

后,重启

inetd

服务需要输入

inetd -c

UNIX

上也可以用

rup

命令查看

rstatd

程序是否被配置并激活

rstatd

程序已经运行,

重启时,

先查看进程

ps -ef |grep inet

然后杀掉进程,

refresh

s inetd

进行重启。

一、CPU

1、良好状态指标

CPU利用率:User Time

Time

上下文切换:与CPU利用率相关联,如果CPU利用率状态良好,大量的上下文切换也是孝拆可以接受的。

可运行队列:每个处理器的可运行队列

2、监控工具

vmstat

$ vmstat 1

procemoryswapiosystem–

—–cpu——

r b swpd free buff cache si so bi bo in cs

us sy id wa st

重要参数:

r,run queue,可运行队列的线程数,这些线程都是可运行状态,只不过CPU暂时不可用;

b,被blocked的进程数,正在等待IO请求;

in,interrupts,被处理过的中断数

cs,context switch,系统上正在做上下文切换的数目

us,用户占用巧郑枣CPU的百分比

sys,内核和中断占用CPU的百分比

id,CPU完全空闲的百分比

上例可得:

sy高us低,以及高频度的上下文切换(cs),说明应用程序进行了大量的系统调用;

这台4核机器的r应该在12个以内,现在r在14个线程以上,此时CPU负荷很重。

查看某个进程占用的CPU资源

$ while :; do ps -eo pid,ni,pri,pcpu,psr,comm

| grep ‘db_server_login’; sleep 1;

done

PID NIPRI %CPU PSR COMMAND

23 0.0 0

db_server_login

23 0.0 3

db_server_login

23 0.0 2

db_server_login

23 0.0 2

db_server_login

23 0.0 3

db_server_login

23 0.0 0

db_server_login

……

二、Memory

1、良好状态指标

swap

in

(si)

==

0,swap

out

(so)丛咐

==

应用程序可用内存/系统物理内存

70%

2、监控工具

vmstat

$ vmstat 1

procemoryswapiosystem–

—–cpu——

r b swpd free buff cache si so bi bo in csus

sy id wa st

3821

95 1

重要参数:

swpd,已使用的 SWAP 空间大小,KB 为单位;

free,可用的物理内存大小,KB 为单位;

buff,物理内存用来缓存读写操作的buffer大小,KB 为单位;

cache,物理内存用来缓存进程地址空间的 cache 大小,KB 为单位;

si,数据从 SWAP 读取到 RAM(swap in)的大小,KB 为单位;

so,数据从 RAM 写到 SWAP(swap out)的大小,KB 为单位。

上例可得:

物理可用内存 free 基本没什么显著变化,swapd逐步增加,说明最小可用的内存始终保持在 256MB(物理内存大小) * 10% = 2.56MB 左右,当脏页达到10%的时候就开始大量使用swap。

free

$ free -m

total used free shared buffers cached

Mem:

-/+ buffers/cache:

Swap:

三、磁盘IO

1、良好状态指标

iowait %

提高命中率的一个简单方式就是增大文件缓存区面积,缓存区越大预存的页面就越多,命中率也越高。

Linux 内核希望能尽可能产生次缺页中断(从文件缓存区读),并且能尽可能避免主缺页中断(从硬盘读),这样随着次缺页中断的增多,文件缓存区也逐步增大,直到系统只有少量可用物理内存的时候 Linux 才开始释放一些不用的页。

2、监控工具

查看物理内存和文件缓存情况

$ cat /proc/meminfo

MemTotal:kB

MemFree: kB

Buffers: kB

Cached:8 kB

这台服务器总共有 8GB 物理内存(MemTotal),3GB 左右可用内存(MemFree),343MB左右用来做磁盘缓存(Buffers),4GB左右用来做文件缓存区(Cached)。

sar

$ sar -d 2 3

Linux 2.6.9-42.ELp (webserver) 11/30/2023_i686_ (8 CPU)

11:09:33 PM DEV tps rd_sec/s wr_sec/s avgrq-szavgqu-sz await svctm

%util

11:09:35 PM dev8-0 0.00 0.00 0.00 0.00 0.00 0.000.00 0.00

11:09:35 PM DEV tps rd_sec/s wr_sec/s avgrq-szavgqu-sz await svctm

%util

11:09:37 PM dev8-0 1.00 0.00 12.00 12.00 0.000.00 0.00 0.00

11:09:37 PM DEV tps rd_sec/s wr_sec/s avgrq-szavgqu-sz await svctm

%util

11:09:39 PM dev8-0 1.99 0.00 47.76 24.00 0.000.50 0.25 0.05

Average: DEV tpsrd_sec/s wr_sec/s avgrq-sz

avgqu-sz await svctm %util

Average: dev8-0 1.00 0.00 19.97 20.00 0.00 0.330.17 0.02

重要参数:

await表示平均每次设备I/O操作的等待时间(以毫秒为单位)。

svctm表示平均每次设备I/O操作的服务时间(以毫秒为单位)。

%util表示一秒中有百分之几的时间用于I/O操作。

如果svctm的值与await很接近,表示几乎没有I/O等待,磁盘性能很好,如果await的值远高于svctm的值,则表示I/O队列等待太长,系统上运行的应用程序将变慢。

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

四、Network IO

对于UDP

1、良好状态指标

接收、发送缓冲区不长时间有等待处理的网络包

2、监控工具

netstat

对于UDP服务,查看所有监听的UDP端口的网络情况

$ watch netstat -lunp

Proto Recv-Q Send-Q Local

Address

Foreign

Address

State

PID/Program name

udp

0

0.0.0.0:

0.0.0.0:*

udp

0

0.0.0.0:

0.0.0.0:*

udp

0

0.0.0.0:

0.0.0.0:*

udp

0

0.0.0.0:

0.0.0.0:*

udp

0

0.0.0.0:

0.0.0.0:*

udp

0

0.0.0.0:

0.0.0.0:*

udp

0

0.0.0.0:

0.0.0.0:*

udp

0

0.0.0.0:

0.0.0.0:*

RecvQ、SendQ为0,或者不长时间有数值是比较正常的。

对于UDP服务,查看丢包情况(网卡收到了,但是应用层没有处理过来造成的丢包)

$ watch netstat -su

Udp:

packetsreceived

packetsto unknown port received.

packet

receive errors

packetssent

packet receive errors 这一项数值增长了,则表明在丢包

对于TCP(来自davidshan单卫的经验,thx~~)

1、良好状态指标

对于TCP而言,不会出现因为缓存不足而存在丢包的事,因为网络等其他原因,导致丢了包,协议层也会通过重传机制来保证丢的包到达对方。

所以,tcp而言更多的专注重传率。

2、监控工具

# cat /proc/net/snmp | grep Tcp:

Tcp: RtoAlgorithm RtoMin RtoMaxMaxConn ActiveOpens PassiveOpens

AttemptFails EstabResets CurrEstab InSegsOutSegs RetransSegs

InErrs OutRsts

Tcp:6800 0

849

重传率 = RetransSegs / OutSegs

至于这个值在多少范围内,算ok的,得看具体的业务了。

业务侧更关注的是响应时间。

性能分析工具汇总

CPU性能分析工具:

vmstat

ps

sar

time

strace

pstree

top

Memory性能分析工具:

vmstat

strace

top

ipcs

ipcrm

cat /proc/meminfo

cat /proc/slabinfo

cat /proc//maps

I/O性能分析工具:

vmstat

ipstat

repquota

quotacheck

Network性能分析工具:

ifconfig

ethereal

tethereal

iptraf

iwconfig

nfsstat

mrtg

ntop

netstat

cat /proc/sys/net

一、处理器参数

这是一个很简单的参数,它直观的描述了每个CPU的利用率。在xSeries架构中,如果CPU的利用率长时间的超过80%,就可能是出现了处理器的瓶颈。

Runable processes

这个值描述了正在准备被执行的进程,在一个持续让蔽时间里这个值不应该超过物理CPU数量的10倍,否则CPU方面就可能存在瓶颈。

Blocked

描述了那些因为等待I/O操作结束而不能被执行的进程,Blocked可能指出你正面临I/O瓶颈。

User time

描述了处理用户进程的百分比,包括nice time。如果User time的值很高,说明系统性能用在处理实际的工作。

System time

描述了CPU花费在处理内核操作包旅旁括IRQ和软件中断上面的百分比。如果system time很高说明系统可能存在网络或者驱动堆栈方面的瓶颈。一个系统通常只花费很少的时间去处理内核的操作。

Idle time

描述了CPU空闲的百分比。

Nice time

描述了CPU花费在处理re-nicing进程的百分比。

Context switch

系统中线程之间进行交换的数量。

Waiting

CPU花费在等待I/O操作上的总时间,与blocked相似,一个系统不应该花费太多的时间在等待I/O操作上,否则你应该进一步检测I/O子系统是否存在瓶颈。

Interrupts

Interrupts值包括硬Interrupts和软Interrupts,硬Interrupts会对系统性能带

来更多的不利影响。高的Interrupts值指出系统可能存在一个软件的瓶颈,可能是内核或者驱动程序。注意Interrupts值中包括CPU时钟导

致的中断(现代的xServer系统每秒1000个Interrupts值)。

二、内存参数

Free memory

相比其他操作系统,Linux空闲内存的值坦镇州不应该做为一个性能参考的重要指标,因为就像我们之前提到过的,Linux内核会分配大量没有被使用的内存作为文件系统的缓存,所以这个值通常都比较小。

Swap usage

这个值描述了已经被使用的swap空间。Swap

usage只表示了Linux管理内存的有效性。对识别内存瓶颈来说,Swap In/Out才是一个比较又意义的依据,如果Swap

In/Out的值长期保持在每秒200到300个页面通常就表示系统可能存在内存的瓶颈。

Buffer and cache

这个值描述了为文件系统和块设备分配的缓存。注意在Red Hat Enterprise Linux

3和更早一些的版本中,大部分空闲内存会被分配作为缓存使用。在Red Hat Enterprise Linux

4以后的版本中,你可以通过修改/proc/sys/vm中的page_cache_tuning来调整空闲内存中作为缓存的数量。

Slabs

描述了内核使用的内存空间,注意内核的页面是不能被交换到磁盘上的。

Active versus inactive memory

提供了关于系统内存的active内存信息,Inactive内存是被kswapd守护进程交换到磁盘上的空间。

三、网络参数

Packets received and sent

这个参数表示了一个指定网卡接收和发送的数据包的数量。

Bytes received and sent

这个参数表示了一个指定网卡接收和发送的数据包的字节数。

Collisions per second

这个值提供了发生在指定网卡上的网络冲突的数量。持续的出现这个值代表在网络架构上出现了瓶颈,而不是在服务器端出现的问题。在正常配置的网络中冲突是非常少见的,除非用户的网络环境都是由hub组成。

Packets dropped

这个值表示了被内核丢掉的数据包数量,可能是因为防火墙或者是网络缓存的缺乏。

Overruns

Overruns表达了超出网络接口缓存的次数,这个参数应该和packets dropped值联系到一起来判断是否存在在网络缓存或者网络队列过长方面的瓶颈。

Errors

这个值记录了标志为失败的帧的数量。这个可能由错误的网络配置或者部分网线损坏导致,在铜口千兆以太网环境中部分网线的损害是影响性能的一个重要因素。

四、块设备参数

Iowait

CPU等待I/O操作所花费的时间。这个值持续很高通常可能是I/O瓶颈所导致的。

Average queue length

I/O请求的数量,通常一个磁盘队列值为2到3为更佳情况,更高的值说明系统可能存在I/O瓶颈。

Average wait

响应一个I/O操作的平均时间。Average wait包括实际I/O操作的时间和在I/O队列里等待的时间。

Transfers per second

描述每秒执行多少次I/O操作(包括读和写)。Transfers per second的值与kBytes per second结合起来可以帮助你估计系统的平均传输块大小,这个传输块大小通常和磁盘子系统的条带化大小相符合可以获得更好的性能。

Blocks read/write per second

这个值表达了每秒读写的blocks数量,在2.6内核中blocks是1024bytes,在早些的内核版本中blocks可以是不同的大小,从512bytes到4kb。

Kilobytes per second read/write

按照kb为单位表示读写块设备的实际数据的数量。

不知道你是不是指性能测试,使拦宽用UnixBench跑一下就有者衡灶了。

各测试指首扮标的说明请看链接

suse linux async io的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于suse linux async io,SUSE Linux 异步IO:提升系统效率的利器,怎样分析linux的性能指标的信息别忘了在本站进行查找喔。


数据运维技术 » SUSE Linux 异步IO:提升系统效率的利器 (suse linux async io)