Gazebo SITL - camera 'update rate' issue

I have successfully installed gazebo and the ardupilot sitl simulator. Instructions are great.

When I run just gazebo the update rate on the gimbal mounted camera is as requested in the model.sdf file. Especially with --lockstep enabled. I measure this by watching the Hz rate reported in the Topic view of the camera.

However when I start the sim_vehicle on the same machine the update rate cannot be maintained (even when the drone is not yet armed). I need a consistent update rate for
the vision control loop I want to implement. I could be wrong but I don’t think the camera
and the ardupilot functions are related - so is this just a host CPU load issue?

I have yet to try running sitl on a different machine - in case its a pure CPU load issue, but I’m not convinced that this will yield a solution.

Just wondering if anybody else has run into this issue and resolved it successfully?
In the mean time I’ll see if I can run in different machines.

A small update. I can get better consistency of frame capture if I run sitl
with a --no-mavproxy option and with a direct connection from my dronekit application.
And if I run gzserver (instead of gazebo)

It implies that the saving of the file to OS is slowed by the extra work being done by mavproxy.
It also implies that things would improve with a faster machine.

So I have two contributions, the consistency of the actual time capture of the image and the
variation by the file system writes depending on load.

Wondering if I can avoid the OS file writing (and time variations) by gaining access to the frames another way. I presume this means I would have to write a custom plugin?