Finding the right tools
Trying to dig deep into an application’s behavior can be a daunting task. The abstraction layers in the I/O stack do not make our job easier in this regard. To analyze each layer in the I/O hierarchy, you must have a decent grasp of the concepts used in each layer. The job is made even tougher when you include the application in this setup. Although the tracing mechanisms in Linux can help to understand the patterns generated by an application, it is not possible for everyone to have the same level of visibility about the design and implementation details of the application.
If you’re running a critical application, such as an Online Transaction Processing (OLTP) database that processes millions of transactions every day, it can be helpful to know where CPU cycles are wasted. For instance, there are several service-level agreements associated with a transaction, and it has to be completed within a few seconds. If a single transaction is required...