High Performance Network Adapters and Drivers in Windows
Contents:
- Introduction
- Network Adapter Hardware
- Network Adapter Driver
- Scatter-Gather DMA
- Auto-tuning
- Call to Action
³×Æ®¿öÅ· ¼º´ÉÀº Àü¹ÝÀûÀÎ ½Ã½ºÅÛ ¼º´É¿¡¼ °¡Àå Áß¿äÇÑ ¿ä¼ÒÀÇ Çϳª·Î Á¡Á¡ µÇ¾î°¡°í ÀÖ´Ù. ³×Æ®¿öÅ· ¼º´É¿¡ ¿µÇâÀ» ÁÖ´Â ¸¹Àº ¿ä¼ÒµéÀº ´ÙÀ½ÀÇ 3°¡Áö Á¾·ù°¡ ÀÖ´Ù.: ³×Æ®¿öÅ© ¾î´ðÅÍ Çϵå¿þ¾î¿Í µå¶óÀ̹ö ¼º´É, ³×Æ®¿öÅ© ½ºÅà ¼º´É, ÀÀ¿ëÇÁ·Î±×·¥ÀÌ ³×Æ®¿öÅ© ½ºÅðú »óÈ£ÀÛ¿ëÇÏ´Â ¹æ¹ý. ÀÌ ±â»ç´Â Microsoft¢ç Windows¢ç 2000, Windows XP, Windows .NET Server ¿¡¼ ³×Æ®¿öÅ© ¾î´ðÅÍ Çϵå¿þ¾î¿Í µå¶óÀ̹ö ¼º´É¿¡ °ü°èµÈ À̽´µéÀ» ¼³¸íÇÑ´Ù.
Introduction

³×Æ®¿öÅ· ¼º´ÉÀº 󸮷®°ú ÀÀ´ä ½Ã°£À¸·Î ÃøÁ¤µÈ´Ù. ½Ã½ºÅÛ ÀÚ¿øµéÀ» ³Ñ°Ô ÀÌ¿ëÇÏÁö ¾Ê°í ÃÖÀûÀÇ ¼º´É ¿¬»ê Æ÷ÀÎÆ®¸¦ ÀÌ·ç´Â °ÍÀº Áß¿äÇÏ´Ù. ±×·± ÃÖÀûÀÇ ¿¬»ê Æ÷ÀÎÆ®¸¦ ÀÌ·ç±â À§Çؼ, ³×Æ®¿öÅ© ¾î´ðÅÍ º¥´õµéÀº ¸î¸î ºÐ¾ßµéÀ» Á¶»çÇÒ Çʿ䰡 ÀÖ´Ù.
- ¡¤ ¾î´À ³×Æ®¿öÅ© ¾î´ðÅÍ Çϵå¿þ¾î ´É·ÂµéÀÌ ¼öÇàµÇ´Â°¡
- ¡¤ ÀÓ°è °æ·Î ±æÀÌ¿Í ÀÓ°è °æ·Î ±æÀÌ¿Í scalability¿¡ ´ëÇÑ ³×Æ®¿öÅ© ¾î´ðÅÍ µå¶óÀ̹ö ¼öÇà
- ¡¤ ÀÚµ¿-ÅÍ´× ÇÏ´Â °ÍÀ» Çã¿ëÇÏ´Â µ¿ÀûÀÎ Àû´çÇÑ Çϵå¿þ¾î¿Í ¼ÒÇÁÆ®¿þ¾î ÀÎÀÚµé
Network Adapter Hardware

