当前位置:首页 » 操作系统 » linux磁盘读写

linux磁盘读写

发布时间: 2022-12-08 03:25:16

A. linux 关于文件读写的问题

1. 文件write操作是原子的,多个进程同时写文件,原理上是没问题的。但是问题会出现在:如果多个进程写文件时是先lseek再write,就会出现覆盖。打开文件时使用append标志可以使先lseek再write这个操作变成原子操作,这样可以避免覆盖。
2. 多线程共享一个文件句柄的话,是不会有问题的。
3.
4.linux读写磁盘文件过程中,一般情况下并不是直接操作磁盘上的文件,而是读写内存中的磁盘高速缓存,内核选择合适的时机把脏页同步到磁盘。所以读写文件时不立刻调用io不是因为你说的缓冲区,read和write是没有缓冲区的。
5. fprintf和printf一样,是有缓冲区的,不过大小我不知道,也没必要知道吧。

B. linux下简单的测试磁盘读写速率(转载)

sudo hdparm -tT /dev/md0
/dev/md0:
Timing cached reads: 35164 MB in 1.99 seconds = 17656.01 MB/sec
Timing buffered disk reads: 818 MB in 3.01 seconds = 272.14 MB/sec

使用time命令和dd命令可以简单测试硬盘的写速率

C. Linux下测试磁盘读写速度(转)

理论上复制量越大测试越准确。

命令解释:

time 有计时作用,dd 用于复制,从 if 读出,写到 of。

if=/dev/zero 不产生 IO,因此可以用来测试纯写速度。

同理 of=/dev/null 不产生 IO,可以用来测试纯读速度。

bs 是每次读或写的大小,即一个块的大小,count 是读写块的数量。

D. Linux 系统下进行iozone 硬盘读写

iozone是一个文件系统的基准测试工具,可以全面测试不同操作系统中文件系统的读写性能

方法/步骤


命令及参数说明

-a:使用全面自动模式,使用的块大小从4k到16M,在文件大于 32MB时将自动停止使用低于64K的块大小测试,这节省了许多时间。

-z:与-a连用,测试所有的块,强制iozone 在执行自动测试时包含小的块;

-R:生成Excel报告。iozone将生成一个兼容Excel的标准输出报告,这个文件可以使用Microsoft Excel打开,可以创建一个文件系统性能的图表。注意:3D图表是面向列的,画图时需要选择这项,因为Excel默认处理面向行的数据;

-b filename : iozone输出结果时将创建一个兼容Excel的二进制格式的文件。

-n:设置测试时最小文件大小

-g:设置测试时最大文件大小

-s:设置测试时文件大小

-f filename: 指定测试文件的名字,完成后会自动删除(这个文件必须指定你要测试的那个硬盘中)

-y:指定测试块的大小范围,表示测试最小块大小,需要和-a同时使用;

-q:指定测试块的大小范围,表示测试最大块大小,需要和-a同时使用;

-r:指定测试的块大小测试。

如果只在意读/写的性能,并不想花时间执行所有测试,可以像如下一样限制测试内容

./iozone –Ra –g 2G –i 0 –i 1

-i :设置I/O测试模式(0=write/Re-write,1=read/Re-read,2=random-read/write,3=Read-backwards … 12=preadv/Re-preadv),这些别的详细内容请查man

首先需要进入iozone3_397/src/current/路径下,然后再执行下列命令

全面的自动测试模式,所有参数都是缺省的,并且测试完成所有的操作,生成输出结果iozone.xls,这个文件可以使用Microsoft Excel打开,执行下列命令:

./iozone -a -Rb /home/loongson/iozone.xls

自定义模式,设置最小测试文件为64M,最大测试文件为1G,只进行读写测试,并在当前路径下生成输出结果iozone.xls,在终端执行下列命令:

./iozone -a -n 64m -g 1G -i 0 -i 1 -Rb ./iozone.xls

设备当前内存大小是8G,需要指定内存大小的两倍,并且从块大小4K到16M结束全面测试;

