wasval 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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 93fa9232ed514267c694021eda5476997530d0e77d1a6dffaece2f151ea084f0
4
- data.tar.gz: 588ddd64e4a7e5626cd7f930063e64552bb86fd311452ce330896243024c0d66
3
+ metadata.gz: 51ff6fbf16b70ddb40f11ff08c901eb580276c667d3477aec4cf30de524abe81
4
+ data.tar.gz: d859cac0bad0f52c865105abb4749799453f618e7f3eb66b45043de172085f81
5
5
  SHA512:
6
- metadata.gz: 1dbaef12759f4042ac20712caa799fff41569b8e8c63fb9578c22d63ccf7fb6fe98749477aea390e2d137626dc53a9d21e33501bde2bde795a4e87b3b93e5d0a
7
- data.tar.gz: c12b33a60c9106651c4c790838b047a8f1a766edfad0f122a26f2fbd07dbe4f9c5c98d7f5e94e62a2c7f5d4d7b1530d4d1a23480b24cb2dfc95ede6e0bcfd065
6
+ metadata.gz: c5e2c5b5c54127f9d8b4e517b3d68a9764e7a758934f0055317d8e52de355e33a985edbbb2ce1e61271955b1537672a6264b2f7375b5e57430e79d16ba307444
7
+ data.tar.gz: fd4aee2c209d178e182bb5655c895d72c2e809cf3db46ed3618900dac4becbdc5a9d7b82c245d8a6c4b9bef56e33cd3d47ac1496f74a3fc431c7e1c58a49def1
data/README.md CHANGED
@@ -97,7 +97,7 @@ result.success? # => true
97
97
  ```ruby
98
98
  Wasval.configure do |config|
99
99
  config.timeout = 10 # seconds (default: 5)
100
- config.memory_limit = 256 # MB (default: 128)
100
+ config.memory_limit = 32 # MB (default: 16)
101
101
  end
102
102
  ```
103
103
 
data/lib/wasval/config.rb CHANGED
@@ -3,7 +3,7 @@
3
3
  module Wasval
4
4
  class Config
5
5
  DEFAULT_TIMEOUT = 5
6
- DEFAULT_MEMORY_LIMIT = 128
6
+ DEFAULT_MEMORY_LIMIT = 16
7
7
 
8
8
  attr_accessor :timeout, :memory_limit
9
9
 
@@ -19,6 +19,9 @@ module Wasval
19
19
  else
20
20
  raise ArgumentError.new "Please specify 'WASVAL_RUBY_WASM_PATH' or 'WASVAL_RUBY_CWASM_PATH' env"
21
21
  end
22
+
23
+ @engine.start_epoch_interval(1000)
24
+ @baseline_memory_mb = measure_startup_memory_mb
22
25
  end
23
26
 
24
27
  def execute(code:, timeout:, memory_limit:)
@@ -42,15 +45,13 @@ module Wasval
42
45
 
43
46
  store = Wasmtime::Store.new(@engine,
44
47
  wasi_p1_config: wasi_config,
45
- limits: { memory_size: memory_limit * 1024 * 1024 }
48
+ limits: { memory_size: (@baseline_memory_mb + memory_limit) * 1024 * 1024 }
46
49
  )
47
50
  store.set_epoch_deadline(timeout)
48
51
 
49
52
  linker = Wasmtime::Linker.new(@engine)
50
53
  Wasmtime::WASI::P1.add_to_linker_sync(linker)
51
54
 
52
- @engine.start_epoch_interval(1000)
53
-
54
55
  begin
55
56
  linker.instantiate(store, @mod).invoke("_start")
56
57
  classify_output(stdout_buf, stderr_buf, store)
@@ -77,6 +78,32 @@ module Wasval
77
78
 
78
79
  private
79
80
 
81
+ def measure_startup_memory_mb
82
+ stdout_buf = +""
83
+ stderr_buf = +""
84
+ wasi_config = Wasmtime::WasiConfig.new
85
+ .set_argv(["ruby", "-"])
86
+ .set_stdin_string("")
87
+ .set_stdout_buffer(stdout_buf, 1024)
88
+ .set_stderr_buffer(stderr_buf, 1024)
89
+
90
+ probe_store = Wasmtime::Store.new(@engine,
91
+ wasi_p1_config: wasi_config,
92
+ limits: { memory_size: 512 * 1024 * 1024 }
93
+ )
94
+ probe_store.set_epoch_deadline(30)
95
+
96
+ linker = Wasmtime::Linker.new(@engine)
97
+ Wasmtime::WASI::P1.add_to_linker_sync(linker)
98
+
99
+ begin
100
+ linker.instantiate(probe_store, @mod).invoke("_start")
101
+ rescue Wasmtime::WasiExit
102
+ end
103
+
104
+ (probe_store.max_linear_memory_consumed.to_f / (1024 * 1024)).ceil
105
+ end
106
+
80
107
  def wrapped_code(code)
81
108
  <<~RUBY
82
109
  begin
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Wasval
4
- VERSION = "0.1.1"
4
+ VERSION = "0.1.2"
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: wasval
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yuji Yaginuma