[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <4df04b840607250133h750d7ef6ifa864bc5c5670dcf@mail.gmail.com>
Date: Tue, 25 Jul 2006 16:33:42 +0800
From: "yunfeng zhang" <zyf.zeroos@...il.com>
To: "David Lang" <dlang@...italinsight.com>
Cc: linux-kernel@...r.kernel.org, valdis.kletnieks@...edu,
penberg@...helsinki.fi
Subject: Re: Improvement on memory subsystem
No COW in Private VMA
In current Linux 2.6.16, Linux applies copy-on-write technical when application
issues CLONE_MM parameter to do_fork, as the result, it makes private VMA of a
process share its private pages with other process. It increases memory
subsystem complexity.
In fact, OS should be application-oriented, not standard-oriented. In most
cases, supporting POSIX thread model, vfork and evecve is enough to application.
In other words, we should focus on optimizing our system for the frequent cases,
that is, do copy-on-call when someone really calls fork with CLONE_MM.
No COW in private VMA makes a simple one-to-one relationship among its pte, its
private page and its swap_entry of a private VMA, we will benefit from the model
A new PTE type is introduced here before we go
struct UnmappedPTE {
present : 1; // = 0.
...;
pageNum : 20;
};
1) To swap daemon, we can give a fairer opportunity to every private page. As
I've suggested swap daemon should swap out pages based on VMA instead of memory
page array. So we do the steps listed below to every pte of a private VMA
a) Convert the pte to UnmappedPTE type, that doesn't free the private page
at all, UnmappedPTE::pageNum holds a trace of its private page.
b) Allocate a swap entry for the private page of the pte and page-out it,
remember do the job on current pte and its following ptes together, I've
explained the virtue.
c) OK, it's still untouched, reclaim the private page, convert the pte to
SwappedPTE type.
The flow is better than the implementation of current Linux, I think.
2) We can economize a litter memory. Current swap space includes two parts, one
is swap_info_struct, its responsibility is tracing physical swap area by short
swap_info_struct::swap_map array. Now, it should be a bit array; Another is an
address_space structure, which is used by process to test whether its swap pages
have been read in memory. Now, it should be discarded, every swap page once is
read in, it's linked with its pte by UnmappedPTE.
Note, No COW in PrivateVMA is a bigger improvement.
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists