3

我正在使用 DFSORT 将磁带数据集复制到临时文件,并处理大约 80000000 条记录。复制数据集需要 3 个小时。有没有其他方法可以减少 CPU 时间。建议将非常有帮助。谢谢你。

    //STEP40  EXEC SORTD                                              
    //SORTIN   DD DSN=FILEONE(0),                           
    //            DISP=SHR                                            
    //SORTOUT  DD DSN=&&TEMP,                                       
    //            DISP=(NEW,PASS,DELETE),                          
    //            DCB=(RECFM=FB,LRECL=30050,BLKSIZE=0),               
    //            UNIT=TAPE                                           
    //SYSOUT   DD SYSOUT=*                                            
    //SYSPRINT DD SYSOUT=*                                            
    //SYSIN    DD *                                                   
         SORT FIELDS=(14,6,PD,A,8,6,PD,A,45,2,ZD,A)                   
         OUTREC IFTHEN=(WHEN=(70,18,CH,EQ,C' encoding="IBM037"'),     
                     OVERLAY=(70:C'  encoding="UTF-8"'))              
         OPTION DYNALLOC=(SYSDA,255)                                  
    /*                                                                
4

3 回答 3

2

我喜欢诊断这类问题...

每条 30K 的 80M 记录约为 2.5TB,由于您正在读取和写入此数据,因此您正在处理至少 5TB(不包括工作文件的 I/O)。如果我的数学计算正确,则平均 500MB/秒超过三个小时。

首先要做的是了解 DFSORT 是否真的主动运行了 3 个小时,或者是否有等待时间的来源。例如,如果您的磁带是多卷数据集,则可能需要等待磁带装载时间。在作业日志消息中查找这一点 - 可能是您 3 小时中的 20 分钟只是在等待安装正确的磁带。

您可能还会遇到增加等待时间的 CPU 使用问题。根据您的系统设置方式,您的工作可能只获得一小部分 CPU 时间并等待其余时间。您可以通过查看消耗的 CPU 时间(它也在作业日志消息中)并将其与经过的时间进行比较...例如,如果您的作业在 3 小时内获得 1000 CPU 秒 (TCB + SRB),那么您就是在这段时间内平均 9% 的 CPU 使用率。在不同的工作类别中提交您的工作可能会有所不同 - 询问您当地的系统程序员。

当然,9% 的 CPU 时间可能不是问题 - 您的工作可能会受到严重的 I/O 限制,因此很多等待时间是等待 I/O 完成,而不是等待更多的 CPU 时间。您真正想知道的是您的等待时间是等待 CPU 访问、等待 I/O 还是其他原因。同样,如果您的本地系统程序员知道如何阅读 RMF 报告,他应该能够帮助您回答这个问题。

接下来要做的是更好地了解您的 I/O,目标是减少需要执行的物理 I/O 操作的总数和/或使每个 I/O 运行得更快一些。

可以这样想:每个物理 I/O 至少需要 2-3 毫秒。在最坏的情况下,如果您正在读取/写入的 160M 记录中的每一条都需要 3 毫秒,那么经过的时间将是 160,000,000 X .003 = 480,000 秒,或五天半!

正如另一位响应者提到的,blocksize 和 buffering 是你的朋友。由于 I/O 操作的大部分时间归结为触发 I/O 并等待响应,因此“大 I/O”不会比“小 I/O”花费更多时间。通常,您希望执行尽可能少和尽可能大的物理 I/O 操作以缩短运行时间。

根据您使用的磁带设备的类型,您应该能够在磁带上获得高达 256K 的块大小——即每个 I/O 有 7 条记录。您的 BLKSIZE=0 可能已经得到了这个,这取决于您的系统是如何配置的。请注意,这取决于设备,并注意您的站点是否碰巧使用了将“真实”磁带驱动器映射到磁盘的虚拟磁带产品之一……在这里,超过一定限制 (32K) 的块大小往往会运行得更慢。

不幸的是,缓冲比之前建议的答案更复杂......原来 BUFNO 适用于使用 IBM 的 QSAM 访问方法的相对简单的应用程序 - 这不是 DFSORT 所做的。事实上,DFSORT 非常聪明地处理它的 I/O,它会根据可用内存动态创建缓冲区。不过,您可能会尝试在更大的区域中运行您的作业(例如,您的 JCL 中的 REGION=0),并且您可能会找到 DFSORT 选项,例如 MAINSIZE=MAX 帮助 - 请参阅此链接以获取更多信息。

至于您的磁盘 I/O(包括那些 SORTWK 数据集),这里也有很多选项。您的 30K LRECL 在很大程度上限制了您可以为阻塞做的事情,但是您可以进行各种磁盘调整练习,从使用 VIO 数据集到 PAV(并行访问卷)。重点是,其中很多也是特定于配置的,因此正确的答案将取决于您的站点拥有什么以及它是如何配置的。

但也许最重要的是,在你偶然发现正确答案之前,你不想纯粹地反复试验。如果您想学习,请熟悉 RMF 或您的站点拥有的任何性能管理工具(或找到愿意与您合作的系统程序员)并深入研究。问问自己,瓶颈是什么——为什么这项工作没有运行得更快? 然后找到瓶颈,修复它并继续下一个。这些都是非常重要的技能,一旦你了解了基础知识,它就不再像一门黑色艺术,而更像是一个你可以遵循任何事情的系统过程。

于 2018-08-17T17:03:23.010 回答
1

既然你写

...完成需要3个小时...

我想你真正想要的是减少运行时间,而不是 CPU 时间。经过的时间取决于许多因素,例如机器配置、机器速度、系统总负载、作业的优先级等。如果没有更多关于环境的信息,很难给出建议。

但是,我看到您正在将排序输出写入临时数据集。我得出结论,还有另一个步骤可以读取该数据。为什么要将这些数据写入磁带?磁盘肯定会更快并减少运行时间。


彼得

于 2018-07-28T11:54:17.657 回答
1

关于提高 I/O 性能的一些评论应该会提高你的整体运行时间。

  1. 在您的 SORTIN 和 SORTOUT DD 语句中,将以下内容添加到您的 DCB。

来自 IBM 的MVS JCL 手册第 143 页。

//SORTIN   DD DSN=FILEONE(0),                           
//            DISP=SHR<b>,DCB=BUFNO=192</b>                                            
//SORTOUT  DD DSN=&&TEMP,                                       
//            DISP=(NEW,PASS,DELETE),                          
//            DCB=(RECFM=FB,LRECL=30050,BLKSIZE=0,BUFNO=192),
//            UNIT=TAPE

这些天我选择192,因为它在内存方面相对便宜。根据您的环境进行调整。这基本上告诉系统每个 I/O 读取多少块,从而减少与 I/O 操作相关的时间。您可以使用此数字来获得最佳结果。默认值为 5。

BUFNO=buffers
指定分配给 DCB 的缓冲区数量。最大值通常为 255,但由于区域的大小,可能会更小。注意:不要使用 DCB 子参数 BUFIN、BUFOUT 或 DD 参数 QNAME 对 BUFNO 子参数进行编码。

  1. 您可能会考虑块大小的。输出的块大小似乎很奇怪。确保它针对您要使用的设备进行了优化。对于 TAPE 设备,这应该尽可能大。对于 3480 或 3490 设备,这可以与 65535 一样大。您不指定 LRECL,但指出其 30050,然后您可以指定 60100 的 BLKZIE,这将是每个块的两条记录。更好的 I/O 效率。

以下是有关磁带BLKSIZE 选择的更多信息。


3490 Emulation (VTS)    262144 (256 KB)
3590                    262144 (256 KB) (note: on some older models the limit is  
                                               229376 (224 KB) 262144 (256 KB)
  1. 如果您实际使用 TAPE,最后一个快速提示是指定多个 TAPE 设备。这将允许在安装下一个磁带时写入一个磁带。我在这里也包含了 BUFNO 示例:

//SORTOUT DD DSN=&&TEMP, // DISP=(NEW,PASS,DELETE), // DCB=(RECFM=FB,LRECL=30050,BLKSIZE=0,BUFNO=192), // UNIT=(TAPE,2)

当然,这些优化取决于您的物理环境和 DFSMS 设置。

于 2018-08-07T16:07:19.497 回答