Commit graph

989 commits

Author SHA1 Message Date
ko1
a59e629868 * gc.c (gc_prof_set_heap_info, after_gc_sweep): call
gc_prof_set_heap_info() just after sweeping to calculate
  live object number correctly.
  (live object number = total generated number (before marking) -
                        total freed number (after sweeping))
* gc.c (gc_marks): record `oldgen_object_count' into current profile`
  record directly.
* gc.c (rgengc_rememberset_mark): same for remembered_normal_objects
  and remembered_shady_objects.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@41552 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-06-21 22:29:09 +00:00
ko1
dbd8f3ac03 * gc.c (rb_objspace::profile): rename rb_objspace::profile::record to
records (because it points a set of records) and add a field
  rb_objspace::profile::current_record to point a current profiling
  record.
* gc.c: use above fields.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@41551 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-06-21 21:51:41 +00:00
ko1
b4f907ea29 * gc.c (rb_gc_giveup_promoted_writebarrier): remove `rest_sweep()'
because all of remembered objects are called for gc_mark_children().



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@41550 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-06-21 21:08:38 +00:00
ko1
7396fbb0b5 * gc.c (rgengc_rememberset_mark): call gc_mark_children() for
remembered objects directly instead of pushing on the mark stack.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@41549 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-06-21 20:10:03 +00:00
ko1
671c196384 * gc.c (slot_sweep_body): rename to slot_sweep().
No need to separate major/minor GC.
* gc.c (gc_setup_mark_bits): remove gc_clear_mark_bits() and unify to
  this function.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@41547 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-06-21 19:42:04 +00:00
ko1
a27c48f69e * gc.c (check_bitmap_consistency): add to check flag and bitmap consistency.
Use this function in several places.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@41546 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-06-21 19:36:48 +00:00
nobu
15c4b821a1 * remove trailing spaces.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@41540 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-06-21 12:36:06 +00:00
tarui
913e65448d * gc.c (typedef enum): Introdule flags of major gc reason.
* gc.c (garbage_collect_body): Ditto.
	* gc.c (gc_profile_flags): Ditto.
	* gc.c (gc_profile_dump_on): Ditto.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@41539 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-06-21 12:31:13 +00:00
ko1
79d3385e9d * gc.c (allocate_sorted_heaps): remove unused variable `add'.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@41538 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-06-21 12:12:57 +00:00
ko1
508b255b9a * include/ruby/ruby.h: constify RArray::as::ary and RArray::heap::ptr.
Use RARRAY_ASET() or RARRAY_PTR_USE() to modify Array objects.
* array.c, gc.c: catch up above changes.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@41537 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-06-21 11:53:33 +00:00
ko1
6a1101f23e * include/ruby/ruby.h: support write barrier protection for T_STRUCT.
Introduce the following C APIs:
  * RSTRUCT_RAWPTR(st) returns pointer (do WB on your risk).
    The type of returned pointer is (const VALUE *).
  * RSTRUCT_GET(st, idx) returns idx-th value of struct.
  * RSTRUCT_SET(st, idx, v) set idx-th value by v with WB.
  And
  * RSTRUCT_PTR(st) returns pointer with shady operation.
    The type of returned pointer is (VALUE *).
* struct.c, re.c, gc.c, marshal.c: rewrite with above APIs.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@41534 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-06-21 11:22:18 +00:00
ko1
ab084f4063 * gc.c (gc_sweep): profile sweep time correctly when LAZY_SWEEP is
disabled.
* gc.c (gc_marks_test): store oldgen count and shady count
  before test marking and restore them after marking.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@41526 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-06-21 06:29:30 +00:00
