· KLDP.org · KLDP.net · KLDP Wiki · KLDP BBS ·
IO PerformanceHOWTO

I/O Performance HOWTO

Sharon Snider v1.1, 05/2002

Revision History Revision v1.1 2002-05-01 Revised by: sds

Updated technical information and links.

Revision v1.0 2002-04-01 Revised by: sds

Wrote and converted to DocBook XML.

This HOWTO covers information on available patches for the 2.4 kernel that can improve the I/O performance of your Linux¢â operating system.

ÀÌ ¹®¼­ÀÇ ¿µ¹® ¿øº»Àº ´ÙÀ½ÀÇ À§Ä¡¿¡ ÀÖ½À´Ï´Ù.


¹ø¿ª : hb_kim (at) hotmail.com

2003-12-11 ver 1.1-trans-0.1


1. ¹èÆ÷Á¤Ã¥

The I/O Performance-HOWTO is copyrighted © 2002, by IBM Corporation

Permission is granted to copy, distribute, and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation with no Invariant Sections, no Front-Cover text, and no Back-Cover text. A copy of the license can be found at http://www.gnu.org/licenses/fdl.txt.


2. ¼Ò°³

ÀÌ ¹®¼­´Â 2.4 Ä¿³ÎÀ» ¾²´Â Linux ¿ÀÆÛ·¹ÀÌÆà ½Ã½ºÅÛÀÇ I/O ¼º´ÉÀ» °³¼±Çϴµ¥ ´ëÇÑ Á¤º¸¸¦ ´ã°í ÀÖ´Ù. Ãß°¡ÀûÀÎ ÆÐÄ¡°¡ ¸¸µé¾îÁö´Â´ë·Î ÀÌ ¹®¼­¿¡ ´õÇØÁú°ÍÀÌ´Ù.

¾î¶°ÇÑ Á¦¾ÈÀ̳ª, ÀÌ ¹®¼­¿¡ µµ¿òÀÌ µÉ¸¸ÇÑ ³»¿ëÀÌ ÀÖ´Ù¸é Sharon Snider¿¡°Ô e-mailÀ» º¸³»Áֱ⸦ ¹Ù¶õ´Ù.


3. ¹Ù¿î½º ¹öÆÛÀÇ »ç¿ëÀ» ÇÇÇϱâ

ÀÌ Àå¿¡¼­´Â ¸®´ª½º 2.4 Ä¿³Î¿¡ ¹Ù¿î½º ¹öÆÛ ÆÐÄ¡¸¦ Àû¿ëÇÏ°í »ç¿ëÇÏ´Â °Í¿¡ ´ëÇÑ Á¤º¸¸¦ Á¦°øÇÑ´Ù. Jens Axboe°¡ ¸¸µç ÀÌ ¹Ù¿î½º ¹öÆÛ ÆÐÄ¡´Â µð¹ÙÀ̽º µå¶óÀ̹öµéÀÌ ³ôÀº ÁÖ¼ÒÀÇ ¹°¸®Àû ¸Þ¸ð¸®¿¡ Á÷Á¢ DMA ¸¦ ¼öÇàÇÒ¼ö ÀÖµµ·Ï Áö¿øÇÔÀ¸·Î½á ¹Ù¿î½º ¹öÆÛÀÇ »ç¿ëÀ» ÇÇÇÏ°Ô ÇØÁØ´Ù.

ÀÌ ¹®¼­´Â ¸®´ª½º Ä¿³Î¿¡¼­ÀÇ ¸Þ¸ð¸® ¾îµå·¹½Ì¿¡ ´ëÇØ °£·«ÇÏ°Ô ¼­¼úÇѵÚ, ¿Ö ¹Ù¿î½º ¹öÆÛ ÆÐÄ¡¸¦ »ç¿ëÇØ¾ß ÇÏ´ÂÁö, ¾î¶»°Ô »ç¿ëÇØ¾ß ÇÏ´ÂÁö¸¦ ¾Ë·ÁÁØ´Ù.

3.1. ¸®´ª½º 2.4 Ä¿³Î¿¡¼­ÀÇ ¸Þ¸ð¸® ¾îµå·¹½Ì

