ruby 1.9 gc
Upcoming SlideShare
Loading in...5
×
 

ruby 1.9 gc

on

  • 1,189 views

 

Statistics

Views

Total Views
1,189
Views on SlideShare
1,186
Embed Views
3

Actions

Likes
0
Downloads
1
Comments
0

1 Embed 3

http://www.slideshare.net 3

Accessibility

Categories

Upload Details

Uploaded via as OpenOffice

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

ruby 1.9 gc ruby 1.9 gc Presentation Transcript

  • Ruby1.9のGCにおける 効率的なメモリ管理 千々和 大輝 稲付 智昭
  • 背景
    • Ruby 1.9のGCはMark&Sweep型GCというアルゴリズムを採用している
    • スタックを走査して使用中のアドレスにマーキングする
    View slide
  • 問題点1
    • 一つ一つのheapのサイズは16KB View slide
    • heap中のslotが一つでも使われていればfreeすることができない
    • heapのサイズを小さくするとメモリ確保(malloc)の回数が多くなり、非効率的
  • 問題点2
    • Ruby 1.9ではheapの確保にmalloc/freeを用いる
    • freeはOSにメモリを返さないことがある
  • 解決方法
    • 一気に20MBくらい確保
    • ->メモリ効率が悪い
    • ->まだ使わないメモリは不要、だけどfreeすると意味がない
    • ->madvise(2)システムコールを使用
  • madvise(2)システムコールとは
    • int madivise(void *addr, size_t length, int advice);
    • アドレス addr からはじまる length バイトのメモリブロックのページング出力をどう扱えばいいか、カーネルにアドバイスする
    • アプリケーションからカーネルに、マップされたメモリや共有メモリをどのように扱ってほしいか伝えることができカーネルはそれに応じて先読みやキャッシュなどの適切な手法を選択できる
    • MAVD_DONTNEED を使用
    • -> カーネルの判断によりメモリは解放されるが、再アクセスがあった時は 0 埋めされたページを割り当てられる
  • 作業内容
    • gc.cを読んだ。
    • gc.cをいじった。
    • 効果を確認
  • 成果
    • 今朝実装完了
    • 期待通りの動作をしたが、ベンチマークをとる時間がなかった
    • ベンチマークとりたい
  • ご清聴ありがとうございました