关于AIX挂载NFS写入效率低效的解决方法

NFS提供的服务

Mount: 通过在服务端启用/usr/sbin/rpc.mountd伺服进程,在客户端使用mount命令,mounted伺服进程是一个RPC来回应客户端的请求

Remote File access:通过在服务端启用/usr/sbin/nfsd和在客户端启用/usr/sbin/biod,来出来客户端对文件的请求。但客户端一个用户要来读或写一个在服务器端的文件时,biod伺服进程发送这个请求到服务端。

Boot parameters: 通过在服务端启用/usr/sbin/rpc.bootparamd伺服进程来提供无盘SunOS客户端的启动参数。

PC authentication: 通过在服务端启动/usr/sbin/rpc.pcnfsd来提供PC-NFS的用户认证服务

一个NFS服务是无状态的(stateless),也就是说,NFS的传输是原子级的,一个单一的NFS传输对应了一个单一完整的文件操作。

背景:

Linux是NFS的Server端,AIX是NFS的Client端(此外,有一个Linux也作为Client端对比测试)。

1.NFS对应的底层设备是闪存卡,本地测试I/O写性能可达2GB/s;

2.服务器是千兆网卡,FTP测试传输可达到100MB/s;

3.AIX成功挂载NFS,dd测试写入速度只有10MB/s;

4.Linux成功挂载NFS,同样dd测试写入速度可达到100MB/s;

说明:以上速度主要是体现数量级的差异,实际测试会有少许偏差。

具体环境:

  • NFS Server:RHEL 6.8
  • NFS Client:AIX 6.1、RHEL 6.8

挂载参数均依据MOS文档配置:

Mount Options for Oracle files for RAC databases and Clusterware when used with NFS on NAS devices (文档 ID 359515.1)

根据本次实际需求,提炼一下需要配置的参数:

--MOS建议(AIX):
cio,rw,bg,hard,nointr,rsize=32768,
wsize=32768,proto=tcp,noac,
vers=3,timeo=600

--MOS建议(Linux):
rw,bg,hard,nointr,rsize=32768,
wsize=32768,tcp,actimeo=0,
vers=3,timeo=600

AIX NFS的挂载参数:

mount -o cio,rw,bg,hard,nointr,rsize=32768,wsize=32768,proto=tcp,noac,vers=3,timeo=600 10.xx.xx.212:/xtts /xtts

直接挂载提示如下错误:

# mount -o cio,rw,bg,hard,nointr,rsize=32768,wsize=32768,proto=tcp,noac,vers=3,timeo=600 10.xx.xx.212:/xtts /xtts
mount: 1831-008 giving up on:
10.xx.xx.212:/xtts
vmount: Operation not permitted.

查资料确认AIX需要额外设置网络参数:

# nfso -p -o nfs_use_reserved_ports=1

再次尝试挂载成功:

mount -o cio,rw,bg,hard,nointr,rsize=32768,wsize=32768,proto=tcp,noac,vers=3,timeo=600 10.xx.xx.212:/xtts /xtts

可dd测试的速度非常不理想,只有10MB/s:

--test performance; AIX NFS
# time dd if=/dev/zero of=/xtts/test-write bs=8192 count=102400
102400+0 records in.
102400+0 records out.

real 0m43.20s
user 0m0.79s
sys  0m5.28s
# time dd if=/xtts/test-write of=/dev/null bs=8192 count=102400
102400+0 records in.
102400+0 records out.

real 0m30.86s
user 0m0.84s
sys  0m5.88s

所有参数都是根据实际需求,按照MOS的建议设置的。有什么问题吗?

  • 尝试去掉cio参数测试,发现结果几乎没变化;
  • 尝试去掉hard参数测试,发现结果几乎没变化;
  • 尝试协议从tcp改为udp测试,发现结果几乎没变化;

几乎能试的参数都试了,结果都不理想,马上都准备协调资源找主机工程师定位了。

此时,灵感乍现,突然想到一个可能性。有没有可能AIX上的NFS限制了单个进程的I/O吞吐能力?带着这个猜测,进行并行测试:

开5个窗口同时开始dd:

