Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

データ領域に対するデフラグ #3

Open
yuezato opened this issue Oct 17, 2018 · 1 comment
Open

データ領域に対するデフラグ #3

yuezato opened this issue Oct 17, 2018 · 1 comment

Comments

@yuezato
Copy link
Member

yuezato commented Oct 17, 2018

https://github.com/frugalos/cannyls/wiki/Data-Region-Allocator#%E8%AA%B2%E9%A1%8C
上記でも課題とされているが、データ領域で極端なフラグメンテーションが発生した場合の直接の回復策を、現状のcannylsは持ち合わせていない。

デフラグを行うとして、どの種類のアルゴリズムを採用するか?
特に、例えば次のような状況でどのようにするべきか?

  • 100ブロックがデータ領域で、先頭4ブロックが空、続く50ブロックに1つの連続するデータ、続く6ブロックが空で、残りの40ブロックに連続するデータがある
    • [4blk empty][50blk continuous data][6blk empty][40blk cont. data]
  • これに対するデフラグ後のデータ領域として次のようになって欲しいか?
    • [50blk cont. data][40blk cont. data][10blk empty]
@yuezato
Copy link
Member Author

yuezato commented Oct 19, 2018

上のような瞬間的にデータの断絶が発生する引っ越しと、
ブロックに余裕がある時に、例えば前方向に丸っとコピーした後で削除を行う(処理としては GET & PUT & DELETE)引っ越しの2つを比べると、
前者には少なくともlumpdata同士のリンク情報を持たせる必要がある気もする。

また、「前方詰めはシークが走りまくって遅いのでじゃあ割り込み可能にしよう」
ということにすると、次のような本格的な生き別れも発生してしまうのも注意

[4kb empty][50kb cont.data] ... → (move forward)
[4kb fragmented data][4kb empty][46kb fragmented data] ... → (high priority 4kb push)
[4kb fragmented data][4kb cont data][46kb fragmented data] ...

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant