coordinates [(48.52,0) (45.71,1) (43.37,2) (79.58,3) (380.37,4)]{}; coordinates [(13.59,0) (14.00,1) (13.44,2) (21.12,3) (43.88,4)]{}; coordinates [(1.72,0) (1.93,1) (3.27,2) (2.20,3) (3.19,4)]{}; coordinates [(41.53,0) (42.36,1) (40.98,2) (43.51,3) (86.77,4)]{}; coordinates [(10.74,0) (11.77,1) (25.84,2) (15.40,3) (16.07,4)]{}; coordinates [(2.37,0) (2.63,1) (2.82,2) (2.18,3) (2.17,4)]{}; coordinates [(3.83,0) (3.83,1) (3.74,2) (3.28,3) (3.60,4)]{};

The experimentation results (averaged over $10$ independent experiments in each case) are shown in Table \[tab:threeLayers\] and Figures \[fig:lxcMigrationTimesforApps\] and \[fig:ramUsage\]. For a particular setup, the service downtime is always smaller than the total migration time, because the total migration time also includes the time taken for cloning and data transfer (during which the service remains running). The time required for different migration stages are unequal for different applications, as shown in Figure \[fig:lxcMigrationTimesforApps\], due to the different installation and RAM occupation sizes. This aligns with the layered abstraction discussed earlier. For example, the time required for *rsync*ing the application filesystem is related to the application installation size, and the time required for *rsync*ing the instance in-memory state is related to the application’s RAM usage.

Container vs. Virtual Machine
-----------------------------

Although it is understood that containers are more lightweight than VMs, a quantitative view on the difference in their migration performance does not exist in the literature. The 