libfabric이란

[ 설명 ]
- 다양한 고성능 네트워크 장치/전송 방식을 "공통 API로 추상화"한 user-space 통신 라이브러리

TCP/IP stack이랑 차이점

통신 방식

[ TCP/IP 소켓 통신 ]
앱 -> socket API -> 커널 TCP/IP stack -> NIC

[ libfabric 기반 ]
앱/MPI -> libfabric -> provider -> 고성능 NIC

차이점

[ TCP/IP ]
- 범용성
- 호환성 좋음
- 커널 네트워크 스택 중심
- 오버헤드가 상대적으로 큼

[ libfabric ]
- HPC/ML 같은 고성능 통신용
- 더 낮은 지연 지향
- 장치 기능을 더 직접적으로 활용
- provider에 따라 커널 개입을 더 줄일 수 있음

여기서 Provider란?

[ 설명 ]
- libfabric 자체가 직접 패킷을 보내는 건 아니고, 뒤에 "provider"라는 구현체가 붙음

[ 예시 ]
- tcp provider
- verbs provider
- efa provider
- shm provider
=> 각 네트워크 장치용 드라이버 성격의 구현체

libfabric 유무 차이

libfabric이 제공되지 않는 전통적인 HPC SW 스택

libfabric이 제공되지 않는 전통적인 HPC SW 스택

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

EFA와 같이 libfabric이 제공되는 HPC SW 스택

EFA와 같이 libfabric이 제공되는 HPC SW 스택

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