Study/ETC

Zero Copy

YURI๐Ÿ•๐Ÿ“๐Ÿถ 2023. 12. 13. 11:31
๋ฐ˜์‘ํ˜•

์ผ๋ฐ˜์ ์ธ ํŒŒ์ผ ์ „์†ก

  • read() -> send() ํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ณด์ž
  • read()๋ฅผ ์š”์ฒญํ•˜๋ฉด ๋””์Šคํฌ์— ์žˆ๋Š” ํŒŒ์ผ์ด ์ปค๋„ Read Buffer์— ๋ณต์‚ฌ๋œ๋‹ค.
  • Application์ด ์ปค๋„๋‹จ์— ์ ‘๊ทผํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— Application Buffer์—๋„ ๋ณต์‚ฌ๋œ๋‹ค.
  • send()๋ฅผ ์š”์ฒญํ•˜๋ฉด ์ปค๋„ Socet Buffer์— ํŒŒ์ผ์ด ๋ณต์‚ฌ๋œ๋‹ค.
  • NIC ๋ฒ„ํผ๋กœ ๋ณต์‚ฌ๋œ๋‹ค.
  • ์ปจํ…์ŠคํŠธ ์Šค์œ„์นญ ๋‹ค๋Ÿ‰ ๋ฐœ์ƒ

 

  • ์‚ฌ์šฉ์ž๊ฐ€ transferTo() ๋ฉ”์†Œ๋“œ๋ฅผ ์ด์šฉํ•ด ํŒŒ์ผ ์ „์†ก์„ ์š”์ฒญํ•œ๋‹ค.
    • read()์™€ send() ํ•จ์ˆ˜๊ฐ€ ํ•˜๋‚˜๋กœ ํ•ฉ์ณ์ง„ ํ˜•ํƒœ์˜ ์‹œ์Šคํ…œ ์ฝœ์ด๋‹ค.
  • ๋””์Šคํฌ์— ์žˆ๋Š” ํŒŒ์ผ์ด ์ปค๋„ Read Buffer์— ๋ณต์‚ฌ๋œ๋‹ค.
  • ์ปค๋„ ๋ชจ๋“œ์—์„œ ์œ ์ € ๋ชจ๋“œ๋กœ ์ปจํ…์ŠคํŠธ ์Šค์œ„์นญํ•˜์ง€ ์•Š๊ณ  ๋ฐ”๋กœ Socket buffer๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณต์‚ฌํ•œ๋‹ค. 
  • Socket buffer์— ๋ณต์‚ฌ๋œ ๋ฐ์ดํ„ฐ๋ฅผ DMA ์—”์ง„์„ ํ†ตํ•ด NIC buffer๋กœ ๋ณต์‚ฌ๋˜์–ด ์ง„๋‹ค. 
  • ์ปจํ…์ŠคํŠธ ์Šค์œ„์นญ ๋ฐœ์ƒ ํšŸ์ˆ˜ ์ค„์ž„

์นดํ”„์นด์˜ Zero Copy

  • ์นดํ”„์นด๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ผ ๋•Œ, ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜๋‹จ์— ์˜ฌ๋ฆฌ์ง€ ์•Š๊ณ  ๋””์Šคํฌ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์Œ๊ณผ ๋™์‹œ์— ๋„คํŠธ์›Œํฌ๋กœ ์ „์†กํ•œ๋‹ค.

๐Ÿ‘ Reference

๋ฐ˜์‘ํ˜•