Linux ÐéÄ⻯ºÍ PCI ͸´«¼¼Êõ
¼¶
±ð£º Öм¶
M.
Tim Jones
, ×ÔÓÉ×÷¼Ò
2009 Äê 11 ÔÂ 19 ÈÕ
´¦ÀíÆ÷ÒѾÑݱä
ΪÕë¶ÔÐéÄâ»·¾³Ìá¸ßÐÔÄÜ£¬µ« I/O ·½Ãæ·¢ÉúÁËʲô±ä»¯ÄØ£¿Á˽âÒ»ÖÖÃûΪÉ豸£¨»ò PCI£©Í¸´«£¨passthrough£©µÄ I/O
ÐÔÄÜÔöÇ¿¼¼Êõ£¬ÕâÖÖ´´Ð¼¼Êõͨ¹ýʹÓÃÀ´×Ô Intel® (VT-d) »ò AMD (IOMMU) µÄÓ²¼þÖ§³Ö¸Ä½ø PCI É豸µÄÐÔÄÜ¡£
¼ÓÈë My developerWorks ÉϵÄÂÌɫС×é
ÔÚ My developerWorks É쵀 GReen IT
Report ¿Õ¼ä
ºÍ ÂÌÉ«¼ÆËãС×é
ÉÏÌÖÂÛ¹ØÓÚÄÜÔ´¡¢Ð§Âʺͻ·¾³µÄÖ÷Ìâ²¢¹²Ïí×ÊÔ´¡£
ƽ̨ÐéÄ⻯ÊÇÔÚÁ½¸ö»ò¶à¸ö²Ù×÷ϵͳ֮¼ä¹²ÏíÒ»¸öƽ̨£¬ÒÔ±ã¸üÓÐЧµØÀûÓÃ×ÊÔ´¡£µ«Æ½Ì¨
²¢²»Ö»ÊÇÒâζ×ÅÒ»¸öÒÔÉϵĴ¦ÀíÆ÷£¬Ëü»¹°üº¬×é³Éƽ̨µÄÆäËûÖØÒªÔªËØ£¬±ÈÈç´æ´¢Æ÷¡¢ÍøÂçºÍÆäËûÓ²¼þ×ÊÔ´¡£Ä³Ð©Ó²¼þ×ÊÔ´¿ÉÒÔÇáËÉÐéÄ⻯£¬±ÈÈç´¦ÀíÆ÷ºÍ´æ´¢Æ÷£»
¶øÁíһЩӲ¼þ×ÊÔ´Ôò²»È»£¬±ÈÈçÊÓƵÊÊÅäÆ÷ºÍ´®¿Ú¡£µ±¹²Ïí²»¿ÉÄÜ»òûÓÃʱ£¬Peripheral Component Interconnect
(PCI) ͸´«¼¼ÊõÌṩÓÐЧʹÓÃÕâЩ×ÊÔ´µÄ·½·¨¡£±¾ÎÄ̽Ë÷͸´«£¨passthrough£©
¼¼ÊõµÄ¸ÅÄî¼°ÆäÔÚ¹ÜÀí³ÌÐò
£¨hypervisor£©ÖеÄʵÏÖ£¬Ïêϸ½éÉÜÖ§³ÖÕâ¸ö×îд´Ð¼¼ÊõµÄ¹ÜÀí³ÌÐò¡£
ƽ̨É豸ģÄâ
ÔÚ̽Ë÷͸´«¼¼Êõ֮ǰ£¬ÈÃÎÒÃÇÏÈÌÖÂÛÒ»ÏÂÈç½ñÉ豸ģÄâÔÚÁ½¸ö¹ÜÀí³ÌÐò¼Ü¹¹ÖÐÊÇÈçºÎ¹¤×÷µÄ¡£µÚÒ»¸ö¼Ü¹¹½«É豸ģÄâÕûºÏµ½¹ÜÀí³ÌÐòÖУ¬¶øµÚ¶þ¸ö¼Ü¹¹
½«É豸ģÄâÍƵ½¹ÜÀí³ÌÐòÖ®ÍâµÄÒ»¸öÓ¦ÓóÌÐòÖС£
¹ÜÀí³ÌÐòÖеÄÉ豸ģÄâ
ÊÇÔÚ VMware
¹¤×÷Õ¾²úÆ·£¨Ò»¸ö»ùÓÚ²Ù×÷ϵͳµÄ¹ÜÀí³ÌÐò£©ÖÐʵÏÖµÄÒ»¸ö¹«¹²·½·¨¡£ÔÚÕâ¸öÄ£ÐÍÖУ¬¹ÜÀí³ÌÐò°üº¬¸÷ÖÖ¿Í»§²Ù×÷ϵͳÄܹ»¹²ÏíµÄ¹«¹²É豸£¬ÈçÐéÄâ´ÅÅÌ¡¢ÐéÄâÍøÂç
ÊÊÅäÆ÷ºÍÆäËû±ØÐèµÄƽ̨ԪËØ¡£Õâ¸öÌض¨Ä£ÐÍÈçͼ 1 Ëùʾ¡£
ͼ 1. »ùÓÚ¹ÜÀí³ÌÐòµÄÉ豸ģÄâ
µÚ¶þ¸ö¼Ü¹¹³ÆΪÓû§¿Õ¼äÉ豸ģÄâ
£¨¼ûͼ
2£©¡£¹ËÃû˼Ò壬ÕâÖÖÉ豸ģÄâÊÇÔÚÓû§¿Õ¼äÖÐʵÏֵģ¬¶ø²»Ç¶Èëµ½¹ÜÀí³ÌÐòÖС£QEMU£¨²»½öÌṩÉ豸ģÄ⣬»¹Ìṩһ¸ö¹ÜÀí³ÌÐò£©ÌṩÉ豸ģÄ⣬ÓÃÓÚ´óÁ¿¶À
Á¢¹ÜÀí³ÌÐò£¬Èç Kernel-based Virtual Machine (KVM) ºÍ VirtualBox
µÈ¡£Õâ¸öÄ£Ð͸ü¾ßÓÅÊÆ£¬ÒòΪÉ豸ģÄâ¶ÀÁ¢ÓÚ¹ÜÀí³ÌÐò£¬Òò¶ø¿ÉÒÔÔÚ¶à¸ö¹ÜÀí³ÌÐòÖ®¼ä¹²Ïí¡£ÁíÍ⣬Õâ¸öÄ£ÐÍ»¹Ö§³ÖÈÎÒâÉ豸ģÄ⣬ÎÞÐë¹ÜÀí³ÌÐò£¨ÒÔÌØȨ״̬ÔË
ÐУ©¸ºµ£Õâ¸ö¹¦ÄÜ¡£
ͼ 2. Óû§¿Õ¼äÉ豸ģÄâ
½«É豸ģÄâ´Ó¹ÜÀí³ÌÐòÍÆÏòÓû§¿Õ¼äÓÐһЩÃ÷ÏÔµÄÓÅÊÆ£¬×î´óµÄÓÅÊÆÉæ¼°ËùνµÄ¿ÉÐżÆËã»ù´¡£
Ïà¹ØÎĵµ£º
ÀýÒ»£º·¢ËÍSignaling Packet£º
Signaling CommandÊÇ2¸öBluetoothʵÌåÖ®¼äµÄL2CAP²ãÃüÁî´«Êä¡£ËùÒÔµÃSignaling CommandʹÓÃCID 0x0001.
¶à¸öCommand¿ÉÒÔÔÚÒ»¸öC-frame£¨control frame£©Öз¢ËÍ¡£
Èç¹ûÒªÖ±½Ó·¢ËÍSignaling Command.ÐèÒª½¨Á¢SOCK_RAWÀàÐ͵ÄL2CAPÁ¬½ÓSocket¡£ÕâÑù²ÅÓлú»á×Ô¼ºÌî³äCommand Code£¬Identi ......
ÍøÂçÎļþϵͳ£¨NFS£¬Network File System£©ÊÇÒ»ÖÖ½«Ô¶³ÌÖ÷»úÉϵķÖÇø£¨Ä¿Â¼£©¾ÍøÂç¹ÒÔص½±¾µØϵͳµÄÒ»ÖÖ»úÖÆ£¬Í¨¹ý¶ÔÍøÂçÎļþϵͳµÄÖ§³Ö£¬Óû§¿ÉÒÔÔÚ±¾µØϵͳÉÏÏñ²Ù×÷±¾µØ·ÖÇøÒ»ÑùÀ´¶ÔÔ¶³ÌÖ÷»úµÄ¹²Ïí·ÖÇø£¨Ä¿Â¼£©½øÐвÙ×÷¡£
ÔÚǶÈëʽLinux µÄ¿ª·¢¹ý³ÌÖУ¬¿ª·¢ÕßÐèÒªÔÚLinux ·þÎñÆ÷ÉϽøÐÐËùÓеÄÈí¼þ¿ª·¢£¬½»²æ±àÒëºó£¬Í¨Ó ......
ËùÓÐÏ̶߳¼ÓÐÒ»¸öÏ̺߳ţ¬Ò²¾ÍÊÇ
Thread ID
¡£ÆäÀàÐÍΪ
pthread_t
¡£Í¨¹ýµ÷ÓÃ
pthread_self()
º¯Êý¿ÉÒÔ»ñµÃ×ÔÉíµÄÏ̺߳š£
ÏÂÃæ˵һÏÂÈçºÎ´´½¨Ò»¸öÏ̡߳£
ͨ¹ý´´½¨Ị̈߳¬Ï߳̽«»áÖ´ÐÐÒ»¸öÏ̺߳¯Êý£¬¸ÃÏ̸߳ñʽ±ØÐë°´ÕÕÏÂÃæÀ´ÉùÃ÷£º
void * Thread_Function(void *)
´´½¨Ï ......
system-config-printer ͼÐνçÃæÉèÖôòÓ¡»ú
BSD(FreeBSD)/System V
lpr/lp ´òÓ¡ÎļþÃû ´òÓ¡
lpr -P´òÓ¡»úÃû ´òÓ¡ÎļþÃû
lp &nb ......