Your SlideShare is downloading. ×
0
ruby gc
ruby gc
ruby gc
ruby gc
ruby gc
ruby gc
ruby gc
ruby gc
ruby gc
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

ruby gc

806

Published on

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
806
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
1
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

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

×