How do I determine the number of seeks performed on Linux?

http://serverfault.com –
I have two programs that write to my servers disk.
One I wrote, it does linear writes, it's writing data quickly. Another I'm benchmarking, it's writing data at a 3rd of the speed. It doesn't do much else, and I believe the problem is caused by the second program seeking more (i.e. it does more random file access).
Is there a tool on Linux I can use to determine the number of seeks being performed on a particular disk? Or by a particular process?
(HowTos)

I'm learning file operation calls under Linux. The read() and write() and many other functions use cache to increase performance, and I know fsync() can transfer data from cache to disk device. However, is there any commands or system calls that can determine whether the data is cached or written to disk?