# Performance tuning

This chapter discusses ways to tune Obnam performance for various
situations. It covers the various options that can affect CPU and
memory consumption, as well as ways to experiment to find a good set
of values.

See <http://obnam.org/faq/tuning/> for a start.


## Running Obnam under the Python profiler

A **profiler** is a program that measures where another program spends
its time. This can be very useful for finding out why the other
program is slow.

Obnam can easily be run under the Python profiler. You need to have
the profiler installed. Check with your operating system or Python
installation how to achieve that. To see if you have it installed, run
the following command on the command line:

    python -c 'import cProfile'

If this outputs nothing, all is well. If it outputs an error such as
the following, you have not got the profiler installed:

    Traceback (most recent call last):
      File "<string>", line 1, in <module>
    ImportError: No module named cProfiler

Once you have the profiler installed, run Obnam like this:

    OBNAM_PROFILE=backup.prof obnam backup

This will cause the profiling data to be written to the file
`backup.prof`. You can do this for any Obnam command, and write it to
any file.

The profiling data is in binary form. Obnam comes with a little helper
program to transform it to a human-readable form:

    obnam-viewprof backup.prof | less

If you run the above command, you'll see that the humans to whom this
is readable are programmers and circus clowns. If you can understand
the output, great! If not, it's still useful to send that to the Obnam
developers to report a performance problem.
