#1430 new planned

Render-buffer pools

Reported by: Ichthyostega Owned by:
Priority: lesser Milestone: 2beta
Component: lumieraVault Keywords: render vault performance technology
Sub Tickets: #1366 Parent Tickets: #835, #1387

Description

As Lumiera Architect,
I'd like to explore pooling of render buffer allocations,
to find out about the optimisation potential of this well established approach.

description

For the Render Engine, the aim is to strike a balance between maximum throughput and good responsiveness. And while it is clear that this implies to maximise CPU usage, it is not so clear to what extent it is beneficial to retain some memory overhead.

It is a well-established fact that memory allocations can be detrimental to maximising throughput by parallelisation. For this reason, buffer management is based on retaining a small pool of pre-allocated buffers within each of the worker threads. Adapting to fluctuations in storage demand however requires a degree of coordination between these pools, which we bring about through a centralised allocation hub. It is expected that these fluctuations will average out through the compounding of demand; nevertheless, some residual fluctuations in overall storage are to be expected.

This is the point where the concept of pooled allocations could be brought into play. However, the implementation of pooled allocations comes with its own challenges: since we have to deal with large amounts of memory, the freelist-based implementation (which typically looks very simple and clean in code) can be expected to exhibit bad cache locality. It thus looks more promising to rely on a family of tiling pools, so that the usage state of some tile can be encoded into an allocation bitmap. The flip side of this approach however is that we have to accommodate and round-up the allocation-requests, to make them fit into a small number of standard tile sizes. And because it is essential to have each request serviced by a single tile (because otherwise we would be joining tiles to service a request, leading to fragmentation), using a series of fixed-sized tile pools inevitably leads to wasting memory.

At the heart, this task involves providing a range of meaningful real-world load scenarios in order to evaluate the implementation in question and gain empirical insight. Before we actually decide to employ such a set of Render-buffer pools, it is vital to demonstrate that such an elaborate setup yields actual benefit without relevant adverse side-effects.

Change history (0)

Note: See TracTickets for help on using tickets.