Merge "perfetto: bump max cpu buffer size in ftrace"
diff --git a/src/ftrace_reader/ftrace_config_muxer.cc b/src/ftrace_reader/ftrace_config_muxer.cc
index 81c4bc3..331ddc3 100644
--- a/src/ftrace_reader/ftrace_config_muxer.cc
+++ b/src/ftrace_reader/ftrace_config_muxer.cc
@@ -33,8 +33,8 @@
// trace_clocks in preference order.
constexpr const char* kClocks[] = {"boot", "global", "local"};
-constexpr int kDefaultPerCpuBufferSizeKb = 512; // 512kb
-constexpr int kMaxPerCpuBufferSizeKb = 2 * 1024; // 2mb
+constexpr int kDefaultPerCpuBufferSizeKb = 512; // 512kb
+constexpr int kMaxPerCpuBufferSizeKb = 64 * 1024; // 64mb
std::vector<std::string> difference(const std::set<std::string>& a,
const std::set<std::string>& b) {
@@ -209,8 +209,12 @@
size_t ComputeCpuBufferSizeInPages(size_t requested_buffer_size_kb) {
if (requested_buffer_size_kb == 0)
requested_buffer_size_kb = kDefaultPerCpuBufferSizeKb;
- if (requested_buffer_size_kb > kMaxPerCpuBufferSizeKb)
- requested_buffer_size_kb = kDefaultPerCpuBufferSizeKb;
+ if (requested_buffer_size_kb > kMaxPerCpuBufferSizeKb) {
+ PERFETTO_ELOG(
+ "The requested ftrace buf size (%zu KB) is too big, capping to %d KB",
+ requested_buffer_size_kb, kMaxPerCpuBufferSizeKb);
+ requested_buffer_size_kb = kMaxPerCpuBufferSizeKb;
+ }
size_t pages = requested_buffer_size_kb / (base::kPageSize / 1024);
if (pages == 0)
diff --git a/src/ftrace_reader/ftrace_config_muxer_unittest.cc b/src/ftrace_reader/ftrace_config_muxer_unittest.cc
index 673422c..8042117 100644
--- a/src/ftrace_reader/ftrace_config_muxer_unittest.cc
+++ b/src/ftrace_reader/ftrace_config_muxer_unittest.cc
@@ -134,12 +134,13 @@
}
TEST(FtraceConfigMuxerTest, ComputeCpuBufferSizeInPages) {
+ static constexpr size_t kMaxBufSizeInPages = 16 * 1024u;
// No buffer size given: good default (128 pages = 512kb).
EXPECT_EQ(ComputeCpuBufferSizeInPages(0), 128u);
// Buffer size given way too big: good default.
- EXPECT_EQ(ComputeCpuBufferSizeInPages(10 * 1024 * 1024), 128u);
- // The limit is 2mb per CPU, 3mb is too much.
- EXPECT_EQ(ComputeCpuBufferSizeInPages(3 * 1024), 128u);
+ EXPECT_EQ(ComputeCpuBufferSizeInPages(10 * 1024 * 1024), kMaxBufSizeInPages);
+ // The limit is 64mb per CPU, 512mb is too much.
+ EXPECT_EQ(ComputeCpuBufferSizeInPages(512 * 1024), kMaxBufSizeInPages);
// Your size ends up with less than 1 page per cpu -> 1 page.
EXPECT_EQ(ComputeCpuBufferSizeInPages(3), 1u);
// You picked a good size -> your size rounded to nearest page.
diff --git a/src/ftrace_reader/ftrace_controller_unittest.cc b/src/ftrace_reader/ftrace_controller_unittest.cc
index 5e3163d..361c0a6 100644
--- a/src/ftrace_reader/ftrace_controller_unittest.cc
+++ b/src/ftrace_reader/ftrace_controller_unittest.cc
@@ -516,21 +516,21 @@
}
{
- // Way too big buffer size -> good default.
+ // Way too big buffer size -> max size.
EXPECT_CALL(*controller->procfs(),
- WriteToFile("/root/buffer_size_kb", "512"));
+ WriteToFile("/root/buffer_size_kb", "65536"));
FtraceConfig config = CreateFtraceConfig({"foo"});
config.set_buffer_size_kb(10 * 1024 * 1024);
auto sink = controller->CreateSink(config, &delegate);
}
{
- // The limit is 8mb, 9mb is too much.
+ // The limit is 64mb, 65mb is too much.
EXPECT_CALL(*controller->procfs(),
- WriteToFile("/root/buffer_size_kb", "512"));
+ WriteToFile("/root/buffer_size_kb", "65536"));
FtraceConfig config = CreateFtraceConfig({"foo"});
ON_CALL(*controller->procfs(), NumberOfCpus()).WillByDefault(Return(2));
- config.set_buffer_size_kb(9 * 1024);
+ config.set_buffer_size_kb(65 * 1024);
auto sink = controller->CreateSink(config, &delegate);
}