160 likes | 301 Views
OFI SW Proposal. Sean Hefty - Intel Corporation. Review. We are already starting with multiple solutions Open source and proprietary Merge into a single open source solution Fix problems with the current solution(s) Application driven!
E N D
OFI SW Proposal Sean Hefty - Intel Corporation
Review • We are already starting with multiple solutions • Open source and proprietary • Merge into a single open source solution • Fix problems with the current solution(s) • Application driven! • Verbs forever is as simple as the applications requesting it www.openfabrics.org
Target Software • Can we do all? How? • Consensus based on comments from WG participants on 4/8 www.openfabrics.org
Approach • ibverbs / rdmacm • Continue to target corresponding kernel modules • Maintain current semantics • E.g. completion ordering • Extend functionality where acceptable • fabric • Support multiple kernel interfaces • Including uverbs / ucma • Abstracted (application) semantics • Transport / network / link / device agnostic • Application-oriented interfaces • Integrated CM www.openfabrics.org
libfabricPackage • Integrates libibverbs and librdmacm as sub-trees • Full library compatibility • Tracks upstream development • Easy to merge changes • Can coordinate releases, but not required • All changes go through upstream first • Builds and installs libibverbs, librdmacm, and libfabric www.openfabrics.org
fabtestsPackage • Integrates libibverbs, librdmacm, perftest as sub-trees • Tracks upstream development • Builds and installs example programs • Extended examples and tests for new APIs www.openfabrics.org
Overlapping Interfaces • Identify interface sets usable by both extended verbs and version 2 APIs • Verbs acceptance gated by upstream inclusion • API is usable, but functionality may be limited • Migration path from v1 to v2 APIs • Providers and applications can adopt either or both, and in different capacities • Control interface discussion deferred www.openfabrics.org
MSG ops structfi_ops_msg { size_t size; ssize_t (*recv)(fid_t fid, void *buf, size_tlen, uint64_t desc, void *context); ssize_t (*recvv)(fid_t fid, const void *iov, size_t count, void *context); ssize_t (*recvfrom)(fid_t fid, void *buf, size_tlen, uint64_t desc, const void *src_addr, void *context); ssize_t (*recvmsg)(fid_t fid, conststructfi_msg *msg, uint64_t flags); ssize_t (*send)(fid_t fid, const void *buf, size_tlen, uint64_t mem_desc, void *context); ssize_t (*sendv)(fid_t fid, const void *iov, size_t count, void *context); ssize_t (*sendto)(fid_t fid, const void *buf, size_tlen, uint64_t desc, const void *dest_addr, void *context); ssize_t (*sendmsg)(fid_t fid, conststructfi_msg *msg, uint64_t flags); }; www.openfabrics.org
RMA ops structfi_ops_rma { size_t size; int (*read)(fid_t fid, void *buf, size_tlen, uint64_t desc, uint64_t addr, uint64_t key, void *context); int (*readv)(fid_t fid, const void *iov, size_t count, uint64_t addr, uint64_t key, void *context); int (*readfrom)(fid_t fid, void *buf, size_tlen, uint64_t desc, const void *src_addr, uint64_t addr, uint64_t key, void *context); int (*readmsg)(fid_t fid, conststructfi_msg_rma *msg, uint64_t flags); int (*write)(fid_t fid, const void *buf, size_tlen, uint64_t desc, uint64_t addr, uint64_t key, void *context); int (*writev)(fid_t fid, const void *iov, size_t count, uint64_t addr, uint64_t key, void *context); int (*writeo)(fid_t fid, const void *buf, size_tlen, uint64_t desc, const void *dest_addr, uint64_t addr, uint64_t key, void *context); int (*writemsg)(fid_t fid, conststructfi_msg_rma *msg, uint64_t flags); }; www.openfabrics.org
New Interfaces • Currently do not apply to verbs • As defined by either the IB or iWarp specs • May be applicable in the future www.openfabrics.org
Tagged ops structfi_ops_tagged { size_t size; ssize_t (*recv)(fid_t fid, void *buf, size_tlen, uint64_t tag, uint64_t ignore, void *context); ssize_t (*recvv)(fid_t fid, const void *iov, size_t count, uint64_t tag, uint64_t ignore, void *context); ssize_t (*recvfrom)(fid_t fid, void *buf, size_tlen, const void *src_addr, uint64_t tag, uint64_t ignore, void *context); ssize_t (*recvmsg)(fid_t fid, conststructfi_msg_tagged *msg, uint64_t flags); ssize_t (*send)(fid_t fid, const void *buf, size_tlen, uint64_t tag, void *context); ssize_t (*sendv)(fid_t fid, const void *iov, size_t count, uint64_t tag, void *context); ssize_t (*sendto)(fid_t fid, const void *buf, size_tlen, const void *dest_addr, uint64_t tag, void *context); ssize_t (*sendmsg)(fid_t fid, conststructfi_msg_tagged *msg, uint64_t flags); }; www.openfabrics.org
Atomic ops – part 1 structfi_ops_atomic { size_t size; int (*write)(fid_t fid, const void *buf, size_tlen, uint64_t desc, uint64_t addr, uint64_t key, intdatatype, int op, void *context); int (*writev)(fid_t fid, const void *iov, size_t count, uint64_t addr, uint64_t key, intdatatype, int op, void *context); int (*writeto)(fid_t fid, const void *buf, size_tlen, uint64_t desc, const void *dest_addr, uint64_t addr, uint64_t key, intdatatype, int op, void *context); int (*writemsg)(fid_t fid, conststructfi_msg_atomic *msg, uint64_t flags); www.openfabrics.org
Atomic ops – part 2 int (*readwrite)(fid_t fid, const void *buf, size_tlen, uint64_t desc, void *result, uint64_t result_mem_desc, uint64_t addr, uint64_t key, intdatatype, int op, void *context); int (*readwritev)(fid_t fid, const void *iov, size_t count, void *resultv, size_tresult_count, uint64_t addr, uint64_t key, intdatatype, int op, void *context); int (*readwriteto)(fid_t fid, const void *buf, size_tlen, uint64_t desc, void *result, uint64_t result_mem_desc, const void *dest_addr, uint64_t addr, uint64_t key, intdatatype, int op, void *context); int (*readwritemsg)(fid_t fid, conststructfi_msg_atomic *msg, void *resultv, size_tresult_count, uint64_t flags); www.openfabrics.org
Atomic ops – part 3 int (*compwrite)(fid_t fid, const void *buf, size_tlen, uint64_t desc, const void *compare, uint64_t compare_desc, void *result, uint64_t result_mem_desc, uint64_t addr, uint64_t key, intdatatype, int op, void *context); int (*compwritev)(fid_t fid, const void *iov, size_t count, const void *comparev, size_tcompare_count, void *resultv, size_tresult_count, uint64_t addr, uint64_t key, intdatatype, int op, void *context); int (*compwriteto)(fid_t fid, const void *buf, size_tlen, uint64_t desc, const void *compare, uint64_t compare_desc, void *result, uint64_t result_mem_desc, const void *dest_addr, uint64_t addr, uint64_t key, intdatatype, int op, void *context); int (*compwritemsg)(fid_t fid, conststructfi_msg_atomic *msg, const void *comparev, size_tcompare_count, void *resultv, size_tresult_count, uint64_t flags); www.openfabrics.org
Atomic ops – part 4 int (*writevalid)(fid_t fid, intdatatype, int op, size_t *count); int (*readwritevalid)(fid_t fid, intdatatype, int op, size_t *count); int (*compwritevalid)(fid_t fid, intdatatype, int op, size_t *count); }; www.openfabrics.org
CM structfi_ops_cm { size_t size; int (*getname)(fid_t fid, void *addr, size_t *addrlen); int (*getpeer)(fid_t fid, void *addr, size_t *addrlen); int (*connect)(fid_t fid, const void *addr, const void *param, size_tparamlen); int (*listen)(fid_t fid); int (*accept)(fid_t fid, const void *param, size_tparamlen); int (*reject)(fid_t fid, structfi_info *info, const void *param, size_tparamlen); int (*shutdown)(fid_t fid, uint64_t flags); int (*join)(fid_t fid, void *addr, void **fi_addr, uint64_t flags); int (*leave)(fid_t fid, void *addr, void *fi_addr, uint64_t flags); }; www.openfabrics.org