¸®´ª½º 2.4 Ä¿³ÎÀº ´ë»ó ÄÄÇ»ÅÍÀÇ ¹°¸®Àû ¸Þ¸ð¸®ÀÇ ¾çÀ» ÁöÁ¤ÇÒ¼ö ÀÖ´Â Á¦¾î ¿É¼ÇÀÌ ÀÖ´Ù. ±âº»°ªÀ» ±×³É »ç¿ëÇÒ¶§, ÀÌ Á¦¾î ¿É¼ÇÀº Ä¿³ÎÀÇ °¡»ó¸Þ¸ð¸® °ø°£¿¡ Á÷Á¢ ¸ÅÇεɼöÀÖ´Â ¸Þ¸ð¸®ÀÇ ¾çÀ» ÁöÁ¤Çϴ°ÍÀ¸·Î¸¸ ÇÑÁ¤µÇ¾î ÀÖ´Ù. I386 ½Ã½ºÅÛ¿¡¼­ ±âº» ¸ÅÇÎ ¹æ¹ýÀº Ä¿³Î ¸ðµå¿¡¼­ »ç¿ëÇÏ´Â ¸Þ¸ð¸®¸¦ ¹°¸®Àû ¸Þ¸ð¸®¿¡¼­ óÀ½ 1 ±â°¡ ¹ÙÀÌÆ®·Î Á¦ÇÑÇÑ´Ù. ÀÌ Ã³À½ 1 ±â°¡ ¹ÙÀÌÆ®ÀÇ ¸Þ¸ð¸®¸¦ ³·Àº ÁÖ¼ÒÀÇ ¸Þ¸ð¸®(low memory) ¶ó°í ºÎ¸£±âµµ ÇÑ´Ù. µû¶ó¼­ ³ôÀº ÁÖ¼ÒÀÇ ¸Þ¸ð¸®¶õ 1 ±â°¡ ¹ÙÀ̽º ÀÌ»óÀÇ ÁÖ¼Ò¸¦ °¡Áö´Â ¸Þ¸ð¸®¸¦ ÅëĪÇϴ°ÍÀÌ´Ù. º¸ÅëÀÇ °æ¿ì, ÀÌ ³ôÀº ÁÖ¼ÒÀÇ ¸Þ¸ð¸®´Â Ä¿³Î¿¡ ÀÇÇØ Á÷Á¢ÀûÀ¸·Î ¾×¼¼½ºµÇ°Å³ª, ¿µ±¸ÀûÀ¸·Î ¸ÅÇεɼö ¾ø´Ù. ÀÌ ³ôÀº ÁÖ¼Ò ¸Þ¸ð¸®¿¡ ´ëÇÑ Áö¿ø ¿É¼ÇÀº ¸®´ª½º Ä¿³ÎÀ» ¼³Á¤ÇÒ¶§ ÄÓ ¼ö ÀÖ´Ù.


3.2. ¹Ù¿î½º ¹öÆÛÀÇ ¹®Á¦Á¡

ÀÌ ³ôÀº ÁÖ¼ÒÀÇ ¸Þ¸ð¸®¿¡ DMA I/O °¡ ¼öÇàµÉ¶§´Â, ³·Àº ÁÖ¼ÒÀÇ ¸Þ¸ð¸®¿¡ ¹Ù¿î½º ¹öÆÛ°¡ ÇÒ´çµÈ´Ù. µ¥ÀÌÅÍ°¡ µð¹ÙÀ̽º¿Í ³ôÀº ÁÖ¼ÒÀÇ ¸Þ¸ð¸® »çÀ̸¦ ¿òÁ÷À϶§´Â ¸ÕÀú ÀÌ ¹Ù¿î½º ¹öÆÛ¸¦ ÅëÇؼ­ º¹»çµÈ´Ù.

¸¹Àº ¾çÀÇ ¸Þ¸ð¸®¸¦ °¡Áö°í ÀÖ´Â ½Ã½ºÅÛ¿¡¼­ ÁýÁßÀûÀÎ I/O ¸¦ ¼öÇàÇϸé, ÀÌ ¹Ù¿î½º ¹öÆÛ°¡ ³·Àº ÁÖ¼ÒÀÇ ¸Þ¸ð¸®¿¡ ¸¹ÀÌ ÇÊ¿äÇÏ°Ô µÇ¹Ç·Î ¸Þ¸ð¸®ÀÇ ºÎÁ· Çö»óÀ» ÃÊ·¡ÇÑ´Ù. °Ô´Ù°¡ ¹Ù¿î½º ¹öÆÛ¸¦ ÅëÇÑ µ¥ÀÌÅÍÀÇ º¹»ç°¡ ´ë·®À¸·Î ¹ß»ýÇÏ°Ô µÇ¹Ç·Î ¼º´ÉÀº ÀúÇÏÇÏ°Ô ¸¶·ÃÀÌ´Ù.

