我在ubuntu 11.10上使用perf 3.0.4。它的记录命令运行良好,并在终端显示256个样本收集。但是,当我使用性能报告时,它会给我以下错误:
perf.data file has no samples
我搜索了很多解决方案,但还没有成功。
答案 0 :(得分:8)
此主题包含一些有用的信息:http://www.spinics.net/lists/linux-perf-users/msg01436.html
似乎如果您在未将PMU公开给guest虚拟机的VM中运行,则默认集合(-e cycles
)将不起作用。尝试使用-e cpu-clock
运行。根据该线程,OP在运行Ubuntu 10.04的真实主机中也有同样的问题,所以它也可能为你解决...
答案 1 :(得分:5)
perf record
命令报告的样本数是近似值,而不是正确的事件数(see perf wiki here)。
要获得准确的事件数,请转储原始文件并使用wc -l
计算结果数量:
perf报告-D -i perf.data | grep RECORD_SAMPLE | wc -l </ p>
在perf report
表示无法找到事件的情况下,此命令应报告0。
让我们了解更多关于如何使用perf记录的信息,您正在采样哪个事件,哪个硬件,哪个程序。
编辑:您可以先尝试使用-c
或-F
选项增加采样周期或频率
答案 2 :(得分:1)
每当我在let task = URLSession.shared.dataTask(with: request) { data, response, error in
guard let data = data, error == nil else { // check for fundamental networking error
print("error=\(error)")
return
}
if let httpStatus = response as? HTTPURLResponse, httpStatus.statusCode != 200 { // check for http errors
print("statusCode should be 200, but is \(httpStatus.statusCode)")
print("response = \(response)")
}
let responseString = String(data: data, encoding: .utf8)
print("responseString = \(responseString)")
}
task.resume()
曾经工作过的机器上遇到此问题时,这是因为我留下了一些使用性能计数器的正在运行的东西,例如,我将perf record
运行在另一个机器上终端标签。
在这种情况下,似乎perf top
根本没有记录任何与PMU相关的样本。