[Message Prev][Message Next][Thread Prev][Thread Next][Message Index][Thread Index]

[MD:1360]A solution for "Bitmap kills emacs" problem.



堀口さん、ありがとうございます。

この件に関しては、悩みまくっているんですが、Meadow.planにいれて、
ちょっと半田さんに相談することにします。^^;;;

堀口さんのpatchはとても良くできていて、本来r_allocは、取得元の
pointerしか面倒を見ませんが、その他のpointerまで面倒を見てくれます。
しかし、全てのHeap Blockに対してrelated pointerを、範囲に入っているか
照合し、登録しにいくので、どうしても大掛かりになりますし、なにより
BufferからGLYPHを構築するこの部分だけの問題だけで、このような操作が
本当に必要かということになると疑問が残ります。

すでに、堀口さんなどは熟知してらっしゃられると思いますが、
問題点を絞り込み、検証するとしたら、以下の2点にあてるのが、
まあ適当だと思われます。

1. gmallocからのmorecoreにおいて、reallocationを抑制する。

2. str_cmpchar_idで、malloc/reallocの呼び出しを控える。

という点に絞られます。

r_allocにはこのような目的の為にfreeze機能を持っています。この
機能を用いてreallocationを凍結すれば、落ちることはなくなるのですが、
なにぶんstr_cmpchar_idが、異常なまでに大きなheap領域をreallocするので
大量のheapをfreeze時に確保しなくてはならず、大きな速度低下を招いてしまいます。

特に現代CPUではAssociativeが少ないcacheを大量に持つという
Memory Architectureを追い求めているものが多いので、
このような処理はできるだけ避けるべきだと思います。

まあ、こうなってくるとstr_cmpchar_id()開発元に相談するのが良いと思われます。
というわけで、1.06b2では、まだ修正しておりません。^^;;;
(ごめんなさい。)

from himi