PCI µð¹ÙÀ̽º´Â º¸Åë 4 ±â°¡¹ÙÀÌÆ®ÀÇ ¹°¸®Àû ¸Þ¸ð¸®¸¦ ¾×¼¼½ºÇÒ ¼ö ÀÖ´Ù. ¹Ù¿î½º ¹öÆÛ°¡ 4 ±â°¡¹ÙÀÌÆ® ÀÌÇÏÀÇ ÁÖ¼Ò¸¦ °®´Â ³ôÀº ÁÖ¼Ò ¸Þ¸ð¸®¿¡ »ç¿ëµÇ´Â °æ¿ì¿¡(¿ªÀÚÁÖ: Áï 1 ±â°¡¹ÙÀÌÆ®ºÎÅÍ 4 ±â°¡¹ÙÀÌÆ® »çÀÌ¿¡ ÀÖ´Â ¸Þ¸ð¸®), PCI µð¹ÙÀ̽º ÀÚü°¡ Á÷Á¢ ¾×¼¼½º ÇÒ¼ö ÀÖ´Â ¸Þ¸ð¸® °ø°£À» ¾×¼¼½ºÇϸ鼭 ¹Ù¿î½º ¹öÆÛ¸¦ °ÅÃļ­ »ç¿ëÇÔÀ¸·Î½á, ½Ã°£°ú ¸Þ¸ð¸®¸¦ ³¶ºñÇÏ°í Àִ°ÍÀÌ´Ù. ¹Ù¿î½º ¹öÆÛ ÆÐÄ¡¸¦ »ç¿ëÇÔÀ¸·Î½á ÀÌ·¯ÇÑ ¹Ù¿î½º ¹öÆÛÀÇ »ç¿ëÀ» ÃÖ¼ÒÈ­Çϰųª ¿ÏÀüÈ÷ ¾ø¾ÖÁÙ ¼ö ÀÖ´Ù.

3.3. ÆÐÄ¡ ´Ù¿î ¹Þ±â

ÀÌ ¹Ù¿î½º ¹öÆÛ ÆÐÄ¡ÀÇ ÃֽŠ¹öÁ¯Àº block-highmem-all-18b.bz2 À̸ç, ´ÙÀ½ ÁÖ¼Ò¿¡ ÀÖ´Â Andrea Arcangeli's -aa ½Ã¸®Áî Ä¿³Î¿¡ ÀÖ´Ù.


3.3.1. ¹Ù¿î½º ¹öÆÛ¸¦ »ç¿ëÇÏÁö ¾Êµµ·Ï ¸®´ª½º Ä¿³Î ¼³Á¤Çϱâ

ÀÌ Àå¿¡¼­´Â ¹Ù¿î½º ¹öÆÛ¸¦ »ç¿ëÇÏÁö ¾Êµµ·Ï ¸®´ª½ºÄ¿³ÎÀ» ¼³Á¤ÇÏ´Â ¹æ¹ýÀ» ´Ù·ç°í ÀÖ´Ù. ¸®´ª½º Ä¿³ÎÀ» ÄÄÆÄÀÏÇÏ´Â ¹æ¹ý¿¡ ´ëÇؼ­´Â ´ÙÀ½ÀÇ ¹®¼­¸¦ ÂüÁ¶Çϵµ·Ï.


´ÙÀ½°ú °°Àº Ä¿³Î ¼³Á¤ ¿É¼ÇÀ» ÄѾ߸¸ ¹Ù¿î½º ¹öÆÛ ÆÐÄ¡¸¦ »ç¿ëÇÒ¼ö ÀÖ°Ô µÈ´Ù.

Development Code : ¼³Á¤ ¸Þ´º¿¡¼­ ³ôÀº ÁÖ¼Ò ¸Þ¸ð¸® »ç¿ë¿É¼ÇÀÌ ³ª¿À°Ô ÇÏ·Á¸é, Code maturity level Ç׸ñ¿¡ °¡¼­ development and/or incomplete code/drivers ¿É¼ÇÀ» ÄÑ¾ß µÈ´Ù.

High Memory Support : 1±â°¡ ¹ÙÀÌÆ® ÀÌ»óÀÇ ¹°¸®Àû ¸Þ¸ð¸® Áö¿øÀ» °¡´ÉÇÏ°Ô Çϱâ À§Çؼ­´Â, Processor type and features Ç׸ñ¿¡ °¡¼­ High Memory Support ¿É¼ÇÀ» ÄÒ´Ù.

