summaryrefslogtreecommitdiff
path: root/test/ruby/test_gc.rb
AgeCommit message (Collapse)Author
2020-06-12prevent memory allocation for GC testsKoichi Sasada
We observed test failures on test_latest_gc_info with random order CI. http://ci.rvm.jp/results/trunk-random1@phosphorus-docker/2998078l0ll To solve it, use a pre-allocated hash object and rehearsal.
2020-05-22Run major GC three times to make sure the minor GC reasonYusuke Endoh
Same as 02705b27be207fce57bd0253251f81108c7ed57b http://ci.rvm.jp/results/trunk-random1@phosphorus-docker/2955433 ``` 1) TestGc#test_start_full_mark [/tmp/ruby/v3/src/trunk-random1/test/ruby/test_gc.rb:61]: Expected :oldmalloc to be nil. ```
2020-03-04fix 6e271e4cbbe6a8bc4d4f75dc553ce054eae7af00Koichi Sasada
2020-03-04Run major GC to make sure the minor GC reasonKoichi Sasada
GC.latest_gc_info[:major_by] can return `oldmalloc` because of last GC status.
2020-03-04Run major GC to make sure the minor GC next time.Koichi Sasada
`GC.start(full_mark: false)` can run full GC because of last GC status. Just after major GC, the possibility to run major GC next time is too small (not a zero, but too small possibility).
2020-02-22* remove trailing spaces. [ci skip]git
2020-02-22Introduce disposable call-cache.Koichi Sasada
This patch contains several ideas: (1) Disposable inline method cache (IMC) for race-free inline method cache * Making call-cache (CC) as a RVALUE (GC target object) and allocate new CC on cache miss. * This technique allows race-free access from parallel processing elements like RCU. (2) Introduce per-Class method cache (pCMC) * Instead of fixed-size global method cache (GMC), pCMC allows flexible cache size. * Caching CCs reduces CC allocation and allow sharing CC's fast-path between same call-info (CI) call-sites. (3) Invalidate an inline method cache by invalidating corresponding method entries (MEs) * Instead of using class serials, we set "invalidated" flag for method entry itself to represent cache invalidation. * Compare with using class serials, the impact of method modification (add/overwrite/delete) is small. * Updating class serials invalidate all method caches of the class and sub-classes. * Proposed approach only invalidate the method cache of only one ME. See [Feature #16614] for more details. Notes: Merged: https://github.com/ruby/ruby/pull/2888
2019-11-08Fix passing actual object_id to finalizerJohn Hawthorn
Previously we were passing the memory_id. This was broken previously if compaction was run (which changes the memory_id) and now that object_id is a monotonically increasing number it was always broken. This commit fixes this by defering removal from the object_id table until finalizers have run (for objects with finalizers) and also copying the SEEN_OBJ_ID flag onto the zombie objects. Notes: Merged: https://github.com/ruby/ruby/pull/2658
2019-11-07Use a monotonically increasing number for object_idJohn Hawthorn
This changes object_id from being based on the objects location in memory (or a nearby memory location in the case of a conflict) to be based on an always increasing number. This number is a Ruby Integer which allows it to overflow the size of a pointer without issue (very unlikely to happen in real programs especially on 64-bit, but a nice guarantee). This changes obj_to_id_tbl and id_to_obj_tbl to both be maps of Ruby objects to Ruby objects (previously they were Ruby object to C integer) which simplifies updating them after compaction as we can run them through gc_update_table_refs. Co-authored-by: Aaron Patterson <tenderlove@ruby-lang.org>
2019-11-06Revert "Use a monotonically increasing number for object_id"Aaron Patterson
This reverts commit bd2b314a05ae9192b3143e1e678a37c370d8a9ce.
2019-11-06Use a monotonically increasing number for object_idJohn Hawthorn
This changes object_id from being based on the objects location in memory (or a nearby memory location in the case of a conflict) to be based on an always increasing number. This number is a Ruby Integer which allows it to overflow the size of a pointer without issue (very unlikely to happen in real programs especially on 64-bit, but a nice guarantee). This changes obj_to_id_tbl and id_to_obj_tbl to both be maps of Ruby objects to Ruby objects (previously they were Ruby object to C integer) which simplifies updating them after compaction as we can run them through gc_update_table_refs. Co-authored-by: Aaron Patterson <tenderlove@ruby-lang.org> Notes: Merged: https://github.com/ruby/ruby/pull/2638
2019-10-25skip tests that do not work on GC.stress卜部昌平
These tests rely on GC.stat and GC.last_gc_info, which are not stable when GC.stress is true. Skip them for that case.
2019-06-30Suppress unused variable warningsNobuyoshi Nakada
2019-05-24test/ruby/test_gc.rb (test_gc_stress_at_startup): extend time timeoutYusuke Endoh
It fails on some CI environments. https://rubyci.org/logs/rubyci.s3.amazonaws.com/debian8/ruby-trunk/log/20190524T003006Z.fail.html.gz https://rubyci.org/logs/rubyci.s3.amazonaws.com/unstable11s/ruby-trunk/log/20190523T002505Z.fail.html.gz
2019-05-21Do not modify shared arrayNobuyoshi Nakada
[Bug #15821]
2019-05-18skip a test to pass CIs.Koichi Sasada
I'm debugging [Bug #15821] but my patch introduces another issue. So I simply skip this test and re-enable it later.
2019-04-24Defer setting gc_stress until inits doneNobuyoshi Nakada
[Bug #15784]
2019-04-20Add `GC.compact` again.tenderlove
🙏 git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67620 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2019-04-10Reverting all commits from r67479 to r67496 because of CI failureskazu
Because hard to specify commits related to r67479 only. So please commit again. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67499 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2019-04-09Adding `GC.compact` and compacting GC support.tenderlove
This commit adds the new method `GC.compact` and compacting GC support. Please see this issue for caveats: https://bugs.ruby-lang.org/issues/15626 [Feature #15626] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67479 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-12-29test_gc.rb: increase timeout for RubyCIk0kubun
https://rubyci.org/logs/rubyci.s3.amazonaws.com/amazon/ruby-trunk/log/20181229T033003Z.fail.html.gz git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66630 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-10-27Revert "Revert "Manage AST NODEs out of GC""mame
This re-introduces r60485. This reverts commit 5a176b75b1187cbd3861c387bde65ff66396a07c. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@60488 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-10-27Revert "Manage AST NODEs out of GC"mame
This reverts commit 620ba74778bfdbdc34ffbb142d49ce84a0ef58e9. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@60486 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-10-27Manage AST NODEs out of GCmame
NODEs in AST are no longer objects managed by GC. This change will remove the restriction imposed by the GC. For example, a NODE can use more than five words (this is my primary purpose; we want to store the position data for each NODE, for coverage library), or even a NODE can have variable length (some kinds of NODEs have unused fields). To do this, however, we need more work, since Ripper still uses T_NODE objects managed by the GC. The life time of NODEs is more obvious than other kinds of objects; they are created at parsing, and they become disused immediately after compilation. This change releases all NODEs by a few `xfree`s after compilation, so performance will be improved a bit. In extreme example, `eval("x=1;" * 10000000)` runs much faster (40 sec. -> 7.8 sec. on my machine). The most important part of this change is `ast_t` struct, which has three contents: (1) NODE buffer (malloc'ed memory), (2) a reference to the root NODE, and (3) an array that contains objects that must be marked during parsing (such as literal objects). Some functions that had received `NODE*` arguments, must now receive `ast_t*`. * node.c, node.h: defines `ast_t` struct and related operations. * gc.c, internal.h: defines `imemo_ast`. * parse.y: makes `parser_params` struct have a reference to `ast_t`. Instead of `rb_node_newnode`, use `rb_ast_newnode` to create a NODE. * iseq.c, load.c, ruby.c, template/prelude.c.tmpl: modifies some functions to handle `ast_t*` instead of `NODE*`. * test/ruby/test_gc.rb: ad-hoc fix for a failed test. The test assumes GC eden is increased at startup by NODE object creation. However, this change now create no NODE object, so GC eden is not necessarily increased. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@60485 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-09-24test_gc.rb: relax criterionnobu
* test/ruby/test_gc.rb (TestGc#test_expand_heap): relax the criterion and compare by epsilon. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@60011 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-08-23gc.c: restore cfp at finalizernobu
* gc.c (run_finalizer): restore cfp for the case an exception raised in a finalizer. [ruby-core:82432] [Bug #13832] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@59649 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-08-23skip unless finalizers runnobu
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@59648 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-08-23gc.c: run all finalizersnobu
* gc.c (run_finalizer): revert r59155 partially. finalizing loop should continue even after an exception is rescued. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@59647 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-07-13* gc.c (gc_mark_roots): should mark the VM object itself to markko1
singleton class of the VM object. Before this patch, we only set mark bit for the VM object and invoke mark function separately. [Bug #12583] * test/ruby/test_gc.rb: add a test. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@55663 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-02-03Remove debug print introduced in r52386naruse
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53727 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-01-08* gc.c: rename PAGE_* to HEAP_PAGE_* because PAGE_SIZE is usedko1
in Mac OS X. * test/ruby/test_gc.rb: catch up this fix. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53471 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-01-08* gc.c: rename constant names HEAP_* to PAGE_*.ko1
Keys of GC::INTERNAL_CONSTANTS are also renamed. * test/ruby/test_gc.rb: catch up this fix. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53468 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-12-16Add frozen_string_literal: false for all filesnaruse
When you change this to true, you may need to add more tests. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53141 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-12-10* test/ruby/test_gc.rb (test_expand_heap): relax condition (1->2).ko1
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53024 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-11-19* gc.c (gc_start): force to invoke GC by GC.startko1
even if it is GC.disable'd. * test/ruby/test_gc.rb: add a test. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52672 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-10-30explicitly overwrite signal handlingnaruse
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52391 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-10-30show parent process's signal mask from child processnaruse
Because this tests raises timeout on failure, and it doesn't reach assertions. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52386 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-10-30test_gc.rb: fix failure messagenobu
* test/ruby/test_gc.rb (test_interrupt_in_finalizer): append signal info to stderr outputs in a proc, not to a proc. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52377 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-10-30show child and parent signal masknaruse
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52376 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-10-29show signal mask on solarisnaruse
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52364 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-10-29revert experimental changes related to Solaris CInaruse
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52363 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-10-28increase timeout (with full GC)naruse
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52331 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-10-28write in shroternaruse
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52319 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-10-27suppress warnings: assigned but unused variablenaruse
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52313 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-10-27dumping core may take too much time for CInaruse
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52311 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-08-13test_gc.rb: dump hung up processnobu
* test/ruby/test_gc.rb (test_interrupt_in_finalizer): kill hung up process by SIGSEGV to dump the backtrace. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51560 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-08-12test_gc.rb: abort hung up processnobu
* test/ruby/test_gc.rb (test_interrupt_in_finalizer): abort hung up process to dump the backtrace instead of terminating. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51551 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-08-12test_gc.rb: timeout of test_interrupt_in_finalizernobu
* test/ruby/test_gc.rb (test_interrupt_in_finalizer): leave timeout to invoke_ruby. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51540 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-08-09test_gc.rb: check signal firstnobu
* test/ruby/test_gc.rb (test_interrupt_in_finalizer): check the signal terminated the process before messages. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51513 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-06-02use assert_raisenobu
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@50727 b2dd03c8-39d4-4d8f-98ff-823fe69b080e