Re: [ros-users] questions about nodelets and zero-copy messa…

Top Page
Attachments:
Message as email
+ (text/plain)
+ (text/html)
Delete this message
Reply to this message
Author: User discussions
Date:  
To: User discussions
Subject: Re: [ros-users] questions about nodelets and zero-copy messages
In general, nodelets don't guarantee that your CPU usage will go down.
While it is often the case, if the message passing itself is already a
small part of your usage, nodelets won't help that much. They will help
latency of the passing though.


> * What is a good methodology for measuring the overhead of these messages?
>
> * Is there some way to set different "command names" for the
> different nodelets so top or ps can identify which is which?
>
> * How can I run "profile" on a nodelet or a collection of nodelets?
>


You profile nodelets the same way you profile any C++ application: with the
profiler of your choice. I tend to use google perftools and/or cachegrind.
There's also gprof and sysprof, and probably many more.


>
> * Are any enhancements planned for rxgraph to report nodelet
> connections clearly?
>
> If not, I'll open an enhancement ticket. The rostopic and rosnode
> commands seem to report things correctly, so the right information
> must be available somewhere.
>


That information doesn't exist anywhere at the moment. As far as the ROS
graph is concerned, it's just a single node.


>
> I am guessing that memory allocation for large, high-bandwidth
> messages could be a significant factor. Before, I pre-allocated the
> messages to avoid memory overhead on every cycle. (But, I suppose that
> just pushed the problem down into the publish() implementation.) Now,
> I have to allocate a new message and shared_ptr every time.
>


Don't guess, profile. Allocation could be a bottleneck, but it's more
likely that filling in the data (or std::vector's 0-filling of primitive
types on resize) is the problem.


>
> * Should I use the ros_realtime/allocators package in place of
> standard C++ new? Are there examples of this I can study?
>


The allocators package currently only has an aligned allocator, so that
won't help. What might help is a growable (and shrinkable) version of
lockfree's ObjectPool. You could probably try using those if you're OK
having a fixed-size pool of messages.

Josh