High Memory I/O Support : 1±â°¡ ¹ÙÀÌÆ® ÀÌ»óÀÇ ¹°¸®Àû ¸Þ¸ð¸®¿¡ ´ëÇØ DMA I/O¸¦ Áö¿øÇϱâ À§Çؼ­´Â, Processor type and features Ç׸ñ¿¡¼­ HIGHMEM I/O support ¿É¼ÇÀ» "y"·Î ÄÑÁÖ¾î¾ß ÇÑ´Ù. ÀÌ ¼³Á¤ ¿É¼ÇÀº ¹Ù¿î½º ¹öÆÛ ÆÐÄ¡·Î ÀÎÇØ »õ·Î »ý±ä ¿É¼ÇÀÌ´Ù.

3.3.2. ÀÌ¹Ì °íÃÄÁø µå¶óÀ̹öµé

ÀÌ ¹Ù¿î½º ¹öÆÛ ÆÐÄ¡µéÀº ³ôÀº ÁÖ¼Ò ¸Þ¸ð¸®ÀÇ DMA I/O ¸¦ Áö¿øÇϱâ À§ÇÑ Ä¿³ÎÀÇ ÀÎÇÁ¶ó½ºÆ®·°ÃÄ¿Í ÇÔ²² º¯°æµÈ SCSI¿Í IDEÀÇ Áß°£ ·¹º§ µå¶óÀ̹ö¸¦ Æ÷ÇÔÇÑ´Ù. ¶ÇÇÑ À§¿¡¼­ »õ·Ó°Ô Ãß°¡µÈ Áö¿ø »çÇ×À» »ç¿ëÇϵµ·Ï ¼öÁ¤µÈ ¸î¸î µð¹ÙÀ̽º µå¶óÀ̹öµéµµ Æ÷ÇԵǾî ÀÖ´Ù.

¹Ù¿î½º ¹öÆÛ ÆÐÄ¡°¡ Àû¿ëµÇ°í, Ä¿³ÎÀ» ³ôÀº ÁÖ¼ÒÀÇ ¸Þ¸ð¸®¿¡ I/O °¡´ÉÇϵµ·Ï ¼³Á¤Çϸé, ¸¹Àº IDE ¼³Á¤°ú ´ÙÀ½¿¡ ³ª¿­µÈ µð¹ÙÀ̽º µå¶óÀ̹öµéÀº ¹Ù¿î½º ¹öÆÛ¾øÀÌ DMA I/O ¸¦ ¼öÇàÇÒ¼ö ÀÖ°Ô µÈ´Ù.

aic7xxx_drv.o

aic7xxx_old.o

cciss.o

cpqarray.o

megaraid.o

qlogicfc.o

sym53c8xx.o


3.4. ¹Ù¿î½º ¹öÆÛ¸¦ »ç¿ëÇÏÁö ¾Êµµ·Ï µð¹ÙÀ̽º µå¶óÀ̹ö¸¦ ¼öÁ¤ÇÏ´Â ¹æ¹ý

¸¸¾à ´ç½ÅÀÌ »ç¿ëÇÏ°í ÀÖ´Â µð¹ÙÀ̽º µå¶óÀ̹ö°¡ À§ÀÇ ¼öÁ¤µÈ µð¹ÙÀ̽º µå¶óÀ̹ö ¸ñ·Ï¿¡ Æ÷ÇÔµÇÁö ¾Ê¾ÒÁö¸¸, µð¹ÙÀ̽º ÀÚü´Â ³ôÀº ÁÖ¼ÒÀÇ ¸Þ¸ð¸®¿¡ DMA I/O °¡ °¡´ÉÇÏ´Ù°í Çϸé, ´ÙÀ½¿¡ ¼­¼úµÈ ¹æ¹ýÀ¸·Î ´ç½ÅÀÌ Á÷Á¢ µð¹ÙÀ̽º µå¶óÀ̹ö¸¦ ¼öÁ¤Çؼ­ ¹Ù¿î½º ¹öÆÛ ÆÐÄ¡¸¦ Àû¿ëÇϴ°ÍÀ» ½ÃµµÇØ º¼¼öµµ ÀÖ°Ú´Ù. ¸®´ª½º µð¹ÙÀ̽º µå¶óÀ̹ö¿¡ ´ëÇÑ Àü¹ÝÀûÀÎ Á¤º¸°¡ ÇÊ¿äÇÏ´Ù¸é ´ÙÀ½ÀÇ ¸µÅ©¸¦ ÂüÁ¶Çϵµ·Ï.



1. a. SCSI ¾î´ðÅÍÀÇ µå¶óÀ̹ö: Scsi_Host_Template ±¸Á¶Ã¼ÀÇ highmem_io ºñÆ®¸¦ ¼¼Æ®ÇØÁÙ°Í.

