MPI in EDM - EDM-Project/EDM GitHub Wiki
What is MPI and Why using it in EDM
From wikipedia:
Message Passing Interface (MPI) is a standardized and portable message-passing standard designed to function on parallel computing architectures.
In EDM-Project we used open-mpi-4 which is an open-source MPI implementation [2]. MPI goals are high performance, scalability, and portability and became the "de facto standard" for communication among processes that model a parallel program running on a distributed memory system. Therefore, MPI was chosen as the suitable message fabric for EDM-Project.
MPI usage in EDM
In EDM-Project, the communication between DMS and the Client side (DM-handler & lpet) is performed by MPI. There are 3 custom typed messages:
1. RequestGetPageData:
Contains 3 fields:
- vaddr - virtual address of the requested page.
- Page- the content of the page in vaddr.
- Info - request status. The values are enum typed - { new_page, error, existing_page} Usage:
Dm-handler send RequestGetPageData to DMS, and specify vaddr as the virtual address of the faulting page.
- If the page exists in DMS's SPT, DMS copies page content to "page" and sets info=existing_page
- If the page doesn't exist in DMS's SPT, DMS sets info=new_page
- In any case of error, DMS sets info=error.
2. RequestEvictPageData:
Contains 3 fields:
- vaddr - virtual address of the requested page.
- Page- the content of the page in vaddr.
- Info - request status. The values are enum typed - { success, fail}
Usage: lpet send RequestEvictPageDatato DMS, and specify "vaddr" as the virtual address of the page and its content in "page".
- If DMS managed to store page in the disc, it sets info=success
- In any case of error, DMS sets info=fail.
3. AckPage:
Contains 3 fields:
- vaddr - virtual address.
- error- buffer for storing error
Usage: When it is necessary to use communication with ACK, an informative error can be specified in the "error" field.
Sources:
[1] - https://en.wikipedia.org/wiki/Message_Passing_Interface - wiki page of MPI
[2] - https://github.com/open-mpi/ompi - open-mpi github repository