Spiky COMMIT results in performance slowdowns with Postgres 8.4
It's hard to tell what exactly your graphs say.  But commit is designed to be slow.  By default, Postgres waits for changes to be written to disk before it lets commit return.

You can let commit complete before changes are written to disk with this option:

synchronous_commit = off


That should certainly help to spread the disk I/O required for commit over more time.  The downside is that a server outage can cause completed transactions to be lost.