TCP프로토콜 NFS(ㄱ)와 RDMA프로토콜 NFS(ㄴ)를 비교하여 보았습니다.
작은 블록사이즈(1k)의 fio 명령 수행 결과(a)는 RDMA프로토콜(b)이 TCP프로토콜(c) 보다 약 2.3배의 속도로 측정되었습니다.
하지만,
큰 블록사이즈(128k)의 fio 명령 수행 결과(b)는 TCP프로토콜(f)이 RDMA프로토콜(e) 보다 약 1.25배의 속도로 측정되었습니다.
RDMA프로토콜이 항상 더 높은 속도를 낼 것이라 생각했는데,
TCP프토토콜이 더 높은 속도가 나온 것이 이상합니다.
RDMA프로토콜과 TCP프로토콜의 wsize와 rsize가 다른데 이것 때문일까요?
TCP프로토콜은 NFS wsize/rsize 최대값인 1MB로 되어 있는데,
RDMA프로토콜은 wsize/rsize 최대값이 변경이 안됩니다(ㄷ).
긴 글 읽어주셔서 감사합니다.
(ㄱ) TCP프로토콜 NFS 마운트.
mount -t nfs 10.2.43.1:/mnt/disk1/data1 /mnt/nfs/
(ㄴ) RDMA프로토콜 NFS마운트.
mount -t nfs -o proto=rdma,port=20049 10.2.43.1:/mnt/disk1/data2 /mnt/nfs/
(ㄷ) RDMA프로토콜 NFS마운트 및 rsize/wsize 값 변경 시도( 변경 안됨).
root@pxnode3:/mnt# mount -t nfs -o proto=rdma,port=20049,wsize=1048576,rsize=1048576 10.2.43.1:/mnt/disk1/data2 /mnt/nfs/
root@pxnode3:/mnt# mount | grep nfs
10.2.43.1:/mnt/disk1/data2 on /mnt/nfs type nfs4 (rw,relatime,vers=4.2,rsize=524288,wsize=524288,namlen=255,hard,proto=rdma,port=20049,timeo=600,retrans=2,sec=sys,clientaddr=10.2.43.2,local_lock=none,addr=10.2.43.1)
(a) 블록사이즈 1k
fio -rw=randrw --bs=1k --numjobs=4 --iodepth=8 --runtime=30 --time_based --loops=1 --ioengine=libaio --direct=1 --invalidate=1 --fsync_on_close=1 --randrepeat=1 --norandommap --exitall --name task1 --filename=/mnt/nfs/fio-test.dat --size=10000000
(b) 명령어(a) 를 이용한, RDMA 결과. 약 68MB/s
Run status group 0 (all jobs):
READ: io=2538.9MB, aggrb=86655KB/s, minb=21654KB/s, maxb=21682KB/s, mint=30001msec, maxt=30001msec
WRITE: io=2539.7MB, aggrb=86683KB/s, minb=21653KB/s, maxb=21690KB/s, mint=30001msec, maxt=30001msec
(c) 명령어(a) 를 이용한, TCP 결과. 약 29MB/s
Run status group 0 (all jobs):
READ: io=870393KB, aggrb=29011KB/s, minb=7235KB/s, maxb=7267KB/s, mint=30001msec, maxt=30002msec
WRITE: io=870814KB, aggrb=29025KB/s, minb=7241KB/s, maxb=7268KB/s, mint=30001msec, maxt=30002msec
r(d) 블록사이즈 128k
fio -rw=randrw --bs=128k --numjobs=4 --iodepth=8 --runtime=30 --time_based --loops=1 --ioengine=libaio --direct=1 --invalidate=1 --fsync_on_close=1 --randrepeat=1 --norandommap --exitall --name task1 --filename=/mnt/nfs/fio-test.dat --size=10000000
(e) 명령어(d)를 이용한, RDMA 결과. 약 724MB/s
Run status group 0 (all jobs):
READ: io=21226MB, aggrb=724457KB/s, minb=176717KB/s, maxb=184922KB/s, mint=30002msec, maxt=30002msec
WRITE: io=21265MB, aggrb=725805KB/s, minb=178714KB/s, maxb=183019KB/s, mint=30002msec, maxt=30002msec
(f) 명령어(d)를 이용한, TCP 결과. 약 909MB/s
Run status group 0 (all jobs):
READ: io=26648MB, aggrb=909489KB/s, minb=226267KB/s, maxb=229071KB/s, mint=30002msec, maxt=30003msec
WRITE: io=26732MB, aggrb=912361KB/s, minb=226895KB/s, maxb=228943KB/s, mint=30002msec, maxt=30003msec
TCP/UDP/ICMP/GRE/ Ÿ ̷ ̶ ϰ RDMA ɿ ϴ°ɷ ƴµ ̰ ̶ Īϴ װ °̴ϴ.
Overview "The Remote DMA (RDMA) protocol allows efficient....." ֳ.
manpage ø ֽϴ.
rdma protocol ½ϴ. Dma ε rdma ƴҸ .
̷Ʈ. ?
rdma αֵ ; ˴ϴ.
ϴ Protocol Network űԾุ ƴմϴ. SATA Controller SATA DISK Ծ൵ Protocol Դϴ. CPU Register <=> L1 Cache <=> L2 Cache ... Protocol Դϴ.
¦ ٲ㼭 ϸ TCP/IP ϴ Network αġ TCP ϴ° () ϴ. ڽŵ κ α 鶧 TCP/IP α §ٰ µ TCP IP Ѵٱ ٴ Socket Programming ϴ°. SOCKET TCP ϴ ű.
׳ ܼϰ TCP ׳ ״ ϱ Ʊ ̴ϴ.
RDMA Ծ ִµ ϱⰡ ϴ. ̽ѵ tutorial ʾ.
ڴµ (2001~2003) VAPI CM RDMA Programming ߾ϴ.
Ŀ i-Warp (IBM ǥ ̴ϴ) RDMA ϴ API/SDK/Protocoḻ.
׳ InfiniBand r ؾϴµ α ġ SDP IPoIB ؼ RDMA Ѵٰ ߴ (ȸ)鵵 ־ϴ. (ݵ ֽϴ).
ϴ ɼǵ ð ִµ ɼǵ ν.
RDMA(Remote Direct Memory Access) Ʈũ ۿ Դϴ. ü, RDMA CPU ʰ / ϴ մϴ. RDMA ġ ɵ ϹǷ 纻 CPU ۾ پϴ. RDMA ȣƮ CPU δ ƴ϶ ȣƮ I/O յ ٿ ݴϴ.
[ó] RDMA(Remote Direct Memory Access)|ۼ ϴþƷ
"RDMA(Remote Direct Memory Access) Ʈũ ۿ "
ƴ϶
" Ʈũ " ½ϴ.