[vm] A couple more benchmark for kernel loading

One that measures the two existing benchmarks together, and one that
measures max RSS.

Change-Id: I2c8e383c1e7f38ea8010f3bd6a4bcbcacb999069
Reviewed-on: https://dart-review.googlesource.com/c/79822
Commit-Queue: Zach Anderson <zra@google.com>
Reviewed-by: Alexander Markov <alexmarkov@google.com>
This commit is contained in:
Zach Anderson 2018-10-15 18:57:27 +00:00 committed by commit-bot@chromium.org
parent f3c51a4be0
commit dea6c97a08
3 changed files with 50 additions and 37 deletions

View file

@ -89,7 +89,6 @@ dart/data_uri_spawn_test: SkipByDesign # Isolate.spawnUri
dart/issue32950_test: SkipByDesign # uses spawnUri.
[ $runtime == vm && $mode == product && $compiler == dartk ]
cc/GenKernelKernelReadAllBytecode: Crash
cc/CorelibIsolateStartup: Timeout, Pass
[ $runtime != vm ]
@ -110,6 +109,8 @@ cc/Profiler_ContextAllocation: Fail, Pass # Flaky on Windows --- sometimes give
cc/Service_Profile: Skip
cc/GenKernelKernelLoadKernel: Skip # Issue 34542.
cc/GenKernelKernelReadAllBytecode: Skip # Issue 34393.
cc/GenKernelKernelCombined: Skip # Issue 34393.
cc/GenKernelKernelMaxRSS: Skip # Issue 34393.
dart/appjit_bytecode_simple_test: Skip # Issue 34393.
[ !$strong ]

View file

@ -137,36 +137,10 @@ static char* ComputeGenKernelKernelPath(const char* arg) {
return strdup(buffer);
}
BENCHMARK(GenKernelKernelLoadKernel) {
char* dill_path = ComputeGenKernelKernelPath(Benchmark::Executable());
File* file = File::Open(NULL, dill_path, File::kRead);
EXPECT(file != NULL);
bin::RefCntReleaseScope<File> rs(file);
intptr_t kernel_buffer_size = file->Length();
uint8_t* kernel_buffer =
reinterpret_cast<uint8_t*>(malloc(kernel_buffer_size));
EXPECT(kernel_buffer != NULL);
bool read_fully = file->ReadFully(kernel_buffer, kernel_buffer_size);
EXPECT(read_fully);
Timer timer(true, "GenKernelKernelLoadKernel benchmark");
timer.Start();
Dart_Handle result =
Dart_LoadLibraryFromKernel(kernel_buffer, kernel_buffer_size);
EXPECT_VALID(result);
result = Dart_FinalizeLoading(false);
EXPECT_VALID(result);
timer.Stop();
int64_t elapsed_time = timer.TotalElapsedTime();
benchmark->set_score(elapsed_time);
free(dill_path);
free(kernel_buffer);
}
BENCHMARK(GenKernelKernelReadAllBytecode) {
static int64_t GenKernelKernelBenchmark(const char* name,
bool benchmark_load,
bool benchmark_read_bytecode) {
EXPECT(benchmark_load || benchmark_read_bytecode);
bin::Builtin::SetNativeResolver(bin::Builtin::kBuiltinLibrary);
bin::Builtin::SetNativeResolver(bin::Builtin::kIOLibrary);
bin::Builtin::SetNativeResolver(bin::Builtin::kCLILibrary);
@ -184,6 +158,11 @@ BENCHMARK(GenKernelKernelReadAllBytecode) {
bool enable_interpreter_orig = FLAG_enable_interpreter;
FLAG_enable_interpreter = true;
Timer timer(true, name);
if (benchmark_load) {
timer.Start();
}
Dart_Handle result =
Dart_LoadLibraryFromKernel(kernel_buffer, kernel_buffer_size);
EXPECT_VALID(result);
@ -191,18 +170,49 @@ BENCHMARK(GenKernelKernelReadAllBytecode) {
result = Dart_FinalizeLoading(false);
EXPECT_VALID(result);
Timer timer(true, "GenKernelKernelLoadKernel benchmark");
timer.Start();
if (benchmark_read_bytecode && !benchmark_load) {
timer.Start();
}
result = Dart_ReadAllBytecode();
EXPECT_VALID(result);
if (benchmark_read_bytecode) {
result = Dart_ReadAllBytecode();
EXPECT_VALID(result);
}
timer.Stop();
int64_t elapsed_time = timer.TotalElapsedTime();
benchmark->set_score(elapsed_time);
FLAG_enable_interpreter = enable_interpreter_orig;
free(dill_path);
free(kernel_buffer);
return elapsed_time;
}
BENCHMARK(GenKernelKernelLoadKernel) {
benchmark->set_score(
GenKernelKernelBenchmark("GenKernelKernelLoadKernel benchmark",
/* benchmark_load */ true,
/* benchmark_read_bytecode */ false));
}
BENCHMARK(GenKernelKernelReadAllBytecode) {
benchmark->set_score(
GenKernelKernelBenchmark("GenKernelKernelReadAllBytecode benchmark",
/* benchmark_load */ false,
/* benchmark_read_bytecode */ true));
}
BENCHMARK(GenKernelKernelCombined) {
benchmark->set_score(
GenKernelKernelBenchmark("GenKernelKernelCombined benchmark",
/* benchmark_load */ true,
/* benchmark_read_bytecode */ true));
}
BENCHMARK(GenKernelKernelMaxRSS) {
GenKernelKernelBenchmark("GenKernelKernelMaxRSS benchmark",
/* benchmark_load */ false,
/* benchmark_read_bytecode */ true);
benchmark->set_score(bin::Process::MaxRSS());
}
//

View file

@ -15028,10 +15028,10 @@ RawCode* Code::FinalizeBytecode(const void* bytecode_data,
instrs_region.CopyFrom(0, bytecode_region);
// TODO(regis): Keep following lines or not?
code.set_compile_timestamp(OS::GetCurrentMonotonicMicros());
// TODO(regis): Do we need to notify CodeObservers for bytecode too?
// If so, provide a better name using ToLibNamePrefixedQualifiedCString().
#ifndef PRODUCT
code.set_compile_timestamp(OS::GetCurrentMonotonicMicros());
CodeObservers::NotifyAll("bytecode", instrs.PayloadStart(),
0 /* prologue_offset */, instrs.Size(),
false /* optimized */, nullptr);
@ -15053,10 +15053,12 @@ RawCode* Code::FinalizeBytecode(const void* bytecode_data,
instrs.raw()->Size(), VirtualMemory::kReadExecute);
}
}
#ifndef PRODUCT
// No Code::Comments to set. Default is 0 length Comments.
// No prologue was ever entered, optimistically assume nothing was ever
// pushed onto the stack.
code.SetPrologueOffset(bytecode_size); // TODO(regis): Correct?
#endif
return code.raw();
}