1. if a VM(allocated 16GB memory) is experiencing the memory ballooning of 6GB from ESXi, then what will the guest OS see its memory status? will the OS show that there's at least 6GB memory "used" or something?
The balloon driver will have applied memory pressure on the guest OS, which will have moved 6GB of data from guest memory to guest page/swap file.
2. setting VM's "sched.mem.maxmemctl" parameter to 0 meaning that ESXi can no longer balloon memory from that VM? is it logically a way to reserve memory for VM?
Yes, as per this: VMware Knowledge Base
If ESXi cannot balloon a particular VM, it is more likely to trigger ballooning in other VMs. If you want to reserve memory for a VM setting a memory reservation is the better method.
3. is there any parameters to set on the VM to prevent ESXi reclaim memory via swapping file? I don't see related configurations in the document.
Set a memory reservation for the VM, consider this formula:
swap file size = allocated memory - reserved memory
4. does the VM "memory reservation" function always occupy ESXi's memory beforehand even that VM is not power on?
No, only when the VM is powered on, and you would not be able to power on the VM if the reserved memory size could not be provided by the host or cluster.