./iozone -a -s 16g -Rb ./iozone.xls

6

挂载盘的测试,比如U盘等;首先要现将测试盘挂载到/mnt目录下;

./iozone -a -n 1g -g 4g -i 0 -i 1 -f /mnt/iozone -Rb ./iozone.xls

7

设备当前内存大小是8G,需要指定内存大小的两倍,并且从指定块64k大小开始到16M结束全面测试;

./iozone -a -y 64k -s 16g -Rb ./iozone.xls

8

指定块大小测试案例

./iozone -a -i 0 -i 1 -i 2 -s 8g -r 16m -Rb iozone.xls


E. linux怎么计算io读写速度

Linux下测试磁盘的读写IO速度,使用hdparm命令,下面是测试方法:

#hdparm-Tt/dev/sda
/dev/sda:
Timingcachedreads:6676MBin2.00seconds=3340.18MB/sec
Timingbuffereddiskreads:218MBin3.11seconds=70.11MB/sec
#可以看到,2秒钟读取了6676MB的缓存,约合3340.18MB/sec;
#在3.11秒中读取了218MB磁盘(物理读),读取速度约合70.11MB/sec;

F. Linux 如何测试 IO 性能(磁盘读写速度

linux下测试磁盘IO读写速度
[root@node3 /]# time dd if=/dev/sda2 of=/dev/null bs=8k count=524288
524288+0 records in
524288+0 records out
4294967296 bytes (4.3 GB) copied, 37.4222 seconds, 115 MB/s
real 0m37.497s
user 0m0.036s
sys 0m1.320s
了4.3G的数据,平均速度为115M/s

[root@node3 /]# hdparm -t /dev/sda2
/dev/sda2:
Timing buffered disk reads: 284 MB in 3.00 seconds = 94.55 MB/sec

[root@node3 /]# hdparm -t /dev/sda2
/dev/sda2:
Timing buffered disk reads: 292 MB in 3.02 seconds = 96.82 MB/sec

读了将近300M的数据,平均速度大约为95M/s
经过以上的测试数据大体估算该磁盘的性能大约为100M/s

G. 【Linux入门】Linux系统中如何提高磁盘的读写性能吗

Linux操作系统一般指Linux,它是一种免费使用和自由传播的类Unix操作系统,被广泛的应用于服务器、桌面、嵌入式等领域。那么你知道Linux系统中如何提高磁盘的读写性能吗?如何实现磁盘冗余?raid和lvm可以帮你轻松解决。

说起raid和lvm,相信很多人就会说既然他们都可以解决问题,那么raid和lvm有什么区别?我通过这篇文章为大家简单介绍一下。

LVM:主要侧重动态磁盘扩容

全称逻辑卷管理,是一个动态扩展磁盘分区容量的功能性工具,对于测试环境,可以用来管理磁分区满了,扩容,但是在大规模环境性能低下,尽量不要使用它。

RAID:主要侧重磁盘性能和数据安全

磁盘阵列可以把多个磁盘驱动器通过不同的连接方式连接在一起协同工作,大大提高了读取速度,同时把磁盘系统的可靠性提高到接近无错的境界,使其可靠性极高。

用RAID最直接的好处是:

1)提升数据安全性。2)提升数据读写性能。3)提供更大的单一逻辑磁盘数据容量存储

H. linux怎样提升磁盘读写性能

关于页面缓存的信息,可以用
cat /proc/meminfo
看到。其中的Cached 指用于pagecache的内存大小(diskcache-SwapCache)。随着写入缓存页,Dirty 的值会增加。
一旦开始把缓存页写入硬盘,Writeback的值会增加直到写入结束。

Linux 用pdflush进程把数据从缓存页写入硬盘,查看有多少个pdflush进程
cat /proc/sys/vm/nr_pdflush_threads

