ms/write on tempdb data files are dead slow
ASYNC_IO_COMPLETION waits occur when a task is waiting for I/Os to finish.  

PREEMPTIVE_OS_PIPEOPS occurs when SQL Server runs code in Windows.  For example, if you run xp_cmdshell, SQL Server spawns a command that is controlled by the Operating System.  While the command is running SQL Server shows PREEMPTIVE_OS_PIPEOPS as the wait since it doesn't know what the OS is actually doing.

The combination of these two waits seems like the operating system is busy.  You mentioned that the server is a virtual machine - if SQL Server itself is not super busy, it's quite likely the physical host server may be very busy servicing other VMs.  Ensure your SQL Server VM has a memory and CPU reservation appropriate for its needs.  Also, if running on VMware, ensure the VM uses the PVSCSI disk controller for the drives where SQL Server data and logs reside.