代码之家  ›  专栏  ›  技术社区  ›  bli

snakemake中基准变量的意义

  •  10
  • bli  · 技术社区  · 7 年前

    我包括一个 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 .

    2 回复  |  直到 7 年前
        1
  •  7
  •   heathobrien    7 年前

    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)
    

        2
  •  7
  •   papanikos    4 年前

    我将把这个留在这里供将来参考。

    通读

    colname公司 类型(单位) 描述
    s 运行时间(秒)
    h: m:s 字符串(-)
    浮点(MB) 最大“驻留集大小”,这是进程使用的非交换物理内存。
    浮点(MB) 最大虚拟内存大小,这是进程使用的虚拟内存总量
    麦克斯 浮点(MB) 唯一集大小,这是进程唯一的内存,如果进程立即终止,它将被释放。
    最大pss 浮点(MB)
    io_输入 浮点(MB) 读取的MB数(累积)。
    io_输出 浮点(MB) 写入的MB数(累积)。
    平均负荷 浮动(-) CPU使用率除以总运行时间(第一行)
    cpu\U时间
    推荐文章