在 R 中使用 Perl 分析峰值 DRAM 使用情况 - 第 1 部分

主要观点:

  • 用 Perl 监控 R 脚本中的峰值物理 DRAM 使用情况,包含大量 R 代码且自解释性强。
  • 介绍 R 的内存管理及工具,如内置函数 Rprof 用于采样调用栈并记录到日志文件。
  • 由于 Rprof 采样频率相对较低,需设法减慢代码以捕获峰值内存使用,如在 Linux 系统中使用 valgrid。
  • 提供一个简单的 R 日志记录函数 bench_time_mem,可获取总时间、R 分配的内存和日志文件大小。
  • Rprof 无法直接获取计算期间的峰值内存使用,只能获取栈中分配的总内存量。
  • 提出通过融合 R 和 Perl 来获取峰值 DRAM 使用,即写 Perl 脚本探测 ps 命令获取 R 进程的驻留集大小(RSS)等。

关键信息:

  • 有关于 R 内存管理的背景介绍及相关工具说明。
  • 给出 R 代码示例 bench_time_mem 及其运行结果。
  • 比较不同代码分配相同总内存时的情况及触发垃圾回收的时间代价。
  • 引出后续将在[Part 2]中介绍获取峰值 DRAM 使用的方法。

重要细节:

  • R 类似 Perl 可通过提供动态分配容器让程序员无需手动管理内存,且有垃圾回收机制。
  • Rprof 采样存在间隔限制及可能导致的系统扰动和结果偏差。
  • 在 Linux 系统中可使用 valgrid 减慢代码以捕获内存使用情况。
  • bench_time_mem 函数先触发垃圾回收,创建临时文件并开始日志记录,执行 R 表达式后解析文件获取相关信息并返回。
  • 示例代码中通过 busy_wait 函数模拟工作负载及内存分配和释放操作。
  • 说明 Rprof 记录的总内存量与实际峰值内存使用的区别及示例代码对比。
  • 展示触发垃圾回收的时间代价与直接分配随机数数组的时间差异。
阅读 10
0 条评论