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/ProtocolÀ̱¸¿ä.
±×³É 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) ÇÁ·ÎÅäÄÝÀº °í¼Ó ³×Æ®¿öÅ©¸¦ ÅëÇÑ ¸Þ¸ð¸® °£ µ¥ÀÌÅÍ Àü¼Û¿ë ±â¼ú"
ÀÌ ¾Æ´Ï¶ó
"¸Þ¸ð¸®°£ µ¥ÀÌÅÍ Àü¼ÛÀ» ÅëÇÑ °í¼Ó ³×Æ®¿öÅ© ±â¼ú"ÀÌ ¸Â½À´Ï´Ù.