我在我的snakemake工作流程中的一些规则中包含了benchmark
指令,结果文件包含以下标题:
s h:m:s max_rss max_vms max_uss max_pss io_in io_out mean_load
The only documentation I've found提到了一个“基准txt文件(它将包含一个以制表符分隔的运行时和MiB内存使用情况表)”。
我可以猜测第1列和第2列是显示执行规则所用时间的两种不同方式(以秒为单位,并转换为小时,分钟和秒)。
io_in
和io_out
可能与磁盘读写活动有关,但它们的测量单位是什么?
其他是什么?这是在某处记录的吗?
我在/snakemake/benchmark.py
中找到了以下代码,这可能是基准数据的来源:
def _update_record(self):
"""Perform the actual measurement"""
# Memory measurements
rss, vms, uss, pss = 0, 0, 0, 0
# I/O measurements
io_in, io_out = 0, 0
# CPU seconds
cpu_seconds = 0
# Iterate over process and all children
try:
main = psutil.Process(self.pid)
this_time = time.time()
for proc in chain((main,), main.children(recursive=True)):
meminfo = proc.memory_full_info()
rss += meminfo.rss
vms += meminfo.vms
uss += meminfo.uss
pss += meminfo.pss
ioinfo = proc.io_counters()
io_in += ioinfo.read_bytes
io_out += ioinfo.write_bytes
if self.bench_record.prev_time:
cpu_seconds += proc.cpu_percent() / 100 * (
this_time - self.bench_record.prev_time)
self.bench_record.prev_time = this_time
if not self.bench_record.first_time:
self.bench_record.prev_time = this_time
rss /= 1024 * 1024
vms /= 1024 * 1024
uss /= 1024 * 1024
pss /= 1024 * 1024
io_in /= 1024 * 1024
io_out /= 1024 * 1024
except psutil.Error as e:
return
# Update benchmark record's RSS and VMS
self.bench_record.max_rss = max(self.bench_record.max_rss or 0, rss)
self.bench_record.max_vms = max(self.bench_record.max_vms or 0, vms)
self.bench_record.max_uss = max(self.bench_record.max_uss or 0, uss)
self.bench_record.max_pss = max(self.bench_record.max_pss or 0, pss)
self.bench_record.io_in = io_in
self.bench_record.io_out = io_out
self.bench_record.cpu_seconds += cpu_seconds
所以这似乎来自psutil
提供的功能。
答案 0 :(得分:3)
使用snakemake进行基准测试肯定可以更好地记录,但是psutil是有记录的here:
get_memory_info()
Return a tuple representing RSS (Resident Set Size) and VMS (Virtual Memory Size) in bytes.
On UNIX RSS and VMS are the same values shown by ps.
On Windows RSS and VMS refer to "Mem Usage" and "VM Size" columns of taskmgr.exe.
psutil.disk_io_counters(perdisk=False)
Return system disk I/O statistics as a namedtuple including the following attributes:
read_count: number of reads
write_count: number of writes
read_bytes: number of bytes read
write_bytes: number of bytes written
read_time: time spent reading from disk (in milliseconds)
write_time: time spent writing to disk (in milliseconds)
您找到的代码确认所有内存使用情况和IO计数都以MB(=字节* 1024 * 1024)报告。
答案 1 :(得分:2)
我将把它留在这里以备将来参考。
通读
int (*)[2][2]
benchmark module p == &a
(*p) == a
(*p) + i == a + i == &(*p)[i] == &a[i]
*((*p) + i) == *(a + i) == (*p)[i] == a[i]
*((*p) + i) + j == *(a + i) + j == &(*p)[i][j] == &a[i][j]
*(*((*p) + i) + j) == *(*(a + i) + j) == (*p)[i][j] == a[i][j]
的 memory_info()、memory_full_info()、io_counters()、cpu_times()如前所述:
列名 | 类型(单位) | 描述 |
---|---|---|
s | 浮动(秒) | 以秒为单位的运行时间 |
h:m:s | 字符串 (-) | 运行时间以小时、分钟、秒格式 |
max_rss | 浮动 (MB) | 最大“驻留集大小”,这是进程已使用的非交换物理内存。 |
max_vms | 浮动 (MB) | 最大“虚拟内存大小”,这是进程使用的虚拟内存总量 |
max_uss | 浮动 (MB) | “Unique Set Size”,这是一个进程唯一的内存,如果进程现在终止,它将被释放。 |
max_pss | 浮动 (MB) | “Proportional Set Size”,是与其他进程共享的内存量,以在共享它的进程之间平均分配的方式计算(仅适用于 Linux) |
io_in | 浮动 (MB) | 读取的 MB 数(累计)。 |
io_out | 浮动 (MB) | 写入的 MB 数(累计)。 |
mean_load | 浮动(-) | CPU 使用率随时间的变化,除以总运行时间(第一行) |
cpu_time | float(-) | 用户和系统的总CPU时间 |