summaryrefslogtreecommitdiffhomepage
path: root/test/perf/linux
diff options
context:
space:
mode:
Diffstat (limited to 'test/perf/linux')
-rw-r--r--test/perf/linux/getpid_benchmark.cc18
-rw-r--r--test/perf/linux/write_benchmark.cc12
2 files changed, 30 insertions, 0 deletions
diff --git a/test/perf/linux/getpid_benchmark.cc b/test/perf/linux/getpid_benchmark.cc
index db74cb264..047a034bd 100644
--- a/test/perf/linux/getpid_benchmark.cc
+++ b/test/perf/linux/getpid_benchmark.cc
@@ -31,6 +31,24 @@ void BM_Getpid(benchmark::State& state) {
BENCHMARK(BM_Getpid);
+#ifdef __x86_64__
+
+#define SYSNO_STR1(x) #x
+#define SYSNO_STR(x) SYSNO_STR1(x)
+
+// BM_GetpidOpt uses the most often pattern of calling system calls:
+// mov $SYS_XXX, %eax; syscall.
+void BM_GetpidOpt(benchmark::State& state) {
+ for (auto s : state) {
+ __asm__("movl $" SYSNO_STR(SYS_getpid) ", %%eax\n"
+ "syscall\n"
+ : : : "rax", "rcx", "r11");
+ }
+}
+
+BENCHMARK(BM_GetpidOpt);
+#endif // __x86_64__
+
} // namespace
} // namespace testing
diff --git a/test/perf/linux/write_benchmark.cc b/test/perf/linux/write_benchmark.cc
index 7b060c70e..d495f3ddc 100644
--- a/test/perf/linux/write_benchmark.cc
+++ b/test/perf/linux/write_benchmark.cc
@@ -46,6 +46,18 @@ void BM_Write(benchmark::State& state) {
BENCHMARK(BM_Write)->Range(1, 1 << 26)->UseRealTime();
+void BM_Append(benchmark::State& state) {
+ auto file = ASSERT_NO_ERRNO_AND_VALUE(TempPath::CreateFile());
+ auto fd = ASSERT_NO_ERRNO_AND_VALUE(Open(file.path(), O_WRONLY | O_APPEND));
+
+ const char data = 'a';
+ for (auto _ : state) {
+ TEST_CHECK(WriteFd(fd.get(), &data, 1) == 1);
+ }
+}
+
+BENCHMARK(BM_Append);
+
} // namespace
} // namespace testing