A method of tracking page state changes, the method comprising: receiving, at an input/output (I/O) device communicatively coupled to a host having a physical memory , a command from the host to monitor page state changes in a first region of the physical memory allocated to a process executing on the host ; modifying, by the I/O device , data stored in the first region based on a request, wherein the request includes an I/O virtual address indicating a location of the data in a virtual memory of the process, and modifying the data includes: translating the I/O virtual address to obtain a host physical address indicating a location of the data in the physical memory ; recording, by the I/O device , the modification to a bitmap by setting a bit in the bitmap that corresponds to a location of the data in the physical memory , wherein recording the modification comprises: detecting, using a live migration engine of the I/O device , the request, wherein the request is received from a client device; based on finding an entry for the I/O virtual address of the request in a lookup table of the live migration engine , calculating a bitmap position based on the host physical address obtained by translating the I/O virtual address; and queuing a bitmap write address based on the bitmap position for recording to the bitmap; and copying, by the I/O device or the host , sections of the first region indicated by the bitmap to a second region of physical memory , wherein the second region of physical memory can be in the physical memory of the host , or in a second physical memory of a second host. receiving, at an input/output (I/O) device communicatively coupled to a host having a physical memory , a command from the host to monitor page state changes in a first region of the physical memory allocated to a process executing on the host ; modifying, by the I/O device , data stored in the first region based on a request, wherein the request includes an I/O virtual address indicating a location of the data in a virtual memory of the process, and modifying the data includes: translating the I/O virtual address to obtain a host physical address indicating a location of the data in the physical memory ; recording, by the I/O device , the modification to a bitmap by setting a bit in the bitmap that corresponds to a location of the data in the physical memory , wherein recording the modification comprises: detecting, using a live migration engine of the I/O device , the request, wherein the request is received from a client device; based on finding an entry for the I/O virtual address of the request in a lookup table of the live migration engine , calculating a bitmap position based on the host physical address obtained by translating the I/O virtual address; and queuing a bitmap write address based on the bitmap position for recording to the bitmap; and based on finding an entry for the I/O virtual address of the request in a lookup table of the live migration engine , calculating a bitmap position based on the host physical address obtained by translating the I/O virtual address; and queuing a bitmap write address based on the bitmap position for recording to the bitmap; and copying, by the I/O device or the host , sections of the first region indicated by the bitmap to a second region of physical memory , wherein the second region of physical memory can be in the physical memory of the host , or in a second physical memory of a second host. <EOS>