英文原文: Paging, Memory and I/O Delays
中文原文: 分页、内存和 I/O 延迟
编者注:这是讨论 AIX 调优的两篇系列文章的第一篇。第一部分讨论分页、内存和 I/O 延迟,第二部分主要关注磁盘 I/O 和网络。
几年前我写了一篇关于 AIX 调优的文章,现在 AIX 7 出现了,所以有必要重新审视需要在 AIX 系统上执行的基本调优措施。已经发布的许多技术级别 (TL) 和一些建议可能会改变。在本文中,我将提供与 AIX 5.3、6.1 和 7 中的可调项相关的 AIX 调优信息。
我主要关注 I/O、内存和网络。在默认情况下,AIX 6 和 7 在内存调优方面做得相当好,只需要做几个小调整。但是,AIX 5.3 在这个方面需要更多调优。图 1 给出不同的可调项及其默认设置。第四栏是对于这三个版本最新的 TL 的这些设置的推荐值。
图 1.不同可调项及其默认设置
请记住一个要点:在安装全新的 AIX 6 或 7 时,会自动地设置新的内存可调项默认值。如果是从 AIX 5.3 迁移系统,那么在 AIX 5.3 中设置的所有可调项会随同迁移。在执行迁移之前,建议记录已经修改的所有可调项(取得 /etc/tunables/nextboot 的拷贝),然后把可调项恢复为默认值。在迁移之后,检查 nextboot 并确保其中没有任何内容。现在,讨论需要为 AIX 6 或 7 修改的可调项。
分页空间
最佳实践建议在不同的不太忙的硬盘驱动器 (hdisk) 上配置多个相同大小的分页空间。所有分页空间应该建立镜像,或者放在 RAID(1 或 5)存储区域网络 (SAN) 上。除非数据库需要,分页空间一般不需要达到内存量的两倍。我曾经在 AIX 上用 250 GB 内存和三个 24 GB 的分页空间运行大型 Oracle 数据库。关键是使用并发 I/O (CIO) 等技术避免分页,提供分页空间是为了以防万一需要分页。
在默认情况下,AIX 在 rootvg 中创建一个分页空间 (hd6),它太小了。如果 rootvg 被镜像,那么这个分页空间也会被镜像。我通常使用几个来自 SAN 的自定义大小的逻辑单元号 (LUN) 添加额外的分页空间。不要在当前 rootvg 分页空间所在的内部磁盘(或 SAN LUN)中添加分页空间。在相同的 hdisk 上配置多个分页空间会降低分页速度。
在构建虚拟 I/O 服务器 (VIOS) 时,会自动地配置两个分页空间,它们都在 hdisk0 上。hd6 是 512 MB,paging00 是 1,024 MB。我总是关闭并删除 paging00,然后把 hd6 增加到 4,096 MB。正如前面提到的,在相同的 hdisk 上配置两个分页空间是不好的做法。
页面偷取方法
在 AIX 5.3 的默认设置中,page_steal_method 设置为 0。这影响最近最少使用守护进程 (least recently used daemon LRUD) 扫描可释放页面的方式。设置 lru_file_repage=0 意味着强烈建议 LRUD 不偷取可执行代码的页面,总是尝试偷取文件系统(持久)页面。偷取持久页面比偷取工作存储页面代价低得多,因为后者会导致换出/换入页面。假设使用 100 GB 内存和五个内存池,内存会划分为五个大约 20 GB 的池,每个 LRUD 处理大约 20 GB(这是非常简化的描述)。根据图 2 中的 numclient 值,可以假设大约 45% 的内存用于文件系统,即大约 45 GB;另外的 55 GB 是工作存储。
图 2.vmstat 输出
如果设置 page_steal_method=0,在寻找空闲页面时 LRUD 不得不扫描它们控制的所有内存页面,尽管很可能只释放持久页面。如果设置 page_steal_method=1,LRUD 会改用基于列表的页面管理方案。这意味着 LRUD 把内存划分为一个持久页面列表和一个工作存储页面列表。当 LRUD 搜索可从文件系统缓存中释放的页面时,它们只搜索持久页面列表。对于图 2 中的示例,这应该会把扫描可释放页面的速度提高一倍多,这会降低开销。在“vmstat -I 2 2”的输出中可以看到扫描速度和空闲率。
内存和 I/O 缓冲区
在探索最佳内存设置时,有几个命令很有用,尤其是 vmstat -v。图 2 显示 vmstat -v 的部分输出。
在内存中有两类页面:持久页面(与文件系统关联)和工作存储或者说动态页面(包含可执行代码及其工作区)。如果偷取持久页面,就不需要换出页 面,除非页面被修改过(在这种情况下,把它写回文件系统)。如果偷取工作存储页面,就必须先把它写到分页数据集,下一次需要它时再从分页数据集读回来;这 是开销很大的操作。
设置 minperm%=3 和 lru_file_repage=0 意味着,强烈建议 LRUD 在文件系统正在使用超过 3% 的内存的情况下总是尝试偷取持久页面。LRUD 在大多数情况下忽略最大设置,除非是要限制文件系统可以使用的内存量。maxperm% 指所有持久页面,包括日志文件系统 (JFS)、网络文件服务器 (NFS)、Veritas File System (VxFS) 和增强型日志文件系统 (JFS2)。maxclient% 是其中的子集,只包括 NFS 和 JFS2 文件系统。maxperm% 是软限制,maxclient% 是硬限制(而且不能超过 maxperm%)。因为新的文件系统通常是 JFS2,应该把最大设置保持在 90%,以免意外限制文件系统使用的内存量。
在 vmstat -v 的输出中,有几个指标有助于判断要调整哪些值。在图 2 中,可以看到 numperm 和 numclient 是相同的,都是 45.1%。这意味着 NFS 和/或 JFS2 文件系统正在使用 45.1% 的内存。如果这是一个数据库系统,我会检查是否正在使用 CIO,因为它可以消除双重页面存储和处理,从而降低内存和 CPU 使用量。
在构建 I/O 请求时,逻辑卷管理程序 (LVM) 请求一个 pbuf,这是固定的内存缓冲区,它保存 LVM 层中的 I/O 请求。然后把 I/O 放到另一个称为 fsbuf 的固定内存缓冲区中。有三种 fsbuf:文件系统 fsbuf(供 JFS 文件系统使用)、客户机 fsbuf(由 NFS 和 VxFS 使用)和外部分页程序 fsbuf(由 JFS2 文件系统使用)。另外,还有 psbuf,它们是对分页空间的 I/O 请求所用的固定内存缓冲区。
在图 2 中,vmstat -v 命令显示的值是自引导以来的平均值。因为服务器可能很长时间不重新引导,所以一定要间隔几小时取两个快照,检查这些值是否有变化。在这里,它们快速增长,需要调优。
I/O 延迟
在 vmstat -v 的输出中,有几个表示存在 I/O 延迟的迹象。I/O 延迟会影响性能和内存。下面介绍识别 I/O 阻塞的原因和解决问题的一些常用方法。
1468217 pending disk I/Os blocked with no pbuf 这一行清楚地说明一个或多个未完成的磁盘 I/O 在试图获得固定内存缓冲区(具体地说是 pbuf)时被阻塞了。这表明在 LVM 层上出现排队。因为 AIX 无法获得缓冲区以存储 I/O 请求的信息,导致请求被延迟。使用下面的 lvmo 命令应该可以解决这个问题。
图 3. lvmo –a 输出
图 3 给出 lvmo -a 命令的输出,它表明 datavg 的 pbuf 不足(查看 pervg_blocked_io_count)。应该只对正在使用的这个卷组纠正此问题,因为这些是固定的内存缓冲区,把它们设置得过大是没有意义的:
lvmo -v datavg -o pv_pbuf_count=2048
|
通常,我会检查当前设置,如果它是 512 或 1024,那么在需要增加时把它提高一倍。
11173706 paging space I/Os blocked with no psbuf 。lvmo 命令还表明 rootvg 中的 pbuf 有问题。看一下 vmstat -v 的输出,会发现有大量分页空间 I/O 请求由于无法获得 psbuf 被阻塞。psbuf 用于在虚拟内存管理程序 (VMM) 层上保存 I/O 请求,缺少 psbuf 会严重影响性能。它也表明正在执行分页,这是问题。最好的解决方法是停止导致分页的东西。另一种方法是增加分页空间。
39943187 file system I/Os blocked with no fsbuf 。在默认情况下,系统只为 JFS 文件系统提供 196 个 fsbuf。在 JFS2 之前,需要大大提高这个限制(常常增加到 2048),从而确保 JFS I/O 请求不会由于缺少 fsbuf 在文件系统层上被阻塞。即使在系统中没有 JFS 的情况下,有时候也会见到阻塞的 I/O 请求达到 2,000 个左右。但是,上面的数字表明在系统中有大量 JFS I/O 被阻塞,在这种情况下我会调整 JFS 并尝试和计划转移到 JFS2;在 JFS2 中,可以对数据库使用 CIO 等技术。在 AIX 6 和 7 中,numfsbufs 现在是 ioo 命令中的受限制参数。
238 client file system I/Os blocked with no fsbuf 。NFS 和 VxFS 都是客户机文件系统,这一行是指在文件系统层上由于缺少客户机 fsbuf 被阻塞的 I/O 数量。要想解决此问题,需要进一步研究,查明这是 VxFS 问题还是 NFS 问题。
1996487 external pager file system I/Os blocked with no fsbuf 。JFS2 是外部分页程序客户机文件系统,这一行是指在文件系统层上由于缺少固定内存 fsbuf 被阻塞的 I/O 数量。在以前,调整 j2_nBufferPerPagerDevice 可以解决此问题。现在,通过使用 ioo 命令提高 j2_dynamicBufferPreallocation 来纠正 JFS2 缓冲区。默认设置是 16,在尝试减少这些 I/O 阻塞时,我通常会慢慢提高它(试一下 32)。
其他内存可调项
vmo 命令中的 minfree 和 maxfree 可调项也会影响分页。它们现在是针对各个内存池设置的,可以使用几个命令之一查明有多少个内存池。根据版本或 TL 不同,应该使用 vmo -a、vmo -a -F(对于 6.1)或 vmstat -v 获取此信息。
如果这些值设置得过大,可能会看到 vmstat 输出中“fre”栏中的值很高,而同时却在执行分页。默认设置是 960 和 1,088;根据其他设置,我通常使用 1,000 和 1,200。minfree 和 maxfree 的正确计算方法取决于 j2MaxPageReadAhead 的设置、逻辑 CPU 数量和内存池数量。
在这里,假设 vmstat 显示有 64 个逻辑 CPU (lcpu) 和 10 个内存池。当前设置为默认值,即 minfree=960 和 maxfree=1088。J2_maxPageReadahead=128。对于这些设置,计算过程如下:
Min=max(960,((120*lcpu)/mempools)
Max=minfree + (max(maxpgahead,j2MaxPageReadahead)*lcpu)/mempools)
lcpu 为 64,mempools 为 10,j2_MaxPageReadahead 为 128,因此:
Min=max(960,((120*64)/10) = max(960,768)=960
Max=960+((max(8,128)*64)/10) = 960+819=1780
我可能会把结果向上取整到 2,048。每当修改 j2_maxPageReadahead 时,应该重新计算 maxfree。在这里,我保持 minfree 为 960,但是把 maxfree 提高到 2,048。
更多调优技巧
现在,您应该掌握了如何探测和解决与分页、内存和 I/O 延迟相关的 AIX 性能问题。下一部分,我将讨论磁盘 I/O 和网络。
相关推荐
免费的防止锁屏小软件,可用于域统一管控下的锁屏机制
内容概要:本文介绍了一段简单的Python代码,用于在控制台中输出一棵带有装饰的圣诞树。具体介绍了代码结构与逻辑,包括如何计算并输出树形的各层,如何加入装饰元素以及打印树干。还提供了示例装饰字典,允许用户自定义圣诞树装饰位置。 适用人群:所有对Python编程有一定了解的程序员,尤其是想要学习控制台图形输出的开发者。 使用场景及目标:适用于想要掌握如何使用Python代码创建控制台艺术,特别是对于想要增加节日氛围的小项目。目标是帮助开发者理解和实现基本的字符串操作与格式化技巧,同时享受创造乐趣。 其他说明:本示例不仅有助于初学者理解基本的字符串处理和循环机制,而且还能激发学习者的编程兴趣,通过调整装饰物的位置和树的大小,可以让输出更加个性化和丰富。
白色大气风格的设计师作品模板下载.zip
电商平台开发需求文档.doc
白色简洁风格的办公室室内设计门户网站模板下载.zip
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于计算机科学与技术等相关专业,更为适合;
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于计算机科学与技术等相关专业,更为适合;
课程设计---基于Android stduio的手机银行开发与设计 现今,手机已经成为人们生活和工作的必备品,在手机各种系统中Android系统是人们用的比较多的系统。手机银行也是人们在生活中比较常用的功能之一。本项目基于Android的手机银行开发与设计主要功能有登录注册、转账、转账记录查询、修改及查询个人信息、添加好友、向好友转账的功能。本项目主要用Android Studio 开发,数据库SQLite数据库,和夜神模拟器。 基于Android stduio的手机银行开发与设计项目主要功能有登录注册、转账、转账记录查询、修改及查询个人信息、添加好友、向好友转账的功能。。内容来源于网络分享,如有侵权请联系我删除。另外如果没有积分的同学需要下载,请私信我。
白色大气风格的婚礼现场倒计时模板下载.zip
轮式移动机器人轨迹跟踪的MATHLAB程序,运用运动学和动力学模型的双闭环控制,借鉴自抗扰控制技术结合了非线性ESO,跟踪效果良好,控制和抗扰效果较优,可分享控制结构图。 这段程序主要是一个小车的动力学仿真程序,用于模拟小车在参考轨迹下的运动。下面我将对程序进行详细的分析解释。 首先,程序开始时使用`clear`、`clc`和`close all`命令来清除工作空间、命令窗口和图形窗口中的内容。 接下来,程序定义了一系列参数和变量,用于设置仿真的参数和存储仿真过程中的数据。这些参数包括小车的质量、车宽、驱动轮半径等,还有参考轨迹的振幅和频率,仿真步长,仿真时间等。 然后,程序定义了一些元胞数组,用于存储不同阶段的数据。这些数组包括参考轨迹位姿、真实运动轨迹位姿、参考轨迹一阶导数、参考轨迹速度、期望速度、真实速度、控制器输出的控制力矩、控制输入、期望速度与真实速度误差、摩擦值、外界扰动值、总扰动、位姿跟踪误差、扰动观测值等。 接下来,程序给这些变量赋初始值,包括小车的初始位姿和速度,初始速度,期望初始速度,控制器输出的控制力矩,扰动观测值等。 然后,程序进入一个循环,仿真时间从
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于计算机科学与技术等相关专业,更为适合;
这是一份来自开源的全球新冠肺炎数据集,每日时间序列汇总,包括确诊、死亡和治愈。所有数据来自每日病例报告。数据持续更新中。 由于数据集中没有美国的治愈数据,所以在统计全球的现有确诊人员和治愈率的时候会有很大误差,代码里面先不做这个处理,期待数据集的完善。
白色大气风格的时装设计公司模板下载.zip
白色大气风格的商务会议活动模板下载.rar
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于计算机科学与技术等相关专业,更为适合;
本次开发一套基于微信小程序的生签到系统,有管理员,教师,学生三个角色。管理员功能有个人中心,学生管理,教师管理,签到管理,学生签到管理,班课信息管理,加入班课管理,请假信息管理,审批信息管理,销假信息管理,系统管理。教师和学生都可以在微信端注册和登录,教师可以管理签到信息,管理班课信息,审批请假信息,查看学生签到,查看加入班级,查看审批信息和销假信息。学生可以查看教师发布的学生签到信息,可以自己选择加入班课信息,添加请假信息,查看审批信息,进行销假操作。基于微信小程序的生签到系统服务端用Java开发的网站后台,接收并且处理微信小程序端传入的json数据,数据库用到了MySQL数据库作为数据的存储。
**脚本描述**:本脚本围绕着新年这个充满欢乐与希望的时刻展开。故事发生在一个热闹的小镇,主要角色有在外打拼多年的年轻人小李,他的父母,以及一群充满活力的小镇居民。新年将至,小李踏上回家的旅途,满心期待与家人团聚。在小镇上,大家都在积极筹备新年,贴春联、挂灯笼、准备年夜饭。小李与家人重逢后,一起分享着彼此的故事和喜悦。同时,他们也和小镇居民一起举办了热闹的庆祝活动,在欢声笑语中迎接新年的到来。这个新年不仅让小李重新感受到了家的温暖,也让他对未来充满了信心和希望,他决定和小镇一起成长发展。通过这个脚本,展现新年带给人们的幸福、温暖和对未来的憧憬。
Python 自动办公- Python分类汇总278张Excel表中的数据
白色创意风格的用户信息登记源码下载.zip
白色大气的音乐专辑博客整站网站模板下载.zip