pdflush的行为受/proc/sys/vm中的参数的控制
/proc/sys/vm/dirty_writeback_centisecs (default 500):
1/100秒, 多长时间唤醒pdflush将缓存页数据写入硬盘。默认5秒唤醒2个(更多个)线程。
如果wrteback的时间长于dirty_writeback_centisecs的时间,可能会出问题。

pdflush的第一件事是读取
/proc/sys/vm/dirty_expire_centiseconds (default 3000)
1/100秒。缓存页里数据的过期时间(旧数据),在下一个周期内被写入硬盘。默认30秒是一个很长的时间。

第二件事是判断内存是否到了要写入硬盘的限额,由参数决定:
/proc/sys/vm/dirty_background_ratio (default 10)
百分值,保留过期页缓存(脏页缓存)的最大值。是以MmeFree+Cached-Mapped的值为基准的

pdflush写入硬盘看两个参数:
1 数据在页缓存中是否超出30秒,如果是,标记为脏页缓存;
2 脏页缓存是否达到工作内存的10%;

以下参数也会影响到pdflush
/proc/sys/vm/dirty_ratio (default 40)
总内存的最大百分比,系统所能拥有的最大脏页缓存的总量。超过这个值,开启pdflush写入硬盘。如果cache增长快于pdflush,那么整个系统在40%的时候遇到I/O瓶颈,所有的I/O都要等待cache被pdflush进硬盘后才能重新开始。

对于有高度写入操作的系统
dirty_background_ratio: 主要调整参数。如果需要把缓存持续的而不是一下子大量的写入硬盘,降低这个值。
dirty_ratio: 第二调整参数。

Swapping参数
/proc/sys/vm/swappiness
默认,linux倾向于从物理内存映射到硬盘缓存,保持硬盘缓存尽可能大。未用的页缓存会被放进swap区。
数值为0,将会避免使用swapping
100,将会尽量使用swapping
少用swapping会增加程序的响应速度;多用swapping将会提高系统的可用性。

如果有大量的写操作,为避免I/O的长时间等待,可以设置:
$ echo 5 > /proc/sys/vm/dirty_background_ratio
$ echo 10 > /proc/sys/vm/dirty_ratio

文件系统数据缓冲需要频繁的内存分配。加大保留内存的值能提升系统速度和稳定。小于8G的内存,保留内存为64M,大于8G的设置为256M
$ echo 65536 > /proc/sys/vm/min_free_kbytes


I/O 调度器
cat /sys/block/[disk]/queue/scheler

4中调度算法
noop anticipatory deadline [cfq]
deadline : deadline 算法保证对既定的IO请求以最小的延迟时间。
anticipatory: 有个IO发生后,如果又有进程请求IO,则产生一个默认6ms猜测时间,猜测下一个进程请求IO是干什么。这对于随机读取会造成较大的延时。
数据库应用很糟糕,而对于Web Server等则会表现不错。
cfq: 对每个进程维护一个IO队列,各个进程发来的IO请求会被cfq以轮循方式处理,对每一个IO请求都是公平。适合离散读的应用。
noop: 对所有IO请求都用FIFO队列形式处理。默认IO不会存在性能问题。

改变调度器
$ echo deadline > /sys/block/sdX/queue/scheler
对于数据库服务器,deadline算法是推荐的。

提高调度器请求队列的
$ echo 4096 > /sys/block/sdX/queue/nr_requests

有大量的读请求,默认的请求队列应付不过来,可以提高这个值。缺点是要牺牲一定的内存。
为了增加连续读取的吞吐量,可以增加预读数据量。预读的实际值是自适应的,所以使用一个较高的值,不会降低小型随机存取的性能。
$ echo 4096 > /sys/block/sdX/queue/read_ahead_kb
如果LINUX判断一个进程在顺序读取文件,那么它会提前读取进程所需文件的数据,放在缓存中。服务器遇到磁盘写活动高峰,导致请求处理延迟非常大(超过3秒)。通过调整内核参数,将写活动的高峰分布成频繁的多次写,每次写入的数据比较少。这样可以把尖峰的写操作削平成多次写操作。以这种方式执行的效率比较低,因为内核不太有机会组合写操作。但对于繁忙的服务器,写操作将更一致地进行,并将极大地改进交互式性能。

