US 12,293,198 B2
Co-execution of an application among a plurality of compute nodes through application-level virtualization
Aidan Cully, St. Augustine, FL (US); Vance Miller, Raleigh, NC (US); Dušan Veljko, Temerin (RS); and Mazhar Memon, Austin, TX (US)
Assigned to VMware LLC, Palo Alto, CA (US)
Filed by VMware, Inc., Palo Alto, CA (US)
Filed on Oct. 4, 2021, as Appl. No. 17/493,741.
Claims priority of provisional application 63/164,955, filed on Mar. 23, 2021.
Prior Publication US 2022/0308936 A1, Sep. 29, 2022
Int. Cl. G06F 9/445 (2018.01); G06F 9/455 (2018.01); G06F 9/50 (2006.01); G06F 9/52 (2006.01); G06F 9/54 (2006.01)
CPC G06F 9/44521 (2013.01) [G06F 9/44505 (2013.01); G06F 9/45558 (2013.01); G06F 9/5016 (2013.01); G06F 9/5038 (2013.01); G06F 9/5061 (2013.01); G06F 9/5088 (2013.01); G06F 9/52 (2013.01); G06F 9/54 (2013.01); G06F 9/546 (2013.01); G06F 9/547 (2013.01); G06F 2009/45591 (2013.01)] 15 Claims
OG exemplary drawing
 
1. A method for executing an application over a plurality of compute nodes, each of which includes a processor and a memory and has an application monitor and a runtime environment that are being executed in the processor thereof, wherein the plurality of nodes includes a first node and a second node, the method comprising:
establishing first threads in the runtime environment of the first node and establishing second threads in the runtime environment of the second node, wherein the first threads each have a first stack provisioned in the memory of the first node and the second threads each have a second stack provisioned in the memory of the second node, and the application monitors operate a coherence protocol to maintain a consistent memory space for the first and the second stacks across the first and the second nodes;
executing the application by the first threads and the second threads, wherein the first threads include an active thread and the second threads include a shadow thread that is formed by the second node based on the active thread in response to a command to form a coherent execution thread by the first node, and the active thread is in a running state and the shadow thread is in a parked state; and
while executing the application, migrating by the application monitors, a workload of the active thread from the first node to the second node for execution by the shadow thread, said migrating including pausing execution of the workload in the active thread, sending a register state of said active thread from the first node to the second node, setting said active thread to the parked state, and then receiving the register state of said active thread sent by the first node at the second node, setting said shadow thread to the running state, and executing the workload in the shadow thread that is running based on the received registered state,
wherein the application monitors migrate the workload of the active thread from the first node to the second node when the active thread accesses a memory page that cannot be migrated from the second node to the first node and the second node has the memory page.