This task describes how to reduce Thread Local Storage (TLS) look-ups when allocating MBufs.
If you allocate an MBuf with a simple RMBufChain::Alloc() or RMBufChain::Alloc(size) call, the thread performs a context-switch to retrieve the pointer to the Comms pond from the TLS. The context-switch is a processor-intensive operation. To reduce the number of TLS look-ups, use a RMBufAllocator object, which keeps a local copy of the pointer to the pond.
The RMBufAllocator acts as a cache so that the allocation methods do not need to perform a TLS look-up each time they are called.
The classes that frequently allocate Comms chains define the RMBufAllocator object as a member, instantiate it once, and then pass it to the methods of the RMBuf and RMBufChain classes. For most of the methods that may cause an allocation, such as Alloc() , Append() or Split() , you should call the overloaded version that passes a RMBufAllocator parameter. There is no TLS look-up when you call these functions.
The following example creates an RMBufAllocator object and uses it when allocating MBufs:
Copyright ©2010 Nokia Corporation and/or its subsidiary(-ies).
All rights reserved. Unless otherwise stated, these materials are provided under the terms of the Eclipse Public License v1.0.