/proc/sys/vm/dirty_ratio

控制文件系统的写缓冲区的大小,单位是百分比,表示占系统内存的百分比,表示当写缓冲使用到系统内存多少的时候,开始向磁盘写出数据。增大之会使用更多系统内存用于磁盘写缓冲,也可以极大提高系统的写性能。但是,当你需要持续、恒定的写入场合时,应该降低其数值。

/proc/sys/vm/dirty_background_ratio

控制文件系统的pdflush进程,在何时刷新磁盘。单位是百分比,表示系统内存的百分比,pdflush用于将内存中的内容和文件系统进行同步,比如说,当一个文件在内存中进行修改,pdflush负责将它写回硬盘.每当内存中的垃圾页(dirty page)超过10%的时候,pdflush就会将这些页面备份回硬盘.增大之会使用更多系统内存用于磁盘写缓冲,也可以极大提高系统的写性能。但是,当你需要持续、恒定的写入场合时,应该降低其数值:

/proc/sys/vm/dirty_writeback_centisecs

控制内核的脏数据刷新进程pdflush的运行间隔。单位是 1/100 秒。缺省数值是500,也就是 5 秒。如果你的系统是持续地写入动作,那么实际上还是降低这个数值比较好,这样可以把尖峰的写操作削平成多次写操作。
如果你的系统是短期地尖峰式的写操作,并且写入数据不大(几十M/次)且内存有比较多富裕,那么应该增大此数值。
该参数的设置应该小于dirty_expire_centisecs,但也不能太小,太小I/O太频繁,反而
使系统性能下降。具体可能需要在生产环境上测试。据说1:6 (dirty_expire_centisecs : dirty_writeback_centisecs )的比例比较好。

/proc/sys/vm/dirty_expire_centisecs

声明Linux内核写缓冲区里面的数据多“旧”了之后,pdflush进程就开始考虑写到磁盘中去。单位是 1/100秒。缺省是 30000,也就是 30 秒的数据就算旧了,将会刷新磁盘。对于特别重载的写操作来说,这个值适当缩小也是好的,但也不能缩小太多,因为缩小太多也会导致IO提高太快。
当然,如果你的系统内存比较大,并且写入模式是间歇式的,并且每次写入的数据不大(比如几十M),那么这个值还是大些的好。

/proc/sys/vm/vfs_cache_pressure

表示内核回收用于directory和inode cache内存的倾向;缺省值100表示内核将根据pagecache和swapcache,把directory和inode cache保持在一个合理的百分比;降低该值低于100,将导致内核倾向于保留directory和inode cache;增加该值超过100,将导致内核倾向于回收directory和inode cache

/proc/sys/vm/min_free_kbytes

表示强制Linux VM最低保留多少空闲内存(Kbytes)。
缺省设置:724(512M物理内存)

/proc/sys/vm/nr_pdflush_threads

表示当前正在运行的pdflush进程数量,在I/O负载高的情况下,内核会自动增加更多的pdflush进程。

/proc/sys/vm/overcommit_memory

指定了内核针对内存分配的策略,其值可以是0、1、2。

0, 表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用进程。

1, 表示内核允许分配所有的物理内存,而不管当前的内存状态如何。

2, 表示内核允许分配超过所有物理内存和交换空间总和的内存(参照overcommit_ratio)。

缺省设置:0

/proc/sys/vm/overcommit_ratio

如果overcommit_memory=2,可以过载内存的百分比,通过以下公式来计算系统整体可用内存。系统可分配内存=交换空间+物理内存*overcommit_ratio/100
缺省设置:50(%)

/proc/sys/vm/page-cluster

表示在写一次到swap区的时候写入的页面数量,0表示1页,1表示2页,2表示4页。
缺省设置:3(2的3次方,8页)