³×Æ®¿öÅ© ¾î´ðÅÍ¿¡¼ ¼öÇàÇϱâÀ§Çؼ ¾î´À Çϵå¿þ¾î ÇÔ¼öµéÀ» °áÁ¤ÇÒÁö Ç×»ó ±³È¯ÀÌ ÀÖ´Ù. ÀÎÅÍ·´Æ® ¿Ïȸ¦ Çã¿ëÇÏ´Â task offload featuresÀ» Ãß°¡ÇÏ´Â °Í, µ¿ÀûÀ¸·Î Çϵå¿þ¾î¸¦ tuning onÇÏ´Â °Í, PCI ¹ö½ºÀÇ »ç¿ëÀ» °³¼±ÇÏ´Â °Í, Á¡º¸ ÇÁ·¹ÀÓµéÀ» Áö¿øÇÏ´Â °ÍÀ» °í·ÁÇÏ´Â °ÍÀº Á¡Á¡ Áß¿äÇØÁö°í ÀÖ´Ù. ÃÖ»óÀÇ ¼º´ÉÀ» ¿ä±¸ÇÏ´Â ±¸¼º¿¡¼ »ç¿ëµÉ high-end ³×Æ®¿öÅ© ¾î´ðÅÍ¿¡ ´ëÇØ¼ ƯÈ÷ Á߿伺ÀÌ ÀÖ´Ù.
Task Offload Features
Task offload featuresÀº µå¶óÀ̹ö³ª Æß¿þ¾î¿¡¼ ¼öÇàµÉ ¼ö ÀÖ´Ù. ÃÖÀûÀÇ ¼º´É¿¡ ´ëÇØ¼, Çϵå¿þ¾î¿¡¼ Task offload ¸¦ ¼öÇàÇÏ´Â °ÍÀº ÃÖ»óÀÌ´Ù. À©µµ¿ì´Â ´ÙÀ½ÀÇ ¼¼ °³ÀÇ Task offload featuresÀ» Àο¡À̺íÇÑ´Ù. Task offload¿¡ ´ëÇÑ ¹®¼´Â À©µµ¿ì SDK¿¡¼ ãÀ» ¼ö ÀÖ´Ù.
- TCP and IP Checksum Offload: °¡Àå ÀϹÝÀûÀÎ ³×Æ®¿öÅ© Æ®·¡ÇÈ¿¡ ´ëÇØ¼, ³×Æ®¿öÅ© ¾î´ðÅÍ Çϵå¿þ¾î¿¡¼ üũ¼¶ °è»êÀ» ¿ÀÇÁ·ÎµùÇÏ´Â °ÍÀº ¹ÙÀÌÆ® ´ç ¿ä±¸µÇ´Â CPU»çÀÌŬÀÇ ¼ö¸¦ °¨¼Ò½ÃŰ¹Ç·Î »ó´çÇÑ ¼º´É ÀÌÁ¡À» Á¦°øÇÑ´Ù. üũ¼¶ °è»êÀº µÎ °¡Áö ÀÌÀ¯·Î ³×Æ®¿öÅ· ½ºÅÿ¡¼ °¡Àå °í°¡ÀÇ ±â´ÉÀÌ´Ù.:
- ¡¤ ±ä ÆÐ½º ±æÀÌ¿¡ µµ¿òÀÌ µÈ´Ù.
- ¡¤ ij½¬°¡ churning effectsÇÏ°Ô ÇÑ´Ù.(ÀϹÝÀûÀ¸·Î º¸³»´Â ÂÊ¿¡¼)
º¸³»´Â ÀÚ¿¡¼ üũ¼¶ °è»êÀ» ¿ÀÇÁ·ÎµùÇÏ´Â °ÍÀº È£½ºÆ® CPUÀÇ ºÎÇϸ¦ °¨¼Ò½Ã۰í ij½¬ È¿°ú¸¦ Áõ°¡½ÃŰ¹Ç·Î Àü¹ÝÀûÀÎ ½Ã½ºÅÛ ¼º´ÉÀ» °³¼±ÇÑ´Ù.
À©µµ¿ì ¼º´É Lab¿¡¼, network-intensive°¡ workloadsÇÏ´Â µ¿¾È üũ¼¶ ¿ÀÇÁ·ÎµåµÉ ¶§, TCP 󸮷®ÀÌ 19% °³¼±µÇ°Ô ÃøÁ¤µÇ¾ú´Ù. ÀÌ °³¼±ÀÇ ºÐ¼®Àº Àüü °³¼±ÀÇ 11%°¡ the path length reduction·Î ¹ß»ýÇß°í 8%´Â cache's effectivenessÀÇ Áõ°¡·Î ¹ß»ýÇß´Ù.
¼ö½ÅÀÚ¿¡¼ üũ¼¶À» ¿ÀÇÁ·ÎµùÇÏ´Â °ÍÀº º¸³»´Â ÀÚ¿¡¼ üũ¼¶À» ¿ÀÇÁ·ÎµùÇÏ´Â °Í°ú °°Àº ÀÌÁ¡À» °¡Áø´Ù. Áõ°¡µÈ ÀÌÁ¡Àº ¼ÒÄÏ ÇÁ¶ô½Ã ¼¹ö¿Í °°Àº Ŭ¶óÀÌ¾ðÆ®¿Í ¼¹ö µÑ ´Ù¿¡¼ ÇàÇÏ´Â ½Ã½ºÅÛ¿¡ º¸¿©Áú ¼ö ÀÖ´Ù. Ŭ¶óÀÌ¾ðÆ® ½Ã½ºÅÛ °°Àº CPU°¡ ¹Ù»Ü Çʿ䰡 ¾ø´Â ½Ã½ºÅÛ¿¡¼, üũ¼¶ ¿ÀÇÁ·ÎµùÀÇ ÀÌÁ¡Àº °³¼±µÈ 󸮷®º¸´Ù´Â ´õ ÁÁÀº ³×Æ®¿öÅ© ÀÀ´ä ½Ã°£À¸·Î º¸¿©Áø´Ù.
- À©µµ¿ì´Â TCP-up ¿¡¼ 64K¿¡¼ MTUº¸´Ù ´õ Å« Maximum Segment Size (MSS)À» ¾Ë¸®±â À§Çؼ ³×Æ®¿öÅ© ¾î´ðÅÍ/µå¶óÀ̹ö¿¡ ´ëÇÑ ´É·ÂÀ» Á¦°øÇÑ´Ù. À̰ÍÀº TCP°¡ µå¶óÀ̹ö¿¡¼ 64K±îÁö ¹öÆÛ¸¦ ÇÒ´çÇÏ´Â °ÍÀ» Çã¿ëÇÑ´Ù. ±×¸®°í ±× µå¶óÀ̹ö´Â ³×Æ®¿öÅ© MTU¿¡ ¾È¿¡¼ Àû´çÇÑ ÆÐŶµé·Î Å« ¹öÆÛ¸¦ ³ª´«´Ù.
TCP ¼¼±×¸ÕÅ×ÀÌÆÃ ÀÛ¾÷Àº È£½ºÆ® CPU ´ë½Å¿¡ ³×Æ®¿öÅ© ¾î´ðÅÍ/µå¶óÀ̹ö Çϵå¿þ¾î¿¡ ÀÇÇØ¼ ÇàÇØÁø´Ù. À̰ÍÀº ³×Æ®¿öÅ© ¾î´ðÅÍ CPU°¡ Ãß°¡ÀûÀÎ ÀÛ¾÷À» ´Ù·ê ¼ö ÀÖ´Ù¸é »ó´çÇÑ ¼º´É °³¼±ÀÇ °á°ú°¡ ¹ß»ýÇÑ´Ù.
Å×½ºÆ®µÈ ¸¹Àº ³×Æ®¿öÅ© ¾î´ðÅ͵鿡 ´ëÇØ¼, È£½ºÆ® CPU°¡ ³×Æ®¿öÅ© ¾î´ðÅÍ Çϵå¿þ¾îº¸´Ù ´õ ÆÄ¿öÇ® ÇßÀ» ¶§ ¼øÀüÈ÷ ³×Æ®¿öÅ· Ȱ¼ºÈ¿¡ ´ëÇØ¼ º¸¿©Áö´Â °³¼±Àº ¾ÆÁÖ ÀÛ´Ù. ±×·¯³ª, ÀϹÝÀûÀÎ business workloads¿¡ ´ëÇØ¼, 󸮷®ÀÇ 9%±îÁö Àü¹ÝÀûÀÎ ½Ã½ºÅÛ ¼º´É °³¼±ÀÌ ÃøÁ¤µÈ´Ù. ÀÌÀ¯´Â È£½ºÆ® CPU°¡ 󸮸¦ ½ÇÇàÇϱâÀ§Çؼ ´ëºÎºÐÀÇ »çÀÌŬÀ» »ç¿ëÇϱ⠶§¹®ÀÌ´Ù. ÀÌ °æ¿ì¿¡, Çϵå¿þ¾î¿¡¼ TCP ¼¼½º¸ÕÅ×À̼ÇÀ» ¿ÀÇÁ·ÎµùÇÏ´Â °ÍÀº ¼¼±×¸ÕÅ×À̼ÇÀÇ ºÎÇϷκÎÅÍ È£½ºÆ® CPUÀÇ ºÎÇÏ´Â ÀÚÀ¯·Ó°Ô ÇÑ´Ù. ±×°ÍÀÇ ¿©ºÐÀÇ »çÀÌŬÀº ´õ ¸¹Àº 󸮷®À» ¼öÇàÇÏ´Â °ÍÀ» Çã¿ëÇÑ´Ù.
- IP Security (IPSec) Offload: À©µµ¿ì´Â ³×Æ®¿öÅ© ¾î´ðÅÍ Çϵå¿þ¾î¿¡¼ IPSecÀÇ ¾ÏÈ£È ÀÛ¾÷À» ¿ÀÇÁ·ÎµåÇÏ´Â ´É·ÂÀ» Á¦°øÇÑ´Ù. ƯÈ÷ 3 DES´Â ¸Å¿ì ³ôÀº cycles/byte ratio¸¦ °¡Áø´Ù. ±×·¡¼, ³×Æ®¿öÅ© ¾î´ðÅÍ Çϵå¿þ¾î¿¡¼ IPSecÀ» ¿ÀÇÁ·ÎµùÇÏ´Â °ÍÀÌ º¸¾È ÀÎÅͳݰú VPN Å×½ºÆ®¿¡¼ 30%ÀÇ ¼º´É Çâ»óÀÌ ÃøÁ¤µÈ °ÍÀº ³î¶ö ÀÏÀÌ ¾Æ´Ï´Ù.
Interrupt Moderation
°£´ÜÇÑ ³×Æ®¿öÅ© ¾î´ðÅÍ´Â ÆÐŶÀÇ µµÂø¿¡¼³ª ÆÐŶ º¸³»±â ¿ä±¸ÀÇ ½Ã±×³Î ¿Ï·á¿¡¼ È£½ºÆ®¿¡ Çϵå¿þ¾î ÀÎÅÍ·´Æ®¸¦ »ý¼ºÇÑ´Ù. ÀÎÅÍ·´Æ® ´ë±â½Ã°£À̳ª cache churning effectsÀÇ °á°ú´Â Àü¹ÝÀûÀÎ ³×Æ®¿öÅ· ¼º´É¿¡ ¿À¹öÇìµå¸¦ ÁØ´Ù. ¸¹Àº ½Ã³ª¸®¿À¿¡¼(¿¹¸¦ µé¸é, ¸¹Àº ½Ã½ºÅÛ »ç¿ëÀ̳ª ³×Æ®¿öÅ© Æ®·¡ÇÈ), °¢°¢ÀÇ ÀÎÅÍ·´Æ®¿¡ ´ëÇØ¼ ¿©·¯ °³ÀÇ ÆÐŶµéÀ» ó¸®ÇϹǷμ Çϵå¿þ¾î ÀÎÅÍ·´Æ®ÀÇ ¼Õ½ÇÀ» °¨¼Ò½ÃŰ´Â °ÍÀÌ ÃÖ»óÀÌ´Ù.
¸¹Àº ³×Æ®¿öÅ© ÀÛ¾÷ºÎÇÏ¿¡¼, 󸮷®¿¡¼ 9%±îÁö ¼º´É Çâ»óÀÌ ³×Æ®¿öÅ©-ÁýÁßÀûÀÎ(intensive) ÀÛ¾÷ºÎÇÏ¿¡¼ ÃøÁ¤µÇ¾ú´Ù. ±×·¯³ª, 󸮷® °³¼±¿¡ ´ëÇØ¼¸¸ ÀÎÅÍ·´Æ® Moderation ÀÎÀÚµéÀ» Á¶Á¤ÇÏ´Â °ÍÀº ÀÀ´ä ½Ã°£¿¡¼ ¼º´É Ÿ°ÝÀÇ °á°ú¸¦ ÃÊ·¡ÇÑ´Ù. ÃÖÀûÀÇ ¼ÂÆÃÀ» À¯ÁöÇϱâ À§Çؼ¿Í ´Ù¸¥ ÀÛ¾÷ºÎÇÏ¿¡¼ ÀûÀÀ½ÃŰ´Â À§Çؼ, µÚ¿¡ ÀÖ´Â ±â»çÀÎ ÀÚµ¿-Á¶Á¤¿¡¼ ¼³¸íµÇ´Â µ¿ÀûÀ¸·Î Àû¿ëµÈ ÀÎÀÚµéÀ» Çã¿ëÇÏ´Â °ÍÀÌ ÃÖ»óÀÌ´Ù.
PCI Bus Usage
³×Æ®¿öÅ© ¾î´ðÅÍ Çϵå¿þ¾î ¼º´É¿¡¼ °¡Àå Áß¿äÇÑ ¿ä¼Òµé Áß¿¡ Çϳª´Â PCI ¹ö½ºÀÇ È¿°úÀûÀÎ »ç¿ëÀÌ´Ù. ³×Æ®¿öÅ© ¾î´ðÅÍÀÇ DMA ¼º´ÉÀº °°Àº PCI ¹ö½º¿¡ ÀÖ´Â ¸ðµç PCI Ä«µåÀÇ ¼º´É¿¡ ¿µÇâÀ» ÁØ´Ù. ´ÙÀ½ÀÇ °¡À̵å¶óÀÎÀº PCI »ç¿ëÀ» ÃÖÀûÈÇÒ ¶§ °í·ÁµÇ¾îÁ®¾ß ÇÑ´Ù.:
- ¡¤ »ç¿ëÇÏ´Â ¸ñÀû ÆÐÀÌÁöµéÀ» Çѵ¥ ¸ðÀ½À¸·Î¼ DMA Àü¼ÛÀ» °£¼ÒÈÇÑ´Ù.
- ¡¤ Å« µ¢¾î¸®(Àû¾îµµ 256¹ÙÀÌÆ®)¿¡¼ DMA Àü¼ÛÀ» ¼öÇàÇϹǷμ PCI ÇÁ·ÎÅäÄÝ ¿À¹öÇìµå¸¦ °¨¼Ò½ÃŲ´Ù. °¡´ÉÇÏ´Ù¸é, Àüü ÆÐŶµéÀÌ ÇϳªÀÇ PCI 󸮿¡¼ Àü¼ÛµÇ´Â µ¥ÀÌÅÍÀÇ È帧À» Á¤Çضó. ±×·¯³ª Àü¼ÛÀÌ ¾î¶»°Ô ¹ß»ýÇØ¾ß ÇÏ´ÂÁö¸¦ °í·ÁÇØ¶ó.; ¿¹µé µé¸é, Àü¼ÛÀÌ ½ÃÀÛÇϱâ Àü¿¡ µµÂøÇÑ ¸ðµç µ¥ÀÌÅÍ´Â ±â´Ù·Á¼± ¾ÈµÈ´Ù. À̰ÍÀº ´ë±â »ç°£À» Áõ°¡½Ãų °ÍÀ̰í Ãß°¡ÀûÀÎ ¹öÆÛ °ø°£À» ¼ÒºñÇÑ´Ù.
- ¡¤ ÆÐŶÀÇ ¸¶Áö¸· ÀûÀº ¹ÙÀÌÆ®µéÀ» Àü¼ÛÇÒ ¶§ "clean up"ÇϱâÀ§Çؼ ÀûÀº ¿©ºÐÀÇ Àü¼ÛÀ» ¿ä±¸ÇÏ´Â °Í º¸´Ù´Â DMA ÆÐŶ Àü¼Û¿¡ Ãß°¡ÀûÀÎ ¹ÙÀÌÆ®µéÀ» ä¿ì´Â°Ô ´õ ÁÁ´Ù.
- ¡¤ PCI ½ºÆå¿¡ ÀÇÇØ¼ °í·ÁµÇ¾îÁö´Â °Í°°ÀÌ Memory Read, Memory Read Line, °ú Memory Read Multiple transactionsÀ» »ç¿ëÇÑ´Ù.
- ¡¤ ³×Æ®¿öÅ© ¾î´ðÅÍ ¹ö½º ÀÎÅÍÆäÀ̽º Çϵå¿þ¾î´Â È£½ºÆ® ¸Þ¸ð¸® ÄÁÆ®·Ñ·¯¿¡¼ Á¦ÇѵéÀ» ¹ß°ßÇØ¾ß Çϰí Àû´çÇÑ ÇàÀ§¸¦ ÇØ¾ß ÇÑ´Ù. ¿¹¸¦ µé¸é, ³×Æ®¿öÅ© ¾î´ðÅÍ ¹ö½º ÀÎÅÍÆäÀ̽º Çϵå¿þ¾î´Â DMA ¸Þ¸ð¸® Àб⿡¼ ¸Þ¸ð¸®-ÄÁÆ®·Ñ·¯ pre-fetch limitationsÀ» ¹ß°ßÇØ¾ß ÇÑ´Ù. Çϵå¿þ¾î´Â ³×Æ®¿öÅ© ¾î´ðÅÍÀÇ ÀϺκп¡¼ °úµµÇÑ ¹Ýº¹À» ¹ß°ßÇØ¾ß Çϰí óÀ½¿¡ È£½ºÆ®¿¡ ÀÇÇØ¼ cut off µÉ ¶§ ¹Ì·¡¿¡ 󸮸¦ ´Ù½Ã Çϱâ Àü¿¡ ½Ã°£À» Áõ°¡ÇØ¾ß ÇÑ´Ù. µ¥ÀÌÅÍÀÇ ´ÙÀ½ ¼ÂÀ» °¡Á®¿À±â°¡ ¹Ù»Ü ¶§, ¸Þ¸ð¸® ÄÁÆ®·Ñ·¯¿¡¼ 󸮵éÀ» Á¦¾ÈÇÏ´Â °ÍÀ» °è¼ÓÇÏ´Â °Í¿¡¼ Æ÷ÀÎÆ®°¡ ¾ø´Ù.
- ¡¤ ±â´Ù¸®´Â »óÅÂÀÇ »ðÀÔÀ» ÃÖ¼ÒÈÇØ¶ó, ƯÈ÷ µ¥ÀÌÅÍ Àü¼Ûµ¿¾È¿¡, ¹ö½º¸¦ Æ÷±âÇÏ´Â °ÍÀÌ ´õ ÁÁ°í ¸¸¾à Çϳª ÀÌ»óÀÇ ±â´Ù´Â »óŰ¡ »ðÀԵǰí ÀÖ´Ù¸é ¹ö½º¸¦ »ç¿ëÇÏ´Â ¶Ç ´Ù¸¥ PCI ¾î´ðÅÍ´Â ÇàÇØÁö´Â ¾î¶² ÀÛ¾÷À» °¡Á®¾ß ÇÑ´Ù.
- ¡¤ ÇÁ·Î±×·¥ I/O´ë½Å¿¡ ¸Þ¸ð¸® ¸Ê I/O¸¦ »ç¿ëÇØ¶ó. À̰ÍÀº µå¶óÀ̹ö¿¡ ´ëÇØ¼ ¶ÇÇÑ TRUEÀÌ´Ù.
Jumbo Frame Support
Å« Maximum Transmission Units (MTUs)°ú ´õ Å« ÇÁ·¹ÀÓ Å©±âµé, ƯÈ÷ Á¡º¸ ÇÁ·¹ÀÓµéÀ» Áö¿øÇÏ´Â °ÍÀº, ¹ÙÀÌÆ® ´ç ¹ß»ýµÇ´Â ³×Æ®¿öÅ© ½ºÅà ¿À¹öÇìµå¸¦ °¨¼Ò½Ãų °ÍÀÌ´Ù. 20% TCP 󸮷® Áõ°¡´Â MTU°¡ 1514¿¡¼ 9000À¸·Î º¯ÈµÆÀ» ¶§ ÃøÁ¤µÈ´Ù. ¶ÇÇÑ, ³×Æ®¿öÅ© ½ºÅÃÀ¸·ÎºÎÅÍ ³×Æ®¿öÅ© µå¶óÀ̹ö·ÎÀÇ È£ÃâÀÌ Àû°Ô µÇ¹Ç·Î CPU ÀÌ¿ë·üÀÇ »ó´çÇÑ °¨¼Ò¸¦ ¾ò´Â´Ù.
Network Adapter Driver