time dd if=/dev/zero of=/xtts/test-write1 bs=8192 count=102400
time dd if=/dev/zero of=/xtts/test-write2 bs=8192 count=102400
time dd if=/dev/zero of=/xtts/test-write3 bs=8192 count=102400
time dd if=/dev/zero of=/xtts/test-write4 bs=8192 count=102400
time dd if=/dev/zero of=/xtts/test-write5 bs=8192 count=102400

惊喜的发现5个窗口都在55s同时完成,这相当于800M*5=4000M,都在55s完成,每秒达到72MB/s,通过这种并行的方式已满足提升效率的需求。

而且看起来只要继续尝试多开窗口测试,基本也能达到网络上限100MB/s(千兆网卡限制)。

附:测试同样的NFS挂载到另一台Linux服务器上,无需并行,dd写入速度就可达100MB/s,这也是之前影响自己思考的因素。
Linux NFS的挂载参数:

# mount -o rw,bg,hard,nointr,rsize=32768,wsize=32768,tcp,actimeo=0,vers=3,timeo=600 10.xx.xx.212:/xtts /xtts

Linux NFS的测试结果:

--test performance; Linux NFS
# dd if=/dev/zero of=/xtts/test-write bs=8192 count=102400
102400+0 records in
102400+0 records out
838860800 bytes (839 MB) copied, 6.02451 s, 139 MB/s
# dd if=/xtts/test-write of=/dev/null bs=8192 count=102400
102400+0 records in
102400+0 records out
838860800 bytes (839 MB) copied, 8.55925 s, 98.0 MB/s

对AIX不熟悉,没有进一步深究底层原理。开始解决问题过程中的主要困惑在于,为何Linux作为client时,无需并行就可以dd测试达到100MB/s的速度,使自己陷入了固有思维中。从这件事情得到的思考是:有些时候,要跳出常规思维去思考方可有所突破。

最后把NFS Server端本地测试的结果也贴出来,感叹下闪存卡的I/O能力:

# dd if=/dev/zero of=/dev/test-write2 bs=8192 count=1024000
1024000+0 records in
1024000+0 records out
8388608000 bytes (8.4 GB) copied, 4.19912 s, 2.0 GB/s

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对我们的支持。

(0)