/proc/sys/vm/swapiness

表示系统进行交换行为的程度,数值(0-100)越高,越可能发生磁盘交换。

更改:
/etc/sysctl.conf

vm.dirty_ratio=40

sysctl -p

查看:

find /proc/sys/vm -name dirty* -print | while read name; do echo $name ;cat ${name}; done

I. 如何测试linux磁盘的读写速度

功能说明:显示与设定硬盘的参数。

语法:hdparm [-CfghiIqtTvyYZ][-a <快取分区>][-A <0或1>][-c ][-d <0或1>][-k <0或1>][-K <0或1>][-m <分区数>][-n <0或1>][-p ][-P <分区数>][-r <0或1>][-S <时间>][-u <0或1>][-W <0或1>][-X <传输模式>][设备]

补充说明:hdparm可检测,显示与设定IDE或SCSI硬盘的参数。

测试各硬盘读取速度判断硬盘故障

在服务端命令窗口中执行如下命令

hdparm -t /dev/hda (IDE硬盘)

hdparm -t /dev/sda (SATA、SCSI、硬RAID卡阵列)

hdparm -t /dev/md0 (软RAID设备)

测试结果在空载情况下应 >40M/s ,在负载情况下平均应 > 20M/s 为正常,如测试结果极低则需要进一步使用硬盘专用检测工具测试是否为硬盘故障。

参数:

-a<快取分区> 设定读取文件时,预先存入块区的分区数,若不加上<快取分区>选项,则显示目前的设定。

-A<0或1> 启动或关闭读取文件时的快取功能。

-c 设定IDE32位I/O模式。

-C 检测IDE硬盘的电源管理模式。

-d<0或1> 设定磁盘的DMA模式。

-f 将内存缓冲区的数据写入硬盘,并清楚缓冲区。

-g 显示硬盘的磁轨,磁头,磁区等参数。

-h 显示帮助。

-i 显示硬盘的硬件规格信息,这些信息是在开机时由硬盘本身所提供。

-I 直接读取硬盘所提供的硬件规格信息。

-k<0或1> 重设硬盘时,保留-dmu参数的设定。

-K<0或1> 重设硬盘时,保留-APSWXZ参数的设定。

-m<磁区数> 设定硬盘多重分区存取的分区数。

-n<0或1> 忽略硬盘写入时所发生的错误。

-p 设定硬盘的PIO模式。

-P<磁区数> 设定硬盘内部快取的分区数。

-q 在执行后续的参数时,不在屏幕上显示任何信息。

-r<0或1> 设定硬盘的读写模式。

-S<时间> 设定硬盘进入省电模式前的等待时间。

-t 评估硬盘的读取效率。

-T 平谷硬盘快取的读取效率。

-u<0或1> 在硬盘存取时,允许其他中断要求同时执行。

-v 显示硬盘的相关设定。

-W<0或1> 设定硬盘的写入快取。

-X<传输模式> 设定硬盘的传输模式。

-y 使IDE硬盘进入省电模式。

-Y 使IDE硬盘进入睡眠模式。

-Z 关闭某些Seagate硬盘的自动省电功能。

热点内容
android相机闪光灯 发布:2025-05-16 14:35:49 浏览:258
服务器无法通过ip访问 发布:2025-05-16 14:26:13 浏览:540
网吧u盘拒绝访问 发布:2025-05-16 14:13:50 浏览:260
无线网检查网络配置是怎么回事 发布:2025-05-16 14:04:03 浏览:220
网络爬虫python代码 发布:2025-05-16 14:03:26 浏览:516
汽车小组件怎么弄到安卓桌面 发布:2025-05-16 13:51:12 浏览:220
linuxg编译器下载 发布:2025-05-16 13:50:58 浏览:776
centosc编译器 发布:2025-05-16 13:50:17 浏览:948
安卓手机如何变换桌面 发布:2025-05-16 13:39:33 浏览:515
sql存储过程命令 发布:2025-05-16 13:17:54 浏览:146