³×Æ®¿öÅ© ¾î´ðÅÍ µå¶óÀ̹öÀÇ ¼º´É È¿°ú´Â Àü¹ÝÀûÀÎ ³×Æ®¿öÅ© ¼º´É¿¡¼ Áß¿äÇÑ ¿ä¼ÒÀÌ´Ù. ³×Æ®¿öÅ© ¾î´ðÅÍ¿Í ÇÔ²²ÇÏ´Â ¼º´É À̽´µéÀº ¾Æ·¡ 3°³ ºÐ¾ß°¡ ÀÖ´Ù.: Path length, scalability, alignment.
Path Length
ºñ·Ï µå¶óÀ̹ö·ÎºÎÅÍ µå¶óÀ̹ö±îÁö Àü¼Û°ú ¼ö½Å °æ·ÎµéÀÌ ´Ù¸£Áö¸¸, ¼º´É ÃÖÀûÈ¿¡ ´ëÇØ¼ ¾î¶² ÀϹÝÀûÀÎ ±ÔÄ¢ÀÌ ÀÖ´Ù.
- ¡¤ ÀϹÝÀûÀÎ °æ·Î¿¡ ´ëÇØ¼ ÃÖÀûÈÇØ¶ó. Kernprof.exe ÅøÀº ÇÊ¿äÇÑ Á¤º¸¸¦ Ǭ À©µµ¿ìÀÇ MSDN°ú IDW ºôµå·Î Á¦°øµÈ´Ù. °³¹ßÀÚµéÀº ÃÖ°í·Î CPU »çÀÌŬµéÀ» ¼ÒºñÇÏ´Â ·çƾµéÀ» ¾Ë¾Æ¾ß Çϰí È£ÃâµÇ´Â ÀÌ ·çƾµéÀÇ ¼ö³ª ÀÌ ·çƾµé¿¡¼ ¼ÒºñµÈ ½Ã°£À» °¨¼Ò½ÃŰ·Á°í ½ÃµµÇØ¾ß ÇÑ´Ù.
- ¡¤ ³×Æ®¿öÅ© ¾î´ðÅÍ µå¶óÀ̹ö°¡ °úµµÇÑ ½Ã½ºÅÛ ÀÚ¿øµéÀ» »ç¿ëÇÏÁö ¾Ê°Ô ÇϱâÀ§Çؼ DPC¿¡¼ ¼ÒºñµÇ´Â ½Ã°£À» °¨¼Ò½ÃÄѶó. À̰ÍÀº Àü¹ÝÀûÀÎ ½Ã½ºÅÛ ¼º´ÉÀ» Á¦°øÇÒ °ÍÀÌ´Ù.
- ¡¤ µð¹ö±× Äڵ尡 µå¶óÀ̹öÀÇ ÃÖÁ¾ ¸±¸®Áî ¹öÀü¿¡¼ ÄÄÆÄÀÏÀÌ ¾ÈµÇ°Ô È®½ÇÈ÷ ÇØ¶ó.; À̰ÍÀº °úµµÇÑ Äڵ带 ½ÇÇàÇÏ´Â °ÍÀ» ÇÇÇÑ´Ù.
Scalability Issues
Scalability À̽´µéÀº ÁÖ¼Ò¸¦ ÁöÁ¤Çϴµ¥ ¸Å¿ì Áß¿äÇÏ´Ù. ƯÈ÷ SMP ½Ã½ºÅÛ¿¡ ´ëÇØ¼. °¡º¯ÀûÀÎ Scalability À̽´µéÀº ÀÌ Àå¿¡¼ ³íÀǵȴÙ.
Partitioning
ºÐÇÒ ÀÛ¾÷Àº ÇÁ·Î¼¼¼µé »çÀÌ¿¡¼ °øÀ¯µÇ´Â µ¥ÀÌÅÍ¿Í Äڵ带 ÃÖ¼ÒÈÇϴµ¥ ÇÊ¿äÇÏ´Ù. ºÐÇÒ ÀÛ¾÷ µµ¿òÀº ½Ã½ºÅÛ ¹ö½º ÀÌ¿ë·üÀ» °¨¼Ò½Ã۰í ÇÁ·Î¼¼½º ij½¬ÀÇ È¿°ú¸¦ °³¼±ÇÑ´Ù. °øÀ¯ÇÏ´Â °ÍÀ» ÃÖ¼ÒÈÇϱâÀ§Çؼ µå¶óÀ̹ö °³¹ßÀÚµéÀº ´ÙÀ½À» °í·ÁÇØ¾ß ÇÑ´Ù.:
- ¡¤ À©µµ¿ì DDK¿¡¼ ¼³¸íµÈ °Í °°ÀÌ ºñÁ÷·ÄÈµÈ ¹Ì´ÏÆ÷Æ®·Î¼ µå¶óÀ̹ö¸¦ ¼öÇàÇØ¶ó.
- ¡¤ Àü¿ª°ú °øÀ¯µÈ µ¥ÀÌÅÍ Á¢±ÙÀ» °¨¼Ò½Ã۱â À§Çؼ ÇÁ·Î¼¼¼´ç µ¥ÀÌÅÍ ±¸Á¶Ã¼µéÀ» »ç¿ëÇØ¶ó. À̰ÍÀº µ¿±âÈ ¾øÀÌ Åë°è Ä«¿îÅ͵éÀ» À¯ÁöÇÏ´Â °ÍÀ» Çã¿ëÇÑ´Ù. À̰ÍÀº ÄÚµå °æ·Î ±æÀ̸¦ °¨¼Ò½ÃŰ°í ¼º´ÉÀ» Áõ°¡½ÃŲ´Ù. ÇʼöÀûÀÎ Åë°èµé¿¡ ´ëÇØ¼, ÁúÀÇ ½Ã°£¿¡¼ ÇÔ²² Ãß°¡µÇ´Â ÇÁ·Î¼¼¼´ç Ä«¿îÅ͵éÀ» °¡Áø´Ù. ¸¸¾à Àü¿ª Ä«¿îÅ͸¦ °¡Á®¾ß ÇÑ´Ù¸é, Ä«¿îÅ͸¦ ´Ù·ç±â À§Çؼ ½ºÇɶô ´ë½Å¿¡ interlocked¿¬»êµéÀ» »ç¿ëÇØ¶ó. ¶ô ¸ÞŰ´ÏÁòµéÀº(½ºÇɶôÀ» ÇÇÇØ¶ó) µÚÀÇ ½ºÇɶôÀ» »ç¿ëÇÏ´Â °ÍÀ» ÇÇÇÏ´Â ¹ý¿¡ ´ëÇÑ ±â»ç¸¦ º¸¾Æ¶ó.
À̰ÍÀ» ÆíÇÏ°Ô ÇϱâÀ§Çؼ, KeGetCurrentProcessorNumber´Â ÇöÀç ÇÁ·Î¼¼¼¸¦ °áÁ¤Çϴµ¥ »ç¿ëµÉ ¼ö ÀÖ´Ù. ÇÁ·Î¼¼¼´ç µ¥ÀÌÅÍ ±¸Á¶Ã¼µéÀ» ÇÒ´çÇÒ ¶§, ÇÁ·Î¼¼¼ÀÇ ¼ö¸¦ °áÁ¤ÇϱâÀ§Çؼ, KeQueryActiveProcessorsÇÔ¼ö´Â »ç¿ëµÈ´Ù. ÀÌ API´Â DDKÀÇ ¹Ì·¡ ¹ßÇ¥¿¡¼ Æ÷ÇÔ¿¡ ´ëÇØ °èȹµÈ´Ù. ±×·¯³ª ´ÙÀ½À¸·Î¼ Á¤ÀǵȴÙ.:
KeQueryActiveProcessors´Â ½Ã½ºÅÛ¿¡¼ Ȱ¼ºÈÇÑ ÇÁ·Î¼¼¼µéÀ» ¼³¸íÇÏ´Â À¯»çÇÑ ¸Å½ºÅ©¸¦ ¸®ÅÏÇÑ´Ù.
KAFFINITY
KeQueryActiveProcessors (
);
Include
ntddk.h
Comments
À¯»çÇÑ ¸Å½ºÅ©¿¡¼ Àüü ºñÆ® ¼ÂÀº ½Ã½ºÅÛ¿¡¼ Ȱ¼ºÈÇÑ ÇÁ·Î¼¼¼ÀÇ ¼ö¸¦ Áö½ÃÇÑ´Ù. µå¶óÀ̹öµéÀº ¸Å½ºÅ©¾È¿¡ ÀÖ´Â ¸ðµç ¼Â ºñÆ®µéÀÌ ¿¬¼ÓÀûÀÏ °ÍÀ̶ó°í °¡Á¤Çؼ± ¾ÈµÈ´Ù. ÀÌÀ¯´Â ÇÁ·Î¼¼¼µéÀº ¿î¿µ üÁ¦ÀÇ ¹Ì·¡ ¹ßÇ¥¿¡¼ ¿¬¼ÓÀûÀÎ ¼ö¶ó´Â º¸ÀåÀÌ ¾ø´Ù. SMP ¸Ó½Å ¾È¿¡¼ ÇÁ·Î¼¼¼µéÀÇ ¼ö´Â 0±â¹ÝÀÇ °ªÀÌ´Ù.
¸¸¾à ij½¬-¶óÀÎ °æÀïÀ» °¨¼Ò½ÃŰ´Â ½Ãµµ¿¡¼ ÇÁ·Î¼¼¼´ç µ¥ÀÌÅ͸¦ À¯ÁöÇß´Ù¸é, À©µµ¿ì XP/À©µµ¿ì 2000 µå¶óÀ̹ö´Â KeQueryActiveProcessors¸¦ È£ÃâÇÒ ¼ö ÀÖ´Ù.
KeQueryActiveProcessorsÀº ¾î¶² IRQL¿¡¼µµ È£ÃâµÉ ¼ö ÀÖ´Ù.
See also: KeGetCurrentProcessorNumber
False Sharing
False sharing´Â ÇÁ·Î¼¼¼µéÀÌ ¼·Î·ÎºÎÅÍ µ¶¸³ÇÏ´Â °øÀ¯µÈ º¯¼ö¸¦ ¿ä±¸ÇÑ´Ù. ±×·¯³ª, º¯¼öµéÀÌ °°Àº ij½¬¶óÀο¡ Àֱ⠶§¹®¿¡, ÇÁ·Î¼¼¼µé »çÀÌ¿¡¼ °øÀ¯µÈ´Ù. ±×·± »óȲ¿¡¼, ij½¬ ¶óÀÎÀº ¾î¶² º¯¼öµéÀÇ ¸ðµç Á¢±Ù¿¡ ´ëÇØ¼ ÇÁ·Î¼¼¼µé »çÀÌ¿¡¼ ¾ÕµÚ·Î ¿òÁ÷ÀÏ °ÍÀÌ´Ù. ±×°ÍÀº ij½¬ Ç÷¯½¬¿Í ¸®·ÎµåÀÇ Áõ°¡¸¦ ÀÏÀ¸Å²´Ù. À̰ÍÀº ½Ã½ºÅÛ ¹ö½º ÀÌ¿ë·üÀ» Áõ°¡½Ã۰í Àü¹ÝÀûÀÎ ½Ã½ºÅÛ ¼º´ÉÀ» °¨¼Ò½ÃŲ´Ù.
False sharing¸¦ ÇÇÇϱâ À§Çؼ, Áß¿äÇÑ µ¥ÀÌÅÍ ±¸Á¶Ã¼µéÀº(½ºÇɶô, ¹öÆÛ Å¥Çì´õ, SList µî) NdisGetSharedDataAlignment¸¦ »ç¿ëÇϹǷμ ij½¬ ¶óÀÎ ¹Ù¿î´õ¸®µé·Î Á¤·Ä½ÃÄѶó..
Locking Mechanisms (Avoiding Spinlocks)
½ºÇɶôÀÇ »ç¿ëÀº Àû´çÈ÷ »ç¿ëµÇÁö ¾Ê´Â´Ù¸é ¼º´É¿¡¼ ¹®Á¦°¡ µÉ ¼ö ÀÖ´Ù. µå¶óÀ̹öµéÀº Àû´çÇÑ ÀÎÅͶôµå ¿¬»êÀ» »ç¿ëÇϹǷΠ°¡´ÉÇÑ ÇÑ ½ºÇɶôÀÇ »ç¿ëÀ» ÇÇÇØ¾ß ÇÑ´Ù. ±×·¯³ª ½ºÇɶôÀº ¾î¶² ¸ñÀû¿¡¼´Â ÃÖ»óÀÇ ¼±ÅÃÀÌ´Ù. ¿¹¸¦ µé¸é, ¸¸¾à µå¶óÀ̹ö¿¡°Ô Áö½ÃµÇÁö ¾ÊÀº ÆÐŶ ¼ö¿¡ ´ëÇÑ ÂüÁ¶ Ä«¿îÅ͵éÀ» ´Ù·ç´Â µ¿¾È µå¶óÀ̹ö°¡ ½ºÇɶôÀ» ¿ä±¸ÇÑ´Ù¸é, ÀÎÅͶôµå ¿¬»êÀ» »ç¿ëÇÏ´Â °ÍÀº ºÒÇÊ¿äÇÏ´Ù.
¶ôÅ· ¸ÞÄ¿´ÏÁò¿¡ ´ëÇÑ ´Ù¸¥ Á¦¾ÈµéÀº ´ÙÀ½À» Æ÷ÇÔÇÑ´Ù.:
- ¡¤ ÀÚ¿ø Ç®µé(¿¹¸¦ µé¸é, NdisInitializeSListHead, NdisInterlockedPushEntrySList, NdisInterlockedPopEntrySList, NdisQueryDepthSList)À» ´Ù·ç´Â °Í¿¡ ´ëÇØ¼´Â Slists¿Í NDIS ´ÜÀÏ ¸µÅ©µå ¸®½ºÆ® ÇÔ¼öµéÀ» »ç¿ëÇØ¶ó.
- ¡¤ ¸¸¾à ½ºÇɶôÀ» »ç¿ëÇÑ´Ù¸é, µ¥ÀÌÅÍ´Â º¸È£Çϰí ÄÚµå´Â º¸È£ÇÏÁö ¾Ê°Ô È®½ÇÈ÷ ÇØ¶ó. ÀϹÝÀûÀÎ °æ·Îµé¿¡¼ »ç¿ëµÇ´Â ¸ðµç µ¥ÀÌÅ͸¦ º¸È£ÇϱâÀ§Çؼ ÇϳªÀÇ ¶ôÀ» »ç¿ëÇÏÁö ¸¶¶ó. ¿¹¸¦ µé¸é, º¸³»±â °æ·Î°¡ ±×°ÍÀÇ µ¥ÀÌÅ͸¦ ¶ôÇÒ Çʿ䰡 ÀÖÀ» ¶§ ¼ö½Å °æ·Î°¡ ¿µÇâÀ» ¹ÞÁö ¾Ê°Ô ÇϱâÀ§Çؼ µÎ°³ÀÇ µ¥ÀÌÅÍ ±¸Á¶Ã¼µé¿¡¼ º¸³»±â¿Í ¹Þ±â °æ·Îµé¿¡ »ç¿ëµÇ´Â µ¥ÀÌÅ͸¦ ºÐ¸®Çضó.
- ¡¤ ¸¸¾à ½ºÇɶôÀ» »ç¿ëÇϰí ÀÌ¹Ì °æ·Î°¡ DPC ·¹º§¿¡ ÀÖ´Ù¸é, ¿©ºÐÀÇ Äڵ带 ÇÇÇϱâ À§Çؼ DPC ·¹º§¿¡¼ ½ºÇɶô ¿ä±¸¿Í ÇØÁ¦¿¡ ´ëÇÑ ÇÔ¼öµéÀ» »ç¿ëÇØ¶ó.(¿¹¸¦ µé¸é, NdisDprAcquireSpinlock, NdisDprReleaseSpinlock)
- ¡¤ ½ºÇɶô ¿ä±¸¿Í ÇØÁ¦ÀÇ ¼ö¸¦ ÃÖ¼ÒÈÇÏ´Â °Í¿¡ ´ëÇÑ ³ë·Â¿¡¼, NDIS ReadWriteLock ÇÔ¼öµé (NdisInitializeReadWriteLock, NdisAcquireReadWriteLock, NdisReleaseReadWriteLock)¸¦ »ç¿ëÇØ¶ó. ReadWriteLock ÇÔ¼öµéÀº ¿©·¯ °³¸¦ µ¿½Ã¿¡ Àд ÀÚ°Ô ÇϳªÀÇ ¶ôÀ» »ç¿ëÇÏ´Â °ÍÀ» Çã¿ëÇϰí ÇϳªÀÇ ¾²´Â ÀÚÀÇ ½º·¹µå¿¡°Ô ¾²±â Á¢±ÙÀ» Á¦ÇÑÇÑ´Ù. ¾²´Â Á¢±Ùµ¿¾È Àбâ Á¢±ÙÀÌ Çã¿ëµÇÁö ¾Ê´Â´Ù.
64-Bit DMA
¸¸¾à ³×Æ®¿öÅ© ¾î´ðÅͰ¡ 64ºñÆ® DMA¸¦ Áö¿øÇÑ´Ù¸é, stepsÀº 4±â°¡ ¹üÀ§º¸´Ù »óÀ§ÀÇ ÁÖ¼Ò¿¡ ´ëÇØ ¿©ºÐÀÇ º¹»ç¸¦ ÇÇÇØ¾ß ÇÑ´Ù. µå¶óÀ̹ö°¡ NdisMInitializeScatterGatherDmaÀ» È£ÃâÇÒ ¶§, Dma64Addresses´Â TRUE·Î ¼Â µÇ¾î¾ßÇÑ´Ù.
Mapping Sent User Data
Ç÷¡±×´Â Ãʱâȵ¿¾È NdisMSetAttributesEx¿¡¼ º¸³½ AttributeFlags ÀÎÀÚµéÀ» Ãß°¡ÇÑ´Ù. AttributeFlags¿¡¼ NDIS_ATTRIBUTE_USES_SAFE_BUFFER_APIS ºñÆ®´Â µå¶óÀ̹öµéÀÌ Àü¼ÛµÈ »ç¿ëÀÚ µ¥ÀÌÅ͸¦ ¸ÊÇÎÇÏ´Â °ÍÀ» ÇÇÇÏ°Ô ÇÑ´Ù. ±×¶§ µå¶óÀ̹ö´Â µ¥ÀÌÅͰ¡ º¸³»´Â ÁßÀÏ ¶§ NDIS·ÎºÎÅÍ º¸³»Áø ¹°¸® ÁÖ¼Ò¸¸À» ÇÊ¿ä·Î ÇØ¾ß ÇÑ´Ù. ÀÌ ºñÆ®´Â µå¶óÀ̹ö°¡ ¹°¸® ÁÖ¼Ò¸¸À» ÇÊ¿ä·Î ÇѴٰųª µå¶óÀ̹ö°¡ NdisXxxSafe API ¼Â(¹Ø¿¡ ÀÖ´Ù)À» »ç¿ëÇÒ °ÍÀÎÁö¸¦ NDIS¿¡°Ô Áö½ÃÇÑ´Ù. Safe API¸¦ »ç¿ëÇÒ ¶§, ¸¸¾à NdisQueryBufferSafe°¢ ¹öÆÛ ±æÀ̸¦ ¾ò±â À§Çؼ »ç¿ëµÈ´Ù¸é, °¡»ó ÁÖ¼Ò ÀÎÀÚ´Â NDIS¿¡ÀÇÇØ¼ º¸³»Áø µ¥ÀÌÅÍ ¹öÆÛµéÀ» ¸ÅÇÎÇÏ´Â °ÍÀ» ÇÇÇϱâ À§Çؼ NULL·Î ¼Â µÇ¾î¾ß ÇÑ´Ù.
NDIS_ATTRIBUTE_USES_SAFE_BUFFER_APISÀ» ¼ÂÆÃÇÏ´Â °ÍÀº °¡´ÉÇÒ ¶§¸¶´Ù ½Ã½ºÅÛ °¡»ó Áּҵ鿡 ¹öÆÛµéÀ» ¸ÊÇÎÇÏ´Â °ÍÀ» ÇÇÇϹǷμ ¼º´ÉÀ» °³¼±ÇÑ´Ù. ´ÙÀ½Àº NdisXxxSafe API ¼ÂÀÌ´Ù.:
NdisQueryBufferSafe
NdisGetFirstBufferFromPacketSafe
NdisCopyFromPacketToPacketSafe
NdisBufferVirtualAddressSafe
Alignment
ij½¬ ¶óÀÎ ¹Ù¿î´õ¸®¿¡¼ ¹öÆÛ Á¤·ÄÀº ÇϳªÀÇ ¹öÆÛ¿¡¼ ¶Ç ´Ù¸¥ ¹öÆÛ·Î µ¥ÀÌÅ͸¦ º¹»çÇÒ ¶§ ¼º´ÉÀ» °³¼±ÇÑ´Ù. ´ëºÎºÐÀÇ ³×Æ®¿öÅ© ¾î´ðÅÍ ¼ö½Å ¹öÆÛµéÀº óÀ½ ÇÒ´çµÉ ¶§ Àû´çÈ÷ Á¤·ÄµÈ´Ù ±×·¯³ª, ½ÇÁ¦ ÀÀ¿ëÇÁ·Î±×·¥ ¹öÆÛ¿¡¼ À̺¥Æ®ÀûÀ¸·Î º¹»çµÉ »ç¿ëÀÚ µ¥ÀÌÅÍ´Â ¼ÒºñµÈ Çì´õ °ø°£¿¡ ÀÇÇØ¼ Á¤·ÄÀÌ ¾ÈµÈ´Ù. TCP µ¥ÀÌÅÍ(°¡Àå ÀϹÝÀûÀÎ ½Ã³ª¸®¿À)¿¡¼ TCP, IP,ÀÌ´õ³Ý Çì´õµé·Î ÀÎÇÑ ½¬ÇÁÆ®´Â 0x36¹ÙÀÌÆ®ÀÇ ½¬ÇÁÆ®ÀÇ °á°ú¸¦ ³º´Â´Ù. ÀϹÝÀûÀÌ °æ¿ì¿¡ ´ëÇÑ ÀÌ ¹®Á¦¸¦ ÇØ°áÇϱâÀ§Çؼ, ¾à°£ ´õ Å« ¹öÆÛ°¡ ÇÒ´çµÇ°í ÆÐŶ µ¥ÀÌÅÍ´Â 0xa ¹ÙÀÌÆ® ¿ÀÇÁ¼Â¿¡ ³Ö¾î¾ß ÇÑ´Ù. À̰ÍÀº Çì´õ¿¡ ´ëÇÑ 0x36 ¹ÙÀÌÆ®¿¡ ÀÇÇÑ ¹öÆÛÀÇ ½¬ÇÁÆ® ÈÄ¿¡ »ç¿ëÀÚ µ¥ÀÌÅͰ¡ Àû´çÈ÷ Á¤·ÄµÉ °ÍÀ̶ó´Â °ÍÀ» º¸ÁõÇÒ °ÍÀÌ´Ù.
Scatter-Gather DMA