ko1
ac9413893a * gc.c: enable lazy sweep (commit miss).
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@41523 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-06-21 06:08:07 +00:00
ko1
dfc4cc0196 revert last commit (operation miss).
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@41522 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-06-21 06:04:29 +00:00
ko1
8398719020 * gc.c: fix to use total_allocated_object_num and heaps_used
at the GC time for profiler.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@41521 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-06-21 05:55:05 +00:00
ko1
e35f127403 * gc.c: fix to use total_allocated_object_num and heaps_used
at the GC time for profiler.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@41518 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-06-21 05:17:40 +00:00
ko1
4a113cd3cb * gc.c: RGENGC_CHECK_MODE should be 0.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@41517 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-06-21 03:36:40 +00:00
ko1
b21bf8f94b * gc.c (gc_marks_body): fix to get `th' in this function.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@41516 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-06-21 02:20:10 +00:00
ko1
7986e98394 * gc.c (heaps_header/heaps_slot): embed bitmaps into heaps_slot.
no need to maintain allocation/free bitmaps.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@41515 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-06-21 01:26:50 +00:00
ko1
caf923fa6a * gc.c (slot_sweep_body): add counters at a time.
* gc.c (gc_profile_dump_on): fix line break position.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@41513 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-06-21 00:24:14 +00:00
tarui
4b18db6a2f * gc.c: refactoring bitmaps. introduce bits_t type and some Consts.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@41512 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-06-20 23:15:18 +00:00
ko1
8b80ce3a53 * gc.c: fix to support USE_RGENGC == 0 (disable RGenGC).
If USE_RGENGC==0, it caused compilation error.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@41511 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-06-20 23:10:34 +00:00
tarui
fcd5cc93c9 * gc.c (lazy_sweep): Use is_lazy_sweeping()
* gc.c (rest_sweep): Ditto.
	* gc.c (gc_prepare_free_objects): Ditto.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@41510 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-06-20 23:08:30 +00:00
nobu
2c79a46764 * remove trailing spaces.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@41509 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-06-20 22:41:07 +00:00
ko1
8ab7d0e4c3 * gc.c (gc_profile_record::oldgen_objects): added.
* gc.c (gc_profile_dump_on): print the following infomation:
* Living object counts
* Free object counts
  If RGENGC_PROFILE > 0 then
* Oldgen object counts
* Remembered normal object counts
* Remembered shady object counts



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@41507 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-06-20 22:38:08 +00:00
ko1
d1c518d416 * gc.c (gc_prof_sweep_timer_stop): accumulate sweep time only when
record->gc_time > 0.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@41504 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-06-20 20:39:20 +00:00
ko1
bf017de1f3 * gc.c (rgengc_rememberset_mark): record
(1) normal objects count in remember set
  (2) shady objects count in remember set
  each GC timing.
* gc.c (gc_profile_record_get): enable to access above information
  and REMOVING_OBJECTS, EMPTY_OBJECTS.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@41493 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-06-20 12:20:27 +00:00
nobu
16f36b6322 gc.c: adjust indent
* gc.c (gc_marks): adjust indent.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@41463 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-06-20 00:29:13 +00:00
tarui
88927b04ae * gc.c (rb_gc_writebarrier): give up rescan A and register B directly
if A has huge number of children.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@41460 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-06-19 22:48:03 +00:00
ko1
65ad154e2a * gc.c (gc_profile_total_time): check objspace->profile.next_index > 0.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@41456 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-06-19 21:21:16 +00:00
ko1
efc53c496e * gc.c (gc_prof_sweep_timer_start): fix merge miss.
* gc.c (GC_PROFILE_MORE_DETAIL): set it 0.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@41454 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-06-19 20:49:28 +00:00
ko1
6622ab2049 * gc.c: Accumulate sweep time to GC time.
Now [GC time] is [mark time] + [sweep time] + [misc].
  ([GC time] >= [mark time] + [sweep time])
* gc.c (gc_prof_sweep_slot_timer_start/stop): rename to
  gc_prof_sweep_timer_start/stop and locate at lazy_sweep().
* gc.c (elapsed_time_from): add a utility function.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@41453 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-06-19 20:43:33 +00:00
ko1
21b0705c18 * gc.c (gc_marks): fix wrong option. FALSE means major/full GC.
It should be TRUE (minor marking).



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@41452 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-06-19 20:09:59 +00:00
nobu
a30d9f9e1e gc.c: refine macros
* gc.c (MARKED_IN_BITMAP, FL_TEST2): return boolean value since always
  used as boolean value.
* gc.c (MARK_IN_BITMAP, CLEAR_IN_BITMAP): evaluate bits once.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@41445 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-06-19 16:07:41 +00:00
nobu
67edbe19ee gc.c: gc_stress is a VALUE
* gc.c (ruby_initial_gc_stress_ptr): now gc_stress is a VALUE.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@41444 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-06-19 16:01:16 +00:00
nagachika
291c1bc314 * gc.c (gc_free_stored_bitmaps): fix indent.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@41440 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-06-19 15:27:58 +00:00
ko1
ce7c13ef4d * gc.c (RVALUE_PROMOTED): fix type.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@41437 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-06-19 15:06:27 +00:00
ko1
50214475a9 * gc.c (garbage_collect_test): rewrite checking code.
When RGENGC_CHECK_MODE >= 2, all minor marking, run normal minor
  marking *and* major/full marking. After that, compare the results
  and shows BUG if a object living with major/full marking but dead
  with minor marking.
  After detecting bugs, print references information.
  (RGENGC_CHECK_MODE == 2, show references to dead object)
  (RGENGC_CHECK_MODE == 3, show all references)



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@41436 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-06-19 14:59:35 +00:00
ko1
745263abb9 * gc.c (RVALUE_PROMOTED): check consistency between oldgen flag and
oldgen bitmap if RGENGC_CHECK_MODE > 0.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@41433 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-06-19 14:34:11 +00:00
ko1
a1acb395a2 * gc.c (rb_gc_force_recycle): clear oldgen bitmap, too.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@41432 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-06-19 14:30:13 +00:00
kazu
28945ea146 * gc.c (gc_stress_get): GC.stress can be Fixnum.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@41429 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-06-19 11:53:07 +00:00
ko1
9b47ec04a8 * include/ruby/ruby.h (struct rb_data_type_struct), gc.c: add
rb_data_type_struct::flags. Now, this flags is passed
  at T_DATA object creation. You can specify FL_WB_PROTECTED
  on this flag.
* iseq.c: making non-shady iseq objects.
* class.c, compile.c, proc.c, vm.c: add WB for iseq objects.
* vm_core.h, iseq.h: constify fields to detect WB insertion.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@41412 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-06-19 06:26:01 +00:00
nobu
541bdd29ba gc.c: more info
* gc.c (gc_mark_children): show more info for broken object.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@41410 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-06-19 06:11:15 +00:00
ko1
97dd259df5 * gc.c (garbage_collect_body): use FIX2INT for ruby_gc_stress.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@41407 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-06-18 22:49:19 +00:00
ko1
bfac961bed * gc.c (rb_objspace::gc_stress): int -> VALUE to store Fixnum object.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@41406 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-06-18 22:45:41 +00:00
ko1
d879849b6e * gc.c (make_deferred): clear flags to T_ZOMBIE.
* gc.c (slot_sweep_body): fix indent.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@41405 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-06-18 22:26:57 +00:00
ko1
54d04073d7 * gc.c (rgengc_remember): fix output level.
* gc.c (rgengc_rememberset_mark): fix to output clear count.
  (shady_object_count + clear_count = count of remembered objects)



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@41403 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-06-18 22:12:39 +00:00
ko1
65791846a6 * gc.c (rgengc_remember): check T_NONE and T_ZOMBIE
if RGENGC_CHECK_MODE > 0.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@41402 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-06-18 22:07:09 +00:00
ko1
5455b7e72e * gc.c (RGENGC_CHECK_MODE): add new check mode `3'.
In this mode, show all references if there is
  a miss-corrected object.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@41401 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-06-18 22:04:30 +00:00
ko1
81ed2d3c4a * gc.c (gc_stress_set): add special option of GC.stress.
`GC.stress=(flag)' accepts integer to control behavior of GC.
  See code for details. Of course, this feature is only for MRI.
  You can debug RGenGC (WB) using `GC.stress = 1'.
  Using this option, do minor marking at all possible places.
  GC::STRESS_MINOR_MARK = 1 and GC::STRESS_LAZY_SWEEP = 2
  seem good to add.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@41400 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-06-18 21:35:40 +00:00