haiku/build/config_headers
Ingo Weinhold eb8dc1ebfb * Removed DEBUG_PAGE_CACHE_TRANSITIONS debugging.
* Added VMCache::MovePage() and MoveAllPages() to move pages between caches.
* VMAnonymousCache:
  - _MergeSwapPages(): Avoid doing anything, if neither cache has swapped out
    pages.
  - _MergeSwapPages() does now also remove source cache pages that are
    shadowed by consumer swap pages. This allows us to call _MergeSwapPages()
    before _MergePagesSmallerSource(), save the swap page shadowing check
    there and get rid of the vm_page::merge_swap flag. This is an
    optimization based on the assumption that usually none or only few pages
    are swapped out, so we save a lot of checks.
  - Implemented _MergePagesSmallerConsumer() as an alternative to
    _MergePagesSmallerSource(). The former is used when the source cache has
    more pages than the consumer cache. It iterates over the consumer cache's
    pages, moves them to the source and finally moves all pages back to the
    consumer. The final move is relatively cheap (though unfortunately we
    still have to update all pages' vm_page::cache field), so that overall we
    save iterations of the main loop with the more expensive checks.

The optimizations particularly improve the common fork()+exec*() situations.
fork() uses CoW, which is implemented by putting two new empty caches between
the to be copied area and its cache. exec*() destroys one copy of the area,
its cache and thus causes merging of the other new cache with the old cache.
Since this usually happens in a very short time, the old cache does still
contain many pages and the new cache only few. Previously the many pages were
all checked and moved individually. Now we do that for the few pages instead.

A very extreme example of this situation is the Haiku image build. jam has a
huge heap (> 200 MB) and it fork()s+exec*()s for every action to be executed.
Since during the cache merging the cache is locked, any write access to a
heap page causes jam to block until the cache merging is done. Formerly that
took so long that it killed a lot of parallelism in multi-job builds. That
could be observed particularly well when lots of small actions where executed
(like the Link, XRes, Mimeset, SetType, SetVersion combos when building
executables/libraries/add-ons). Those look dramatically better now.
The overall speed improvement for a -j8 image build on my machine is only
about 15%, though.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@34784 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-12-27 16:14:13 +00:00
..
apps_debugger_config.h * More work on retrieving local variable values. Address and compound types can 2009-09-21 04:39:40 +00:00
kernel_debug_config.h * Removed DEBUG_PAGE_CACHE_TRANSITIONS debugging. 2009-12-27 16:14:13 +00:00
kernel_debugger_config.h * Forgot to put us keymap as the default one 2008-06-20 23:29:56 +00:00
paranoia_config.h * Paranoia checks were accidentally globally enabled by default. Object 2008-04-27 15:13:31 +00:00
ReadMe Added a small ReadMe about custom build headers. 2008-10-23 09:18:05 +00:00
support_kit_config.h Added support_kit_config.h configuration header. ATM it only contains a 2008-04-22 15:04:01 +00:00
tracing_config.h * arch_debug_get_stack_trace(): 2009-12-22 15:15:07 +00:00

To customize the settings defined in these headers, create a folder "user_config_headers" in the "build" folder and copy the headers you want to modify into that folder. Your custom headers will be ignored by SVN and the build system will automatically use them instead of the original ones. But be aware that when changes are commited to the files in "config_headers", you will have to apply them to your custom headers manually.