  Due to the increasing size of HPC machines, the fault presence is becoming an
eventuality that applications must face. Natively, MPI provides no support for
the execution past the detection of a fault, and this is becoming more and more
constraining. With the introduction of ULFM (User Level Fault Mitigation
library), it has been provided with a possible way to overtake a fault during
the application execution at the cost of code modifications. ULFM is intrusive
in the application and requires also a deep understanding of its recovery
procedures.
  In this paper we propose Legio, a framework that lowers the complexity of
introducing resiliency in an embarrassingly parallel MPI application. By hiding
ULFM behind the MPI calls, the library is capable to expose resiliency features
to the application in a transparent manner thus removing any integration
effort. Upon fault, the failed nodes are discarded and the execution continues
only with the non-failed ones. A hierarchical implementation of the solution
has been also proposed to reduce the overhead of the repair process when
scaling towards a large number of nodes.
  We evaluated our solutions on the Marconi100 cluster at CINECA, showing that
the overhead introduced by the library is negligible and it does not limit the
scalability properties of MPI. Moreover, we also integrated the solution in
real-world applications to further prove its robustness by injecting faults.
