1. A system comprising: a plurality of servers, each including at least one central processing unit (CPU) and local memory; a memory server remotely located from the plurality of servers and including a pool of remote memory shared by the plurality of servers across a connection, wherein each of the plurality of servers are independent from each other and the memory server; a remote memory controller, wherein the remote memory controller is to determine an amount of the remote memory from the pool of the remote memory to allocate to each server of the plurality of servers based on a total number of the plurality of servers and a total amount of the remote memory in the pool, and the remote memory controller is to allocate for each of the plurality of servers the determined amount of the remote memory, wherein a physical address space for an operating system (OS) running on each of the plurality of servers includes an aggregation of its allocated remote memory and its local memory, each OS running on each of the plurality of servers is configured to identify which physical addresses correspond to the remote memory in the memory server, and each OS is configured to make decisions on whether to store data in the local or the remote memory based on at least one factor including latency for remote memory accesses, wherein the sharing of the remote memory in the pool is at least governed by address translation at the remote memory controller and is transparent to the OSs; and a local switch for each of the servers providing an interface to the remote memory via the connection, wherein the local switch is configured to implement a critical block first (CBF) policy, wherein critical blocks for a remote memory request are provided to a CPU as retrieved while other pages for the request are still being retrieved.