I am trying to find out if guest can see successful disk flush operation, but the host doesn't actually flush it to disk?
How does ESXi work with guest I/O? Are they cached by ESXi before being written to the host's disk?
VMware ESX acknowledges a write or read to a guest operating system only after that write or read is acknowledged by the hardware controller to ESX. Applications running inside virtual machines on ESX are afforded the same crash consistency guarantees as applications running on physical machines or physical disk controllers.
That's from VMware itself. If you're worried about crash consistency, that's your answer.
Sadly it's not that easy so the previous answer is correct for Windows but not on Linux... The KB says:
For hosted products, write handling depends on the host operating system.
On Linux hosts, VMware does not use unbuffered IO, because it is not safe or supported across all the Linux versions that VMware supports. So currently, VMware hosted products on Linux hosts always use buffered IO.
On Windows hosts, VMware hosted products use unbuffered IO by default.
And the final sentence is important:
Consequently, if the IO is buffered within the host operating system, an application running inside a guest operating system on VMware hosted products might lose crash consistency.