Re: [patch 1/7] cpusets: add dirty map to struct address_space

Peter Zijlstra
2008-10-28T17:37:58Z

On Tue, 2008-10-28 at 09:08 -0700, David Rientjes wrote:

> This patch implements the management of dirty node maps for an address
> space through the following functions:
>
> cpuset_clear_dirty_nodes(mapping) Clear the map of dirty nodes
>
> cpuset_update_nodes(mapping, page) Record a node in the dirty nodes
> map
>
> cpuset_init_dirty_nodes(mapping) Initialization of the map
>
>
> The dirty map may be stored either directly in the mapping (for NUMA
> systems with less then BITS_PER_LONG nodes) or separately allocated for
> systems with a large number of nodes (f.e. ia64 with 1024 nodes).
>
> Updating the dirty map may involve allocating it first for large
> configurations. Therefore, we protect the allocation and setting of a
> node in the map through the tree_lock. The tree_lock is already taken
> when a page is dirtied so there is no additional locking overhead if we
> insert the updating of the nodemask there.

I find this usage of tree lock most bothersome, as my concurrent
pagecache patches take the lock out. In which case this _does_ cause
extra locking overhead.