2017-05-06 91 views
0

我需要证明当进程运行时,我删除此进程的ELF文件文件系统中的空闲块和节点数不会增加,并且在我终止进程后他们增加。我还需要在整个生命周期中显示延迟,因此我使用perf shed record ./Prog,但它会生成一个文件并保存记录结果,并破坏我的第一部分任务。当我尝试(超级用户身份登录)使用方法:如何更改perf perf sched记录中的输入文件名

perf sched record -i /mnt/disk1 ./Prog & 

我得到

Workload failed: permission denied 

有人能告诉我如何来改变文件的输入文件是在其他文件系统?

回答

0

perf sched record有根据手册页http://man7.org/linux/man-pages/man1/perf-sched.1.html

-i, --input=<file> 

输入文件名没有选项可以更改输出文件(-i是输入文件没有目录)。 (默认:perf.data除非标准输入是FIFO)

,并执行: http://elixir.free-electrons.com/linux/v4.8/source/tools/perf/builtin-sched.c#L1896

tools/perf/builtin-sched.c 
static int __cmd_record(int argc, const char **argv) 
{ 
    unsigned int rec_argc, i, j; 
    const char **rec_argv; 
    const char * const record_args[] = { 
     "record", 
     "-a", 
     "-R", 
     "-m", "1024", 
     "-c", "1", 
     "-e", "sched:sched_switch", 
     "-e", "sched:sched_stat_wait", 
     "-e", "sched:sched_stat_sleep", 
     "-e", "sched:sched_stat_iowait", 
     "-e", "sched:sched_stat_runtime", 
     "-e", "sched:sched_process_fork", 
     "-e", "sched:sched_wakeup", 
     "-e", "sched:sched_wakeup_new", 
     "-e", "sched:sched_migrate_task", 
    }; 
... 
    return cmd_record(i, rec_argv, NULL); 
} 

int cmd_sched(int argc, const char **argv, const char *prefix __maybe_unused) 
{ 
    const struct option sched_options[] = { 
    OPT_STRING('i', "input", &input_name, "file", 
      "input file name"), 
    OPT_INCR('v', "verbose", &verbose, 
      "be more verbose (show symbol address, etc)"), 
    OPT_BOOLEAN('D', "dump-raw-trace", &dump_trace, 
      "dump raw trace in ASCII"), 
    OPT_END() 
    }; 
....  

static int perf_sched__read_events(struct perf_sched *sched) 
{ 
... 
    struct perf_data_file file = { 
     .path = input_name, 
     .mode = PERF_DATA_MODE_READ, 
     .force = sched->force, 
    }; 

但是!内置-sched.c中的__cmd_record调用builtin_record.c具有-o选项来指定输出文件的默认cmd_recordhttp://elixir.free-electrons.com/linux/v4.8/source/tools/perf/builtin-record.c#L1380

OPT_STRING('o', "output", &record.file.path, "file", 
      "output file name"), 

所以,你可以通过改变当前目录更改目的地路径perf sched record,或者你可以尝试perf sched record -o /mnt/disk1/perf.data ./Prog &。不要使用目录名作为参数-i(输入报告)/ -o(输出记录)perf选项。