VecGhost can be useful if copying the interior values as part of a global-to-local (halo update) is expensive. The memory access pattern of a dedicated local vector can give better cache reuse, so perceived benefits of
VecGhost are often erased in traversal. Also, since
VecGhost contains storage for the ghost values, it typically increases the memory used by a Krylov space (relative to normal vectors, where there are a constant number of local vectors).
VecGhost is a dubious performance optimization; I don't recommend using it in new code unless you have done the profiling for your application and are sure that it is beneficial. It exists so that users who desire that particular optimization don't need to roll their own implementation.