关于本系列
本系列共有三篇文章(见 参考资料),介绍 AIX? 磁盘和 I/O 子系统,重点关注在优化磁盘 I/O 性能时遇到的各种挑战。尽管磁盘调优很可能没有 CPU 或者内存优化那么激动人心,但它是优化服务器性能的关键方面。事实上,部分原因是因为磁盘 I/O 是最薄弱的子系统环节,与任何其他子系统相比,可以通过更多的措施提高磁盘 I/O 性能。
简介
本系列的 第 1 部分 和 第 2 部分 讨论了设计系统架构的重要性,它对整体系统性能的影响,以及一个新的 I/O 优化工具 lvmo,可以使用该工具对逻辑卷进行调优。在这个部分中,将研究如何使用 ioo 命令优化系统,该命令可以对大多数 I/O 调优参数进行配置,显示所有 I/O 调优参数的当前值或下一次启动值。还将学习如何以及何时使用 filemon 和 fileplace 工具。通过使用增强型日志文件系统(AIX 中的默认文件系统),提高整体文件系统性能、优化文件系统以及让 JFS2 产生最好的性能,这些都是调优技术的重要部分。甚至还将研究一些可能影响性能的文件系统属性,比如顺序访问和随机访问。
文件系统概述
本节讨论 JFS2、文件系统性能以及对 JFS 所做的特定性能改进。正如您所知道的,在 AIX 中有两种类型的内核。它们是 32 位内核和 64 位内核。尽管它们共享一些共同的库、大多数的命令及实用工具,但了解它们的区别以及内核与整体性能调优之间的关系是非常重要的。JFS2 针对 64 位内核进行了优化,而 JFS 则针对 32 位内核进行了优化。尽管日志文件系统可以提供更高的安全性,但在以前往往会带来性能方面的开销。在更重视性能(以牺牲可用性为代价)的情况下,可能会禁用元数据日志记录功能以提高 JFS 的性能。对于 JFS2,也可以通过禁用日志记录(在 AIX 6.1 和更高版本中)帮助提高性能。可以在挂载文件系统时禁用日志记录功能,这意味着不需要担心修改或重新配置文件系统。只需修改挂载选项。例如,使用以下命令禁用文件系统上的日志记录功能:mount -i log=NULL /database。
尽管 JFS2 为提高元数据操作(即通常由日志记录框架处理的那些操作)的性能做了优化,但是对于文件修改和创建/删除操作比例很高的文件系统,关闭日志记录功能仍然会显著提高性能。例如,对于开发文件系统,可能会看到性能提升。对于使用比较静态的文件的数据库,性能改进可能不太显著。
但是,对于使用压缩功能,应该谨慎。尽管压缩可以节省磁盘空间(因为对磁盘物理地读写的数据更少,还会减少磁盘读写操作),但是会加重系统的 CPU 负载,实际上会降低性能。
增强的 JFS2 在执行索引节点搜索时使用二叉树表示形式,与 JFS 使用的线性方法相比,这种方法要好得多。另外,在创建文件系统的时候不再需要分配索引节点,因为现在它们是由 JFS2 动态分配的(这意味着将不会耗尽索引节点)。
尽管在本系列的第 1 部分中已经介绍过并发 I/O,但在这里有必要再次提及这个主题。并发 I/O 的实现允许多个线程并发地对同一个文件进行读写数据的操作。这是由于在实现 JFS2 时采用了写独占 (write-exclusive) 索引节点锁。这种方式允许多个用户同时读取同一个文件,当多个用户需要读取相同的数据文件时,这能够显著地提高性能。要想启用并发 I/O,只需使用合适的标志挂载文件系统(见 清单 1)。建议在使用 Oracle 等数据库时考虑使用并发 I/O。
清单 1. 启用并发 I/Oroot@lpar29p682e_pub[/] mount -o cio /test root@lpar29p682e_pub[/] > df -k /test Filesystem 1024-blocks Free %Used Iused %Iused Mounted on /dev/fslv00 131072 130724 1% 4 1% /test
表 1 说明 JFS2 的各种增强功能,以及它们与系统性能之间的关系。在优化 I/O 系统时,许多可调项本身(稍后将深入讨论)也存在差别,这取决于正在使用的是 JFS 还是 JFS2,了解这一点也非常重要。
表 1. JFS2 的增强功能功能 | JFS | JFS2 |
---|---|---|
压缩 | 有 | 无 |
配额 | 有 | 有 |
延迟的更新 | 有 | 无 |
直接 I/O 支持 | 有 | 有 |
优化 | 32 位 | 64 位 |
最大文件系统大小 | 1 TB | 4 PB |
最大文件大小 | 64 GB | 4 PB |
索引节点的数量 | 在创建文件系统时确定 | 动态 |
大文件支持 | 作为挂载选项 | 默认 |
联机碎片整理 | 有 | 有 |
Namefs | 有 | 有 |
DMAPI | 无 | 有 |
filemon 和 fileplace
本节介绍两个重要的 I/O 工具 filemon 和 fileplace,并讨论如何在日常系统管理工作中使用它们。
filemon 使用一种跟踪设施来报告物理和逻辑存储(包括实际文件)的 I/O 活动。按照在运行跟踪时指定的时间间隔,对 I/O 活动进行监视。它报告文件系统的所有层的使用率,包括逻辑卷管理器 (LVM)、虚拟内存和物理磁盘层。如果不使用任何标志,那么在要监视的应用程序或者系统命令运行时,它在后台运行。跟踪自动启动,直到停止它为止。此时,命令生成 I/O 活动报告,然后退出。它还可以处理跟踪设施已经记录的跟踪文件。然后,可以根据此文件生成报告。因为发送到标准输出的报告常常会在屏幕上一滚而过,所以建议使用 -o 选项将输出写到一个文件中(见 清单 2)。
清单 2. 使用带 -o 选项的 filemonl488pp065_pub[/] > filemon -o dbmon.out -O all Run trcstop command to signal end of trace. Thu Aug 12 09:07:06 2010 System: AIX 7.1 Node: l488pp065_pub Machine: 00F604884C00 l488pp065_pub[/] > trcstop l488pp065_pub[/] > cat dbmon.out Thu Aug 12 09:10:09 2010 System: AIX 7.1 Node: l488pp065_pub Machine: 00F604884C00 Cpu utilization: 72.8% Cpu allocation: 100.0% 21947755 events were lost. Reported data may have inconsistencies or errors. Most Active Files ------------------------------------------------------------------------ #MBs #opns #rds #wrs file volume:inode ------------------------------------------------------------------------ 0.4 1 101 0 unix /dev/hd2:82241 0.0 9 10 0 vfs /dev/hd4:9641 0.0 4 6 1 db.sql 0.0 3 6 2 ksh.cat /dev/hd2:111192 0.0 1 2 0 cmdtrace.cat /dev/hd2:110757 0.0 45 1 0 null 0.0 1 1 0 dd.cat /dev/hd2:110827 0.0 9 2 0 SWservAt /dev/hd4:9156 0.0 1 0 3 db2.sql 0.0 9 2 0 SWservAt.vc /dev/hd4:9157 Most Active Segments ------------------------------------------------------------------------ #MBs #rpgs #wpgs segid segtype volume:inode ------------------------------------------------------------------------ 0.1 2 13 8359ba client Most Active Logical Volumes ------------------------------------------------------------------------ util #rblk #wblk KB/s volume description ------------------------------------------------------------------------ 0.04 0 32 0.3 /dev/hd9var /var 0.00 0 48 0.5 /dev/hd8 jfs2log 0.00 0 8 0.1 /dev/hd4 / Most Active Physical Volumes ------------------------------------------------------------------------ util #rblk #wblk KB/s volume description ------------------------------------------------------------------------ 0.00 0 72 0.7 /dev/hdisk0 N/A Most Active Files Process-Wise ------------------------------------------------------------------------ #MBs #opns #rds #wrs file PID(Process:TID) ------------------------------------------------------------------------ 0.0 3 6 0 db.sql 7667828(ksh:9437345) 0.0 1 2 0 ksh.cat 7667828(ksh:9437345) 0.0 1 0 3 db2.sql 7667828(ksh:9437345) 0.0 1 0 1 db.sql 7733344(ksh:7405633) 0.4 1 101 0 unix 7667830(ksh:9437347) 0.0 1 2 0 cmdtrace.cat 7667830(ksh:9437347) 0.0 1 2 0 ksh.cat 7667830(ksh:9437347) 0.0 9 2 0 SWservAt 7667830(ksh:9437347) 0.0 9 2 0 SWservAt.vc 7667830(ksh:9437347) 0.0 1 0 0 systrctl 7667830(ksh:9437347) 0.0 44 0 44 null 4325546(slp_srvreg:8585241) 0.0 1 2 2 ksh.cat 7667826(ksh:23527615) 0.0 1 1 0 dd.cat 7667826(ksh:23527615) 0.0 1 1 0 null 7667826(ksh:23527615) 0.0 1 0 0 test 7667826(ksh:23527615) 0.0 8 8 0 vfs 3473482(topasrec:13566119) 0.0 1 0 0 CuAt.vc 3473482(topasrec:13566119) 0.0 1 0 0 CuAt 3473482(topasrec:13566119) 0.0 1 2 0 vfs 2097252(syncd:2490503) 0.0 1 0 0 installable 4260046(java:15073489) Most Active Files Thread-Wise ------------------------------------------------------------------------ #MBs #opns #rds #wrs file TID(Process:PID) ------------------------------------------------------------------------ 0.0 3 6 0 db.sql 9437345(ksh:7667828) 0.0 1 2 0 ksh.cat 9437345(ksh:7667828) 0.0 1 0 3 db2.sql 9437345(ksh:7667828) 0.0 1 0 1 db.sql 7405633(ksh:7733344) 0.4 1 101 0 unix 9437347(ksh:7667830) 0.0 1 2 0 cmdtrace.cat 9437347(ksh:7667830) 0.0 1 2 0 ksh.cat 9437347(ksh:7667830) 0.0 9 2 0 SWservAt 9437347(ksh:7667830) 0.0 9 2 0 SWservAt.vc 9437347(ksh:7667830) 0.0 1 0 0 systrctl 9437347(ksh:7667830) 0.0 44 0 44 null 8585241(slp_srvreg:4325546) 0.0 1 2 2 ksh.cat 23527615(ksh:7667826) 0.0 1 1 0 dd.cat 23527615(ksh:7667826) 0.0 1 1 0 null 23527615(ksh:7667826) 0.0 1 0 0 test 23527615(ksh:7667826) 0.0 8 8 0 vfs 13566119(topasrec:3473482) 0.0 1 0 0 CuAt.vc 13566119(topasrec:3473482) 0.0 1 0 0 CuAt 13566119(topasrec:3473482) 0.0 1 2 0 vfs 2490503(syncd:2097252) 0.0 1 0 0 installable 15073489(java:4260046) dbmon.out: END
应该寻找比较长的寻道时间,因为它们会导致应用程序性能降低。通过仔细地观察读写序列计数,可以进一步确定访问是顺序的还是随机的。当进行 I/O 调优时,此信息可以提供帮助。此输出清楚地说明这里不存在任何 I/O 瓶颈。filemon 可以提供大量信息,事实上,我常常发现它提供的信息太多了。另外,在使用 filemon 时可能带来性能损失,这取决于在运行 filemon 时有多少一般性文件活动。让我们看一下在运行 filemon 时 topaz 的结果(见 图 1)。
图 1. 在运行 filemon 时 topaz 的结果在上图中,filemon 几乎占用了 60% 的 CPU!这个数字实际上比以前的 AIX 版本中小,但是仍然会显著影响总体系统性能。通常,不推荐使用开销如此巨大的性能工具,所以我要重申一下,尽管 filemon 的确有其价值,但在使用它的时候仍需非常小心。
fileplace 又如何呢?fileplace 报告文件块在文件系统中的位置。它通常用于检查和评估文件在磁盘中的放置效率。为什么要使用它呢?一个原因是,它可以帮助确定一些经常使用的文件是否严重碎片化。它还可以帮助确定使用率最高的物理卷,确定驱动器或者 I/O 适配器是否会导致瓶颈。
我们来看看 清单 3 中的示例,这是一个频繁访问的文件。
清单 3. 频繁访问的文件fileplace -pv /tmp/logfile File: /tmp/logfile Size: 63801540 bytes Vol: /dev/hd3 Blk Size: 4096 Frag Size: 4096 Nfrags: 15604 Inode: 7 Mode: -rw-rw-rw- Owner: root Group: system Physical Addresses (mirror copy 1) Logical Extent ---------------------------------- ---------------- 02884352-02884511 hdisk0 160 frags 655360 Bytes, 1.0% 00000224-00000383 02884544-02899987 hdisk0 15444 frags 63258624 Bytes, 99.0% 00000416-00015859 unallocated -27 frags -110592 Bytes 0.0% 15604 frags over space of 15636 frags: space efficiency = 99.8% 2 extents out of 15604 possible: sequentiality = 100.0%
在这里,应该关注空间效率和顺序性。较高的空间效率意味着文件的碎片较少,能够提供更好的顺序文件访问。较高的顺序性意味着文件的分配更连续,这也对顺序文件访问有利。在这个示例中,当顺序性很高的时候,空间效率会更好。如果空间效率和顺序性都很低,那么可能应该考虑重组此文件系统。可以使用 reorgvg 命令来执行重组,此命令可以提高逻辑卷的使用率和效率。还可以考虑使用 degrafs 命令,此命令有助于确保文件系统上的空闲空间是连续的,这对以后的写操作和文件创建操作有帮助。在您使用文件系统时在后台执行碎片整理。
使用 ioo 进行调优
本节讨论 ioo 命令的使用,此命令适用于几乎所有与 I/O 相关的调优参数。
与 vmo 一样,在更改 ioo 参数时需要格外小心,因为动态地更改参数可能导致严重的性能降低。表 2 详细说明一些通常用于 JFS 文件系统的特定调优参数。如您所见,大部分 I/O 调优命令都利用 ioo 实用工具。
表 2. 特定的优化参数功能 | JFS 调优参数 | 增强型 JFS 优化参数 |
---|---|---|
设置用于缓存文件的最大内存量 | vmo -o maxperm=value | vmo -o maxclient=value (小于或等于 maxperm) |
设置用于缓存的最小内存量 | vmo -o minperm=value | 不适用 |
设置用于缓存的内存限制(硬限制) | vmo -o strict_maxperm | vmo -o maxclient (硬限制) |
设置用于提前顺序读取的最大页面数 | ioo -o maxpgahead=value | ioo -o j2_maxPageReadAhead=value |
设置用于提前顺序读取的最小页面数 | ioo -o minpgahead | ioo -o j2_minPageReadAhead=value |
设置对一个文件的未完成写 I/O 的最大数量 | chhdev -l sys0 -a maxpout maxpout | chdev -l sys0 -a maxpout maxpout |
设置对一个文件的未完成写 I/O 的最小数量,在此情况下被 maxpout 阻塞的程序可以继续执行 | chdev -l sys0 -a minpout minpout | chdev -l sys0 -a minpout minpout |
设置用于文件随机写操作的已修改数据缓存量 | ioo -o maxrandwrt=value | ioo -o j2_maxRandomWrite ioo -o j2_nRandomCluster |
控制用于延迟顺序写操作的 I/O 的收集 | ioo -o numclust=value | ioo -o j2_nPagesPerWriteBehindCluster=value |
设置文件系统 bufstruct 的数量 | ioo -o numfsbufs=value | ioo -o j2_nBufferPerPagerDevice=value |
下面深入地讨论一些比较重要的参数,之前已经在内存调优系列(见 参考资料)中介绍过所有 vmo 调优参数。
可以使用几种方式来确定系统中现有的 ioo 值。ioo 显示很长的清单,清楚地提供了大部分信息(见 清单 4)。它列出由 ioo 管理的所有可调项的当前值、重新引导值、范围、单位、类型和依赖关系。
清单 4. ioo 的显示root@lpar29p682e_pub[/] > ioo -L NAME CUR DEF BOOT MIN MAX UNIT TYPE DEPENDENCIES j2_atimeUpdateSymlink 0 0 0 0 1 boolean D j2_dynamicBufferPreallo 16 16 16 0 256 16K slabs D j2_inodeCacheSize 400 400 400 1 1000 D j2_maxPageReadAhead 128 128 128 0 64K 4KB pages D j2_maxRandomWrite 0 0 0 0 64K 4KB pages D j2_maxUsableMaxTransfer 512 512 512 1 4K pages M j2_metadataCacheSize 400 400 400 1 1000 D j2_minPageReadAhead 2 2 2 0 64K 4KB pages D j2_nBufferPerPagerDevice 512 512 512 512 256K M j2_nPagesPerWriteBehindC 32 32 32 0 64K D j2_nRandomCluster 0 0 0 0 64K 16KB clusters D j2_nonFatalCrashesSystem 0 0 0 0 1 boolean D j2_syncModifiedMapped 1 1 1 0 1 boolean D j2_syncdLogSyncInterval 1 1 1 0 4K iterations D jfs_clread_enabled 0 0 0 0 1 boolean D jfs_use_read_lock 1 1 1 0 1 boolean D lvm_bufcnt 9 9 9 1 64 128KB/buffer D maxpgahead minpgahead 8 8 8 0 4K 4KB pages D maxrandwrt 0 0 0 0 512K 4KB pages D memory_frames 512K 512K 4KB pages S Minpgahead maxpgahead 2 2 2 0 4K 4KB pages D numclust 1 1 1 0 2G-1 16KB/cluster D numfsbufs 196 196 196 1 2G-1 M pd_npages 64K 64K 64K 1 512K 4KB pages D pgahd_scale_thresh 0 0 0 0 419430 4KB pages D pv_min_pbuf 512 512 512 512 2G-1 D sync_release_ilock 0 0 0 0 1 boolean D n/a means parameter not supported by the current platform or kernel Parameter types: S = Static: cannot be changed D = Dynamic: can be freely changed B = Bosboot: can only be changed using bosboot and reboot R = Reboot: can only be changed during reboot C = Connect: changes are only effective for future socket connections M = Mount: changes are only effective for future mountings I = Incremental: can only be incremented d = deprecated: deprecated and cannot be changed
清单 5 说明如何更改一个可调项。
清单 5. 更改可调项root@lpar29p682e_pub[/] > ioo -o maxpgahead=32 Setting maxpgahead to 32 root@lpar29p682e_pub[/] >
这个参数仅用于 JFS。对于 JFS2,有更多文件系统性能改进,包括提前顺序页面读取以及延迟的顺序和随机写操作。通过观察文件的访问模式,AIX 的虚拟内存管理器(Virtual Memory Manager,VMM)可以预测页面需求。当程序要访问一个文件的两个页面时,VMM 假定此程序将采用顺序的方法继续尝试访问此文件。可以使用 VMM 阈值配置要提前读取的页面数量。对于 JFS2,注意下面这两个重要的参数:
- J2_minPageReadAhead:决定当 VMM 最初探测到顺序模式时提前读取的页面数量。
- J2_maxPageReadAhead:决定 VMM 可以在一个顺序文件中读取的最大页面数量。
延迟的顺序和随机写操作与(达到某个阈值之后)将内存中经过修改的页面写到磁盘相关。通过采用这种方式,它无需等待 syncd 将页面写到磁盘。这么做可以限制内存中 “脏” 页面的数量,从而进一步减少 I/O 开销和磁盘碎片。延迟的写操作分为顺序和随机两类。在使用延迟的顺序写操作时,在 syncd 守护进程运行之前,页面并不留在内存中,这可能会导致实际的瓶颈。在使用延迟的随机写操作时,如果内存中的页面数量超过指定的数量,则将所有后续的页面写到磁盘。
对于延迟的顺序写操作,应该指定要安排写的页面数量;通过 j2_nPagesPerWriterBehindCluster 参数指定这个值。在默认情况下,这个值是 32(即 128KB);对于现代磁盘和有大量写操作的环境,比如数据库,可能需要提高这个参数值,以便当需要把数据同步到磁盘时在一个块中写更多数据。
可以通过更改 j2_nRandomCluster 和 j2_maxRandomWrite 的值配置延迟的随机写操作。j2_maxRandomWrite 参数指定一个文件可以留在内存中的页面数量。默认值为 0(表示尽快写出信息),这用于确保数据完整性。如果愿意在发生系统故障时牺牲一定的完整性,以此换取更好的写操作性能,可以提高这个值。延迟的随机写操作把页面留在内存中,所以在发生系统故障时数据可能还没有写到磁盘上。j2_nRandomCluster 定义间隔多少个簇的两个写操作必须被认为是随机的。如果同时修改许多文件,提高这个值会降低写操作效率。
另一个值得一提的重要领域是大量顺序 I/O 的处理。当对文件系统同时进行大量 I/O 操作的时候,可能会在文件系统级上出现 I/O 瓶颈。在这种情况下,应该增大 j2_nBufferPerPagerDevice 参数(如果使用 JFS 的话,就是 numfsbus 参数)。如果使用的是原始 I/O 而不是文件系统,那么相同类型的瓶颈可能通过 LVM 出现。在这种情况下,可能希望调整 lvm_bufcnt 参数。
结束语
本文重点关注文件系统的性能。您研究了 JFS2 中的各种增强功能,以及为什么将它作为首选的文件系统。另外,使用了 filemon 和 fileplace 等工具收集关于实际文件结构以及它们与 I/O 性能之间关系的详细信息。最后,使用 ioo 命令优化了 I/O 子系统。了解了在碰到顺序 I/O 的情况下更改 J2_minPageReadAhead 和 J2_maxPageReadAhead 参数对性能的影响。
本系列共有三篇关于 I/O 的文章。在本系列中您学到,与其他子系统相比 I/O 子系统可以采用更多调优措施,必须在对系统进行压力测试之前开始调优。与优化 I/O 参数相比,正确地设计系统架构对于提高性能更重要。这包括战略性磁盘布置,以及确保有足够多的适配器以处理磁盘的吞吐量。另外,尽管本系列重点关注 I/O,但是 VMM 也与 I/O 性能紧密相关,必须对其进行优化,才能实现最佳的 I/O 性能。
参考资料
学习
- “Use direct I/O to improve performance of your AIX applications”(Shiv Dutta,developerWorks,2002 年 11 月):这篇文章讨论直接 I/O 的好处并介绍如何实现它。
- Improving database performance with AIX concurrent I/O:通过阅读这份白皮书进一步了解如何提高数据库性能。
- :通过 IBM System p and AIX 信息中心了解关于 AIX 内存关联支持的更多信息。
- “nmon 性能:分析 AIX 和 Linux 性能的免费工具”(Nigel Griffiths,developerWorks,2006 年 2 月):这篇文章对 nmon 工具做了精彩的介绍。
- “nmon analyser —— 生成 AIX 性能报告的免费工具”(Steven Atkins,developerWorks,2006 年 4 月):通过阅读这篇文章了解关于 nmon 分析程序的更多信息。
- 提供 AIX 操作系统的技术信息。
- : Database Performance Tuning on AIX 旨在帮助系统设计者、系统管理员和数据库管理员设计、规划、实现、维护、监控和调优 AIX 上的 Relational Database Management System (RDMBS),从而实现最佳性能。
- “Power to the People: A history of chip making at IBM”(developerWorks,2005 年 12 月):这篇文章讨论 IBM power 架构。
- “AIX 中的处理器关联”(developerWorks,2006 年 11 月):使用进程关联设置对线程进行绑定或取消绑定,这有助于找到麻烦的挂起或死锁问题的原因。通过阅读这篇文章了解如何使用处理器关联对进程进行限制,让进程只在指定的中央处理单元(CPU)上运行。
- “CPU Monitoring and Tuning”(2002 年 3 月):了解如何使用标准的 AIX 工具帮助判断 CPU 瓶颈。
- :IBM 的这份文档向用户和系统管理员提供全面的系统管理和设备管理信息,可以帮助您在执行各种任务时选择适当的选项,比如系统备份和恢复系统、管理物理和逻辑存储以及调整分页空间。
- AIX and UNIX 专区:developerWorks 的“AIX and UNIX 专区”提供了大量与 AIX 系统管理的所有方面相关的信息,您可以利用它们来扩展自己的 UNIX 技能。
- AIX and UNIX 新手入门:访问“AIX and UNIX 新手入门”页面可了解更多关于 AIX 和 UNIX 的内容。
- AIX and UNIX 专题汇总:AIX and UNIX 专区已经为您推出了很多的技术专题,为您总结了很多热门的知识点。我们在后面还会继续推出很多相关的热门专题给您,为了方便您的访问,我们在这里为您把本专区的所有专题进行汇总,让您更方便的找到您需要的内容。
- AIX and UNIX 下载中心:在这里你可以下载到可以运行在 AIX 或者是 UNIX 系统上的 IBM 服务器软件以及工具,让您可以提前免费试用他们的强大功能。
- IBM Systems Magazine for AIX 中文版:本杂志的内容更加关注于趋势和企业级架构应用方面的内容,同时对于新兴的技术、产品、应用方式等也有很深入的探讨。IBM Systems Magazine 的内容都是由十分资深的业内人士撰写的,包括 IBM 的合作伙伴、IBM 的主机工程师以及高级管理人员。所以,从这些内容中,您可以了解到更高层次的应用理念,让您在选择和应用 IBM 系统时有一个更好的认识。
- 在 AIX 和 UNIX 库中搜索以下主题:
- Safari 书店:访问这个电子资料库,寻找各种技术参考资料。
- developerWorks 技术活动和网络广播:随时关注 developerWorks 技术活动和网络广播。
- 播客:收听播客并了解 IBM 技术专家的最新想法。
- :访问 Future Tech 的网站,了解他们的最新产品。