OK.So I will talk about the Ruby Memory Management Hacks.By the way, I want to get a short email address.So I get this domain, rvm.tp.But we sent the Ruby version manager at least.Ruby Virtual Machine but Ruby version manager is famous, so it is not a domain for Ruby version manager.So let's talk about my presentation.Yes, the current Ruby Memory Management is something sucks, but Ruby is open source, so we can modify and make it better.So my presentation is Hacks.So let's talk about.And another, the president of the Japanese Ruby community, Takahashi-san, pointed out that this year's Ruby conference seems that speakers are searching and next topic advance rails.Not rails, but no SQL topics or binary topics.And so on.So everyone gets bored with their own topics.And this talk about the Memory Management Hacks.So it means, do I have a virtual machine?No, no, no.My concern is only a performance.So memory management is very important feature of the performance.So I want to talk about 1.9.2 performance improvement around the memory management.And also I will talk about the five performance memory profile feature and the progress of some research.Let's talk about the self introduction myself.I'm Koichi Sasada.Koichi is given name and Sasada is family name.This is six Ruby conference and fifth talk on these topics.My main job is lecturer at the University of Tokyo.This is advertisements.You want to talk research about Ruby and virtual machine.Not language virtual machine, but virtual machine monitor term operating system in Japan.Please contact me.I have four students in Sasada laboratory and two students working on Ruby.So I will introduce their achievements in this presentation.And as you know, I'm a Ruby comitter and I'm a member of ASAXRB.And Ruby Kaigi organized PC chair.So if you want to talk at the next Ruby Kaigi, please contact me.So I will recommend your presentation to this meeting.So this is a fifth time course.This is no improvement my language skills, but...So this is the same course, same notice.So important is you can only see this slide.If I cannot speak good English, but you can see this slide.I write all of my contents in this slide.So please go front if you can this slide.About language, this is quoted by Matsumoto-san.Tower of Babel are broken.So please use his English.So let's talk about...Not yet.This talk is not about Java, of course.This is Gosling, Java designer.Not of course not of Pearl, Python, HPT language.Not about Japanese goods.Not about Matsumoto-san.I have no compatibility with Matsumoto-san.So it's not about marketingization.It's not about Rails.If you want to listen something about Rails, please go away.And also this talk is not about Ruby.So what is about...Can you see this?So this is a PDP 11, so this is about C.This presentation is about C.So I talk about C implementation.So if you...This presentation is not about Ruby programmers.But C Ruby programmers and Ruby core teamor Ruby extension writers.This presentation requires the knowledge of Ruby interns.It seems interesting.It's time to dinner.You can play.If you be acquired.Are you okay?So let's talk about this talk.I want to talk about three topics about memory managementand VM performance improvementand multivirtual machine progress.So advanced memory management hacks.So this is the title of this presentation.I want to...So I have three topics about this main topics.I think memory management is very important.For example, memory is very big and expensive.Very big.This picture is taken at the computer history museumat the mountain view.I need a unibuck memory delay line memory tank.Memory tank.So memory is very inexpensive.So we need to keep the memory consumption.And as you know,malloc and free management in yourself is very difficult.So we need garbage collection.Fortunately, our Ruby has garbage collection.But garbage collection has overheads.And memory management is very importantfor the long running service.If you running 30 years continuous learning,if memory management is very important.By the way,thank you.So this is my birthday.Thank you very much.So I'm very old software.So I don't have automatic garbage collection.My garbage is in my room.I collect by myself.So I think it is important.So automatic memory management.So memory management.I summarize memory management programs in CRuby.So CRuby has several issues about memory management.So CRuby only has a naive garbage collection.So this means that the not a Java machine,not a .NET,but other garbage collection including smart garbage collection.CRuby use original garbage collectionbut against the other garbage machine.Why the garbage collection is naive isProgrammer friendly and garbage collector unfriendly C extension interface.So you can write C extension library easilybut garbage collector cannot be managed more cleverly.And other program is not,memory profiler is not there.So you cannot analyze your application's memory consumptionand object fragmentation.I describe after this slide.So the solution of this memory management isone of the memory management improvement is using CRuby.I know,I know.I understand what you want to say.So of course I have other ideas.I already.Macruby or Rubinius.They have a very clever garbage collector.So if you have memory problem,please move to patch up alternative implementations.But in CRuby we try to improve memory management.This is a little improvement.So the garbage collection of CRuby is not agenerational garbage collector.So if you have a old long life object might begarbage collection pressure.This means that such an object increasesfrequency of garbage collection.So for example,the node object or insertion sequence such asbyte code object may be a long life.Especially the inline cache entries in theinstruction sequence are presented by node objects.So the modular classes are also a long life.So on 192,inline cache entries is no longergarbage collection managed object.So we manage the touch inline cache entriesit's explicitly.So this technique reduces the long live nodeobjects.So it reduces the garbage collection counts.And I also plan to remove node objects when passing phase created.Many node objects are generated.So I want to avoid such unused node objects.Next topic is the memory profiler.CRuby doesn't have memory profiler support.So I create a new memory management primitive.The name size of methods and experimental memory profiler.These methods are not expected to work except CRuby.There are many other implementations.So I need such a node.192,we introduce object space library.So this library has the following method to theobject space module.I don't describe the details.So you can read a lot of such libraries.For example,if you require this object space library,you cancalculate the memory size of the 100th string.This returns 100th.Time object is also consuming some bytes.This is 60 bytes.Thread object,if you make a thread object,touch a huge memory size consumes.You can understand this memory size.And also the file interface uses the touch memory consumption.To achieve such a memory size of interface,we change theTdata representation.As you know,maybe you know,Tdata lapses,sheets lapses.TraditionalTdata,currentTdata represents,includes a point out to the structure and the function and free function pointer to make garbage collection correctly.And you can make data structure with this macro.But Tdata lacks a tight identity and the memory size function.So if you apply the Tdata object,apply the Tdata object,you cannot find out the memory consumption.So we add the memory size function to the Tdata.So how to do this size?Example,the time object lapses,such as the time data you declare such a function,free function,and the size function includes the structure.And this structure includes the name of this data.And you can make this lab object with this macro.And we make a new API.So if you need to identify such a Tdata type,you canget the name of the Tdata type with this API.And so it is easy to make a sampling memory profile,it means satisfied profile.So we have enough tools to make a profile.So this is an example,example memory profile.This figure shows the result of the memory profile.I don't describe the detail of this picture,but you can find outthe pre-consumption of the application.It is easy to make it.So this is the detail of this picture.It is a part class object number.T-Q object count for the statistics.Tdata statistics is new.I don't describe details,but if you want to know such a sampling profile,you can make it easy with 192.And on the other hand,sampling profile doesn't show the correct result of the memory consumption.So we are working on the deterministic memory profile.One student is working on this.So did you attend JLuby's presentation?He shows a very nice memory profile.So we want to make such a profile.Inspired from Java Real-time Memory Profiler,it is a memory profile for the program.This is a working progress research.We make the object fragment.We make the memory management with always dependent methods.So the problem is the object fragmentation.Currently,see JLuby,as you know,if at least one object is there,we can't remove this block.So this is an object fragmentation program.So we rely on such a structurewith always dependent memory management API,M-map,M-map,M-map device on unique operating system,a similar API on Windows.We allocate a bulk of such 100 memories at firstand allocate 4 kilobytes for the page.So the possibility to remain the object are low.So this memory management feature has many advantages.So low object fragmentation is easy to managewith operating system.If you want to return the free pages,you can return the page withM-map or M-map device system code.This system code return directly tooperating system memory manager.This 4 kilobyte alignment page helpsbitmap marking.Luby Enterprise Edition uses such a technique,but RWE doesn't.They use naive techniques,so it is very easy to implement it.And it is very deep technique,but it's pointer to heap function can beimplemented in right way.So it means that this reduce garbage collectionoverheads.Evaluation is not yet.So this is a message of this presentation.I want to know the memory management problem.So if you have any problem, please ask me.And I will turn for you.This is a performance improvement,batch machine performance improvement topic.I changed the batch machine instruction set a little.We realized a fiber implementation.To get the instance variable,we need to calculate something.So we changed the get instance instructionor set instance instruction.So we changed the instruction hash treatment.So I want to say in this slide is thatYALB instruction set is still unstable.So please know that if you use YALB assembler,but I don't think there are no,I think there are no user of YALB assembler.And this is a fiber performance improvement.You know,fiber is 1.9 feature.This is colluding abstraction.This is primitive for concurrent programming,not parallel programming.Problem is slow context switching.Fiber context switching is very slow.So this is a picture of context switching.If you run on the fiber A,the machine stack pointer is here.So switch to the fiber B.At first,copy this area to the bufferfor the fiber A and extend the machine stack pointerand copy this area to the stack context.So this calls two machine stack copies.So it is very expensive.But there is a reason to such an expensivemethod.So the reason is portability.So there are no general methods to switch a machine stack.So some assembler approaches have been proposed.But such an approach has a portability problemor a maintenanceability problem.So we use OS dependent features.So maybe OS features are well-debuted or well-maintained.So we use get context or set context on Unix.And we support VNUCs, Solaris, FreeBSD and Mac OS 10.And Windows with 5ID API.And in other operating system,traditional machine stack copy methods are used.So in such OS dependent features,it is very simple to context switchinglike moving a stack pointer.It is very fast.This is a low result of the context switching.Windows, Linux and Solaris.This is a speed-up ratio of each environment.This line is machine stack depth.So the cost of the copy is brought by the machine stack depth.It is very effective.For example, the clock call or fiber regime we compare.The clock call execution time is this here.This is execution time in seconds.191 fiber is here.It is very slow.That is 192 proposed fiber method can reduce such context switching overhead.This is a fiber generation speed.There is no difference.This is because many garbage collection occurred.This is our future work.You shouldn't make many fibers.At last, I want to talk about multi-version machine progress.This research is sponsored by some micro systems.He is Nakada-san, a Nobu, also known as Apache Monster,the most famous Ruby committer except Matsumoto-san.He help our project.So I want to talk about multi-version machine overview and progress.このスライドもマツモンスタンの機能について読みました。この機能はマルチバーチャルマシンについて読みました。モチベーションマルチバーチャルマシンの研究は、パラレルエグセクションを作りました。最近、マルチバーチャルマシンはコモディティを作っています。今後、マルチバーチャルマシンを作ることができます。パラレルエグセクションを作ることができます。マルチバーチャルマシンの研究は、一番大きなコモディティを作ったものではありません。マルチバーチャルマシンは、マルチバーチャルマシンの研究は、マルチバーチャルマシンの研究は、パラレルエグセクションの機能について読みました。私には難しい理由があるので、それは悪い理由だと思います。私はそう思います。私のアプローチは、バーチャルマシンをアイスレートして、パーレットでパーレットして、バーチャルマシンのアプリケーションをアプリケーションして、リビーバーチャルマシンのアプリケーションをアプリケーションして、メールクライアンやアプリケーションをアプリケーションして、このアプリケーションは、マルキバーチャルマシンのアプリケーションをアプリケーションして、このマルキバーチャルマシンのモデルをアプリケーションして、プロセッサーやエレメントが多いので、ネイティブスレートが多いので、1-9-1とかでこれのシリーズ、バーチャルマシンが多すぎて、このリビースレートはすぐアプリケーションをアイスレートして、アプリケーションやバーチャルマシンをアプリケーションして、このスペースはパラレンスでできることができます。多くのチャレンジがあるマルチバーチャルマシンです。最も難しい問題はコンパチビリティです。シールビーは多くのシーグローバルバリアブルが必要です。シーグローバルバリアブルは必要です。シーグローバルバリアブルは必要です。例えば、仕上げの仕上げはバトルマシンに分かることができます。プロセスインプロジェクトの仕上げはバトルマシンに分かることができます。これはインプリメンテーションチャレンジです。コミュニケーションインターフェイズは、バトルマシンに分かることができますが、コミュニケーションインターフェイズは、ココリクュレーションを分かることができます。これがチャレンジですこのアプリケーションのインターフェイスを作っています例えばアプリケーションのインターフェイスこのインターフェイスをバーチャルマシンをCレベルに作っていますこのバーチャルマシンをスイングランスにしていますこのAPIをスイングランスにしていますこのタミノロジーがJava Threadsについてのインターフェイスをルビ APIを考えています例えばルビ VM.Newブラブラが新バーチャルマシンを作っていますプッシャルはコミュニケーションのインターフェイスとえてコミュニケーションのインターフェイスを考えますコンパチュビティプロヴェイスコンパチュビティプロヴェイスがコレンチュビティプロヴェイスが次の予訪大しか不能にバーチャルマシンに移動されますこの新しいファンクションを作る必要があります。MVMマネージャーはこのシンボルを探していません。このシーエクセンションはメインバーチャルマシンで使用されています。このシーエクセンションは、一つのバーチャルマシンを使っていることができます。このシーエクセンションは、MVMマネージャーを使っていることができます。このシーエクセンションは、一つのバーチャルマシンを使っていることができます。このシーエクセンションは、MVMマネージャーを使っていることができます。このシーエクセンションは、一つのバーチャルマシンを使っていることができます。このシーエクセンションは、一つのバーチャルマシンを使っていることができます。このシーエクセンションは、一つのバーチャルマシンを使っていることができます。このシーエクセンションは、一つのバーチャルマシンを使っていることができます。このシーエクセンションは、一つのバーチャルマシンを使っていることができます。このシーエクセンションは、一つのバーチャルマシンを使っていることができます。このシーエクセンションは、一つのバーチャルマシンを使っていることができます。このシーエクセンションは、一つのバーチャルマシンを使っていることができます。このシーエクセンションは、一つのバーチャルマシンを使っていることができます。このシーエクセンションは、一つのバーチャルマシンを使っていることができます。このシーエクセンションは、一つのバーチャルマシンを使っていることができます。このシーエクセンションは、一つのバーチャルマシンを使っていることができます。このシーエクセンションは、一つのバーチャルマシンを使っていることができます。このシーエクセンションは、一つのバーチャルマシンを使っていることができます。このシーエクセンションは、一つのバーチャルマシンを使っていることができます。このシーエクセンションは、一つのバーチャルマシンを使っていることができます。このシーエクセンションは、一つのバーチャルマシンを使っていることができます。このシーエクセンションは、一つのバーチャルマシンを使っていることができます。このシーエクセンションは、一つのバーチャルマシンを使っていることができます。このシーエクセンションは、一つのバーチャルマシンを使っていることができます。このシーエクセンションは、一つのバーチャルマシンを使っていることができます。このシーエクセンションは、一つのバーチャルマシンを使っていることができます。このシーエクセンションは、一つのバーチャルマシンを使っていることができます。ご視聴ありがとうございました。