b. IDE ¾î´ðÅÍÀÇ µå¶óÀ̹ö: ide_hwif_t ±¸Á¶Ã¼ÀÇ highmem_io ºñÆ®¸¦ ¼¼Æ®ÇØÁÙ°Í.

2. pci_set_dma_mask(struct pci_dev *pdev, dma_addr_t mask) ¸¦ È£ÃâÇؼ­, ±× µð¹ÙÀ̽º°¡ DMA ·Î ¾×¼¼½ºÇÒ¼ö ÀÖ´Â ÁÖ¼Ò¹øÁöÀÇ ¹üÀ§¸¦ ÁöÁ¤ÇØÁÙ°Í.

ÁöÁ¤µÈ ÁÖ¼Ò¹øÁöÀÇ ¹üÀ§¿¡ DMA I/O°¡ Áö¿øµÈ´Ù¸é pci_set_dma_mask()´Â pdev->dma_mask °ªÀ» ¼¼Æ®ÇÏ°í 0À» ¸®ÅÏÇÑ´Ù. SCSI³ª IDE µð¹ÙÀ̽ºÀÇ °æ¿ì, ÀÌ ÁÖ¼Ò¹üÀ§´Â Áß°£ ·¹º§ µå¶óÀ̹ö¿¡¼­ blk_queue_bounce_limit(request_queue_t *q, u64 dma_addr) ÇÔ¼ö·Î Àü´ÞµÇ¼­, ÀÌ µð¹ÙÀ̽º°¡ Á÷Á¢ ¾×¼¼½ºÇÒ¼ö ÀÖ´Â ¹°¸®Àû ¸Þ¸ð¸®¸¦ ¾×¼¼½ºÇÏ´Â °æ¿ì¿¡ ¹Ù¿î½º ¹öÆÛ°¡ »ý¼ºµÇÁö ¾Êµµ·Ï ÇÑ´Ù. SCSI³ª IDE µå¶óÀ̹ö°¡ ¾Æ´Ñ °æ¿ì¿¡´Â blk_queue_bounce_limit() ÇÔ¼ö¸¦ Á÷Á¢ È£ÃâÇØÁÖ¾î¾ß ÇÑ´Ù.

3. pci_map_single(dev, address, size, direction) ÇÔ¼ö ´ë½Å¿¡ pci_map_page(dev, page, offset, size, direction) ÇÔ¼ö¸¦ »ç¿ëÇؼ­ µð¹ÙÀ̽º°¡ Á÷Á¢ ¾×¼¼½ºÇÒ ¼ö ÀÖ´Â ¸Þ¸ð¸® ¿µ¿ªÀ» ¸ÊÇØÁØ´Ù. pci_map_page() ÇÔ¼ö´Â ³ôÀº ÁÖ¼ÒÀÇ ¸Þ¸ð¸®¿Í ³·Àº ÁÖ¼ÒÀÇ ¸Þ¸ð¸®¸¦ ¸ðµÎ Áö¿øÇØÁØ´Ù.

pci_map_single() ÇÔ¼ö¿¡¼­ÀÇ ÁÖ¼Ò ÀÎÀÚ´Â pci_map_page()ÀÇpage ¿Í offset ÆĶó¸ÞÅÍ·Î º¯È¯µÉ¼ö ÀÖ´Ù. virt_to_page() ¸ÅÅ©·Î¸¦ »ç¿ëÇؼ­ ÁÖ¼Ò¸¦ page¿Í offsetÀ¸·Î º¯È¯Çؼ­ »ç¿ëÇϵµ·Ï. virt_to_page() ¸ÅÅ©·Î¸¦ »ç¿ëÇÏ·Á¸é pci.h ¸¦ include ÇؾßÇÑ´Ù. ¿¹·Î:

void *address;
 
struct page *page;
 
unsigned long offset;
 
page = virt_to_page(address);
 
offset = (unsigned long) address & ~PAGE_MASK;
DMA I/O°¡ ¿Ï·áµÇ¸é pci_unmap_page() ÇÔ¼ö¸¦ È£ÃâÇؼ­ pci_map_page() ÇÔ¼ö·Î »ý¼ºÇÑ ¸ÅÇÎÀ» Á¦°ÅÇØ¾ß ÇÑ´Ù.

  • pci_map_single() ÇÔ¼ö´Â virt_to_bus() ¸¦ »ç¿ëÇؼ­ ±¸ÇöµÇ¾ú´Âµ¥, virt_to_bus()´Â ³·Àº ÁÖ¼ÒÀÇ ¸Þ¸ð¸®¸¸À» ´Ù·é´Ù. ³ôÀºÁÖ¼ÒÀÇ ¸Þ¸ð¸®¸¦ Áö¿øÇÏ´Â µå¶óÀ̹ö´Â ´õ ÀÌ»ó virt_to_bus() ³ª bus_to_virt()¸¦ »ç¿ëÇÏ¸é ¾ÈµÈ´Ù.