Scatter-Gather DMA ´Â Çϵå¿þ¾î¿¡¼ ºÒ¿¬¼ÓÀûÀÎ ¹üÀ§ÀÇ ¹°¸® ¸Þ¸ð¸®¿ÍÀÇ µ¥ÀÌÅÍ ¼Û¼ö½ÅÀ» Áö¿øÇÑ´Ù. Scatter-Gather DMA ´Â SCATTER_GATHER_LIST ±¸Á¶Ã¼¸¦ »ç¿ëÇϰí ÀÌ ±¸Á¶Ã¼´Â SCATTER_GATHER_ELEMENTS ÀÇ ¹è¿°ú ¹è¿ ¾È¿¡ ¸¹Àº ¿¤¸®¸ÕÆ®µéÀ» Æ÷ÇÔÇÑ´Ù. ÀÌ ±¸Á¶Ã¼´Â µå¶óÀ̹öÀÇ º¸³»±â ÇÔ¼ö¿¡°Ô º¸³»Áø ÆÐŶ µð½ºÅ©¸³ÅͷκÎÅÍ È¸º¹µÈ´Ù. ¹è¿ÀÇ °¢°¢ÀÇ ¿¤¸®¸ÕÆ®´Â ¹°¸®ÀûÀÌ°í ¿¬¼ÓÀûÀÎ Scatter-Gather ¿µ¿ªÀÇ ½ÃÀÛÇÏ´Â ¹°¸® ÁÖ¼Ò¿Í ±æÀ̸¦ Á¦°øÇÑ´Ù. µå¶óÀ̹ö´Â µ¥ÀÌÅ͸¦ Àü¼ÛÇÏ´Â °Í¿¡ ´ëÇÑ ÁÖ¼Ò¿Í ±æÀ̸¦ »ç¿ëÇÑ´Ù.
DMA ¿¬»ê¿¡ ´ëÇØ¼ Scatter-Gather ·çƾÀ» »ç¿ëÇÏ´Â °ÍÀº ¸¸¾à ¸Ê ·¹Áö½ºÅ͵éÀÌ »ç¿ëµÈ´Ù¸é ¹ß»ýÇÏ´Â Á¤ÀûÀ¸·Î ÀÌ ÀÚ¿øµéÀ» ¶ôÅ·ÇÏ´Â °ÍÀ» ÇÏÁö ¾ÊÀ¸¹Ç·Î ½Ã½ºÅÛ ÀÚ¿øµéÀÇ ÀÌ¿ë·üÀ» °³¼±ÇÒ ¼ö ÀÖ´Ù.
¸¸¾à ³×Æ®¿öÅ© ¾î´ðÅͰ¡ TCP ¼¼±×¸ÕÅ×ÀÌ¼Ç ¿ÀÇÁ·Îµå(Å« º¸³»±â ¿ÀÇÁ·Îµå)À» Áö¿øÇÑ´Ù¸é, ±×¶§ µå¶óÀ̹ö´Â ÃÖ°í ¹öÆÛ Å©±â·Î º¸³¾ Çʿ䰡 ÀÖÀ» °ÍÀ̰í ÃÖ°í ¹öÆÛ Å©±â´Â NdisMInitializeScatterGatherDma ¾È¿¡ ÀÖ´Â MaximumPhysicalMapping ÀÎÀÚ ¾È¿¡ TCP/IP·ÎºÎÅÍ ¾òÀ» ¼ö ÀÖ´Ù. À̰ÍÀº Scatter Gather ¸ñ·ÏÀ» ¼³¸³ÇÏ°í °¡´ÉÇÑ ¹öÆÛ ÇÒ´ç°ú º¹»ç¸¦ ¾ø¾Ù ¼ö ÀÖ´Â ÃæºÐÇÑ ¸Ê ·¹Áö½ºÅ͵éÀ» °¡Áø´Ù´Â °ÍÀ» º¸ÁõÇÒ ¼ö ÀÖ´Ù.
Auto-tuning

