Merge "ftrace_reader: Kernel buffer size follow up"
diff --git a/include/perfetto/ftrace_reader/ftrace_controller.h b/include/perfetto/ftrace_reader/ftrace_controller.h
index b8c30e2..e72e0d1 100644
--- a/include/perfetto/ftrace_reader/ftrace_controller.h
+++ b/include/perfetto/ftrace_reader/ftrace_controller.h
@@ -64,16 +64,16 @@
}
const std::set<std::string>& atrace_apps() const { return atrace_apps_; }
- uint32_t total_buffer_size_kb() const { return total_buffer_size_kb_; }
+ uint32_t buffer_size_kb() const { return buffer_size_kb_; }
uint32_t drain_period_ms() const { return drain_period_ms_; }
- void set_total_buffer_size_kb(uint32_t v) { total_buffer_size_kb_ = v; }
+ void set_buffer_size_kb(uint32_t v) { buffer_size_kb_ = v; }
void set_drain_period_ms(uint32_t v) { drain_period_ms_ = v; }
private:
std::set<std::string> ftrace_events_;
std::set<std::string> atrace_categories_;
std::set<std::string> atrace_apps_;
- uint32_t total_buffer_size_kb_ = 0;
+ uint32_t buffer_size_kb_ = 0;
uint32_t drain_period_ms_ = 0;
};
diff --git a/include/perfetto/tracing/core/data_source_config.h b/include/perfetto/tracing/core/data_source_config.h
index 4da282b..304f107 100644
--- a/include/perfetto/tracing/core/data_source_config.h
+++ b/include/perfetto/tracing/core/data_source_config.h
@@ -87,10 +87,8 @@
return &atrace_apps_.back();
}
- uint32_t total_buffer_size_kb() const { return total_buffer_size_kb_; }
- void set_total_buffer_size_kb(uint32_t value) {
- total_buffer_size_kb_ = value;
- }
+ uint32_t buffer_size_kb() const { return buffer_size_kb_; }
+ void set_buffer_size_kb(uint32_t value) { buffer_size_kb_ = value; }
uint32_t drain_period_ms() const { return drain_period_ms_; }
void set_drain_period_ms(uint32_t value) { drain_period_ms_ = value; }
@@ -99,7 +97,7 @@
std::vector<std::string> event_names_;
std::vector<std::string> atrace_categories_;
std::vector<std::string> atrace_apps_;
- uint32_t total_buffer_size_kb_ = {};
+ uint32_t buffer_size_kb_ = {};
uint32_t drain_period_ms_ = {};
// Allows to preserve unknown protobuf fields for compatibility
diff --git a/protos/perfetto/config/data_source_config.proto b/protos/perfetto/config/data_source_config.proto
index 15bada4..8aeaaea 100644
--- a/protos/perfetto/config/data_source_config.proto
+++ b/protos/perfetto/config/data_source_config.proto
@@ -29,7 +29,8 @@
repeated string event_names = 1;
repeated string atrace_categories = 2;
repeated string atrace_apps = 3;
- optional uint32 total_buffer_size_kb = 10;
+ // *Per-CPU* buffer size.
+ optional uint32 buffer_size_kb = 10;
optional uint32 drain_period_ms = 11;
}
diff --git a/protos/perfetto/config/perfetto_config.proto b/protos/perfetto/config/perfetto_config.proto
index bcc9ef2..45958bb 100644
--- a/protos/perfetto/config/perfetto_config.proto
+++ b/protos/perfetto/config/perfetto_config.proto
@@ -23,7 +23,8 @@
repeated string event_names = 1;
repeated string atrace_categories = 2;
repeated string atrace_apps = 3;
- optional uint32 total_buffer_size_kb = 10;
+ // *Per-CPU* buffer size.
+ optional uint32 buffer_size_kb = 10;
optional uint32 drain_period_ms = 11;
}
diff --git a/src/ftrace_reader/ftrace_controller.cc b/src/ftrace_reader/ftrace_controller.cc
index 919254d..c324115 100644
--- a/src/ftrace_reader/ftrace_controller.cc
+++ b/src/ftrace_reader/ftrace_controller.cc
@@ -71,17 +71,15 @@
// Post-conditions:
// 1. result >= 1 (should have at least one page per CPU)
-// 2. result * num_cpus * 4 < kMaxTotalBufferSizeKb
+// 2. result * 4 < kMaxTotalBufferSizeKb
// 3. If input is 0 output is a good default number.
-size_t ComputeCpuBufferSizeInPages(uint32_t requested_buffer_size_kb,
- size_t cpu_count) {
+size_t ComputeCpuBufferSizeInPages(uint32_t requested_buffer_size_kb) {
if (requested_buffer_size_kb == 0)
requested_buffer_size_kb = kDefaultTotalBufferSizeKb;
if (requested_buffer_size_kb > kMaxTotalBufferSizeKb)
requested_buffer_size_kb = kDefaultTotalBufferSizeKb;
- size_t pages =
- (requested_buffer_size_kb / cpu_count) / (base::kPageSize / 1024);
+ size_t pages = requested_buffer_size_kb / (base::kPageSize / 1024);
if (pages == 0)
return 1;
@@ -205,13 +203,12 @@
}
uint32_t FtraceController::GetCpuBufferSizeInPages() {
- uint32_t max_total_buffer_size_kb = 0;
+ uint32_t max_buffer_size_kb = 0;
for (const FtraceSink* sink : sinks_) {
- if (sink->config().total_buffer_size_kb() > max_total_buffer_size_kb)
- max_total_buffer_size_kb = sink->config().total_buffer_size_kb();
+ if (sink->config().buffer_size_kb() > max_buffer_size_kb)
+ max_buffer_size_kb = sink->config().buffer_size_kb();
}
- return ComputeCpuBufferSizeInPages(max_total_buffer_size_kb,
- ftrace_procfs_->NumberOfCpus());
+ return ComputeCpuBufferSizeInPages(max_buffer_size_kb);
}
void FtraceController::ClearTrace() {
diff --git a/src/ftrace_reader/ftrace_controller_unittest.cc b/src/ftrace_reader/ftrace_controller_unittest.cc
index 22717b0..7f9d6b5 100644
--- a/src/ftrace_reader/ftrace_controller_unittest.cc
+++ b/src/ftrace_reader/ftrace_controller_unittest.cc
@@ -320,7 +320,7 @@
EXPECT_CALL(*raw_ftrace_procfs,
WriteToFile("/root/buffer_size_kb", "8192"));
FtraceConfig config({"foo"});
- config.set_total_buffer_size_kb(10 * 1024 * 1024);
+ config.set_buffer_size_kb(10 * 1024 * 1024);
auto sink = controller.CreateSink(config, &delegate);
}
@@ -328,24 +328,24 @@
// Your size ends up with less than 1 page per cpu -> 1 page.
EXPECT_CALL(*raw_ftrace_procfs, WriteToFile("/root/buffer_size_kb", "4"));
FtraceConfig config({"foo"});
- config.set_total_buffer_size_kb(1);
+ config.set_buffer_size_kb(1);
auto sink = controller.CreateSink(config, &delegate);
}
{
- // You picked a good size -> your size / # CPUs rounded to nearest page.
+ // You picked a good size -> your size rounded to nearest page.
EXPECT_CALL(*raw_ftrace_procfs, WriteToFile("/root/buffer_size_kb", "40"));
FtraceConfig config({"foo"});
- config.set_total_buffer_size_kb(42);
+ config.set_buffer_size_kb(42);
auto sink = controller.CreateSink(config, &delegate);
}
{
- // You picked a good size -> your size / # CPUs rounded to nearest page.
- EXPECT_CALL(*raw_ftrace_procfs, WriteToFile("/root/buffer_size_kb", "20"));
+ // You picked a good size -> your size rounded to nearest page.
+ EXPECT_CALL(*raw_ftrace_procfs, WriteToFile("/root/buffer_size_kb", "40"));
FtraceConfig config({"foo"});
ON_CALL(*raw_ftrace_procfs, NumberOfCpus()).WillByDefault(Return(2));
- config.set_total_buffer_size_kb(42);
+ config.set_buffer_size_kb(42);
auto sink = controller.CreateSink(config, &delegate);
}
}
diff --git a/src/ftrace_reader/ftrace_procfs.cc b/src/ftrace_reader/ftrace_procfs.cc
index 356a589..db5975a 100644
--- a/src/ftrace_reader/ftrace_procfs.cc
+++ b/src/ftrace_reader/ftrace_procfs.cc
@@ -30,9 +30,6 @@
namespace perfetto {
namespace {
-// TODO(b/72148971): Unify with other constants.
-static constexpr size_t kPageSize = 4096;
-
// Reading /trace produces human readable trace output.
// Writing to this file clears all trace buffers for all CPUS.
@@ -127,12 +124,12 @@
}
bool FtraceProcfs::SetCpuBufferSizeInPages(size_t pages) {
- if (pages * kPageSize > 1 * 1024 * 1024 * 1024) {
+ if (pages * base::kPageSize > 1 * 1024 * 1024 * 1024) {
PERFETTO_ELOG("Tried to set the per CPU buffer size to more than 1gb.");
return false;
}
std::string path = root_ + "buffer_size_kb";
- return WriteNumberToFile(path, pages * (kPageSize / 1024ul));
+ return WriteNumberToFile(path, pages * (base::kPageSize / 1024ul));
}
bool FtraceProcfs::EnableTracing() {
diff --git a/src/traced/probes/ftrace_producer.cc b/src/traced/probes/ftrace_producer.cc
index 1462a50..9467c92 100644
--- a/src/traced/probes/ftrace_producer.cc
+++ b/src/traced/probes/ftrace_producer.cc
@@ -115,7 +115,7 @@
}
}
- config.set_total_buffer_size_kb(proto_config.total_buffer_size_kb());
+ config.set_buffer_size_kb(proto_config.buffer_size_kb());
config.set_drain_period_ms(proto_config.drain_period_ms());
// TODO(hjd): Static cast is bad, target_buffer() should return a BufferID.
diff --git a/src/tracing/core/data_source_config.cc b/src/tracing/core/data_source_config.cc
index 43ad4c7..a95d60e 100644
--- a/src/tracing/core/data_source_config.cc
+++ b/src/tracing/core/data_source_config.cc
@@ -109,11 +109,10 @@
static_cast<decltype(atrace_apps_)::value_type>(field);
}
- static_assert(
- sizeof(total_buffer_size_kb_) == sizeof(proto.total_buffer_size_kb()),
- "size mismatch");
- total_buffer_size_kb_ = static_cast<decltype(total_buffer_size_kb_)>(
- proto.total_buffer_size_kb());
+ static_assert(sizeof(buffer_size_kb_) == sizeof(proto.buffer_size_kb()),
+ "size mismatch");
+ buffer_size_kb_ =
+ static_cast<decltype(buffer_size_kb_)>(proto.buffer_size_kb());
static_assert(sizeof(drain_period_ms_) == sizeof(proto.drain_period_ms()),
"size mismatch");
@@ -145,12 +144,10 @@
*entry = static_cast<decltype(proto->atrace_apps(0))>(it);
}
- static_assert(
- sizeof(total_buffer_size_kb_) == sizeof(proto->total_buffer_size_kb()),
- "size mismatch");
- proto->set_total_buffer_size_kb(
- static_cast<decltype(proto->total_buffer_size_kb())>(
- total_buffer_size_kb_));
+ static_assert(sizeof(buffer_size_kb_) == sizeof(proto->buffer_size_kb()),
+ "size mismatch");
+ proto->set_buffer_size_kb(
+ static_cast<decltype(proto->buffer_size_kb())>(buffer_size_kb_));
static_assert(sizeof(drain_period_ms_) == sizeof(proto->drain_period_ms()),
"size mismatch");
diff --git a/test/configs/atrace.cfg b/test/configs/atrace.cfg
index 3907ba4..7b6dd8a 100644
--- a/test/configs/atrace.cfg
+++ b/test/configs/atrace.cfg
@@ -11,7 +11,7 @@
target_buffer: 0
ftrace_config {
event_names: "sched_switch"
- total_buffer_size_kb: 1344 # 4 (page size) * 8 (# cpus) * 42
+ buffer_size_kb: 168 # 4 (page size) * 42
drain_period_ms: 42
}
}
diff --git a/test/configs/ftrace.cfg b/test/configs/ftrace.cfg
index 352671e..df3082e 100644
--- a/test/configs/ftrace.cfg
+++ b/test/configs/ftrace.cfg
@@ -9,7 +9,7 @@
name: "com.google.perfetto.ftrace"
target_buffer: 0
ftrace_config {
- total_buffer_size_kb: 1344 # 4 (page size) * 8 (# cpus) * 10
+ buffer_size_kb: 40 # 4 (page size) * 10
drain_period_ms: 200
event_names: "cpufreq_interactive_setspeed"
event_names: "cpufreq_interactive_target"