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.