Auto-tuning´Â µå¶óÀ̹ö ¶Ç´Â ³×Æ®¿öÅ© ¾î´ðÅÍ Çϵå¿þ¾î¿¡¼ ¼öÇàµÉ Çʿ䰡 ÀÖ°í Áß¿äÇÑ °³³äÀÌ´Ù. ¸ðµç ºÒÇÊ¿äÇÏ°í ºÒ¸íÈ®ÇÑ »ç¿ëÀÚ Á¦¾îµéÀ» Á¦°ÅÇÏ´Â µ¿¾È ÃÖÀûÀÇ ¼º´ÉÀ» À¯ÁöÇÏ´Â °ÍÀº Áß¿äÇÏ´Ù.
ÃÖÀûÀÇ ¼º´É ¿¬»ê Æ÷ÀÎÆ®¸¦ º¸ÁõÇϱâÀ§Çؼ, ³×Æ®¿öÅ© ¾î´ðÅÍ µå¶óÀ̹ö´Â Auto-tuning ÀÎÀÚµéÀ» Áö¿øÇØ¾ß ÇÑ´Ù. µå¶óÀ̹ö´Â ÁÖ±âÀûÀ¸·Î µå¶óÀ̹ö ¸®¼Â¾øÀÌ Ã³¸®·®°ú ÀÀ´ä ½Ã°£À» ÃÖ°í·Î ÇϱâÀ§Çؼ Çϵå¿þ¾î¿Í ¼ÒÇÁÆ®¿þ¾î¸¦ Á¶Á¤ÇÑ´Ù. ¸ðµç ÀÎÀÚµéÀÌ Á¶Á¤µÇ´Â °ÍÀº ¾Æ´Ï°í Ưº°È÷ Çϵå¿þ¾î ÀÎÀڵ鸸 Á¶Á¤µÈ´Ù. Auto-tuning´Â Á¤ÀûÀÌ ÀÎÀÚÀÎ°Ô ´õ ÁÁ´Ù. ÀÌÀ¯´Â ÀÎÀÚµéÀÇ ÃÖÀûÀÇ °ªÀº ½Ã°£ ½Ã º¯ÈÇÒÁöµµ ¸ð¸£±â ¶§¹®À̰í Á¤ÀûÀÎ ÀÎÀÚµéÀº »ç¿ëÀÚ°¡ ÀÌÇØÇÏ°í ¿Ã¹Ù¸£°Ô Á¶Á¤ÇϱⰡ ¾î·Æ±â ¶§¹®ÀÌ´Ù.
Auto-tuning´Â ÇØ°áÇϱâÀ§ÇØ ¾î·Á¿î ¹®Á¦ÀÌ´Ù. ¸¹Àº ¿¬±¸¿Í °³¹ß ½Ã°£ÀÌ ÃÊÀûÀÇ Á¶Á¤ ¾Ë°í¸®ÁòÀ» ÀÌ·ç´Âµ¥ ¼ÒºñµÉ °ÍÀÌ´Ù. ±×·¯³ª, °í·ÁµÉ ¼ö ÀÖ´Â ¸¹Àº °£´ÜÇÑ ¾Ë°í¸®ÁòµéÀÌ ÀÖ°í auto-tuning°ú °¡±î¿î ÃÖÀûÀÇ ¿¬»ê Æ÷ÀÎÆ®À» ÇÕ´çÈ÷ ÀÌ·ç´Â °ÍÀ» Çã¿ëÇÑ´Ù.
µÎ Á¾·ùÀÇ auto-tuningÀÌ ÀÖ´Ù.: Á¤Àû, µ¿Àû. Á¤Àû auto-tuning¿¡¼ µå¶óÀ̹ö¿Í ³×Æ®¿öÅ© ¾î´ðÅÍ Çϵå¿þ¾î ÀÎÀÚµéÀº ¸Ó½Å ¿ªÇÒ(µ¥½ºÅ©Å¾¿¡ ´ëÇÑ ¼¹ö)°ú ¸Ó½Å Çϵå¿þ¾î(CPU¿Í ¸Þ¸ð¸®) °°Àº ½Ã½ºÅÛ ±¸¼º°ú ³×Æ®¿öÅ© ¾î´ðÅÍ Çϵå¿þ¾î ´É·Âµé¿¡ ±â¹ÝÀÌ ÀÖ´Ù. µ¿Àû auto-tuning´Â ÀÚ¿ø ÀÌ¿ë·ü°ú ³×Æ®¿öÅ© ºÎÇÏ °°Àº ½Ã½ºÅÛ Á¶°Ç¿¡ ±â¹ÝÀÌ ÀÖ´Ù. µ¿Àû auto-tuning´Â ¼öÇàÇϴµ¥ ´õ ¾î·Æ´Ù. ±×·¯³ª, ±×°ÍÀº Á¤Àû auto-tuningº¸´Ù ´õ ÁÁÀº °á°ú¸¦ ³º´Â´Ù. ±×·¯³ª, Á¤Àû auto-tuning´Â high-end ¸Ó½Å¿¡¼ ÀÚ¿øµéÀ» °ú´Ù ÀÌ¿ëÇÏ´Â °æÇâÀÌ ÀÖ´Ù. ÀÌÀ¯´Â ÀÚ¿ø »ç¿ëÀ» ´Ùµë´Â ¸ÞÄ¿´ÏÁòÀÌ ¾ø±â ¶§¹®ÀÌ´Ù.
°¢°¢ÀÇ µå¶óÀ̹ö´Â µå¶óÀ̹ö ÃʱâÈ¿¡¼ ·¹Áö½ºÆ®·ÎºÎÅÍ ·ÎµåµÇ´Â Å×À̺íÀ» À¯ÁöÇÏ´Â Ç϶ó°í ÃßõÇÑ´Ù. ±× Å×À̺íÀº ³×Æ®¿öÅ© ÀÌ¿ë·üÀ» Æ÷ÇÔÇÏ´Â CPU ÀÌ¿ë·ü(NdisGetCurrentProcessorCounts)°ú ´Ù¸¥ ¿ä¼Òµé¿¡ ±â¹ÝµÈ ¿¬»ê ÀÎÀÚµéÀ» ¼±ÅÃÇÑ´Ù. µå¶óÀ̹ö´Â ŸÀ̸Ó(°¢°¢ 1Ãʳª 5Ãʸ¶´Ù)¿¡ ±â¹ÝµÇ°Å³ª ¿¹¸¦ µé¸é, ¾î¶² Ä«¿îÅ͵鿡 ±â¹ÝµÈ((ÃÊ´ç ÆÐŶ ¼ö °°Àº) CPU ÀÌ¿ë·üÀ» °è»êÇϹǷΠÀÌ ÀÎÀÚµéÀ» ¾÷µ¥ÀÌÆ® ÇÒ ¼ö ÀÖ´Ù.
auto-tuning¿¡ ´ëÇØ °í·ÁµÉ Çʿ䰡 ÀÖ´Â ÁÖ¿ä ÀÎÀÚµéÀº ´ÙÀ½ÀÇ ¾ÆÀÌÅÛµéÀ» Æ÷ÇÔÇÑ´Ù:
- ¡¤ Interrupt Moderation: Off À̳ª On, ±×¸®°í ¼ö½Å°ú ¼Û½Å¿¡ ´ëÇÑ ÀÎÅÍ·´Æ® ºñÀ²
- ¡¤ DPC´ç 󸮵Ǵ ÆÐŶÀ̳ª DPC¾È¿¡¼ ¼ÒºñµÈ ½Ã°£
- ¡¤ ¹öÆÛ ÇÒ´ç, ƯÈ÷ ¼ö½Å ¹öÆÛµé
- ¡¤ ÇÕÃÄÁø°ÍÀ» ÀÛ°Ô Á¶°¢³»´Â °Í °°Àº ´Ù¸¥ ó¸®
´ÙÀ½ Å×À̺íÀº ¿¹Á¦·Î¼ Á¦°øµÈ´Ù.:
| CPU Utilization % |
Receive Packets/ Interrupt
|
Send Packets/ Interrupt
|
Packets processed at DPC Level |
| <=5 |
1 |
1 |
200 |
| 10 |
1 |
1 |
180 |
| ... |
... |
... |
... |
| 95 |
19 |
70 |
45 |
| 100 |
20 |
80 |
40 |
·¹Áö½ºÆ®¸®·ÎºÎÅÍ Å×À̺íÀ» ·ÎµåÇÏ´Â ÇϳªÀÇ ÀÌÀ¯´Â µå¶óÀ̹ö¿¡¼ ¾î·Æ°Ô ÄÚµåµÈ °ªµéÀ» ÇÇÇÏ´Â °ÍÀÌ´Ù. À̰ÍÀº ¶ÇÇÑ ¸î¸î representative ÀÛ¾÷ ºÎÇÏ¿¡ ´ëÇØ¼ ÃÖÀûÀÇ °ªµéÀ» ã±â À§Çؼ Å×ÀÌºí ¿£Æ®¸®·Î ½ÇÇèÇÏ´Â °ÍÀ» Çã¿ëÇÑ´Ù. ½ÇÁ¦ Å×À̺íÀº »ç¿ëÀÚ °£¼·À» ÃÖ¼ÒÈÇϱâÀ§Çؼ »ç¿ëÀÚ ÀÎÅÍÆäÀ̽º¿¡¼ º¸´Ù ·¹Áö½ºÆ®¸®¿¡ º¸¿©¾ß ÇÑ´Ù. µå¶óÀ̹ö´Â Å×À̺íÀÌ Á¦°øµÈ´Ù¸é ·¹Áö½ºÆ®¸®¸¦ »ç¿ëÇØ¾ß ÇÑ´Ù.
Ãß°¡ÀûÀ¸·Î, ³×Æ®¿öÅ© Æ®·¡ÇÈ¿¡ ±â¹Ý¿¡¼, µå¶óÀ̹ö°¡ ³×Æ®¿öÅ© ¾î´ðÅÍÀÇ ÃÖ°í ºÎÇϸ¦ ´Ù·ê ¼ö ÀÖÀ» ¸¸Å ÃæºÐÇÑ ¹öÆÛµéÀ» °®´Â °ÍÀº ¸Å¿ì Áß¿äÇÑ´Ù. Á÷¸éÇÏ´Â °¡Àå Áß¿äÇÑ ¼º´É À̽´ÀÇ Çϳª´Â Ưº°ÇÑ ¼ö½Å ¹öÆÛ¿¡ ¼ ÃæºÐÇÑ ¹öÆÛÀÇ ºÎÁ·ÀÌ´Ù. ¹öÆÛµéÀÇ ºÎÁ·Àº µå¶óÀ̹ö°¡ ÆÐŶµéÀ» µå¶øÇÏ°Ô ÇÑ´Ù. TCP°æ¿ì¿¡, À̰ÍÀº ÀçÀü¼ÛÀÌ ¹ß»ýÇÑ´Ù.(10% Á¤µµÀÇ ³ôÀº ÆÐ³ÎƼ°¡ ³×Æ®¿öÅ© Àμ¾Æ¼ºê ÀÛ¾÷ ºÎÇÏ¿¡ º¸¿©Áø´Ù.). ºäÀÇ ¼º´É Æ÷ÀÎÆ®·ÎºÎÅÍ, ±×°ÍÀº ±×°ÍµéÀ» ³·°Ô ÇÒ´çÇÏ´Â °Í º¸´Ù ¹öÆÛµéÀ» ³ô°Ô ÇÒ´çÇÏ´Â °ÍÀÌ ÀϹÝÀûÀ¸·Î ´õ ÁÁ´Ù. auto-tuningÀ¸·Î, µå¶óÀ̹ö´Â µ¿ÀûÀ¸·Î °ü·Ê¿¡ ±â¹ÝµÈ ¼ö½Å ¹öÆÛµéÀ» ÇÒ´çÇÒ ¼ö ÀÖ°í ÇØÁ¦ÇÒ ¼ö ÀÖ´Ù. µå¶óÀ̹ö´Â Ç×»ó ³×Æ®¿öÅ© Æ®·¡ÇÈÀÇ Æø¹ßÀ» ´Ù·ê ¼ö ÀÖ´Â ³Ë³ËÇÑ ¹öÆÛµéÀ» °¡Áú Çʿ䰡 ÀÖ´Ù.
¸¸¾à Çϵå¿þ¾î°¡ º¸³»±â¿Í ¼ö½Å ¹öÆÛµé¿¡ ÇÒ´çµÈ Çϵå¿þ¾î ¸Þ¸ð¸®¸¦ µ¿ÀûÀ¸·Î Á¶Á¤ÇÏ´Â °ÍÀ» Áö¿øÇÑ´Ù¸é, auto-tuning´Â º¸³»±â¿Í ¼ö½Å ÆÐŶ ·ü¿¡ ±â¹ÝµÈ º¸³»±â¿Í ¼ö½Å ¹öÆÛµéÀ» À§ÇØ ¿¹ºñ·Î ³²°ÜµÐ on-board ¸Þ¸ð¸®¸¦ Á¶Á¤ÇÒ ¼ö ÀÖ´Ù. À̰ÍÀº on-boardÀÇ ´õ ÁÁÀº ÀÌ¿ë·üÀ» Çã¿ëÇÑ´Ù.
Call to Action

- ¡¤ ³ÊÀÇ ³×Æ®¿öÅ© ¾î´ðÅÍ¿Í µå¶óÀ̹ö°¡ ÃÖÀûÀÇ ½Ã½ºÅÛ ¼º´É Æ÷ÀÎÅÍ¿¡¼ µ¿ÀÛÇÏ´Â °ÍÀ» º¸ÁõÇϱâÀ§Çؼ ÀÌ ±â»ç¿¡ Á¦°øµÈ Á¤º¸¸¦ »ç¿ëÇØ¶ó.
- ¡¤ ÇöÀç Windows DDK ´Â ÀÌ ±â»ç¿¡ ¼³¸íµÈ API¿Í ¸ÞÄ¿´ÏÁòµéÀ» »ç¿ëÇÏ´Â ¹ý¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ Á¤º¸¸¦ Æ÷ÇÔÇÑ´Ù.
- ¡¤ À©µµ¿ì XP¸¦ ½ÇÇàÇÏ´Â PC¿¡¼ ºü¸¥ ½Ã½ºÅÛ ½ÃÀÛÀ» À§ÇÑ ÃÖÀûÈ¿¡ ´ëÇÑ °ü°èµÈ Åø°ú Á¤º¸¿¡ ´ëÇØ¼´Â OnNow and Power Management¸¦ º¸¾Æ¶ó.
- ¡¤ Áú¹®¿¡ ´ëÇØ¼, NDISFB@microsoft.com¿¡ À̸ÞÀÏÀ» º¸³»¶ó. ³ÊÀÇ À̸§,ŸÀÌÆ², ȸ»ç À̸§, ȸ»ç ŸÀÔ(IHV, ISV, ISP, or OEM)°ú ÀüÈ ¹øÈ£¸¦ Æ÷ÇÔÇÏ´Â °ÍÀ» È®½ÇÈ÷ ÇØ¶ó.
|