4. µå¶óÀ̹ö°¡ pci_map_sg() ¸¦ ½á¼­ scatter-gather DMA ¸¦ ¸ÅÇÎÇÏ°í ÀÖ¾ú´Ù¸é, scatterlist ±¸Á¶Ã¼ÀÇ address Çʵ带 »ç¿ëÇÏ´ø °ÍÀ» page¿Í offset Çʵ带 »ç¿ëÇϵµ·Ï °íÃÄ¾ß µÈ´Ù.ÁÖ¼Ò¸¦ page ¿Í offsetÀ¸·Î º¯°æÇÏ´Â ¹ýÀº À§ÀÇ ÀÖ´Â ´Ü°è 3 À» ÂüÁ¶Çϵµ·Ï.


  • µå¶óÀ̹ö°¡ ÀÌ¹Ì PCI DMA API ¸¦ »ç¿ëÇÏ°í ÀÖ¾ú´Ù¸é, °è¼Ó pci_map_page()³ª pci_map_sg()¸¦ »ç¿ëÇصµ ÁÁ´Ù. scatterlist ±¸Á¶Ã¼ÀÇ address Çʵå´Â »ç¿ëÇÏÁö ¸»°Í.


4. Raw I/O °¡º¯ Å©±â ÃÖÀûÈ­ ÆÐÄ¡

ÀÌÀåÀº ¸®´ª½º 2.4 Ä¿³ÎÀ» À§ÇÑBadari Pulavarty ÀÇ Raw I/O °¡º¯ Å©±â ÃÖÀûÈ­ ÆÐÄ¡¿¡ ´ëÇؼ­ ¼³¸íÇÑ´Ù. ÀÌ ÆÐÄ¡´Â RAW VARY ȤÀº PAGESIZE_io ÆÐÄ¡¶ó´Â À̸§À¸·Îµµ ¾Ë·ÁÁ® ÀÖ´Ù.

ÀÌ Raw I/O °¡º¯ Å©±â ÃÖÀûÈ­ ÆÐÄ¡´Â raw I/O ¿¡ »ç¿ëµÇ´Â ºí·ÏÀÇ Å©±â¸¦ hardsect_size(ÀϹÝÀûÀ¸·Î 512 ¹ÙÀÌÆ®)¿¡¼­ 4 KByte·Î ¹Ù²Ù¾îÁØ´Ù. ÀÌ ÆÐÄ¡´Â raw I/O ¼öÇà¿¡ ÇÊ¿äÇÑ ¹öÆÛ ÇìµåÀÇ ¼ö¸¦ ÁÙ¿©ÁÜÀ¸·Î½á I/O throughput°ú CPU È°¿ëµµ¸¦ °³¼±ÇØÁØ´Ù.

4.1. ÆÐÄ¡´Ù¿î¹Þ±â

´ÙÀ½ Àå¼Ò¿¡¼­ ÀÌ ÆÐÄ¡¸¦ ´Ù¿î¹ÞÀ»¼ö ÀÖ´Ù.

Andrea Arcangeli °¡ ¿Ã·Á³õÀº Àå¼Ò


ÆÄÀÏÀÇ À̸§Àº10_rawio-vary-io-1ÀÌ´Ù.

Alan Cox ´Â ÀÌ ÆÐÄ¡¸¦2.4.18pre9-ac2 Ä¿³Î ÆÐÄ¡¿¡ Æ÷ÇÔ½ÃÄ×´Ù. ÀÌ°ÍÀ» ¹ÞÀ¸·Á¸é,

http://www.kernel.org/pub/linux/kernel/people/alan/linux-2.4/2.4.18/


ÀÌ ÆÐÄ¡´Â SourceForge ¿¡¼­µµ ¹ÞÀ»¼ö Àִµ¥,


ÃֽŠ¹öÁ¯ÀºPAGESIZE_io-2.4.17.patch ÀÌ´Ù.

4.2. Raw I/O °¡º¯ Å©±â ÃÖÀûÈ­ ÆÐÄ¡¸¦ »ç¿ëÇϵµ·Ï µå¶óÀ̹ö¸¦ ¼öÁ¤Çϴ¹ý

