[GSoC]The overheads caculation of POSIX Key
Joel Sherrill
joel.sherrill at OARcorp.com
Wed Aug 22 11:08:00 UTC 2012
On 08/21/2012 07:15 PM, Gedare Bloom wrote:
>
>
> On Mon, Aug 20, 2012 at 3:01 AM, Ashi <ashi08104 at gmail.com
> <mailto:ashi08104 at gmail.com>> wrote:
>
> Hi, all. This post is about the overheads calculation of POSIX
> Key. We haven't reach a resolution about what to do with this.
> Thanks for any advice!
>
> One problem of old POSIX Key is: extra memory is reserved in keys
> for each thread or task, which can be heavy memory overhead. Now
> in current one-rbtree implementation of POSIX Key, each key's data
> isn't allocated until one thread(or task) sets its key data. But
> RTEMS system still need reserve enough workspace memory for all
> possible key's data. For example, there are 32 threads and 1 key
> in system. And only 1 thread need key data, then other 31 thread
> data is not used and reserved. I'm not sure whether it is
> necessary to provide user a option to set the upper bound of the
> key data number in system. If it is necessary, I think we can add
> something like CONFIGURE_MAXIMUM_THREAD_KEY_DATA, it can be from 1
> to #max key * #max thread. If we reach the upper bound, we can
> return ENOMEM in the key setspecific function as the POSIX
> standard[0] allows.
>
> I think it is a good idea to configure the number of keys independent
> of the number of threads.
I agree. There are two factors:
+ number of keys
+ number of threads/tasks using keys
For the first, if you don't _Workspace_Allocate as part of creating a
key, then it is
covered by the sizeof(POSIX_Keys_Control). If you simply changed just
that, the
existing confdefs.h code does not need to change.
Each key calling get or set will have a structure allocated via
_Workspace_Allocate.
This has to be accounted for.
The "per thread using key" is a number which could be < the number of
tasks+threads
or as much as (number of keys * (tasks + threads)) in the case where
EVERY task/thread
uses every key.
>
> Another problem: I find there is only maximum keys
> configuration:CONFIGURE_MAXIMUM_POSIX_KEYS, but how and where does
> RTEMS determine the proper workspace size for all POSIX Key data?
>
> Probably in cpukit/sapi/include/confdefs.h Check for how the macro is
> used / propagates in that file.
>
Specifically at this line of code:
http://git.rtems.org/rtems/tree/cpukit/sapi/include/confdefs.h#n1703
Note that currently it allocates a POSIX_Keys_Control PLUS the table
of key values per API.
Based on our discussion, you would be removing that second factor and
adding another CONFIGURE_xxx symbol corresponding to the number of
tasks/threads using key instances as discussed above.
>
> links:
> [0]
> http://pubs.opengroup.org/onlinepubs/009604499/functions/pthread_setspecific.html
> --
> Best wishes!
> Zhongwei Yao
>
>
--
Joel Sherrill, Ph.D. Director of Research& Development
joel.sherrill at OARcorp.com On-Line Applications Research
Ask me about RTEMS: a free RTOS Huntsville AL 35805
Support Available (256) 722-9985
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.rtems.org/pipermail/devel/attachments/20120822/6e915456/attachment-0001.html>
More information about the devel
mailing list