serialbench 0.1.1 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.github/workflows/benchmark.yml +13 -5
- data/.github/workflows/docker.yml +35 -9
- data/.github/workflows/rake.yml +15 -0
- data/Gemfile +2 -1
- data/README.adoc +267 -1129
- data/Rakefile +0 -55
- data/config/benchmarks/full.yml +29 -0
- data/config/benchmarks/short.yml +26 -0
- data/config/environments/asdf-ruby-3.2.yml +8 -0
- data/config/environments/asdf-ruby-3.3.yml +8 -0
- data/config/environments/docker-ruby-3.0.yml +9 -0
- data/config/environments/docker-ruby-3.1.yml +9 -0
- data/config/environments/docker-ruby-3.2.yml +9 -0
- data/config/environments/docker-ruby-3.3.yml +9 -0
- data/config/environments/docker-ruby-3.4.yml +9 -0
- data/docker/Dockerfile.alpine +33 -0
- data/docker/{Dockerfile.benchmark → Dockerfile.ubuntu} +4 -3
- data/docker/README.md +2 -2
- data/exe/serialbench +1 -1
- data/lib/serialbench/benchmark_runner.rb +261 -423
- data/lib/serialbench/cli/base_cli.rb +51 -0
- data/lib/serialbench/cli/benchmark_cli.rb +380 -0
- data/lib/serialbench/cli/environment_cli.rb +181 -0
- data/lib/serialbench/cli/resultset_cli.rb +215 -0
- data/lib/serialbench/cli/ruby_build_cli.rb +238 -0
- data/lib/serialbench/cli.rb +58 -601
- data/lib/serialbench/config_manager.rb +140 -0
- data/lib/serialbench/models/benchmark_config.rb +63 -0
- data/lib/serialbench/models/benchmark_result.rb +45 -0
- data/lib/serialbench/models/environment_config.rb +71 -0
- data/lib/serialbench/models/platform.rb +59 -0
- data/lib/serialbench/models/result.rb +53 -0
- data/lib/serialbench/models/result_set.rb +71 -0
- data/lib/serialbench/models/result_store.rb +108 -0
- data/lib/serialbench/models.rb +54 -0
- data/lib/serialbench/ruby_build_manager.rb +153 -0
- data/lib/serialbench/runners/asdf_runner.rb +296 -0
- data/lib/serialbench/runners/base.rb +32 -0
- data/lib/serialbench/runners/docker_runner.rb +142 -0
- data/lib/serialbench/serializers/base_serializer.rb +8 -16
- data/lib/serialbench/serializers/json/base_json_serializer.rb +4 -4
- data/lib/serialbench/serializers/json/json_serializer.rb +0 -2
- data/lib/serialbench/serializers/json/oj_serializer.rb +0 -2
- data/lib/serialbench/serializers/json/yajl_serializer.rb +0 -2
- data/lib/serialbench/serializers/toml/base_toml_serializer.rb +5 -3
- data/lib/serialbench/serializers/toml/toml_rb_serializer.rb +0 -2
- data/lib/serialbench/serializers/toml/tomlib_serializer.rb +0 -2
- data/lib/serialbench/serializers/toml/tomlrb_serializer.rb +56 -0
- data/lib/serialbench/serializers/xml/base_xml_serializer.rb +4 -9
- data/lib/serialbench/serializers/xml/libxml_serializer.rb +0 -2
- data/lib/serialbench/serializers/xml/nokogiri_serializer.rb +0 -2
- data/lib/serialbench/serializers/xml/oga_serializer.rb +0 -2
- data/lib/serialbench/serializers/xml/ox_serializer.rb +0 -2
- data/lib/serialbench/serializers/xml/rexml_serializer.rb +0 -2
- data/lib/serialbench/serializers/yaml/base_yaml_serializer.rb +5 -1
- data/lib/serialbench/serializers/yaml/syck_serializer.rb +59 -22
- data/lib/serialbench/serializers.rb +23 -6
- data/lib/serialbench/site_generator.rb +105 -0
- data/lib/serialbench/templates/assets/css/benchmark_report.css +535 -0
- data/lib/serialbench/templates/assets/css/format_based.css +526 -0
- data/lib/serialbench/templates/assets/css/themes.css +588 -0
- data/lib/serialbench/templates/assets/js/chart_helpers.js +381 -0
- data/lib/serialbench/templates/assets/js/dashboard.js +796 -0
- data/lib/serialbench/templates/assets/js/navigation.js +142 -0
- data/lib/serialbench/templates/base.liquid +49 -0
- data/lib/serialbench/templates/format_based.liquid +279 -0
- data/lib/serialbench/templates/partials/chart_section.liquid +4 -0
- data/lib/serialbench/version.rb +1 -1
- data/lib/serialbench.rb +2 -31
- data/serialbench.gemspec +4 -1
- metadata +86 -16
- data/config/ci.yml +0 -22
- data/config/full.yml +0 -30
- data/docker/run-benchmarks.sh +0 -356
- data/lib/serialbench/chart_generator.rb +0 -821
- data/lib/serialbench/result_formatter.rb +0 -182
- data/lib/serialbench/result_merger.rb +0 -1201
- data/lib/serialbench/serializers/xml/base_parser.rb +0 -69
- data/lib/serialbench/serializers/xml/libxml_parser.rb +0 -98
- data/lib/serialbench/serializers/xml/nokogiri_parser.rb +0 -111
- data/lib/serialbench/serializers/xml/oga_parser.rb +0 -85
- data/lib/serialbench/serializers/xml/ox_parser.rb +0 -64
- data/lib/serialbench/serializers/xml/rexml_parser.rb +0 -129
data/Rakefile
CHANGED
@@ -5,59 +5,4 @@ require 'rspec/core/rake_task'
|
|
5
5
|
|
6
6
|
RSpec::Core::RakeTask.new(:spec)
|
7
7
|
|
8
|
-
desc 'Run benchmarks'
|
9
|
-
task :benchmark do
|
10
|
-
require_relative 'lib/serialbench'
|
11
|
-
|
12
|
-
puts 'Running XML benchmarks...'
|
13
|
-
results = Serialbench.run_benchmarks
|
14
|
-
|
15
|
-
puts "\nGenerating reports..."
|
16
|
-
report_files = Serialbench.generate_reports(results)
|
17
|
-
|
18
|
-
puts "\nBenchmark complete!"
|
19
|
-
puts 'Reports generated:'
|
20
|
-
puts " HTML: #{report_files[:html]}"
|
21
|
-
puts " AsciiDoc: #{report_files[:asciidoc]}"
|
22
|
-
puts " Charts: #{report_files[:charts].length} SVG files"
|
23
|
-
end
|
24
|
-
|
25
|
-
desc 'Install all XML library dependencies'
|
26
|
-
task :install_deps do
|
27
|
-
gems = %w[ox nokogiri libxml-ruby oga memory_profiler]
|
28
|
-
|
29
|
-
puts 'Installing XML library dependencies...'
|
30
|
-
gems.each do |gem_name|
|
31
|
-
puts "Installing #{gem_name}..."
|
32
|
-
system("gem install #{gem_name}")
|
33
|
-
rescue StandardError => e
|
34
|
-
puts "Warning: Failed to install #{gem_name}: #{e.message}"
|
35
|
-
end
|
36
|
-
puts 'Done!'
|
37
|
-
end
|
38
|
-
|
39
|
-
desc 'Check which XML libraries are available'
|
40
|
-
task :check_libs do
|
41
|
-
require_relative 'lib/serialbench'
|
42
|
-
|
43
|
-
runner = Serialbench::BenchmarkRunner.new
|
44
|
-
|
45
|
-
puts 'XML Library Availability Check'
|
46
|
-
puts '=' * 40
|
47
|
-
|
48
|
-
runner.parsers.each do |parser|
|
49
|
-
status = parser.available? ? '✓ Available' : '✗ Not available'
|
50
|
-
version = parser.available? ? " (#{parser.version})" : ''
|
51
|
-
puts "#{parser.name.ljust(15)} #{status}#{version}"
|
52
|
-
end
|
53
|
-
|
54
|
-
puts "\nMemory profiler: #{Serialbench::MemoryProfiler.available? ? '✓ Available' : '✗ Not available'}"
|
55
|
-
end
|
56
|
-
|
57
|
-
desc 'Clean generated files'
|
58
|
-
task :clean do
|
59
|
-
FileUtils.rm_rf('results')
|
60
|
-
puts 'Cleaned generated files'
|
61
|
-
end
|
62
|
-
|
63
8
|
task default: :spec
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# Configuration for comprehensive benchmarks - Full testing with all data sizes
|
2
|
+
# Used by Docker script for complete performance analysis
|
3
|
+
|
4
|
+
# Run name for identification
|
5
|
+
name: full-benchmark
|
6
|
+
|
7
|
+
data_sizes:
|
8
|
+
- small
|
9
|
+
- medium
|
10
|
+
- large
|
11
|
+
|
12
|
+
formats:
|
13
|
+
- xml
|
14
|
+
- json
|
15
|
+
- yaml
|
16
|
+
- toml
|
17
|
+
|
18
|
+
iterations:
|
19
|
+
small: 20
|
20
|
+
medium: 5
|
21
|
+
large: 2
|
22
|
+
|
23
|
+
operations:
|
24
|
+
- parse
|
25
|
+
- generate
|
26
|
+
- streaming
|
27
|
+
- memory
|
28
|
+
|
29
|
+
warmup: 3
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# Configuration for short benchmarks - Minimal memory usage for CI runners
|
2
|
+
# Designed for Windows and Ubuntu runners with limited memory
|
3
|
+
|
4
|
+
# Run name for identification
|
5
|
+
name: short-benchmark
|
6
|
+
|
7
|
+
data_sizes:
|
8
|
+
- small
|
9
|
+
|
10
|
+
formats:
|
11
|
+
- xml
|
12
|
+
- json
|
13
|
+
- yaml
|
14
|
+
- toml
|
15
|
+
|
16
|
+
iterations:
|
17
|
+
small: 5
|
18
|
+
medium: 2
|
19
|
+
large: 1
|
20
|
+
|
21
|
+
operations:
|
22
|
+
- parse
|
23
|
+
- generate
|
24
|
+
- streaming
|
25
|
+
|
26
|
+
warmup: 2
|
@@ -0,0 +1,33 @@
|
|
1
|
+
# Alpine-based Ruby benchmark environment using official Ruby Alpine images
|
2
|
+
ARG BASE_IMAGE=ruby:3.4-alpine
|
3
|
+
FROM ${BASE_IMAGE}
|
4
|
+
|
5
|
+
# Install system dependencies for XML libraries and build tools
|
6
|
+
RUN apk add --no-cache \
|
7
|
+
build-base \
|
8
|
+
libxml2-dev \
|
9
|
+
libxslt-dev \
|
10
|
+
yaml-dev \
|
11
|
+
zlib-dev \
|
12
|
+
openssl-dev \
|
13
|
+
linux-headers \
|
14
|
+
git
|
15
|
+
|
16
|
+
# Set working directory
|
17
|
+
WORKDIR /app
|
18
|
+
|
19
|
+
# Copy the entire application (gemspec needs full context)
|
20
|
+
COPY . .
|
21
|
+
|
22
|
+
# Update bundler and configure bundle for cross-platform compatibility
|
23
|
+
RUN gem install bundler:2.5.22 && \
|
24
|
+
bundle config set --local deployment 'false' && \
|
25
|
+
bundle config set --local path '/usr/local/bundle' && \
|
26
|
+
bundle config set --local force_ruby_platform true && \
|
27
|
+
bundle install --jobs 4 --retry 3
|
28
|
+
|
29
|
+
# Create results directory
|
30
|
+
RUN mkdir -p /app/results
|
31
|
+
|
32
|
+
# Default command runs benchmarks
|
33
|
+
ENTRYPOINT ["bundle", "exec", "serialbench"]
|
@@ -1,14 +1,15 @@
|
|
1
1
|
# Multi-stage Dockerfile for Ruby serialization benchmarks
|
2
2
|
# Supports multiple Ruby versions for comprehensive testing
|
3
3
|
|
4
|
-
ARG
|
5
|
-
FROM
|
4
|
+
ARG BASE_IMAGE=ruby:3.4-slim
|
5
|
+
FROM ${BASE_IMAGE}
|
6
6
|
|
7
7
|
# Install system dependencies for XML libraries
|
8
8
|
RUN apt-get update && apt-get install -y \
|
9
9
|
libxml2-dev \
|
10
10
|
libxslt1-dev \
|
11
11
|
build-essential \
|
12
|
+
git \
|
12
13
|
&& rm -rf /var/lib/apt/lists/*
|
13
14
|
|
14
15
|
# Set working directory
|
@@ -28,4 +29,4 @@ RUN gem install bundler:2.5.22 && \
|
|
28
29
|
RUN mkdir -p /app/results
|
29
30
|
|
30
31
|
# Default command runs parsing and generation benchmarks (memory benchmarks disabled due to hanging in Docker)
|
31
|
-
|
32
|
+
ENTRYPOINT ["bundle", "exec", "serialbench"]
|
data/docker/README.md
CHANGED
@@ -4,7 +4,7 @@ This directory contains Docker infrastructure for running Serialbench across mul
|
|
4
4
|
|
5
5
|
## Files
|
6
6
|
|
7
|
-
- `Dockerfile.
|
7
|
+
- `Dockerfile.ubuntu` - Multi-stage Dockerfile for building benchmark environments
|
8
8
|
- `run-benchmarks.sh` - Automated script for running benchmarks across multiple Ruby versions
|
9
9
|
|
10
10
|
## Quick Start
|
@@ -77,7 +77,7 @@ docker-results/
|
|
77
77
|
docker build \
|
78
78
|
--build-arg RUBY_VERSION=3.3 \
|
79
79
|
-t serialbench:ruby-3.3 \
|
80
|
-
-f docker/Dockerfile.
|
80
|
+
-f docker/Dockerfile.ubuntu \
|
81
81
|
.
|
82
82
|
```
|
83
83
|
|
data/exe/serialbench
CHANGED