ÀÌ ÆÐÄ¡ÀÇ ÀÌÀü ¹öÁ¯¿¡¼­´Â ¸ðµç µå¶óÀ̹ö°¡ ÀÌ ÆÐÄ¡¸¦ »ç¿ëÇϵµ·Ï º¯°æÇÏ¿´´Ù. ÇÏÁö¸¸ 2.4.17 ÀÌÈÄÀÇ ¹öÁ¯¿¡¼­´Â Adaptec, Qlogic ISP1020, IBM ServerRAID µå¶óÀ̹ö¿¡¸¸ »ç¿ëµÇµµ·Ï ¼öÁ¤µÇ¾ú´Ù. 2.4.17 ÀÌÈÄ ¹öÁ¯ÀÇ ÆÐÄ¡¸¦ ¼³Ä¡ÇÑ ÈÄ¿¡, À§ÀÇ µå¶óÀ̹ö¸¦ Á¦¿ÜÇÑ µå¶óÀ̹ö¿¡¼­ ÀÌ ÆÐÄ¡ÀÇ ³»¿ëÀ» Àû¿ëÇÏ·Á¸é, Scsi_Host_Template ±¸Á¶Ã¼ÀÇ can_do_varyio ºñÆ®¸¦ ¼¼Æ®Çϵµ·Ï ¼öÁ¤µÇ¾î¾ß¸¸ ÇÑ´Ù.


  • Raw I/O °¡º¯ Å©±â ÃÖÀûÈ­ ÆÐÄ¡¸¦ »ç¿ëÇϵµ·Ï ¼öÁ¤µÈ µå¶óÀ̹ö´Â ¹Ýµå½Ã ÇÑ I/O request¿¡¼­ °¡º¯Å©±âÀÇ(b_size) ¹öÆÛÇìµå¸¦ Áö¿øÇϵµ·Ï ¼öÁ¤µÇ¾î¾ß ÇÑ´Ù. ÀÌ´Â µ¥ÀÌÅÍ ¹öÆÛ°¡ 4K °æ°è¿¡ ³õ¿©ÀÖÁö ¾ÊÀ¸¸é hardsect_size °¡ »ç¿ëµÇ±â ¶§¹®ÀÌ´Ù.


¸®´ª½º µð¹ÙÀ̽º µå¶óÀ̹ö¸¦ ºôµåÇϴµ¥ ÇÊ¿äÇÑ Ãß°¡ÀûÀÎ Á¤º¸°¡ ÇÊ¿äÇÏ´Ù¸é ´ÙÀ½ÀÇ ¸µÅ©¸¦ ÂüÁ¶Çϵµ·Ï.



5. I/O Request Lock ÆÐÄ¡

ÀÌ Àå¿¡¼­´ÂI/O Request Lock ÆÐÄ¡¿¡ ´ëÇÑ Á¤º¸¸¦ Á¦°øÇÑ´Ù. ÀÌ ÆÐÄ¡´Â Johnathan Lahr °¡ ÀÛ¼ºÇÑ °ÍÀ¸·Î, SCSI º´·Ä Å¥À× ÆÐÄ¡(sior1)¶ó´Â À̸§À¸·Îµµ ¾Ë·ÁÁ® ÀÖ´Ù.

I/O Request Lock ÆÐÄ¡´Â º´·Ä I/O Å¥À×À» Á¦°øÇÔÀ¸·Î½á, ¸®´ª½º 2.4 Ä¿³ÎÀ» ¾²´Â SMP ȯ°æ¿¡¼­ÀÇ SCSI I/OÀÇ ¼º´ÉÀ» Çâ»ó½ÃŲ´Ù. ¸ÖƼ ÇÁ·Î¼¼¼­ ȯ°æ¿¡¼­ ¿©·¯°³ÀÇ ÇÁ·Î¼¼¼­°¡ µ¿½Ã¿¡ ¿©·¯°³ÀÇ ºí·Ïµð¹ÙÀ̽ºµéÀ» ±¸µ¿ÇÒ¼ö ÀÖ°Ô ÇØÁÜÀ¸·Î½á I/O ¼º´É°ú CPU È°¿ëÀ²À» ´ëÆøÀ¸·Î °³¼±ÇÒ ¼ö ÀÖ´Ù.

