<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<!--[if !mso]><style>v\:* {behavior:url(#default#VML);}
o\:* {behavior:url(#default#VML);}
w\:* {behavior:url(#default#VML);}
.shape {behavior:url(#default#VML);}
</style><![endif]--><style><!--
/* Font Definitions */
@font-face
        {font-family:Wingdings;
        panose-1:5 0 0 0 0 0 0 0 0 0;}
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Calibri",sans-serif;}
span.EmailStyle17
        {mso-style-type:personal-compose;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri",sans-serif;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
/* List Definitions */
@list l0
        {mso-list-id:103765825;
        mso-list-template-ids:768277314;}
@list l0:level1
        {mso-level-number-format:bullet;
        mso-level-text:;
        mso-level-tab-stop:.5in;
        mso-level-number-position:left;
        text-indent:-.25in;
        mso-ansi-font-size:10.0pt;
        font-family:Symbol;}
@list l0:level2
        {mso-level-number-format:bullet;
        mso-level-text:o;
        mso-level-tab-stop:1.0in;
        mso-level-number-position:left;
        text-indent:-.25in;
        mso-ansi-font-size:10.0pt;
        font-family:"Courier New";
        mso-bidi-font-family:"Times New Roman";}
@list l0:level3
        {mso-level-number-format:bullet;
        mso-level-text:;
        mso-level-tab-stop:1.5in;
        mso-level-number-position:left;
        text-indent:-.25in;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
@list l0:level4
        {mso-level-number-format:bullet;
        mso-level-text:;
        mso-level-tab-stop:2.0in;
        mso-level-number-position:left;
        text-indent:-.25in;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
@list l0:level5
        {mso-level-number-format:bullet;
        mso-level-text:;
        mso-level-tab-stop:2.5in;
        mso-level-number-position:left;
        text-indent:-.25in;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
@list l0:level6
        {mso-level-number-format:bullet;
        mso-level-text:;
        mso-level-tab-stop:3.0in;
        mso-level-number-position:left;
        text-indent:-.25in;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
@list l0:level7
        {mso-level-number-format:bullet;
        mso-level-text:;
        mso-level-tab-stop:3.5in;
        mso-level-number-position:left;
        text-indent:-.25in;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
@list l0:level8
        {mso-level-number-format:bullet;
        mso-level-text:;
        mso-level-tab-stop:4.0in;
        mso-level-number-position:left;
        text-indent:-.25in;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
@list l0:level9
        {mso-level-number-format:bullet;
        mso-level-text:;
        mso-level-tab-stop:4.5in;
        mso-level-number-position:left;
        text-indent:-.25in;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
@list l1
        {mso-list-id:926422362;
        mso-list-template-ids:-1195608290;}
@list l1:level1
        {mso-level-number-format:bullet;
        mso-level-text:;
        mso-level-tab-stop:.5in;
        mso-level-number-position:left;
        text-indent:-.25in;
        mso-ansi-font-size:10.0pt;
        font-family:Symbol;}
@list l1:level2
        {mso-level-number-format:bullet;
        mso-level-text:o;
        mso-level-tab-stop:1.0in;
        mso-level-number-position:left;
        text-indent:-.25in;
        mso-ansi-font-size:10.0pt;
        font-family:"Courier New";
        mso-bidi-font-family:"Times New Roman";}
@list l1:level3
        {mso-level-number-format:bullet;
        mso-level-text:;
        mso-level-tab-stop:1.5in;
        mso-level-number-position:left;
        text-indent:-.25in;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
@list l1:level4
        {mso-level-number-format:bullet;
        mso-level-text:;
        mso-level-tab-stop:2.0in;
        mso-level-number-position:left;
        text-indent:-.25in;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
@list l1:level5
        {mso-level-number-format:bullet;
        mso-level-text:;
        mso-level-tab-stop:2.5in;
        mso-level-number-position:left;
        text-indent:-.25in;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
@list l1:level6
        {mso-level-number-format:bullet;
        mso-level-text:;
        mso-level-tab-stop:3.0in;
        mso-level-number-position:left;
        text-indent:-.25in;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
@list l1:level7
        {mso-level-number-format:bullet;
        mso-level-text:;
        mso-level-tab-stop:3.5in;
        mso-level-number-position:left;
        text-indent:-.25in;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
@list l1:level8
        {mso-level-number-format:bullet;
        mso-level-text:;
        mso-level-tab-stop:4.0in;
        mso-level-number-position:left;
        text-indent:-.25in;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
@list l1:level9
        {mso-level-number-format:bullet;
        mso-level-text:;
        mso-level-tab-stop:4.5in;
        mso-level-number-position:left;
        text-indent:-.25in;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
@list l2
        {mso-list-id:1651520988;
        mso-list-template-ids:248787360;}
@list l2:level1
        {mso-level-number-format:bullet;
        mso-level-text:;
        mso-level-tab-stop:.5in;
        mso-level-number-position:left;
        text-indent:-.25in;
        mso-ansi-font-size:10.0pt;
        font-family:Symbol;}
@list l2:level2
        {mso-level-number-format:bullet;
        mso-level-text:o;
        mso-level-tab-stop:1.0in;
        mso-level-number-position:left;
        text-indent:-.25in;
        mso-ansi-font-size:10.0pt;
        font-family:"Courier New";
        mso-bidi-font-family:"Times New Roman";}
@list l2:level3
        {mso-level-number-format:bullet;
        mso-level-text:;
        mso-level-tab-stop:1.5in;
        mso-level-number-position:left;
        text-indent:-.25in;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
@list l2:level4
        {mso-level-number-format:bullet;
        mso-level-text:;
        mso-level-tab-stop:2.0in;
        mso-level-number-position:left;
        text-indent:-.25in;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
@list l2:level5
        {mso-level-number-format:bullet;
        mso-level-text:;
        mso-level-tab-stop:2.5in;
        mso-level-number-position:left;
        text-indent:-.25in;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
@list l2:level6
        {mso-level-number-format:bullet;
        mso-level-text:;
        mso-level-tab-stop:3.0in;
        mso-level-number-position:left;
        text-indent:-.25in;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
@list l2:level7
        {mso-level-number-format:bullet;
        mso-level-text:;
        mso-level-tab-stop:3.5in;
        mso-level-number-position:left;
        text-indent:-.25in;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
@list l2:level8
        {mso-level-number-format:bullet;
        mso-level-text:;
        mso-level-tab-stop:4.0in;
        mso-level-number-position:left;
        text-indent:-.25in;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
@list l2:level9
        {mso-level-number-format:bullet;
        mso-level-text:;
        mso-level-tab-stop:4.5in;
        mso-level-number-position:left;
        text-indent:-.25in;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
ol
        {margin-bottom:0in;}
ul
        {margin-bottom:0in;}
--></style>
</head>
<body lang="EN-US" link="#0563C1" vlink="#954F72">
<div class="WordSection1">
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><b><span style="font-size:11.0pt">Introduction</span></b><span style="font-size:11.0pt"><o:p></o:p></span></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:11.0pt">Libfabric requires modifications to support RMA and atomic operations targeted at remote memory registrations backed by persistent memory devices.
 These modifications should be made with the intent to drive support for persistent memory usage by applications that rely on communications middleware such as SHMEM in a manner that is consistent with byte-based/stream-based addressable memory formats. Existing
 proposals (initial proposal) support NVMe/PMoF approaches, which this approach should support flat memory, non-block addressed memory structures and devices.<o:p></o:p></span></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:11.0pt">Changes may be required in as many as three areas:<o:p></o:p></span></p>
<ul type="disc">
<li class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;mso-list:l0 level1 lfo1">
<span style="font-size:11.0pt">Memory registration calls <o:p></o:p></span></li><ul type="circle">
<li class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;mso-list:l0 level2 lfo1">
<span style="font-size:11.0pt">This allows a memory region to be registered as being capable of persistence. This has already been introduced into the upstream libfabric GITHUB, but should be reviewed to ensure it matches use case requirements.<o:p></o:p></span></li></ul>
<li class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;mso-list:l0 level1 lfo1">
<span style="font-size:11.0pt">Completion semantics <o:p></o:p></span></li><ul type="circle">
<li class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;mso-list:l0 level2 lfo1">
<span style="font-size:11.0pt">These changes allow a completion event or notification to be deferred until the referenced data has reached the persistence domain at the target. This has already been introduced into the upstream libfabric GITHUB, but should
 be reviewed to ensure it matches use case requirements.<o:p></o:p></span></li></ul>
<li class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;mso-list:l0 level1 lfo1">
<span style="font-size:11.0pt">Consumer control of persistence <o:p></o:p></span></li><ul type="circle">
<li class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;mso-list:l0 level2 lfo1">
<span style="font-size:11.0pt">As presently implemented in the upstream libfabric GITHUB, persistence is determined on a transaction-by-transaction basis. It was acknowledged at the time that this is a simplistic implementation. We need to reach consensus on
 the following: <o:p></o:p></span></li><ul type="square">
<li class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;mso-list:l0 level3 lfo1">
<span style="font-size:11.0pt">Should persistence be signaled on the basis of the target memory region? For example, one can imagine a scheme where data targeted at a particular memory region is automatically pushed into the persistence domain by the target,
 obviating the need for any sort of commit operation.<o:p></o:p></span></li><li class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;mso-list:l0 level3 lfo1">
<span style="font-size:11.0pt">Is an explicit 'commit' operation of some type required, and if so, what is the scope of that commit operation? Is there a persistence fence defined such that every operation prior to the fence is made persistent by a commit operation?<o:p></o:p></span></li></ul>
</ul>
</ul>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><b><span style="font-size:11.0pt">Proposal</span></b><span style="font-size:11.0pt"><o:p></o:p></span></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:11.0pt">The experimental work in the OFIWG/libfabric branch is sufficient for the needs of SHMEM, with exception to the granularity of event generation. When
 the current implementation generates events, it would generate commit-level completion events with every operation. That type of operation would make the delivery of completion events take longer than necessary for most operations, so SHMEM would need finer
 control over commit flushing behavior.<o:p></o:p></span></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:11.0pt">To satisfy this, the following is being proposed:<o:p></o:p></span></p>
<ul type="disc">
<li class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;mso-list:l2 level1 lfo2">
<span style="font-size:11.0pt">A new API: fi_commit (See definitions: fi_commit)<br>
The new API would be used to generate a commit instruction to a target peer. The instruction would be defined by a set of memory registration keys, or regions by which the target could issue a commit to persistent memory.<o:p></o:p></span></li><ul type="circle">
<li class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;mso-list:l2 level2 lfo2">
<span style="font-size:11.0pt">A single request to fi_commit should generate a control message to target hardware or software emulation environment to flush the contents of memory targets. Memory targets are defined by the iov structures, and key fields – and
 the number of memory targets are defined by the count field. The destination address is handled by the dest_addr field. The flags field is held reserved at this time to allow for flexibility in the API design to future proof against options we might not conceive
 of until after the prototype is complete, and the context available for the user and returned with the completion<o:p></o:p></span></li><li class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;mso-list:l2 level2 lfo2">
<span style="font-size:11.0pt">Since this API behaves like a data transfer API, it is expected that this API would generate a completion event to the local completion queue associated with the EP from which the transaction was initiated against.<o:p></o:p></span></li><li class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;mso-list:l2 level2 lfo2">
<span style="font-size:11.0pt">At the target, this should generate an event to the target's event queue – if and only if the provider supports software emulated events. If a provider is capable of hardware level commits to persistent memory, the transaction
 should be consumed transparently by the hardware, and does not need to generate an event at the target. This will require an additional event definition in libfabric (See definition for fi_eq_commit_entry)<o:p></o:p></span></li></ul>
<li class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;mso-list:l2 level1 lfo2">
<span style="font-size:11.0pt">A new EQ event definition (fi_eq_commit_entry) to support software-emulated persistence for devices that cannot provide hardware support<o:p></o:p></span></li><ul type="circle">
<li class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;mso-list:l2 level2 lfo2">
<span style="font-size:11.0pt">The iov, and count variables mirror the original iov, and count contents of the originating request.<o:p></o:p></span></li><li class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;mso-list:l2 level2 lfo2">
<span style="font-size:11.0pt">The flags may be a diminished set of flags from the original transaction under the assumption that only some flags would have meaning at the target and sending originator-only flags to the target would have little value to the
 target process.<o:p></o:p></span></li></ul>
<li class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;mso-list:l2 level1 lfo2">
<span style="font-size:11.0pt">Additional flags or capabilities<o:p></o:p></span></li><ul type="circle">
<li class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;mso-list:l2 level2 lfo2">
<span style="font-size:11.0pt">A provider should be able to indicate whether they support software emulated notifications of fi_commit, or whether they can handle hardware requests for commits to persistent memory
<o:p></o:p></span></li><ul type="square">
<li class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;mso-list:l2 level3 lfo2">
<span style="font-size:11.0pt">An additional flag should be introduced to the fi_info structure under modes: FI_COMMIT_MANUAL (or something else)
<o:p></o:p></span></li><ul type="square">
<li class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;mso-list:l2 level4 lfo2">
<span style="font-size:11.0pt">This flag would indicate to the application that events may be generated to the event queue for consumption by the application. Commit events would be generated upon receipt of a commit message from a remote peer, and the application
 would be responsible for handling the event.<o:p></o:p></span></li><li class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;mso-list:l2 level4 lfo2">
<span style="font-size:11.0pt">Lack of the FI_COMMIT_MANUAL flag, and the presence of the FI_RMA_PMEM (or FI_PMEM) flag in the info structure should imply that the hardware is capable of handling the commit requests to persistent memory and the application
 does not need to read the event queue for commit events.<o:p></o:p></span></li></ul>
</ul>
</ul>
<li class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;mso-list:l2 level1 lfo2">
<span style="font-size:11.0pt">Change of flag definition<o:p></o:p></span></li><ul type="circle">
<li class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;mso-list:l2 level2 lfo2">
<span style="font-size:11.0pt">The FI_RMA_PMEM flag should be changed to FI_PMEM to indicate that the provider is PMEM aware, and supports RMA/AMO/MSG operations to and from persistent memory.<o:p></o:p></span></li><li class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;mso-list:l2 level2 lfo2">
<span style="font-size:11.0pt">There may be little value in supporting messaging interfaces, but it is something that could supported.<o:p></o:p></span></li></ul>
<li class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;mso-list:l2 level1 lfo2">
<span style="font-size:11.0pt">Addition of an event handler registration for handling event queue entries within the provider context (See Definition: fi_eq_event_handler)<o:p></o:p></span></li><ul type="circle">
<li class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;mso-list:l2 level2 lfo2">
<span style="font-size:11.0pt">Essentially, this becomes a registered callback for the target application to handle specific event types. We can use this mechanism with the target application to allow the provider to handle events internally using a function
 provided by the application. The function would contain the logic necessary to handle the event<o:p></o:p></span></li><li class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;mso-list:l2 level2 lfo2">
<span style="font-size:11.0pt">Specific to PMEM, a function handler would be used by the target application to handle commits to persistent memory as they were delivered without requiring a fi_eq_read and some form of acknowledgement around the commit action.
 With the handler, the commit could be handled entirely by the function provided by the application, and the return code from the application provided call-back would be sufficient for a software emulation in the provider to produce the return message to the
 sender that the commit transaction is fully complete. The use of a handler allows us to make the commit transaction as light-weight, or heavy-weight as necessary.<o:p></o:p></span></li></ul>
</ul>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><b><span style="font-size:11.0pt">Definitions:</span></b><span style="font-size:11.0pt"><o:p></o:p></span></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><i><span style="font-size:11.0pt">fi_commit</span></i><span style="font-size:11.0pt"><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Courier New"">ssize_t fi_commit(struct fid_ep *ep,
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Courier New"">                             const struct fi_rma_iov *iov,<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Courier New"">                             size_t count,
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Courier New"">                             fi_addr_t dest_addr,
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Courier New"">                             uint64_t flags,
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Courier New"">                             void *context);<o:p></o:p></span></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><i><span style="font-size:11.0pt">fi_eq_commit_entry</span></i><span style="font-size:11.0pt"><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Courier New"">struct fi_eq_commit_entry {<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Courier New"">    fid_t                       fid;            /* fid associated with request */<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Courier New"">    const struct fi_rma_iov    *iov;            /* iovec of memory regions to be committed to persistent memory */<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Courier New"">    size_t                      count;          /* number of iovec/key entries */<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Courier New"">    uint64_t                    flags;          /* operation-specific flags */<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Courier New"">};<o:p></o:p></span></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><i><span style="font-size:11.0pt">fi_eq_event_handler</span></i><span style="font-size:11.0pt"><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Courier New"">typedef ssize_t (*fi_eq_event_handler_t)(struct fid_eq *eq,
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Courier New"">    uint64_t event_type,
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Courier New"">    void *event_data,
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Courier New"">    uint64_t len,
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Courier New"">    void *context);<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Courier New""><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Courier New"">ssize_t fi_eq_register_handler(struct fid_eq *eq,
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Courier New"">    uint64_t event_type,
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Courier New"">    fi_eq_event_handler_t handler,
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Courier New"">    void *context);<o:p></o:p></span></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><b><span style="font-size:11.0pt">Use cases supported by this proposal:</span></b><span style="font-size:11.0pt"><o:p></o:p></span></p>
<ul type="disc">
<li class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;mso-list:l1 level1 lfo3">
<span style="font-size:11.0pt">As an application writer, I need to commit multiple previously-sent data transfers to the persistence domain
<o:p></o:p></span></li><ul type="circle">
<li class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;mso-list:l1 level2 lfo3">
<span style="font-size:11.0pt">Previous functionality allows for a commit for every message as is the case for FI_COMMIT_COMPLETE, or the use of FI_COMMIT on a per-transaction basis. The need in this use case is performance-oriented, to allow less strict delivery
 model to the NIC for most messages followed up with a 'flush' of the NIC to the persistence domain. This allows most messages targeted to the persistence domain to complete with a less strict delivery model, and provides a mechanism to ensure that those data
 transfers are eventually persisted.<o:p></o:p></span></li></ul>
<li class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;mso-list:l1 level1 lfo3">
<span style="font-size:11.0pt">As an application writer, I would like to be able to support persistent data models with libfabric over providers that do not provide hardware support for persistent memory devices
<o:p></o:p></span></li><ul type="circle">
<li class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;mso-list:l1 level2 lfo3">
<span style="font-size:11.0pt">The GNI provider, and other providers won't be able to support PMEM use cases, or at least not right away. To provide the support for PMEM in prototypes, or in providers that will never have PMEM support, a software-emulated approach
 was suggested to bridge the gap in functionality. In order for the target to know that something needs to be flushed to the persistence domain, the new EQ event was created. In addition to the EQ event, it was discussed that it could be useful for applications
 to provide function handlers that could be called in the event that a EQ would be delivered to facilitate a more passive libfabric application. If a handler was provided to libfabric, then the application itself could focus on serving requests for access to
 the persistence domain and sharing of the persistent memory.<o:p></o:p></span></li></ul>
</ul>
<p class="MsoNormal"><span style="font-size:11.0pt"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"><o:p> </o:p></span></p>
<p class="MsoNormal" style="line-height:14.3pt"><b><span style="font-size:11.0pt;font-family:"Arial",sans-serif;color:#26CAD3">James Swaro </span></b><span style="font-size:11.0pt;font-family:"Arial",sans-serif;color:#998C87">Software Engineer  | Cray, a Hewlett
 Packard Enterprise company</span><span style="font-size:11.0pt;color:black"><o:p></o:p></span></p>
<p class="MsoNormal" style="line-height:14.3pt"><span style="font-size:11.0pt;font-family:"Arial",sans-serif;color:#998C87">2131 Lindau Lane, Suite 1000 | Bloomington, MN 55425</span><span style="font-size:11.0pt;color:black"><o:p></o:p></span></p>
<p class="MsoNormal" style="line-height:14.3pt"><span style="font-size:11.0pt;font-family:"Arial",sans-serif;color:#998C87">+1-651-605-9000  </span><span style="font-size:11.0pt;font-family:"Arial",sans-serif"><a href="mailto:james.swaro@hpe.com"><span style="color:#0563C1">james.swaro@hpe.com</span></a><span style="color:#26CAD3">  </span></span><span style="font-size:11.0pt"><a href="http://www.cray.com"><b><span style="font-family:"Arial",sans-serif;color:#26CAD3">www.cray.com</span></b></a><span style="color:black"><o:p></o:p></span></span></p>
<p class="MsoNormal" style="line-height:12.65pt"><b><span style="font-size:8.0pt;font-family:"Arial",sans-serif;color:#26CAD3"> </span></b><span style="font-size:11.0pt;color:black"><o:p></o:p></span></p>
<table class="MsoNormalTable" border="0" cellspacing="0" cellpadding="0" style="border-collapse:collapse">
<tbody>
<tr>
<td width="186" style="width:139.5pt;padding:0in 0in 0in 0in">
<p class="MsoNormal" style="line-height:12.65pt"><a href="https://www.cray.com/"><span style="font-size:11.0pt;font-family:"Arial",sans-serif;color:windowtext;text-decoration:none"><img border="0" width="153" height="44" style="width:1.5937in;height:.4583in" id="Picture_x0020_4" src="cid:image001.png@01D61A31.0ADD6710" alt="signature_1482336499"></span></a><span style="font-size:11.0pt"><o:p></o:p></span></p>
</td>
<td width="144" style="width:1.5in;padding:0in 0in 0in 0in">
<p class="MsoNormal" style="line-height:12.65pt"><a href="https://twitter.com/cray_inc"><span style="font-size:11.0pt;font-family:"Arial",sans-serif;color:windowtext;text-decoration:none"><img border="0" width="25" height="25" style="width:.2604in;height:.2604in" id="Picture_x0020_3" src="cid:image002.png@01D61A31.0ADD6710" alt="signature_663180266"></span></a><span style="font-size:11.0pt;font-family:"Arial",sans-serif">  </span><a href="https://www.youtube.com/channel/UCS483ZExauoVgpG8dLn5p1w"><span style="font-size:11.0pt;font-family:"Arial",sans-serif;color:windowtext;text-decoration:none"><img border="0" width="25" height="25" style="width:.2604in;height:.2604in" id="Picture_x0020_2" src="cid:image003.png@01D61A31.0ADD6710" alt="signature_784264875"></span></a><span style="font-size:11.0pt;font-family:"Arial",sans-serif">  </span><a href="https://www.linkedin.com/company/cray-inc-/"><span style="font-size:11.0pt;font-family:"Arial",sans-serif;color:windowtext;text-decoration:none"><img border="0" width="25" height="25" style="width:.2604in;height:.2604in" id="Picture_x0020_1" src="cid:image004.png@01D61A31.0ADD6710" alt="signature_1056062436"></span></a><span style="font-size:11.0pt"><o:p></o:p></span></p>
</td>
</tr>
</tbody>
</table>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
</body>
</html>