all: gc: provide optimized mode (#9716)
parent
8c95f07509
commit
10bf974cda
|
@ -124,27 +124,27 @@ jobs:
|
||||||
run: |
|
run: |
|
||||||
thirdparty/tcc/tcc.exe -version
|
thirdparty/tcc/tcc.exe -version
|
||||||
./v -cg -o v cmd/v # Make sure vtcc can build itself twice
|
./v -cg -o v cmd/v # Make sure vtcc can build itself twice
|
||||||
- name: v self compilation with -gc boehm
|
- name: v self compilation with -gc boehm_full_opt
|
||||||
run: |
|
run: |
|
||||||
./v -gc boehm -o v2 cmd/v && ./v2 -gc boehm -o v3 cmd/v && ./v3 -gc boehm -o v4 cmd/v
|
./v -gc boehm_full_opt -o v2 cmd/v && ./v2 -gc boehm_full_opt -o v3 cmd/v && ./v3 -gc boehm_full_opt -o v4 cmd/v
|
||||||
mv v4 v
|
mv v4 v
|
||||||
- name: v doctor
|
- name: v doctor
|
||||||
run: |
|
run: |
|
||||||
./v doctor
|
./v doctor
|
||||||
- name: Verify `v -gc boehm test` works
|
- name: Verify `v -gc boehm_full_opt test` works
|
||||||
run: |
|
run: |
|
||||||
./v -gc boehm cmd/tools/test_if_v_test_system_works.v
|
./v -gc boehm_full_opt cmd/tools/test_if_v_test_system_works.v
|
||||||
./cmd/tools/test_if_v_test_system_works
|
./cmd/tools/test_if_v_test_system_works
|
||||||
- name: Self tests with `-gc boehm` with V compiler using Boehm-GC itself
|
- name: Self tests with `-gc boehm_full_opt` with V compiler using Boehm-GC itself
|
||||||
run: ./v -gc boehm -silent test-self
|
run: ./v -gc boehm_full_opt -silent test-self
|
||||||
- name: Test leak detector
|
- name: Test leak detector
|
||||||
run: |
|
run: |
|
||||||
./v -gc boehm_leak -o testcase_leak vlib/v/tests/testcase_leak.v
|
./v -gc boehm_leak -o testcase_leak vlib/v/tests/testcase_leak.v
|
||||||
./testcase_leak 2>leaks.txt
|
./testcase_leak 2>leaks.txt
|
||||||
grep "Found 1 leaked object" leaks.txt && grep ", sz=1000," leaks.txt
|
grep "Found 1 leaked object" leaks.txt && grep ", sz=1000," leaks.txt
|
||||||
- name: Test leak detector not being active for `-gc boehm`
|
- name: Test leak detector not being active for `-gc boehm_full_opt`
|
||||||
run: |
|
run: |
|
||||||
./v -gc boehm -o testcase_leak vlib/v/tests/testcase_leak.v
|
./v -gc boehm_full_opt -o testcase_leak vlib/v/tests/testcase_leak.v
|
||||||
./testcase_leak 2>leaks.txt
|
./testcase_leak 2>leaks.txt
|
||||||
[ "$(stat -c %s leaks.txt)" = "0" ]
|
[ "$(stat -c %s leaks.txt)" = "0" ]
|
||||||
- name: Test leak detector not being active for normal compile
|
- name: Test leak detector not being active for normal compile
|
||||||
|
|
|
@ -74,10 +74,12 @@ see also `v help build`.
|
||||||
Use and link an optional garbage collector. Only tThe Boehm–Demers–Weiser
|
Use and link an optional garbage collector. Only tThe Boehm–Demers–Weiser
|
||||||
garbage collector is supported currently with the following sub-options:
|
garbage collector is supported currently with the following sub-options:
|
||||||
|
|
||||||
`-gc boehm` ........ selects the default mode for the architecture
|
`-gc boehm` ........... selects the default mode for the architecture
|
||||||
`-gc boehm_full` ... full garbage collection mode
|
`-gc boehm_full` ...... full garbage collection mode
|
||||||
`-gc boehm_incr` ... incremental/generational garbage collection mode
|
`-gc boehm_incr` ...... incremental/generational garbage collection mode
|
||||||
`-gc boehm_leak` ... leak detection mode
|
`-gc boehm_full_opt` .. optimized full garbage collection mode
|
||||||
|
`-gc boehm_incr_opt` .. optimized incremental/generational garbage collection mode
|
||||||
|
`-gc boehm_leak` ...... leak detection mode
|
||||||
|
|
||||||
You need to install a `libgc-dev` package first, or install it manually from:
|
You need to install a `libgc-dev` package first, or install it manually from:
|
||||||
|
|
||||||
|
|
|
@ -96,7 +96,7 @@ fn (mut a array) ensure_cap(required int) {
|
||||||
}
|
}
|
||||||
new_size := cap * a.element_size
|
new_size := cap * a.element_size
|
||||||
mut new_data := &byte(0)
|
mut new_data := &byte(0)
|
||||||
if a.cap > 0 {
|
if a.data != voidptr(0) {
|
||||||
new_data = unsafe { realloc_data(a.data, a.cap * a.element_size, new_size) }
|
new_data = unsafe { realloc_data(a.data, a.cap * a.element_size, new_size) }
|
||||||
} else {
|
} else {
|
||||||
new_data = vcalloc(new_size)
|
new_data = vcalloc(new_size)
|
||||||
|
@ -656,3 +656,167 @@ pub fn (data voidptr) vbytes(len int) []byte {
|
||||||
pub fn (data &byte) vbytes(len int) []byte {
|
pub fn (data &byte) vbytes(len int) []byte {
|
||||||
return unsafe { voidptr(data).vbytes(len) }
|
return unsafe { voidptr(data).vbytes(len) }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// non-pub "noscan" versions of some above functions
|
||||||
|
fn __new_array_noscan(mylen int, cap int, elm_size int) array {
|
||||||
|
cap_ := if cap < mylen { mylen } else { cap }
|
||||||
|
arr := array{
|
||||||
|
element_size: elm_size
|
||||||
|
data: vcalloc_noscan(cap_ * elm_size)
|
||||||
|
len: mylen
|
||||||
|
cap: cap_
|
||||||
|
}
|
||||||
|
return arr
|
||||||
|
}
|
||||||
|
|
||||||
|
fn __new_array_with_default_noscan(mylen int, cap int, elm_size int, val voidptr) array {
|
||||||
|
cap_ := if cap < mylen { mylen } else { cap }
|
||||||
|
mut arr := array{
|
||||||
|
element_size: elm_size
|
||||||
|
data: vcalloc_noscan(cap_ * elm_size)
|
||||||
|
len: mylen
|
||||||
|
cap: cap_
|
||||||
|
}
|
||||||
|
if val != 0 {
|
||||||
|
for i in 0 .. arr.len {
|
||||||
|
unsafe { arr.set_unsafe(i, val) }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return arr
|
||||||
|
}
|
||||||
|
|
||||||
|
fn __new_array_with_array_default_noscan(mylen int, cap int, elm_size int, val array) array {
|
||||||
|
cap_ := if cap < mylen { mylen } else { cap }
|
||||||
|
mut arr := array{
|
||||||
|
element_size: elm_size
|
||||||
|
data: vcalloc_noscan(cap_ * elm_size)
|
||||||
|
len: mylen
|
||||||
|
cap: cap_
|
||||||
|
}
|
||||||
|
for i in 0 .. arr.len {
|
||||||
|
val_clone := val.clone()
|
||||||
|
unsafe { arr.set_unsafe(i, &val_clone) }
|
||||||
|
}
|
||||||
|
return arr
|
||||||
|
}
|
||||||
|
|
||||||
|
// Private function, used by V (`nums := [1, 2, 3]`)
|
||||||
|
fn new_array_from_c_array_noscan(len int, cap int, elm_size int, c_array voidptr) array {
|
||||||
|
cap_ := if cap < len { len } else { cap }
|
||||||
|
arr := array{
|
||||||
|
element_size: elm_size
|
||||||
|
data: vcalloc_noscan(cap_ * elm_size)
|
||||||
|
len: len
|
||||||
|
cap: cap_
|
||||||
|
}
|
||||||
|
// TODO Write all memory functions (like memcpy) in V
|
||||||
|
unsafe { C.memcpy(arr.data, c_array, len * elm_size) }
|
||||||
|
return arr
|
||||||
|
}
|
||||||
|
|
||||||
|
fn (a array) repeat_noscan(count int) array {
|
||||||
|
if count < 0 {
|
||||||
|
panic('array.repeat: count is negative: $count')
|
||||||
|
}
|
||||||
|
mut size := count * a.len * a.element_size
|
||||||
|
if size == 0 {
|
||||||
|
size = a.element_size
|
||||||
|
}
|
||||||
|
arr := array{
|
||||||
|
element_size: a.element_size
|
||||||
|
data: vcalloc_noscan(size)
|
||||||
|
len: count * a.len
|
||||||
|
cap: count * a.len
|
||||||
|
}
|
||||||
|
size_of_array := int(sizeof(array))
|
||||||
|
for i in 0 .. count {
|
||||||
|
if a.len > 0 && a.element_size == size_of_array {
|
||||||
|
ary := array{}
|
||||||
|
unsafe { C.memcpy(&ary, a.data, size_of_array) }
|
||||||
|
ary_clone := ary.clone()
|
||||||
|
unsafe { C.memcpy(arr.get_unsafe(i * a.len), &ary_clone, a.len * a.element_size) }
|
||||||
|
} else {
|
||||||
|
unsafe { C.memcpy(arr.get_unsafe(i * a.len), &byte(a.data), a.len * a.element_size) }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return arr
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn (a &array) clone_noscan() array {
|
||||||
|
mut size := a.cap * a.element_size
|
||||||
|
if size == 0 {
|
||||||
|
size++
|
||||||
|
}
|
||||||
|
mut arr := array{
|
||||||
|
element_size: a.element_size
|
||||||
|
data: vcalloc_noscan(size)
|
||||||
|
len: a.len
|
||||||
|
cap: a.cap
|
||||||
|
}
|
||||||
|
// Recursively clone-generated elements if array element is array type
|
||||||
|
size_of_array := int(sizeof(array))
|
||||||
|
if a.element_size == size_of_array {
|
||||||
|
mut is_elem_array := true
|
||||||
|
for i in 0 .. a.len {
|
||||||
|
ar := array{}
|
||||||
|
unsafe { C.memcpy(&ar, a.get_unsafe(i), size_of_array) }
|
||||||
|
if ar.len > ar.cap || ar.cap <= 0 || ar.element_size <= 0 {
|
||||||
|
is_elem_array = false
|
||||||
|
break
|
||||||
|
}
|
||||||
|
ar_clone := ar.clone()
|
||||||
|
unsafe { arr.set_unsafe(i, &ar_clone) }
|
||||||
|
}
|
||||||
|
if is_elem_array {
|
||||||
|
return arr
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if !isnil(a.data) {
|
||||||
|
unsafe { C.memcpy(&byte(arr.data), a.data, a.cap * a.element_size) }
|
||||||
|
}
|
||||||
|
return arr
|
||||||
|
}
|
||||||
|
|
||||||
|
fn (a &array) slice_clone_noscan(start int, _end int) array {
|
||||||
|
mut end := _end
|
||||||
|
$if !no_bounds_checking ? {
|
||||||
|
if start > end {
|
||||||
|
panic('array.slice: invalid slice index ($start > $end)')
|
||||||
|
}
|
||||||
|
if end > a.len {
|
||||||
|
panic('array.slice: slice bounds out of range ($end >= $a.len)')
|
||||||
|
}
|
||||||
|
if start < 0 {
|
||||||
|
panic('array.slice: slice bounds out of range ($start < 0)')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
mut data := &byte(0)
|
||||||
|
unsafe {
|
||||||
|
data = &byte(a.data) + start * a.element_size
|
||||||
|
}
|
||||||
|
l := end - start
|
||||||
|
res := array{
|
||||||
|
element_size: a.element_size
|
||||||
|
data: data
|
||||||
|
len: l
|
||||||
|
cap: l
|
||||||
|
}
|
||||||
|
return res.clone_noscan()
|
||||||
|
}
|
||||||
|
|
||||||
|
fn (a array) reverse_noscan() array {
|
||||||
|
if a.len < 2 {
|
||||||
|
return a
|
||||||
|
}
|
||||||
|
mut arr := array{
|
||||||
|
element_size: a.element_size
|
||||||
|
data: vcalloc_noscan(a.cap * a.element_size)
|
||||||
|
len: a.len
|
||||||
|
cap: a.cap
|
||||||
|
}
|
||||||
|
for i in 0 .. a.len {
|
||||||
|
unsafe { arr.set_unsafe(i, a.get_unsafe(a.len - 1 - i)) }
|
||||||
|
}
|
||||||
|
return arr
|
||||||
|
}
|
||||||
|
|
|
@ -302,7 +302,7 @@ pub fn realloc_data(old_data &byte, old_size int, new_size int) &byte {
|
||||||
// Unlike `v_calloc` vcalloc checks for negative values given in `n`.
|
// Unlike `v_calloc` vcalloc checks for negative values given in `n`.
|
||||||
pub fn vcalloc(n int) &byte {
|
pub fn vcalloc(n int) &byte {
|
||||||
if n < 0 {
|
if n < 0 {
|
||||||
panic('calloc(<=0)')
|
panic('calloc(<0)')
|
||||||
} else if n == 0 {
|
} else if n == 0 {
|
||||||
return &byte(0)
|
return &byte(0)
|
||||||
}
|
}
|
||||||
|
@ -313,6 +313,24 @@ pub fn vcalloc(n int) &byte {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// special versions of the above that allocate memory which is not scanned
|
||||||
|
// for pointers (but is collected) when the Boehm garbage collection is used
|
||||||
|
pub fn vcalloc_noscan(n int) &byte {
|
||||||
|
$if gcboehm ? {
|
||||||
|
$if vplayground ? {
|
||||||
|
if n > 10000 {
|
||||||
|
panic('allocating more than 10 KB is not allowed in the playground')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if n < 0 {
|
||||||
|
panic('calloc(<0)')
|
||||||
|
}
|
||||||
|
return &byte(unsafe { C.memset(C.GC_MALLOC_ATOMIC(n), 0, n) })
|
||||||
|
} $else {
|
||||||
|
return unsafe { vcalloc(n) }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// free allows for manually freeing memory allocated at the address `ptr`.
|
// free allows for manually freeing memory allocated at the address `ptr`.
|
||||||
[unsafe]
|
[unsafe]
|
||||||
pub fn free(ptr voidptr) {
|
pub fn free(ptr voidptr) {
|
||||||
|
|
|
@ -34,6 +34,8 @@ $if gcboehm_leak ? {
|
||||||
// compiled with `-gc boehm` or `-gc boehm_leak`.
|
// compiled with `-gc boehm` or `-gc boehm_leak`.
|
||||||
fn C.GC_MALLOC(n size_t) voidptr
|
fn C.GC_MALLOC(n size_t) voidptr
|
||||||
|
|
||||||
|
fn C.GC_MALLOC_ATOMIC(n size_t) voidptr
|
||||||
|
|
||||||
fn C.GC_MALLOC_UNCOLLECTABLE(n size_t) voidptr
|
fn C.GC_MALLOC_UNCOLLECTABLE(n size_t) voidptr
|
||||||
|
|
||||||
fn C.GC_REALLOC(ptr voidptr, n size_t) voidptr
|
fn C.GC_REALLOC(ptr voidptr, n size_t) voidptr
|
||||||
|
|
|
@ -6,6 +6,8 @@ module builtin
|
||||||
|
|
||||||
fn C.GC_MALLOC(n size_t) voidptr
|
fn C.GC_MALLOC(n size_t) voidptr
|
||||||
|
|
||||||
|
fn C.GC_MALLOC_ATOMIC(n size_t) voidptr
|
||||||
|
|
||||||
fn C.GC_MALLOC_UNCOLLECTABLE(n size_t) voidptr
|
fn C.GC_MALLOC_UNCOLLECTABLE(n size_t) voidptr
|
||||||
|
|
||||||
fn C.GC_REALLOC(ptr voidptr, n size_t) voidptr
|
fn C.GC_REALLOC(ptr voidptr, n size_t) voidptr
|
||||||
|
|
|
@ -50,10 +50,11 @@ fn (mut g Gen) array_init(node ast.ArrayInit) {
|
||||||
if node.exprs.len == 0 {
|
if node.exprs.len == 0 {
|
||||||
elem_sym := g.table.get_type_symbol(node.elem_type)
|
elem_sym := g.table.get_type_symbol(node.elem_type)
|
||||||
is_default_array := elem_sym.kind == .array && node.has_default
|
is_default_array := elem_sym.kind == .array && node.has_default
|
||||||
|
noscan := g.check_noscan(node.elem_type)
|
||||||
if is_default_array {
|
if is_default_array {
|
||||||
g.write('__new_array_with_array_default(')
|
g.write('__new_array_with_array_default${noscan}(')
|
||||||
} else {
|
} else {
|
||||||
g.write('__new_array_with_default(')
|
g.write('__new_array_with_default${noscan}(')
|
||||||
}
|
}
|
||||||
if node.has_len {
|
if node.has_len {
|
||||||
g.expr(node.len_expr)
|
g.expr(node.len_expr)
|
||||||
|
@ -145,7 +146,8 @@ fn (mut g Gen) gen_array_map(node ast.CallExpr) {
|
||||||
g.expr(node.left)
|
g.expr(node.left)
|
||||||
g.writeln(';')
|
g.writeln(';')
|
||||||
g.writeln('int ${tmp}_len = ${tmp}_orig.len;')
|
g.writeln('int ${tmp}_len = ${tmp}_orig.len;')
|
||||||
g.writeln('$ret_typ $tmp = __new_array(0, ${tmp}_len, sizeof($ret_elem_type));\n')
|
noscan := g.check_noscan(ret_info.elem_type)
|
||||||
|
g.writeln('$ret_typ $tmp = __new_array${noscan}(0, ${tmp}_len, sizeof($ret_elem_type));\n')
|
||||||
i := g.new_tmp_var()
|
i := g.new_tmp_var()
|
||||||
g.writeln('for (int $i = 0; $i < ${tmp}_len; ++$i) {')
|
g.writeln('for (int $i = 0; $i < ${tmp}_len; ++$i) {')
|
||||||
g.writeln('\t$inp_elem_type it = (($inp_elem_type*) ${tmp}_orig.data)[$i];')
|
g.writeln('\t$inp_elem_type it = (($inp_elem_type*) ${tmp}_orig.data)[$i];')
|
||||||
|
@ -337,7 +339,8 @@ fn (mut g Gen) gen_array_filter(node ast.CallExpr) {
|
||||||
g.expr(node.left)
|
g.expr(node.left)
|
||||||
g.writeln(';')
|
g.writeln(';')
|
||||||
g.writeln('int ${tmp}_len = ${tmp}_orig.len;')
|
g.writeln('int ${tmp}_len = ${tmp}_orig.len;')
|
||||||
g.writeln('$styp $tmp = __new_array(0, ${tmp}_len, sizeof($elem_type_str));\n')
|
noscan := g.check_noscan(info.elem_type)
|
||||||
|
g.writeln('$styp $tmp = __new_array${noscan}(0, ${tmp}_len, sizeof($elem_type_str));\n')
|
||||||
i := g.new_tmp_var()
|
i := g.new_tmp_var()
|
||||||
g.writeln('for (int $i = 0; $i < ${tmp}_len; ++$i) {')
|
g.writeln('for (int $i = 0; $i < ${tmp}_len; ++$i) {')
|
||||||
g.writeln('\t$elem_type_str it = (($elem_type_str*) ${tmp}_orig.data)[$i];')
|
g.writeln('\t$elem_type_str it = (($elem_type_str*) ${tmp}_orig.data)[$i];')
|
||||||
|
|
|
@ -427,7 +427,9 @@ pub fn (mut g Gen) init() {
|
||||||
}
|
}
|
||||||
g.comptime_defines.writeln('')
|
g.comptime_defines.writeln('')
|
||||||
}
|
}
|
||||||
if g.pref.gc_mode in [.boehm_full, .boehm_incr, .boehm, .boehm_leak] {
|
if g.pref.gc_mode in [.boehm_full, .boehm_incr, .boehm_full_opt, .boehm_incr_opt, .boehm,
|
||||||
|
.boehm_leak,
|
||||||
|
] {
|
||||||
g.comptime_defines.writeln('#define _VGCBOEHM (1)')
|
g.comptime_defines.writeln('#define _VGCBOEHM (1)')
|
||||||
}
|
}
|
||||||
if g.pref.is_debug || 'debug' in g.pref.compile_defines {
|
if g.pref.is_debug || 'debug' in g.pref.compile_defines {
|
||||||
|
@ -5766,7 +5768,8 @@ fn (mut g Gen) type_default(typ_ ast.Type) string {
|
||||||
if elem_type_str.starts_with('C__') {
|
if elem_type_str.starts_with('C__') {
|
||||||
elem_type_str = elem_type_str[3..]
|
elem_type_str = elem_type_str[3..]
|
||||||
}
|
}
|
||||||
init_str := '__new_array(0, 1, sizeof($elem_type_str))'
|
noscan := g.check_noscan(elem_typ)
|
||||||
|
init_str := '__new_array${noscan}(0, 1, sizeof($elem_type_str))'
|
||||||
if typ.has_flag(.shared_f) {
|
if typ.has_flag(.shared_f) {
|
||||||
atyp := '__shared__Array_${g.table.get_type_symbol(elem_typ).cname}'
|
atyp := '__shared__Array_${g.table.get_type_symbol(elem_typ).cname}'
|
||||||
return '($atyp*)__dup_shared_array(&($atyp){.val = $init_str}, sizeof($atyp))'
|
return '($atyp*)__dup_shared_array(&($atyp){.val = $init_str}, sizeof($atyp))'
|
||||||
|
@ -6378,3 +6381,64 @@ fn (mut g Gen) trace(fbase string, message string) {
|
||||||
println('> g.trace | ${fbase:-10s} | $message')
|
println('> g.trace | ${fbase:-10s} | $message')
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// returns true if `t` includes any pointer(s) - during garbage collection heap regions
|
||||||
|
// that contain no pointers do not have to be scanned
|
||||||
|
pub fn (mut g Gen) contains_ptr(el_typ ast.Type) bool {
|
||||||
|
if el_typ.is_ptr() || el_typ.is_pointer() {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
typ := g.unwrap_generic(el_typ)
|
||||||
|
if typ.is_ptr() {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
sym := g.table.get_final_type_symbol(typ)
|
||||||
|
if sym.language != .v {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
match sym.kind {
|
||||||
|
.i8, .i16, .int, .i64, .byte, .u16, .u32, .u64, .f32, .f64, .char, .size_t, .rune, .bool,
|
||||||
|
.enum_ {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
.array_fixed {
|
||||||
|
info := sym.info as ast.ArrayFixed
|
||||||
|
return g.contains_ptr(info.elem_type)
|
||||||
|
}
|
||||||
|
.struct_ {
|
||||||
|
info := sym.info as ast.Struct
|
||||||
|
for embed in info.embeds {
|
||||||
|
if g.contains_ptr(embed) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for field in info.fields {
|
||||||
|
if g.contains_ptr(field.typ) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
.aggregate {
|
||||||
|
info := sym.info as ast.Aggregate
|
||||||
|
for atyp in info.types {
|
||||||
|
if g.contains_ptr(atyp) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn (mut g Gen) check_noscan(elem_typ ast.Type) string {
|
||||||
|
if g.pref.gc_mode in [.boehm_full_opt, .boehm_incr_opt] {
|
||||||
|
if !g.contains_ptr(elem_typ) {
|
||||||
|
return '_noscan'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return ''
|
||||||
|
}
|
||||||
|
|
|
@ -70,13 +70,15 @@ fn (mut g Gen) gen_c_main_function_header() {
|
||||||
|
|
||||||
fn (mut g Gen) gen_c_main_header() {
|
fn (mut g Gen) gen_c_main_header() {
|
||||||
g.gen_c_main_function_header()
|
g.gen_c_main_function_header()
|
||||||
if g.pref.gc_mode in [.boehm_full, .boehm_incr, .boehm, .boehm_leak] {
|
if g.pref.gc_mode in [.boehm_full, .boehm_incr, .boehm_full_opt, .boehm_incr_opt, .boehm,
|
||||||
|
.boehm_leak,
|
||||||
|
] {
|
||||||
g.writeln('#if defined(_VGCBOEHM)')
|
g.writeln('#if defined(_VGCBOEHM)')
|
||||||
if g.pref.gc_mode == .boehm_leak {
|
if g.pref.gc_mode == .boehm_leak {
|
||||||
g.writeln('\tGC_set_find_leak(1);')
|
g.writeln('\tGC_set_find_leak(1);')
|
||||||
}
|
}
|
||||||
g.writeln('\tGC_INIT();')
|
g.writeln('\tGC_INIT();')
|
||||||
if g.pref.gc_mode == .boehm_incr {
|
if g.pref.gc_mode in [.boehm_incr, .boehm_incr_opt] {
|
||||||
g.writeln('\tGC_enable_incremental();')
|
g.writeln('\tGC_enable_incremental();')
|
||||||
}
|
}
|
||||||
g.writeln('#endif')
|
g.writeln('#endif')
|
||||||
|
@ -164,13 +166,15 @@ pub fn (mut g Gen) gen_c_main_for_tests() {
|
||||||
main_fn_start_pos := g.out.len
|
main_fn_start_pos := g.out.len
|
||||||
g.writeln('')
|
g.writeln('')
|
||||||
g.gen_c_main_function_header()
|
g.gen_c_main_function_header()
|
||||||
if g.pref.gc_mode in [.boehm_full, .boehm_incr, .boehm, .boehm_leak] {
|
if g.pref.gc_mode in [.boehm_full, .boehm_incr, .boehm_full_opt, .boehm_incr_opt, .boehm,
|
||||||
|
.boehm_leak,
|
||||||
|
] {
|
||||||
g.writeln('#if defined(_VGCBOEHM)')
|
g.writeln('#if defined(_VGCBOEHM)')
|
||||||
if g.pref.gc_mode == .boehm_leak {
|
if g.pref.gc_mode == .boehm_leak {
|
||||||
g.writeln('\tGC_set_find_leak(1);')
|
g.writeln('\tGC_set_find_leak(1);')
|
||||||
}
|
}
|
||||||
g.writeln('\tGC_INIT();')
|
g.writeln('\tGC_INIT();')
|
||||||
if g.pref.gc_mode == .boehm_incr {
|
if g.pref.gc_mode in [.boehm_incr, .boehm_incr_opt] {
|
||||||
g.writeln('\tGC_enable_incremental();')
|
g.writeln('\tGC_enable_incremental();')
|
||||||
}
|
}
|
||||||
g.writeln('#endif')
|
g.writeln('#endif')
|
||||||
|
|
|
@ -416,7 +416,7 @@ fn (mut g Gen) call_expr(node ast.CallExpr) {
|
||||||
g.inside_call = false
|
g.inside_call = false
|
||||||
}
|
}
|
||||||
gen_keep_alive := node.is_keep_alive && node.return_type != ast.void_type
|
gen_keep_alive := node.is_keep_alive && node.return_type != ast.void_type
|
||||||
&& g.pref.gc_mode in [.boehm_full, .boehm_incr, .boehm]
|
&& g.pref.gc_mode in [.boehm_full, .boehm_incr, .boehm_full_opt, .boehm_incr_opt, .boehm]
|
||||||
gen_or := node.or_block.kind != .absent // && !g.is_autofree
|
gen_or := node.or_block.kind != .absent // && !g.is_autofree
|
||||||
is_gen_or_and_assign_rhs := gen_or && !g.discard_or_result
|
is_gen_or_and_assign_rhs := gen_or && !g.discard_or_result
|
||||||
cur_line := if is_gen_or_and_assign_rhs || gen_keep_alive { // && !g.is_autofree {
|
cur_line := if is_gen_or_and_assign_rhs || gen_keep_alive { // && !g.is_autofree {
|
||||||
|
@ -890,7 +890,8 @@ fn (mut g Gen) fn_call(node ast.CallExpr) {
|
||||||
if g.is_json_fn {
|
if g.is_json_fn {
|
||||||
g.write(json_obj)
|
g.write(json_obj)
|
||||||
} else {
|
} else {
|
||||||
if node.is_keep_alive && g.pref.gc_mode in [.boehm_full, .boehm_incr, .boehm] {
|
if node.is_keep_alive
|
||||||
|
&& g.pref.gc_mode in [.boehm_full, .boehm_incr, .boehm_full_opt, .boehm_incr_opt, .boehm] {
|
||||||
cur_line := g.go_before_stmt(0)
|
cur_line := g.go_before_stmt(0)
|
||||||
tmp_cnt_save = g.keep_alive_call_pregen(node)
|
tmp_cnt_save = g.keep_alive_call_pregen(node)
|
||||||
g.write(cur_line)
|
g.write(cur_line)
|
||||||
|
|
|
@ -222,11 +222,12 @@ fn (mut g Gen) decode_array(value_type ast.Type) string {
|
||||||
$styp val = *($styp*)val2.data;
|
$styp val = *($styp*)val2.data;
|
||||||
'
|
'
|
||||||
}
|
}
|
||||||
|
noscan := g.check_noscan(value_type)
|
||||||
return '
|
return '
|
||||||
if(root && !cJSON_IsArray(root) && !cJSON_IsNull(root)) {
|
if(root && !cJSON_IsArray(root) && !cJSON_IsNull(root)) {
|
||||||
return (Option_Array_$styp){.state = 2, .err = v_error(string_add(_SLIT("Json element is not an array: "), tos2((byteptr)cJSON_PrintUnformatted(root))))};
|
return (Option_Array_$styp){.state = 2, .err = v_error(string_add(_SLIT("Json element is not an array: "), tos2((byteptr)cJSON_PrintUnformatted(root))))};
|
||||||
}
|
}
|
||||||
res = __new_array(0, 0, sizeof($styp));
|
res = __new_array${noscan}(0, 0, sizeof($styp));
|
||||||
const cJSON *jsval = NULL;
|
const cJSON *jsval = NULL;
|
||||||
cJSON_ArrayForEach(jsval, root)
|
cJSON_ArrayForEach(jsval, root)
|
||||||
{
|
{
|
||||||
|
|
|
@ -100,6 +100,14 @@ pub fn mark_used(mut table ast.Table, pref &pref.Preferences, ast_files []ast.Fi
|
||||||
'os.init_os_args',
|
'os.init_os_args',
|
||||||
'os.init_os_args_wide',
|
'os.init_os_args_wide',
|
||||||
]
|
]
|
||||||
|
if pref.gc_mode in [.boehm_full_opt, .boehm_incr_opt] {
|
||||||
|
all_fn_root_names << [
|
||||||
|
'__new_array_noscan',
|
||||||
|
'__new_array_with_default_noscan',
|
||||||
|
'__new_array_with_array_default_noscan',
|
||||||
|
'new_array_from_c_array_noscan',
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
for k, mut mfn in all_fns {
|
for k, mut mfn in all_fns {
|
||||||
mut method_receiver_typename := ''
|
mut method_receiver_typename := ''
|
||||||
|
|
|
@ -21,6 +21,8 @@ pub enum GarbageCollectionMode {
|
||||||
no_gc
|
no_gc
|
||||||
boehm_full // full garbage collection mode
|
boehm_full // full garbage collection mode
|
||||||
boehm_incr // incremental garbage colletion mode
|
boehm_incr // incremental garbage colletion mode
|
||||||
|
boehm_full_opt // full garbage collection mode
|
||||||
|
boehm_incr_opt // incremental garbage colletion mode
|
||||||
boehm // default Boehm-GC mode for architecture
|
boehm // default Boehm-GC mode for architecture
|
||||||
boehm_leak // leak detection mode (makes `gc_check_leaks()` work)
|
boehm_leak // leak detection mode (makes `gc_check_leaks()` work)
|
||||||
}
|
}
|
||||||
|
@ -241,6 +243,18 @@ pub fn parse_args(known_external_commands []string, args []string) (&Preferences
|
||||||
parse_define(mut res, 'gcboehm')
|
parse_define(mut res, 'gcboehm')
|
||||||
parse_define(mut res, 'gcboehm_incr')
|
parse_define(mut res, 'gcboehm_incr')
|
||||||
}
|
}
|
||||||
|
'boehm_full_opt' {
|
||||||
|
res.gc_mode = .boehm_full_opt
|
||||||
|
parse_define(mut res, 'gcboehm')
|
||||||
|
parse_define(mut res, 'gcboehm_full')
|
||||||
|
parse_define(mut res, 'gcboehm_opt')
|
||||||
|
}
|
||||||
|
'boehm_incr_opt' {
|
||||||
|
res.gc_mode = .boehm_incr_opt
|
||||||
|
parse_define(mut res, 'gcboehm')
|
||||||
|
parse_define(mut res, 'gcboehm_incr')
|
||||||
|
parse_define(mut res, 'gcboehm_opt')
|
||||||
|
}
|
||||||
'boehm' {
|
'boehm' {
|
||||||
res.gc_mode = .boehm
|
res.gc_mode = .boehm
|
||||||
parse_define(mut res, 'gcboehm')
|
parse_define(mut res, 'gcboehm')
|
||||||
|
@ -251,7 +265,13 @@ pub fn parse_args(known_external_commands []string, args []string) (&Preferences
|
||||||
parse_define(mut res, 'gcboehm_leak')
|
parse_define(mut res, 'gcboehm_leak')
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
eprintln('unknown garbage collection mode, only `-gc boehm`, `-gc boehm_incr`, `-gc boehm_full` and `-gc boehm_leak` are supported')
|
eprintln('unknown garbage collection mode `-gc $gc_mode`, supported modes are:`')
|
||||||
|
eprintln(' `-gc boehm` ............ default mode for the platform')
|
||||||
|
eprintln(' `-gc boehm_full` ....... classic full collection')
|
||||||
|
eprintln(' `-gc boehm_incr` ....... incremental collection')
|
||||||
|
eprintln(' `-gc boehm_full_opt` ... optimized classic full collection')
|
||||||
|
eprintln(' `-gc boehm_incr_opt` ... optimized incremental collection')
|
||||||
|
eprintln(' `-gc boehm_leak` ....... leak detection (for debugging)')
|
||||||
exit(1)
|
exit(1)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Binary file not shown.
File diff suppressed because it is too large
Load Diff
After Width: | Height: | Size: 1.1 MiB |
|
@ -1,9 +1,17 @@
|
||||||
#!/usr/bin/gnuplot -persist
|
#!/usr/bin/gnuplot -persist
|
||||||
set title "Boehm-GC: Full vs. Incremental/Generational Mode"
|
set title "Boehm-GC: Pause Times - Classic vs. Optimized Modes" font ",18"
|
||||||
set xlabel "Interval #"
|
set xlabel "Interval #"
|
||||||
|
set xtics out nomirror
|
||||||
|
set xtic 1000000
|
||||||
|
set grid noxtics ytics
|
||||||
set ylabel "Pause Time [ms]"
|
set ylabel "Pause Time [ms]"
|
||||||
set terminal pdfcairo transparent enhanced fontscale 0.5 size 5.00in, 3.00in
|
set terminal pdfcairo transparent enhanced fontscale 0.5 size 5.00in, 3.00in
|
||||||
|
set key box at 4810000,77 Left enhanced opaque samplen 3 height 0.5
|
||||||
set output "GC_bench.pdf"
|
set output "GC_bench.pdf"
|
||||||
plot "boehm_full.txt" title "full GC" w i, "boehm_incr.txt" title "incr/generational GC" w i
|
plot "boehm_full.txt" title "{/Monospace -gc boehm\\_full}" w i lt 1, "boehm_incr_opt.txt" title "{/Monospace -gc boehm\\_incr\\_opt}" w i lt 2, "boehm_full_opt.txt" title "{/Monospace -gc boehm\\_full\\_opt}" w i lt 7
|
||||||
|
set output
|
||||||
|
set terminal svg size 900,600 dynamic enhanced
|
||||||
|
set output "GC_bench.svg"
|
||||||
|
replot
|
||||||
set output
|
set output
|
||||||
# EOF
|
# EOF
|
||||||
|
|
|
@ -1,32 +1,43 @@
|
||||||
|
import os
|
||||||
import time
|
import time
|
||||||
import rand
|
import rand
|
||||||
import math
|
import math
|
||||||
|
|
||||||
struct MemObj {
|
struct DataObj {
|
||||||
mut:
|
mut:
|
||||||
nxt []&MemObj
|
data []f64
|
||||||
|
}
|
||||||
|
|
||||||
|
struct PtrObj {
|
||||||
|
mut:
|
||||||
|
nxt []&DataObj
|
||||||
|
}
|
||||||
|
|
||||||
|
struct PtrPtrObj {
|
||||||
|
mut:
|
||||||
|
nxt []&PtrObj
|
||||||
}
|
}
|
||||||
|
|
||||||
const (
|
const (
|
||||||
log2n = 10
|
log2n = 11
|
||||||
n = 1 << log2n
|
n = 1 << log2n
|
||||||
n4 = f64(u64(1) << (4 * log2n))
|
n4 = f64(u64(1) << (4 * log2n))
|
||||||
)
|
)
|
||||||
|
|
||||||
fn waste_mem() {
|
fn waste_mem() {
|
||||||
mut objs := MemObj{
|
mut objs := PtrPtrObj{
|
||||||
nxt: []&MemObj{len: n}
|
nxt: []&PtrObj{len: n}
|
||||||
}
|
}
|
||||||
for {
|
for {
|
||||||
sz := rand.int_in_range(10, 100000)
|
sz := rand.int_in_range(10, 1000)
|
||||||
mut new_obj := &MemObj{
|
mut new_obj := &PtrObj{
|
||||||
nxt: []&MemObj{len: sz}
|
nxt: []&DataObj{len: sz}
|
||||||
}
|
}
|
||||||
sz2 := rand.int_in_range(10, 100000)
|
sz2 := rand.int_in_range(10, 500000)
|
||||||
new_obj2 := &MemObj{
|
new_obj2 := &DataObj{
|
||||||
nxt: []&MemObj{len: sz2}
|
data: []f64{len: sz2}
|
||||||
}
|
}
|
||||||
idx2 := rand.int_in_range(0, sz / 2)
|
idx2 := rand.int_in_range(0, sz)
|
||||||
new_obj.nxt[idx2] = new_obj2
|
new_obj.nxt[idx2] = new_obj2
|
||||||
// non-equally distributed random index
|
// non-equally distributed random index
|
||||||
idx := int(math.sqrt(math.sqrt(rand.f64n(n4))))
|
idx := int(math.sqrt(math.sqrt(rand.f64n(n4))))
|
||||||
|
@ -35,9 +46,17 @@ fn waste_mem() {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
|
mut n_iterations := 5_000_000
|
||||||
|
if os.args.len == 2 {
|
||||||
|
n_iterations = os.args[1].int()
|
||||||
|
}
|
||||||
|
if os.args.len > 2 || n_iterations <= 0 {
|
||||||
|
eprintln('usage:\n\t${os.args[0]} [num_iterations]')
|
||||||
|
exit(1)
|
||||||
|
}
|
||||||
go waste_mem()
|
go waste_mem()
|
||||||
mut last := time.sys_mono_now()
|
mut last := time.sys_mono_now()
|
||||||
for _ in 0 .. 10_000_000 {
|
for _ in 0 .. n_iterations {
|
||||||
now := time.sys_mono_now()
|
now := time.sys_mono_now()
|
||||||
interval := now - last
|
interval := now - last
|
||||||
println(f64(interval) / f64(time.millisecond))
|
println(f64(interval) / f64(time.millisecond))
|
||||||
|
|
|
@ -0,0 +1,9 @@
|
||||||
|
#!/usr/bin/gnuplot -persist
|
||||||
|
set title "Boehm-GC: Optimized vs. non-Optimized (Full Mode)"
|
||||||
|
set xlabel "Interval #"
|
||||||
|
set ylabel "Pause Time [ms]"
|
||||||
|
set terminal pdfcairo transparent enhanced fontscale 0.5 size 5.00in, 3.00in
|
||||||
|
set output "GC_bench_full.pdf"
|
||||||
|
plot "boehm_full.txt" title "full GC" w i, "boehm_full_opt.txt" title "full GC (opt)" w i
|
||||||
|
set output
|
||||||
|
# EOF
|
|
@ -0,0 +1,9 @@
|
||||||
|
#!/usr/bin/gnuplot -persist
|
||||||
|
set title "Boehm-GC: Optimized vs. non-Optimized (Generational Mode)"
|
||||||
|
set xlabel "Interval #"
|
||||||
|
set ylabel "Pause Time [ms]"
|
||||||
|
set terminal pdfcairo transparent enhanced fontscale 0.5 size 5.00in, 3.00in
|
||||||
|
set output "GC_bench_incr.pdf"
|
||||||
|
plot "boehm_incr.txt" title "non-optimized GC" w i, "boehm_incr_opt.txt" title "optimized GC" w i
|
||||||
|
set output
|
||||||
|
# EOF
|
|
@ -0,0 +1,9 @@
|
||||||
|
#!/usr/bin/gnuplot -persist
|
||||||
|
set title "Boehm-GC: Full vs. Generational Mode (non-opt)"
|
||||||
|
set xlabel "Interval #"
|
||||||
|
set ylabel "Pause Time [ms]"
|
||||||
|
set terminal pdfcairo transparent enhanced fontscale 0.5 size 5.00in, 3.00in
|
||||||
|
set output "GC_bench_non_opt.pdf"
|
||||||
|
plot "boehm_full.txt" title "full GC" w i, "boehm_incr.txt" title "incr/generational GC" w i
|
||||||
|
set output
|
||||||
|
# EOF
|
|
@ -0,0 +1,9 @@
|
||||||
|
#!/usr/bin/gnuplot -persist
|
||||||
|
set title "Boehm-GC: Full vs. Generational Mode (optimized)"
|
||||||
|
set xlabel "Interval #"
|
||||||
|
set ylabel "Pause Time [ms]"
|
||||||
|
set terminal pdfcairo transparent enhanced fontscale 0.5 size 5.00in, 3.00in
|
||||||
|
set output "GC_bench_opt.pdf"
|
||||||
|
plot "boehm_full_opt.txt" title "full GC" w i, "boehm_incr_opt.txt" title "incr/generational GC" w i
|
||||||
|
set output
|
||||||
|
# EOF
|
|
@ -1,9 +1,29 @@
|
||||||
.PHONY: all
|
.PHONY: all
|
||||||
|
|
||||||
all: GC_bench.pdf
|
all: GC_bench_non_opt.pdf GC_bench_full.pdf GC_bench_incr.pdf GC_bench_opt.pdf GC_bench.pdf Resources.pdf
|
||||||
|
|
||||||
GC_bench.pdf: boehm_full.txt boehm_incr.txt
|
GC_bench_non_opt.pdf: GC_bench_non_opt.plt boehm_full.txt boehm_incr.txt
|
||||||
gnuplot GC_bench.plt
|
gnuplot $<
|
||||||
|
@echo "$@ created"
|
||||||
|
|
||||||
|
GC_bench_full.pdf: GC_bench_full.plt boehm_full.txt boehm_full_opt.txt
|
||||||
|
gnuplot $<
|
||||||
|
@echo "$@ created"
|
||||||
|
|
||||||
|
GC_bench_incr.pdf: GC_bench_incr.plt boehm_incr.txt boehm_incr_opt.txt
|
||||||
|
gnuplot $<
|
||||||
|
@echo "$@ created"
|
||||||
|
|
||||||
|
GC_bench_opt.pdf: GC_bench_opt.plt boehm_full_opt.txt boehm_incr_opt.txt
|
||||||
|
gnuplot $<
|
||||||
|
@echo "$@ created"
|
||||||
|
|
||||||
|
GC_bench.pdf: GC_bench.plt boehm_full.txt boehm_incr_opt.txt
|
||||||
|
gnuplot $<
|
||||||
|
@echo "$@ created"
|
||||||
|
|
||||||
|
Resources.pdf: Resources.plt resources.txt
|
||||||
|
gnuplot $<
|
||||||
@echo "$@ created"
|
@echo "$@ created"
|
||||||
|
|
||||||
boehm_full.txt: GC_bench_full
|
boehm_full.txt: GC_bench_full
|
||||||
|
@ -16,11 +36,31 @@ boehm_incr.txt: GC_bench_incr
|
||||||
sleep 1
|
sleep 1
|
||||||
./$< > $@
|
./$< > $@
|
||||||
|
|
||||||
|
boehm_full_opt.txt: GC_bench_full_opt
|
||||||
|
sync
|
||||||
|
sleep 1
|
||||||
|
./$< > $@
|
||||||
|
|
||||||
|
boehm_incr_opt.txt: GC_bench_incr_opt
|
||||||
|
sync
|
||||||
|
sleep 1
|
||||||
|
./$< > $@
|
||||||
|
|
||||||
GC_bench_full: GC_bench.v
|
GC_bench_full: GC_bench.v
|
||||||
v -prod -gc boehm_full -o $@ $<
|
v -prod -gc boehm_full -o $@ $<
|
||||||
|
|
||||||
GC_bench_incr: GC_bench.v
|
GC_bench_incr: GC_bench.v
|
||||||
v -prod -gc boehm_incr -o $@ $<
|
v -prod -gc boehm_incr -o $@ $<
|
||||||
|
|
||||||
|
GC_bench_full_opt: GC_bench.v
|
||||||
|
v -prod -gc boehm_full_opt -o $@ $<
|
||||||
|
|
||||||
|
GC_bench_incr_opt: GC_bench.v
|
||||||
|
v -prod -gc boehm_incr_opt -o $@ $<
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
rm -f boehm_full.txt boehm_incr.txt GC_bench.pdf GC_bench_full GC_bench_incr
|
rm -f boehm_full.txt boehm_incr.txt boehm_full_opt.txt boehm_incr_opt.txt \
|
||||||
|
GC_bench_non_opt.pdf GC_bench_full.pdf GC_bench_incr.pdf \
|
||||||
|
GC_bench_opt.pdf GC_bench.pdf Resources.pdf \
|
||||||
|
GC_bench_full GC_bench_incr GC_bench_full_opt GC_bench_incr_opt \
|
||||||
|
GC_bench.svg Resources.svg
|
||||||
|
|
|
@ -0,0 +1,45 @@
|
||||||
|
#!/usr/local/bin/gnuplot -persist
|
||||||
|
set terminal pdfcairo transparent enhanced fontscale 0.5 size 8.00in, 4.50in
|
||||||
|
set output "Resources.pdf"
|
||||||
|
set multiplot layout 1,3 title "\nBoehm GC: Resource Requirements for \`GC\\_bench.v\` (2·10^8 Iterations)\n" font ",18"
|
||||||
|
set rmargin 9
|
||||||
|
set grid noxtics ytics
|
||||||
|
set xtics border rotate by -45
|
||||||
|
set key box Right samplen 1 spacing 1 height 0.5 opaque
|
||||||
|
set style data histogram
|
||||||
|
set style histogram clustered gap 1 title textcolor lt -1
|
||||||
|
set style fill solid border -1
|
||||||
|
#
|
||||||
|
set ylabel "Process Memory [GB]"
|
||||||
|
plot [-1:4] [0:9.36] "resources.txt" using 3:xtic(1) title "{/Monospace Memory Usage}" lt 2
|
||||||
|
#
|
||||||
|
set lmargin at screen 0.39
|
||||||
|
set ylabel "CPU Usage [% of 1 Core]"
|
||||||
|
plot [-1:4] [0:750] "resources.txt" using 5:xtic(1) title "{/Monospace CPU Usage}" lt 7
|
||||||
|
#
|
||||||
|
set lmargin at screen 0.71
|
||||||
|
set ylabel "Time [s]"
|
||||||
|
plot [-1:4] [0:210] "resources.txt" using 4:xtic(1) title "{/Monospace Time to Complete}" lt 3
|
||||||
|
unset multiplot
|
||||||
|
set output
|
||||||
|
unset margin
|
||||||
|
set terminal svg size 900,530 dynamic enhanced
|
||||||
|
set output "Resources.svg"
|
||||||
|
set multiplot layout 1,3 title "\nBoehm GC: Resource Requirements for \`GC\\_bench.v\` (2·10^8 Iterations)\n" font ",18"
|
||||||
|
#
|
||||||
|
set rmargin at screen 0.27
|
||||||
|
set ylabel "Process Memory [GB]"
|
||||||
|
plot [-1:4] [0:9.36] "resources.txt" using 3:xtic(1) title "{/Monospace Memory Usage}" lt 2
|
||||||
|
#
|
||||||
|
set lmargin at screen 0.38
|
||||||
|
set rmargin at screen 0.59
|
||||||
|
set ylabel "CPU Usage [% of 1 Core]"
|
||||||
|
plot [-1:4] [0:750] "resources.txt" using 5:xtic(1) title "{/Monospace CPU Usage}" lt 7
|
||||||
|
#
|
||||||
|
set lmargin at screen 0.71
|
||||||
|
unset rmargin
|
||||||
|
set ylabel "Time [s]"
|
||||||
|
plot [-1:4] [0:210] "resources.txt" using 4:xtic(1) title "{/Monospace Time to Complete}" lt 3
|
||||||
|
unset multiplot
|
||||||
|
set output
|
||||||
|
# EOF
|
Binary file not shown.
|
@ -0,0 +1,613 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8" standalone="no"?>
|
||||||
|
<svg
|
||||||
|
viewBox="0 0 900 530"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||||
|
>
|
||||||
|
|
||||||
|
<title>Gnuplot</title>
|
||||||
|
<desc>Produced by GNUPLOT 5.2 patchlevel 8 </desc>
|
||||||
|
|
||||||
|
<g id="gnuplot_canvas">
|
||||||
|
|
||||||
|
<rect x="0" y="0" width="900" height="530" fill="none"/>
|
||||||
|
<defs>
|
||||||
|
|
||||||
|
<circle id='gpDot' r='0.5' stroke-width='0.5' stroke='currentColor'/>
|
||||||
|
<path id='gpPt0' stroke-width='0.222' stroke='currentColor' d='M-1,0 h2 M0,-1 v2'/>
|
||||||
|
<path id='gpPt1' stroke-width='0.222' stroke='currentColor' d='M-1,-1 L1,1 M1,-1 L-1,1'/>
|
||||||
|
<path id='gpPt2' stroke-width='0.222' stroke='currentColor' d='M-1,0 L1,0 M0,-1 L0,1 M-1,-1 L1,1 M-1,1 L1,-1'/>
|
||||||
|
<rect id='gpPt3' stroke-width='0.222' stroke='currentColor' x='-1' y='-1' width='2' height='2'/>
|
||||||
|
<rect id='gpPt4' stroke-width='0.222' stroke='currentColor' fill='currentColor' x='-1' y='-1' width='2' height='2'/>
|
||||||
|
<circle id='gpPt5' stroke-width='0.222' stroke='currentColor' cx='0' cy='0' r='1'/>
|
||||||
|
<use xlink:href='#gpPt5' id='gpPt6' fill='currentColor' stroke='none'/>
|
||||||
|
<path id='gpPt7' stroke-width='0.222' stroke='currentColor' d='M0,-1.33 L-1.33,0.67 L1.33,0.67 z'/>
|
||||||
|
<use xlink:href='#gpPt7' id='gpPt8' fill='currentColor' stroke='none'/>
|
||||||
|
<use xlink:href='#gpPt7' id='gpPt9' stroke='currentColor' transform='rotate(180)'/>
|
||||||
|
<use xlink:href='#gpPt9' id='gpPt10' fill='currentColor' stroke='none'/>
|
||||||
|
<use xlink:href='#gpPt3' id='gpPt11' stroke='currentColor' transform='rotate(45)'/>
|
||||||
|
<use xlink:href='#gpPt11' id='gpPt12' fill='currentColor' stroke='none'/>
|
||||||
|
<path id='gpPt13' stroke-width='0.222' stroke='currentColor' d='M0,1.330 L1.265,0.411 L0.782,-1.067 L-0.782,-1.076 L-1.265,0.411 z'/>
|
||||||
|
<use xlink:href='#gpPt13' id='gpPt14' fill='currentColor' stroke='none'/>
|
||||||
|
<filter id='textbox' filterUnits='objectBoundingBox' x='0' y='0' height='1' width='1'>
|
||||||
|
<feFlood flood-color='white' flood-opacity='1' result='bgnd'/>
|
||||||
|
<feComposite in='SourceGraphic' in2='bgnd' operator='atop'/>
|
||||||
|
</filter>
|
||||||
|
<filter id='greybox' filterUnits='objectBoundingBox' x='0' y='0' height='1' width='1'>
|
||||||
|
<feFlood flood-color='lightgrey' flood-opacity='1' result='grey'/>
|
||||||
|
<feComposite in='SourceGraphic' in2='grey' operator='atop'/>
|
||||||
|
</filter>
|
||||||
|
</defs>
|
||||||
|
<g fill="none" color="white" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
<g transform="translate(450.0,23.9)" stroke="none" fill="black" font-family="Arial" font-size="18.00" text-anchor="middle">
|
||||||
|
<text></text>
|
||||||
|
</g>
|
||||||
|
<g transform="translate(450.0,50.9)" stroke="none" fill="black" font-family="Arial" font-size="18.00" text-anchor="middle">
|
||||||
|
<text><tspan font-family="Arial" >Boehm GC: Resource Requirements for `GC_bench.v` (2·10</tspan><tspan font-family="Arial" font-size="14.4" dy="-9.00px">8</tspan><tspan font-family="Arial" font-size="18.0" dy="9.00px"> Iterations)</tspan></text>
|
||||||
|
</g>
|
||||||
|
<g transform="translate(450.0,77.9)" stroke="none" fill="black" font-family="Arial" font-size="18.00" text-anchor="middle">
|
||||||
|
<text></text>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="black" stroke="black" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="gray" stroke="currentColor" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
<path stroke='gray' stroke-dasharray='2,4' class="gridline" d='M55.3,406.4 L242.9,406.4 '/></g>
|
||||||
|
<g fill="none" color="gray" stroke="gray" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
<path stroke='black' d='M55.3,406.4 L64.3,406.4 M242.9,406.4 L233.9,406.4 '/> <g transform="translate(47.0,410.3)" stroke="none" fill="black" font-family="Arial" font-size="12.00" text-anchor="end">
|
||||||
|
<text><tspan font-family="Arial" > 0</tspan></text>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="black" stroke="black" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="gray" stroke="currentColor" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
<path stroke='gray' stroke-dasharray='2,4' class="gridline" d='M55.3,373.6 L242.9,373.6 '/></g>
|
||||||
|
<g fill="none" color="gray" stroke="gray" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
<path stroke='black' d='M55.3,373.6 L64.3,373.6 M242.9,373.6 L233.9,373.6 '/> <g transform="translate(47.0,377.5)" stroke="none" fill="black" font-family="Arial" font-size="12.00" text-anchor="end">
|
||||||
|
<text><tspan font-family="Arial" > 1</tspan></text>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="black" stroke="black" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="gray" stroke="currentColor" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
<path stroke='gray' stroke-dasharray='2,4' class="gridline" d='M55.3,340.7 L242.9,340.7 '/></g>
|
||||||
|
<g fill="none" color="gray" stroke="gray" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
<path stroke='black' d='M55.3,340.7 L64.3,340.7 M242.9,340.7 L233.9,340.7 '/> <g transform="translate(47.0,344.6)" stroke="none" fill="black" font-family="Arial" font-size="12.00" text-anchor="end">
|
||||||
|
<text><tspan font-family="Arial" > 2</tspan></text>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="black" stroke="black" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="gray" stroke="currentColor" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
<path stroke='gray' stroke-dasharray='2,4' class="gridline" d='M55.3,307.9 L242.9,307.9 '/></g>
|
||||||
|
<g fill="none" color="gray" stroke="gray" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
<path stroke='black' d='M55.3,307.9 L64.3,307.9 M242.9,307.9 L233.9,307.9 '/> <g transform="translate(47.0,311.8)" stroke="none" fill="black" font-family="Arial" font-size="12.00" text-anchor="end">
|
||||||
|
<text><tspan font-family="Arial" > 3</tspan></text>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="black" stroke="black" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="gray" stroke="currentColor" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
<path stroke='gray' stroke-dasharray='2,4' class="gridline" d='M55.3,275.1 L242.9,275.1 '/></g>
|
||||||
|
<g fill="none" color="gray" stroke="gray" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
<path stroke='black' d='M55.3,275.1 L64.3,275.1 M242.9,275.1 L233.9,275.1 '/> <g transform="translate(47.0,279.0)" stroke="none" fill="black" font-family="Arial" font-size="12.00" text-anchor="end">
|
||||||
|
<text><tspan font-family="Arial" > 4</tspan></text>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="black" stroke="black" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="gray" stroke="currentColor" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
<path stroke='gray' stroke-dasharray='2,4' class="gridline" d='M55.3,242.2 L242.9,242.2 '/></g>
|
||||||
|
<g fill="none" color="gray" stroke="gray" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
<path stroke='black' d='M55.3,242.2 L64.3,242.2 M242.9,242.2 L233.9,242.2 '/> <g transform="translate(47.0,246.1)" stroke="none" fill="black" font-family="Arial" font-size="12.00" text-anchor="end">
|
||||||
|
<text><tspan font-family="Arial" > 5</tspan></text>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="black" stroke="black" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="gray" stroke="currentColor" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
<path stroke='gray' stroke-dasharray='2,4' class="gridline" d='M55.3,209.4 L242.9,209.4 '/></g>
|
||||||
|
<g fill="none" color="gray" stroke="gray" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
<path stroke='black' d='M55.3,209.4 L64.3,209.4 M242.9,209.4 L233.9,209.4 '/> <g transform="translate(47.0,213.3)" stroke="none" fill="black" font-family="Arial" font-size="12.00" text-anchor="end">
|
||||||
|
<text><tspan font-family="Arial" > 6</tspan></text>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="black" stroke="black" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="gray" stroke="currentColor" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
<path stroke='gray' stroke-dasharray='2,4' class="gridline" d='M55.3,176.6 L242.9,176.6 '/></g>
|
||||||
|
<g fill="none" color="gray" stroke="gray" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
<path stroke='black' d='M55.3,176.6 L64.3,176.6 M242.9,176.6 L233.9,176.6 '/> <g transform="translate(47.0,180.5)" stroke="none" fill="black" font-family="Arial" font-size="12.00" text-anchor="end">
|
||||||
|
<text><tspan font-family="Arial" > 7</tspan></text>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="black" stroke="black" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="gray" stroke="currentColor" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
<path stroke='gray' stroke-dasharray='2,4' class="gridline" d='M55.3,143.8 L242.9,143.8 '/></g>
|
||||||
|
<g fill="none" color="gray" stroke="gray" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
<path stroke='black' d='M55.3,143.8 L64.3,143.8 M242.9,143.8 L233.9,143.8 '/> <g transform="translate(47.0,147.7)" stroke="none" fill="black" font-family="Arial" font-size="12.00" text-anchor="end">
|
||||||
|
<text><tspan font-family="Arial" > 8</tspan></text>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="black" stroke="black" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="gray" stroke="currentColor" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
<path stroke='gray' stroke-dasharray='2,4' class="gridline" d='M55.3,110.9 L101.1,110.9 M234.6,110.9 L242.9,110.9 '/></g>
|
||||||
|
<g fill="none" color="gray" stroke="gray" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
<path stroke='black' d='M55.3,110.9 L64.3,110.9 M242.9,110.9 L233.9,110.9 '/> <g transform="translate(47.0,114.8)" stroke="none" fill="black" font-family="Arial" font-size="12.00" text-anchor="end">
|
||||||
|
<text><tspan font-family="Arial" > 9</tspan></text>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
<path stroke='black' d='M92.8,406.4 L92.8,397.4 M92.8,99.1 L92.8,108.1 '/> <g transform="translate(90.0,417.5) rotate(45)" stroke="none" fill="black" font-family="Arial" font-size="12.00" text-anchor="start">
|
||||||
|
<text><tspan font-family="Arial" >-gc boehm_full</tspan></text>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
<path stroke='black' d='M130.3,406.4 L130.3,397.4 M130.3,99.1 L130.3,108.1 '/> <g transform="translate(127.5,417.5) rotate(45)" stroke="none" fill="black" font-family="Arial" font-size="12.00" text-anchor="start">
|
||||||
|
<text><tspan font-family="Arial" >-gc boehm_incr</tspan></text>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
<path stroke='black' d='M167.9,406.4 L167.9,397.4 M167.9,99.1 L167.9,108.1 '/> <g transform="translate(165.1,417.5) rotate(45)" stroke="none" fill="black" font-family="Arial" font-size="12.00" text-anchor="start">
|
||||||
|
<text><tspan font-family="Arial" >-gc boehm_full_opt</tspan></text>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
<path stroke='black' d='M205.4,406.4 L205.4,397.4 M205.4,99.1 L205.4,108.1 '/> <g transform="translate(202.6,417.5) rotate(45)" stroke="none" fill="black" font-family="Arial" font-size="12.00" text-anchor="start">
|
||||||
|
<text><tspan font-family="Arial" >-gc boehm_incr_opt</tspan></text>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
<path stroke='black' d='M55.3,99.1 L55.3,406.4 L242.9,406.4 L242.9,99.1 L55.3,99.1 Z '/></g>
|
||||||
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
<g transform="translate(19.0,252.8) rotate(270)" stroke="none" fill="black" font-family="Arial" font-size="12.00" text-anchor="middle">
|
||||||
|
<text><tspan font-family="Arial" >Process Memory [GB]</tspan></text>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
<path stroke='black' d='M101.1,135.1 L101.1,108.1 L234.6,108.1 L234.6,135.1 L101.1,135.1 Z '/></g>
|
||||||
|
<g id="gnuplot_plot_1a" ><title>Memory Usage</title>
|
||||||
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
<g stroke='none' shape-rendering='crispEdges'>
|
||||||
|
<polygon fill = 'rgb( 0, 158, 115)' points = '83.4,406.4 102.3,406.4 102.3,203.7 83.4,203.7 '/>
|
||||||
|
</g>
|
||||||
|
<path stroke='black' d='M83.4,406.4 L83.4,203.8 L102.2,203.8 L102.2,406.4 L83.4,406.4 Z '/></g>
|
||||||
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
<g stroke='none' shape-rendering='crispEdges'>
|
||||||
|
<polygon fill = 'rgb( 0, 158, 115)' points = '121.0,406.4 139.8,406.4 139.8,162.7 121.0,162.7 '/>
|
||||||
|
</g>
|
||||||
|
<path stroke='black' d='M121.0,406.4 L121.0,162.8 L139.7,162.8 L139.7,406.4 L121.0,406.4 Z '/></g>
|
||||||
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
<g stroke='none' shape-rendering='crispEdges'>
|
||||||
|
<polygon fill = 'rgb( 0, 158, 115)' points = '158.5,406.4 177.3,406.4 177.3,262.5 158.5,262.5 '/>
|
||||||
|
</g>
|
||||||
|
<path stroke='black' d='M158.5,406.4 L158.5,262.6 L177.2,262.6 L177.2,406.4 L158.5,406.4 Z '/></g>
|
||||||
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
<g stroke='none' shape-rendering='crispEdges'>
|
||||||
|
<polygon fill = 'rgb( 0, 158, 115)' points = '196.0,406.4 214.9,406.4 214.9,258.2 196.0,258.2 '/>
|
||||||
|
</g>
|
||||||
|
<path stroke='black' d='M196.0,406.4 L196.0,258.3 L214.8,258.3 L214.8,406.4 L196.0,406.4 Z '/></g>
|
||||||
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g stroke='none' shape-rendering='crispEdges'>
|
||||||
|
<polygon fill = 'white' points = '101.1,135.1 234.6,135.1 234.6,108.1 101.1,108.1 '/>
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
<path stroke='black' d='M101.1,135.1 L101.1,108.1 L234.6,108.1 L234.6,135.1 L101.1,135.1 Z '/></g>
|
||||||
|
<g id="gnuplot_plot_1a" ><title>Memory Usage</title>
|
||||||
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
<g transform="translate(200.7,125.5)" stroke="none" fill="black" font-family="Arial" font-size="12.00" text-anchor="end">
|
||||||
|
<text><tspan font-family="Monospace" >Memory Usage</tspan></text>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
<g stroke='none' shape-rendering='crispEdges'>
|
||||||
|
<polygon fill = 'rgb( 0, 158, 115)' points = '209.0,126.1 226.3,126.1 226.3,117.1 209.0,117.1 '/>
|
||||||
|
</g>
|
||||||
|
<path stroke='black' d='M209.0,126.1 L226.3,126.1 L226.3,117.1 L209.0,117.1 L209.0,126.1 Z '/></g>
|
||||||
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="white" stroke="rgb( 0, 158, 115)" stroke-width="2.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="black" stroke="currentColor" stroke-width="2.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="black" stroke="black" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
<path stroke='black' d='M55.3,99.1 L55.3,406.4 L242.9,406.4 L242.9,99.1 L55.3,99.1 Z '/></g>
|
||||||
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="black" stroke="black" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="gray" stroke="currentColor" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
<path stroke='gray' stroke-dasharray='2,4' class="gridline" d='M342.0,406.4 L530.9,406.4 '/></g>
|
||||||
|
<g fill="none" color="gray" stroke="gray" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
<path stroke='black' d='M342.0,406.4 L351.0,406.4 M530.9,406.4 L521.9,406.4 '/> <g transform="translate(333.7,410.3)" stroke="none" fill="black" font-family="Arial" font-size="12.00" text-anchor="end">
|
||||||
|
<text><tspan font-family="Arial" > 0</tspan></text>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="black" stroke="black" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="gray" stroke="currentColor" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
<path stroke='gray' stroke-dasharray='2,4' class="gridline" d='M342.0,365.4 L530.9,365.4 '/></g>
|
||||||
|
<g fill="none" color="gray" stroke="gray" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
<path stroke='black' d='M342.0,365.4 L351.0,365.4 M530.9,365.4 L521.9,365.4 '/> <g transform="translate(333.7,369.3)" stroke="none" fill="black" font-family="Arial" font-size="12.00" text-anchor="end">
|
||||||
|
<text><tspan font-family="Arial" > 100</tspan></text>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="black" stroke="black" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="gray" stroke="currentColor" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
<path stroke='gray' stroke-dasharray='2,4' class="gridline" d='M342.0,324.5 L530.9,324.5 '/></g>
|
||||||
|
<g fill="none" color="gray" stroke="gray" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
<path stroke='black' d='M342.0,324.5 L351.0,324.5 M530.9,324.5 L521.9,324.5 '/> <g transform="translate(333.7,328.4)" stroke="none" fill="black" font-family="Arial" font-size="12.00" text-anchor="end">
|
||||||
|
<text><tspan font-family="Arial" > 200</tspan></text>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="black" stroke="black" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="gray" stroke="currentColor" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
<path stroke='gray' stroke-dasharray='2,4' class="gridline" d='M342.0,283.5 L530.9,283.5 '/></g>
|
||||||
|
<g fill="none" color="gray" stroke="gray" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
<path stroke='black' d='M342.0,283.5 L351.0,283.5 M530.9,283.5 L521.9,283.5 '/> <g transform="translate(333.7,287.4)" stroke="none" fill="black" font-family="Arial" font-size="12.00" text-anchor="end">
|
||||||
|
<text><tspan font-family="Arial" > 300</tspan></text>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="black" stroke="black" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="gray" stroke="currentColor" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
<path stroke='gray' stroke-dasharray='2,4' class="gridline" d='M342.0,242.5 L530.9,242.5 '/></g>
|
||||||
|
<g fill="none" color="gray" stroke="gray" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
<path stroke='black' d='M342.0,242.5 L351.0,242.5 M530.9,242.5 L521.9,242.5 '/> <g transform="translate(333.7,246.4)" stroke="none" fill="black" font-family="Arial" font-size="12.00" text-anchor="end">
|
||||||
|
<text><tspan font-family="Arial" > 400</tspan></text>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="black" stroke="black" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="gray" stroke="currentColor" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
<path stroke='gray' stroke-dasharray='2,4' class="gridline" d='M342.0,201.5 L530.9,201.5 '/></g>
|
||||||
|
<g fill="none" color="gray" stroke="gray" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
<path stroke='black' d='M342.0,201.5 L351.0,201.5 M530.9,201.5 L521.9,201.5 '/> <g transform="translate(333.7,205.4)" stroke="none" fill="black" font-family="Arial" font-size="12.00" text-anchor="end">
|
||||||
|
<text><tspan font-family="Arial" > 500</tspan></text>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="black" stroke="black" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="gray" stroke="currentColor" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
<path stroke='gray' stroke-dasharray='2,4' class="gridline" d='M342.0,160.6 L530.9,160.6 '/></g>
|
||||||
|
<g fill="none" color="gray" stroke="gray" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
<path stroke='black' d='M342.0,160.6 L351.0,160.6 M530.9,160.6 L521.9,160.6 '/> <g transform="translate(333.7,164.5)" stroke="none" fill="black" font-family="Arial" font-size="12.00" text-anchor="end">
|
||||||
|
<text><tspan font-family="Arial" > 600</tspan></text>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="black" stroke="black" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="gray" stroke="currentColor" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
<path stroke='gray' stroke-dasharray='2,4' class="gridline" d='M342.0,119.6 L414.0,119.6 M522.6,119.6 L530.9,119.6 '/></g>
|
||||||
|
<g fill="none" color="gray" stroke="gray" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
<path stroke='black' d='M342.0,119.6 L351.0,119.6 M530.9,119.6 L521.9,119.6 '/> <g transform="translate(333.7,123.5)" stroke="none" fill="black" font-family="Arial" font-size="12.00" text-anchor="end">
|
||||||
|
<text><tspan font-family="Arial" > 700</tspan></text>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
<path stroke='black' d='M379.8,406.4 L379.8,397.4 M379.8,99.1 L379.8,108.1 '/> <g transform="translate(377.0,417.5) rotate(45)" stroke="none" fill="black" font-family="Arial" font-size="12.00" text-anchor="start">
|
||||||
|
<text><tspan font-family="Arial" >-gc boehm_full</tspan></text>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
<path stroke='black' d='M417.6,406.4 L417.6,397.4 M417.6,99.1 L417.6,108.1 '/> <g transform="translate(414.8,417.5) rotate(45)" stroke="none" fill="black" font-family="Arial" font-size="12.00" text-anchor="start">
|
||||||
|
<text><tspan font-family="Arial" >-gc boehm_incr</tspan></text>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
<path stroke='black' d='M455.3,406.4 L455.3,397.4 M455.3,99.1 L455.3,108.1 '/> <g transform="translate(452.5,417.5) rotate(45)" stroke="none" fill="black" font-family="Arial" font-size="12.00" text-anchor="start">
|
||||||
|
<text><tspan font-family="Arial" >-gc boehm_full_opt</tspan></text>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
<path stroke='black' d='M493.1,406.4 L493.1,397.4 M493.1,99.1 L493.1,108.1 '/> <g transform="translate(490.3,417.5) rotate(45)" stroke="none" fill="black" font-family="Arial" font-size="12.00" text-anchor="start">
|
||||||
|
<text><tspan font-family="Arial" >-gc boehm_incr_opt</tspan></text>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
<path stroke='black' d='M342.0,99.1 L342.0,406.4 L530.9,406.4 L530.9,99.1 L342.0,99.1 Z '/></g>
|
||||||
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
<g transform="translate(289.1,252.8) rotate(270)" stroke="none" fill="black" font-family="Arial" font-size="12.00" text-anchor="middle">
|
||||||
|
<text><tspan font-family="Arial" >CPU Usage [% of 1 Core]</tspan></text>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
<path stroke='black' d='M414.0,135.1 L414.0,108.1 L522.6,108.1 L522.6,135.1 L414.0,135.1 Z '/></g>
|
||||||
|
<g id="gnuplot_plot_1b" ><title>CPU Usage</title>
|
||||||
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
<g stroke='none' shape-rendering='crispEdges'>
|
||||||
|
<polygon fill = 'rgb(229, 30, 16)' points = '370.3,406.4 389.3,406.4 389.3,127.7 370.3,127.7 '/>
|
||||||
|
</g>
|
||||||
|
<path stroke='black' d='M370.3,406.4 L370.3,127.8 L389.2,127.8 L389.2,406.4 L370.3,406.4 Z '/></g>
|
||||||
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
<g stroke='none' shape-rendering='crispEdges'>
|
||||||
|
<polygon fill = 'rgb(229, 30, 16)' points = '408.1,406.4 427.1,406.4 427.1,150.2 408.1,150.2 '/>
|
||||||
|
</g>
|
||||||
|
<path stroke='black' d='M408.1,406.4 L408.1,150.3 L427.0,150.3 L427.0,406.4 L408.1,406.4 Z '/></g>
|
||||||
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
<g stroke='none' shape-rendering='crispEdges'>
|
||||||
|
<polygon fill = 'rgb(229, 30, 16)' points = '445.9,406.4 464.9,406.4 464.9,322.7 445.9,322.7 '/>
|
||||||
|
</g>
|
||||||
|
<path stroke='black' d='M445.9,406.4 L445.9,322.8 L464.8,322.8 L464.8,406.4 L445.9,406.4 Z '/></g>
|
||||||
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
<g stroke='none' shape-rendering='crispEdges'>
|
||||||
|
<polygon fill = 'rgb(229, 30, 16)' points = '483.7,406.4 502.7,406.4 502.7,330.1 483.7,330.1 '/>
|
||||||
|
</g>
|
||||||
|
<path stroke='black' d='M483.7,406.4 L483.7,330.2 L502.6,330.2 L502.6,406.4 L483.7,406.4 Z '/></g>
|
||||||
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g stroke='none' shape-rendering='crispEdges'>
|
||||||
|
<polygon fill = 'white' points = '414.0,135.1 522.6,135.1 522.6,108.1 414.0,108.1 '/>
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
<path stroke='black' d='M414.0,135.1 L414.0,108.1 L522.6,108.1 L522.6,135.1 L414.0,135.1 Z '/></g>
|
||||||
|
<g id="gnuplot_plot_1b" ><title>CPU Usage</title>
|
||||||
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
<g transform="translate(488.7,125.5)" stroke="none" fill="black" font-family="Arial" font-size="12.00" text-anchor="end">
|
||||||
|
<text><tspan font-family="Monospace" >CPU Usage</tspan></text>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
<g stroke='none' shape-rendering='crispEdges'>
|
||||||
|
<polygon fill = 'rgb(229, 30, 16)' points = '497.0,126.1 514.3,126.1 514.3,117.1 497.0,117.1 '/>
|
||||||
|
</g>
|
||||||
|
<path stroke='black' d='M497.0,126.1 L514.3,126.1 L514.3,117.1 L497.0,117.1 L497.0,126.1 Z '/></g>
|
||||||
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="white" stroke="rgb(229, 30, 16)" stroke-width="2.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="black" stroke="currentColor" stroke-width="2.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="black" stroke="black" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
<path stroke='black' d='M342.0,99.1 L342.0,406.4 L530.9,406.4 L530.9,99.1 L342.0,99.1 Z '/></g>
|
||||||
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="black" stroke="black" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="gray" stroke="currentColor" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
<path stroke='gray' stroke-dasharray='2,4' class="gridline" d='M639.0,406.4 L835.0,406.4 '/></g>
|
||||||
|
<g fill="none" color="gray" stroke="gray" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
<path stroke='black' d='M639.0,406.4 L648.0,406.4 M835.0,406.4 L826.0,406.4 '/> <g transform="translate(630.7,410.3)" stroke="none" fill="black" font-family="Arial" font-size="12.00" text-anchor="end">
|
||||||
|
<text><tspan font-family="Arial" > 0</tspan></text>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="black" stroke="black" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="gray" stroke="currentColor" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
<path stroke='gray' stroke-dasharray='2,4' class="gridline" d='M639.0,333.2 L835.0,333.2 '/></g>
|
||||||
|
<g fill="none" color="gray" stroke="gray" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
<path stroke='black' d='M639.0,333.2 L648.0,333.2 M835.0,333.2 L826.0,333.2 '/> <g transform="translate(630.7,337.1)" stroke="none" fill="black" font-family="Arial" font-size="12.00" text-anchor="end">
|
||||||
|
<text><tspan font-family="Arial" > 50</tspan></text>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="black" stroke="black" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="gray" stroke="currentColor" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
<path stroke='gray' stroke-dasharray='2,4' class="gridline" d='M639.0,260.1 L835.0,260.1 '/></g>
|
||||||
|
<g fill="none" color="gray" stroke="gray" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
<path stroke='black' d='M639.0,260.1 L648.0,260.1 M835.0,260.1 L826.0,260.1 '/> <g transform="translate(630.7,264.0)" stroke="none" fill="black" font-family="Arial" font-size="12.00" text-anchor="end">
|
||||||
|
<text><tspan font-family="Arial" > 100</tspan></text>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="black" stroke="black" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="gray" stroke="currentColor" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
<path stroke='gray' stroke-dasharray='2,4' class="gridline" d='M639.0,186.9 L835.0,186.9 '/></g>
|
||||||
|
<g fill="none" color="gray" stroke="gray" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
<path stroke='black' d='M639.0,186.9 L648.0,186.9 M835.0,186.9 L826.0,186.9 '/> <g transform="translate(630.7,190.8)" stroke="none" fill="black" font-family="Arial" font-size="12.00" text-anchor="end">
|
||||||
|
<text><tspan font-family="Arial" > 150</tspan></text>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="black" stroke="black" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="gray" stroke="currentColor" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
<path stroke='gray' stroke-dasharray='2,4' class="gridline" d='M639.0,113.7 L660.0,113.7 M826.7,113.7 L835.0,113.7 '/></g>
|
||||||
|
<g fill="none" color="gray" stroke="gray" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
<path stroke='black' d='M639.0,113.7 L648.0,113.7 M835.0,113.7 L826.0,113.7 '/> <g transform="translate(630.7,117.6)" stroke="none" fill="black" font-family="Arial" font-size="12.00" text-anchor="end">
|
||||||
|
<text><tspan font-family="Arial" > 200</tspan></text>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
<path stroke='black' d='M678.2,406.4 L678.2,397.4 M678.2,99.1 L678.2,108.1 '/> <g transform="translate(675.4,417.5) rotate(45)" stroke="none" fill="black" font-family="Arial" font-size="12.00" text-anchor="start">
|
||||||
|
<text><tspan font-family="Arial" >-gc boehm_full</tspan></text>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
<path stroke='black' d='M717.4,406.4 L717.4,397.4 M717.4,99.1 L717.4,108.1 '/> <g transform="translate(714.6,417.5) rotate(45)" stroke="none" fill="black" font-family="Arial" font-size="12.00" text-anchor="start">
|
||||||
|
<text><tspan font-family="Arial" >-gc boehm_incr</tspan></text>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
<path stroke='black' d='M756.6,406.4 L756.6,397.4 M756.6,99.1 L756.6,108.1 '/> <g transform="translate(753.8,417.5) rotate(45)" stroke="none" fill="black" font-family="Arial" font-size="12.00" text-anchor="start">
|
||||||
|
<text><tspan font-family="Arial" >-gc boehm_full_opt</tspan></text>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
<path stroke='black' d='M795.8,406.4 L795.8,397.4 M795.8,99.1 L795.8,108.1 '/> <g transform="translate(793.0,417.5) rotate(45)" stroke="none" fill="black" font-family="Arial" font-size="12.00" text-anchor="start">
|
||||||
|
<text><tspan font-family="Arial" >-gc boehm_incr_opt</tspan></text>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
<path stroke='black' d='M639.0,99.1 L639.0,406.4 L835.0,406.4 L835.0,99.1 L639.0,99.1 Z '/></g>
|
||||||
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
<g transform="translate(586.1,252.8) rotate(270)" stroke="none" fill="black" font-family="Arial" font-size="12.00" text-anchor="middle">
|
||||||
|
<text><tspan font-family="Arial" >Time [s]</tspan></text>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
<path stroke='black' d='M660.0,135.1 L660.0,108.1 L826.7,108.1 L826.7,135.1 L660.0,135.1 Z '/></g>
|
||||||
|
<g id="gnuplot_plot_1c" ><title>Time to Complete</title>
|
||||||
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
<g stroke='none' shape-rendering='crispEdges'>
|
||||||
|
<polygon fill = 'rgb( 86, 180, 233)' points = '668.4,406.4 688.1,406.4 688.1,213.1 668.4,213.1 '/>
|
||||||
|
</g>
|
||||||
|
<path stroke='black' d='M668.4,406.4 L668.4,213.2 L688.0,213.2 L688.0,406.4 L668.4,406.4 Z '/></g>
|
||||||
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
<g stroke='none' shape-rendering='crispEdges'>
|
||||||
|
<polygon fill = 'rgb( 86, 180, 233)' points = '707.6,406.4 727.3,406.4 727.3,141.4 707.6,141.4 '/>
|
||||||
|
</g>
|
||||||
|
<path stroke='black' d='M707.6,406.4 L707.6,141.5 L727.2,141.5 L727.2,406.4 L707.6,406.4 Z '/></g>
|
||||||
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
<g stroke='none' shape-rendering='crispEdges'>
|
||||||
|
<polygon fill = 'rgb( 86, 180, 233)' points = '746.8,406.4 766.5,406.4 766.5,260.0 746.8,260.0 '/>
|
||||||
|
</g>
|
||||||
|
<path stroke='black' d='M746.8,406.4 L746.8,260.1 L766.4,260.1 L766.4,406.4 L746.8,406.4 Z '/></g>
|
||||||
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
<g stroke='none' shape-rendering='crispEdges'>
|
||||||
|
<polygon fill = 'rgb( 86, 180, 233)' points = '786.0,406.4 805.7,406.4 805.7,163.4 786.0,163.4 '/>
|
||||||
|
</g>
|
||||||
|
<path stroke='black' d='M786.0,406.4 L786.0,163.5 L805.6,163.5 L805.6,406.4 L786.0,406.4 Z '/></g>
|
||||||
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g stroke='none' shape-rendering='crispEdges'>
|
||||||
|
<polygon fill = 'white' points = '660.0,135.1 826.7,135.1 826.7,108.1 660.0,108.1 '/>
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
<path stroke='black' d='M660.0,135.1 L660.0,108.1 L826.7,108.1 L826.7,135.1 L660.0,135.1 Z '/></g>
|
||||||
|
<g id="gnuplot_plot_1c" ><title>Time to Complete</title>
|
||||||
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
<g transform="translate(792.8,125.5)" stroke="none" fill="black" font-family="Arial" font-size="12.00" text-anchor="end">
|
||||||
|
<text><tspan font-family="Monospace" >Time to Complete</tspan></text>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
<g stroke='none' shape-rendering='crispEdges'>
|
||||||
|
<polygon fill = 'rgb( 86, 180, 233)' points = '801.1,126.1 818.4,126.1 818.4,117.1 801.1,117.1 '/>
|
||||||
|
</g>
|
||||||
|
<path stroke='black' d='M801.1,126.1 L818.4,126.1 L818.4,117.1 L801.1,117.1 L801.1,126.1 Z '/></g>
|
||||||
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="white" stroke="rgb( 86, 180, 233)" stroke-width="2.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="black" stroke="currentColor" stroke-width="2.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="black" stroke="black" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
<path stroke='black' d='M639.0,99.1 L639.0,406.4 L835.0,406.4 L835.0,99.1 L639.0,99.1 Z '/></g>
|
||||||
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
|
After Width: | Height: | Size: 43 KiB |
|
@ -0,0 +1,6 @@
|
||||||
|
# 200000000 iterations
|
||||||
|
# flags %MEM MEM[GB] TIME[s] %CPU
|
||||||
|
"-gc boehm\\_full" 19.7 6.17 132 680
|
||||||
|
"-gc boehm\\_incr" 23.7 7.42 181 625
|
||||||
|
"-gc boehm\\_full\\_opt" 14.0 4.38 100 204
|
||||||
|
"-gc boehm\\_incr\\_opt" 14.4 4.51 166 186
|
Loading…
Reference in New Issue