相关推荐

  • MacOS无法挂载NFS Operation not permitted错误解决办法

    MacOS无法挂载NFS Operation not permitted错误解决办法 新装的Openfiler开启nfs之后,用Macbook的图形界面通过 Finder-->前往-->连接服务器 无法连接. 先在服务器上自己挂自己试了一下,没有问题,说明问题可能在Macbook客户端上. 在Macbook上打开终端: sh-3.2# showmount -e 10.0.0.55 Exports list on 10.0.0.55: /home 10.0.0.0/24 sh-3.2# moun

  • Centos7安装配置NFS服务和挂载教程(推荐)

    现在有3台服务器 s1(主),s2(从), s3(从)需要实现文件实时同步,我们可以安装Nfs服务端和客户端来实现! 一.安装 NFS 服务器所需的软件包: yum install -y nfs-utils 二.编辑exports文件,添加从机 vim /etc/exports /home/nfs/ 192.168.248.0/24(rw,sync,fsid=0) 同192.168.248.0/24一个网络号的主机可以挂载NFS服务器上的/home/nfs/目录到自己的文件系统中 rw表示可读写

  • linux系统之间通过nfs网络文件系统挂载设置方法

    NFS简介 NFS是Network File System的简写,即网络文件系统. 网络文件系统是FreeBSD支持的文件系统中的一种,也被称为NFS. NFS允许一个系统在网络上与他人共享目录和文件.通过使用NFS,用户和程序可以像访问本地文件一样访问远端系统上的文件. NFS好处 以下是NFS最显而易见的好处: 1.本地工作站使用更少的磁盘空间,因为通常的数据可以存放在一台机器上而且可以通过网络访问到. 2.用户不必在每个网络上机器里头都有一个home目录.Home目录 可以被放在NFS服务

  • 关于AIX挂载NFS写入效率低效的解决方法

    NFS提供的服务 Mount: 通过在服务端启用/usr/sbin/rpc.mountd伺服进程,在客户端使用mount命令,mounted伺服进程是一个RPC来回应客户端的请求 Remote File access:通过在服务端启用/usr/sbin/nfsd和在客户端启用/usr/sbin/biod,来出来客户端对文件的请求.但客户端一个用户要来读或写一个在服务器端的文件时,biod伺服进程发送这个请求到服务端. Boot parameters: 通过在服务端启用/usr/sbin/rpc.

  • easyui datagrid 大数据加载效率慢,优化解决方法(推荐)

    在使用easyui datagrid途中发现加载数据的效率真的不是一般的差.经测试IE8加载300条数据就感觉明显的慢了,加载2000条数据就另人崩溃用时差不多60秒,就算在google浏览器测试结果也快不了几秒. 平时听闻easyui datagrid效率底下,自己测试才发现真是使人无法忍受. 笔者只好百度,google解决方法,发现一篇文章说改 //1.3.3版本是这样的,其它版本也是这句代码 $(_1e0).html(_1e4.join("")); 改为: $(_1e0)[0].

  • C++操作MySQL大量数据插入效率低下的解决方法

    通常来说C++操作MySQL的时候,往Mysql中插入10000条简单数据,速度非常缓慢,居然要5分钟左右, 而打开事务的话,一秒不到就搞定了! 具体实现代码如下: #include <iostream> #include <winsock2.h> #include <string> #include "mysql.h" #pragma comment(lib, "libmysql.lib"); using namespace s

  • php写入txt乱码的解决方法

    相信很多人在使用PHP的过程中都遇到过生成文件乱码的情况,不论是使用fwrite还是file_put_contents写入.可能你会先尝试从编码入手尝试解决,但最终的结果往往是不理想的,尽管我们都将其转换为了UTF-8编码了... 那么究其根本原因是什么呢?就是缺少头部BOM(当然,这里指的肯定不是Js的Bom). BOM 既然提到了BOM,那么可能有的同学不太了解这个家伙,这里我简单说一下,老鸟可以跳过.在Windows下用记事本之类的程序将文本文件保存为UTF-8格式时,记事本会在文件头前面

  • Docker容器中挂载NFS共享目录的实现

    之前在https://www.jb51.net/article/205922.htm 介绍过使用Dockerfile构建ubuntu 16.04镜像,并在容器中编译执行Messy_Test项目.这里介绍下如何在容器中挂载NFS服务器上的共享目录. Dockerfile内容如下: FROM ubuntu:16.04 LABEL maintainer="FengBingchun fengbingchun@163.com" \ version="1.0" \ descri

  • Python中Scrapy+adbapi提高数据库写入效率实现

    目录 一:twisted中的adbapi 1.1 两个主要方法 1.2 使用实例 二:结合scrapy中的pipelines 一:twisted中的adbapi ​       数据库pymysql的commit()和execute()在提交数据时,都是同步提交至数据库,由于scrapy框架数据的解析和异步多线程的,所以scrapy的数据解析速度,要远高于数据的写入数据库的速度.如果数据写入过慢,会造成数据库写入的阻塞,影响数据库写入的效率. 使用twisted异步IO框架,实现数据的异步写入,

  • Linux NFS服务器的安装与配置方法(图文详解)

    一.NFS服务简介 NFS 是Network File System的缩写,即网络文件系统.一种使用于分散式文件系统的协定,由Sun公司开发,于1984年向外公布.功能是通过网络让不同的机器.不同的操作系统能够彼此分享个别的数据,让应用程序在客户端通过网络访问位于服务器磁盘中的数据,是在类Unix系统间实现磁盘文件共享的一种方法. NFS 的基本原则是"容许不同的客户端及服务端通过一组RPC分享相同的文件系统",它是独立于操作系统,容许不同硬件及操作系统的系统共同进行文件的分享. NF

  • IOS 中NSUserDefaults读取和写入自定义对象的实现方法

    IOS 中NSUserDefaults读取和写入自定义对象的实现方法 NSUserDefaults可以存取一些短小的信息. 比如存入再读出一个字符串到NSUserDefaults: NSString *string = [NSString stringWithString @"hahaha"]; NSUserDefaults *ud = [NSUserDefaults standardUserDefaults]; [ud setObject:string forKey:@"m

  • python获得linux下所有挂载点(mount points)的方法

    本文实例讲述了python获得linux下所有挂载点(mount points)的方法.分享给大家供大家参考.具体实现方法如下: # execute the external "mount" command # and parse the output. import commands mount = commands.getoutput('mount -v') lines = mount.split('\n') points = map(lambda line: line.split

随机推荐