From c3b40ae13184c4e6a1ff3420fb5b4631f7f9a660 Mon Sep 17 00:00:00 2001 From: Aleksei Lipniagov Date: Thu, 13 Jun 2019 18:14:06 +0300 Subject: Run static benchmarks from 'derailed_benchmarks' Two static memory benchmarks will be included in our CI pipeline. It will load gems from the Gemfile and check the amount of RAM consumed as well as the number of objects allocated and retained. Aggregated values will be included as 'metrics' into MRs while full reports will be downloadable as job artifacts. --- scripts/memory-static | 20 ++++++++++++++++++++ scripts/memory-static-objects | 27 +++++++++++++++++++++++++++ 2 files changed, 47 insertions(+) create mode 100755 scripts/memory-static create mode 100755 scripts/memory-static-objects (limited to 'scripts') diff --git a/scripts/memory-static b/scripts/memory-static new file mode 100755 index 00000000000..54f147a7a91 --- /dev/null +++ b/scripts/memory-static @@ -0,0 +1,20 @@ +#!/usr/bin/env ruby + +require_relative '../lib/gitlab/popen' + +full_report_filename, metrics_filename = ARGV +abort 'usage: memory-static ' unless full_report_filename && metrics_filename + +full_report, status = Gitlab::Popen.popen(%w(bundle exec derailed bundle:mem)) +abort 'failed to execute the benchmark' unless status.zero? + +File.open(full_report_filename, 'w') do |f| + f.write(full_report) +end + +stats = /TOP: (?.*) MiB/.match(full_report.lines.first) +abort 'failed to process the benchmark output' unless stats + +File.open(metrics_filename, 'a') do |f| + f.puts "memory_static_total_mb #{stats[:total_mibs_str].to_f.round(1)}" +end diff --git a/scripts/memory-static-objects b/scripts/memory-static-objects new file mode 100755 index 00000000000..2ad38d9717c --- /dev/null +++ b/scripts/memory-static-objects @@ -0,0 +1,27 @@ +#!/usr/bin/env ruby + +require_relative '../lib/gitlab/popen' + +full_report_filename, metrics_filename = ARGV +abort 'usage: memory-static-objects ' unless full_report_filename && metrics_filename + +full_report, status = Gitlab::Popen.popen(%w(bundle exec derailed bundle:objects)) +abort 'failed to execute the benchmark' unless status.zero? + +File.open(full_report_filename, 'w') do |f| + f.write(full_report) +end + +allocated_str = full_report.lines[1] +retained_str = full_report.lines[2] +allocated_stats = /Total allocated: (?.*) bytes \((?.*) objects\)/.match(allocated_str) +retained_stats = /Total retained: (?.*) bytes \((?.*) objects\)/.match(retained_str) + +abort 'failed to process the benchmark output' unless allocated_stats && retained_stats + +File.open(metrics_filename, 'a') do |f| + f.puts "memory_static_objects_allocated_mb #{(allocated_stats[:bytes].to_f / (1024 * 1024)).round(1)}" + f.puts "memory_static_objects_retained_mb #{(retained_stats[:bytes].to_f / (104 * 1024)).round(1)}" + f.puts "memory_static_objects_allocated_items #{allocated_stats[:objects]}" + f.puts "memory_static_objects_retained_items #{retained_stats[:objects]}" +end -- cgit v1.2.3