ÀÌ ÆÐÄ¡°¡ Àû¿ëµÇ±âÀü¿¡´Â, ºí·Ï I/O request´Â Àü¿ª spinlockÀ» Àâ°í ÀÖ´Â »óÅ¿¡¼­ Çϳª¾¿ Çϳª¾¿ Â÷·Ê·Î Å¥¿¡ Ãß°¡µÇ¾îÁ³´Ù. ÀÌ ÆÐÄ¡°¡ Àû¿ëµÇ¸é, SCSI I/O request´Â ÀÌ I/O request¿¡ ÇØ´çÇϴ ť¿¡ °ü·ÃÇÑ lock ¸¸À» Àâ°í ÀÖ´Â »óÅ¿¡¼­ Å¥¿¡ Ãß°¡µÉ¼ö ÀÖ´Ù. µû¶ó¼­ ¼­·Î ´Ù¸¥ µð¹ÙÀ̽º¿¡ ÇØ´çÇÏ´Â I/O requestµéÀº µ¿½Ã¿¡ Å¥¿¡ Ãß°¡µÉ¼ö ÀÖ´Ù. ¹°·Ð °°Àº µð¹ÙÀ̽º¿¡ ÇØ´çÇÏ´Â I/O requestµéÀº ¼øÂ÷ÀûÀ¸·Î Å¥¿¡ Ãß°¡µÈ´Ù.

5.1. ÆÐÄ¡ ´Ù¿î ¹Þ±â

ÀÌ ÆÐÄ¡´Â SourceForge ¿¡¼­ ¹ÞÀ»¼ö ÀÖ´Ù.


ÃֽŠ¹öÁ¯Àº sior1-v1.2416 ÀÌ´Ù. ¶ÇÇÑ ÀÌ ÆÐÄ¡¸¦ Àû¿ëÇÑ °¢ µå¶óÀ̹öµéµµ SourceForge¿¡¼­ ¹ÞÀ»¼ö ÀÖ´Ù. Emulex SCSI/FC µå¶óÀ̹ö¿ë ÆÐÄ¡´Â lpfc_sior1-v0.249 À̸ç Adaptec SCSI µå¶óÀ̹ö¿ë ÆÐÄ¡´Â aic_sior1-v0.249ÀÌ´Ù.




5.2. I/O Request Lock ÆÐÄ¡¸¦ »ç¿ëÇϵµ·Ï µå¶óÀ̹ö¸¦ ¼öÁ¤ÇÏ´Â ¹æ¹ý

ÀÌ I/O Request Lock ÆÐÄ¡´Â º´·Ä I/O Å¥À×ÀÌ Áö¿øµÇ´Â SCSI Áß°£ ·¹ÀÌ¾î µå¶óÀ̹ö¸¦ ¼³Ä¡ÇÑ´Ù. ÀÌ º´·Ä I/O Å¥À×Àº °¢°¢ÀÇ SCSI ¾î´ðÅÍ µð¹ÙÀ̽º µå¶óÀ̹ö¸¶´Ù È°¼ºÈ­µÇ¾î¾ß ÇÑ´Ù. µå¶óÀ̹ö¿¡¼­ À̸¦ È°¼ºÈ­ ÇÏ·Á¸é, µå¶óÀ̹ö°¡ µî·ÏµÉ¶§ Scsi_Host_Template ±¸Á¶Ã¼¿¡¼­ concurrent_queue Çʵ带 ¼¼Æ®ÇØÁÖ¸é µÈ´Ù.

  • º´·Ä Å¥À×À» È°¼ºÈ­ÇÏ´Â µå¶óÀ̹öµéÀº request_queue ÀÇ ¾×¼¼½º°¡ request_queue.queue_lock¿¡ ÀÇÇؼ­ º¸È£µÇµµ·Ï ±¸ÇöµÇ¾î¾ß ÇÑ´Ù.


¸®´ª½º µð¹ÙÀ̽º µå¶óÀ̹ö¸¦ ºôµåÇϴµ¥ ÇÊ¿äÇÑ Ãß°¡ÀûÀÎ Á¤º¸°¡ ÇÊ¿äÇÏ´Ù¸é ´ÙÀ½ÀÇ ¸µÅ©¸¦ ÂüÁ¶Çϵµ·Ï.



6. Âü°í¹®Çå

´ÙÀ½¿¡ ¿­°ÅÇÏ´Â À¥»çÀÌÆ®µéÀº µð¹ÙÀ̽º µå¶óÀ̹ö¸¦ º¯°æÇϰųª ¸®´ª½º Ä¿³ÎÀ» ¼³Á¤ÇÏ´Â °Í¿¡ ´ëÇÑ Ãß°¡ÀûÀÎ Á¤º¸¸¦ Á¦°øÇÑ´Ù.


ID
Password
Join
Stop searching forever. Happiness is just next to you.


sponsored by andamiro
sponsored by cdnetworks
sponsored by HP

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2008-12-12 13:25:44
Processing time 0.0100 sec