According to your working config, this line...
disk=['file:/mnt/xen/gpt.raw,hda,w']
You are using a file as storage for the VM, correct? From the disk performance point of view, that is possibly the worst one. On my experience, if you use files as storage for VMs, performance for sequencial read and writes with big files is decent, but with small files and general I/O is very low. What you have to do, is make a LVM partition and give Xen a raw volume. That is supposed to be near-native performance.
May want to check this older Thread of mine. I read all the feedback but left it abandoned because I got lazy and stalled:
http://lists.xen.org/archives/html/xen-users/2014-04/msg00166.htmlConsensus about disk performance, is that if you have a simple single disk setup, using a LVM raw volume is the easiest and straightforward way to get the expected disk performance in the VM. I still didn't tried so can't tell you, but everything points than that will work.
With big Hardware your choices starts to grown, because you can pass a dedicated RAID Controller to the VM without the paravirtualized Drivers layer.