Beyond Profiling-Gaining Control of Software Performance

There is an unspoken credo in the world of software development that says, "Make it run, make it pretty, make it fast." Developers have learned that functionality comes first, with reliability, performance, etc. falling a distant second place. By the time performance becomes an issue, it is too late. The only way of guaranteeing performance is to build it in. More often than not, when attempting to improve the performance of a piece of software, designers find that the only real performance gains to be had can only be realized through architectural changes. The best that can be hoped for at this stage is incremental performance improvements.

Tom DeMarco stated that "You can not control what you can not measure," and building performance into software very much proves this rule. In order to guarantee that the software being written will meet its performance objectives, software execution speed must be monitored at every step of the way, with any trade off decisions being based on objective data rather than subjective reasoning.

Software performance profiling is the most popular means of determining where a software application spends its time. Available in a range of tools, performance profiling enables developers to see how much time their software is spending in each function in the system, enabling them to focus on those areas of code that would offer the most benefits from optimization efforts.

As profiling data is gathered over a period of time (rather than a one-off measurement), it provides vital information on the application. For instance, a function may perform to spec when the system starts, but due to degradation of resources may become less and less efficient as time goes on. This degradation is revealed with profiling information. As a result, profiling offers significant benefits to developers interested in improving the performance of their software, but it is incomplete.

Performance profiling tools measure the time that a software application spends in each function, and presents this performance information on a function by function basis as either inclusive (time spent in parent function and all called functions) or exclusive (time spent in parent function only) timing data. From this information, it is possible to identify those functions in which the system spends most of its time. Profiling measurements do not allow developers to measure the execution time of specific sections of code, nor do they normally provide performance information on interrupt service routines (ISRs), both of which are essential to understanding and controlling the performance of an application.

Each of these measurements is crucial to understanding software performance. This paper describes each of these timing measurements in detail and paints a clear picture of why these measurements are important. It will also describe why the recent addition of these timing capabilities to the CodeTEST® tool suite Performance Analysis tool helps to differentiate it from the slew of performance profiling tools on the market.

View Entire Paper | Previous Page | White Papers Search

If you found this page useful, bookmark and share it on: