[ 설명 ]
- 다양한 고성능 네트워크 장치/전송 방식을 "공통 API로 추상화"한 user-space 통신 라이브러리
[ TCP/IP 소켓 통신 ]
앱 -> socket API -> 커널 TCP/IP stack -> NIC
[ libfabric 기반 ]
앱/MPI -> libfabric -> provider -> 고성능 NIC
[ TCP/IP ]
- 범용성
- 호환성 좋음
- 커널 네트워크 스택 중심
- 오버헤드가 상대적으로 큼
[ libfabric ]
- HPC/ML 같은 고성능 통신용
- 더 낮은 지연 지향
- 장치 기능을 더 직접적으로 활용
- provider에 따라 커널 개입을 더 줄일 수 있음
[ 설명 ]
- libfabric 자체가 직접 패킷을 보내는 건 아니고, 뒤에 "provider"라는 구현체가 붙음
[ 예시 ]
- tcp provider
- verbs provider
- efa provider
- shm provider
=> 각 네트워크 장치용 드라이버 성격의 구현체

libfabric이 제공되지 않는 전통적인 HPC SW 스택
[ 설명 ]
- libfabric이 제공되지 않는다면, MPI/NCLL 개발자는 위와 같이 "TCP, 인피니밴드, EFA와 같은 다양한 네트워크 디바이스를 고려해서 프로그램을 개발"해야함

EFA와 같이 libfabric이 제공되는 HPC SW 스택
[ 설명 ]
- MPI/NCCL은 통신을 위해 오직 libfabric만 고려하면 되기 때문에 "다양한 네트워크 디바이스에 대해 신경쓰지 않아도 된다는 장점이 존재"
- 물론 MPI와 네트워크 디바이스 사이 레이어가 하나 더 추가된다는 단점은 있으나, OS bypass로
이러한 단점을 충분히 상쇄