1. A method for sending data from a source to a destination, comprising: a host of the source providing to a sending agent of the source, virtual memory addresses of data to be sent to a destination wherein the data is stored in a plurality of unpinned physical locations of the source, each location having a physical address and a virtual memory address which is mapped to the physical address and wherein the physical locations include locations of a first memory and locations of a second memory; the sending agent providing to the host of the source at least some of the virtual memory addresses of the data to be sent to the destination; the host of the source identifying to the sending agent the data addressed by the virtual memory addresses provided by the sending agent wherein the host identifying data comprises the host providing to the sending agent the physical addresses of the locations containing the data addressed by the virtual memory addresses provided by the sending agent, and the data identified by the host is stored in the first memory and the physical memory addresses provided by the host are physical memory locations of the first memory containing the data addressed by the virtual addresses provided by the sending agent; and the sending agent sending the identified data to the destination; the method further comprising: pinning the physical memory locations of the first memory provided by the host to the sending agent to prevent the data addressed by the virtual addresses provided by the sending agent from being swapped to the second memory; the sending agent retrieving from the pinned physical memory locations of the first memory, the data addressed by the virtual addresses provided by the sending agent; and unpinning the pinned physical memory locations of the first memory after the sending agent sends to the destination the data addressed by the virtual addresses provided by the sending agent.