ÿÿ€ €€‚Write$£€ÉDECwrite V3.1 <39>¡€ €0€Ô Write$DD_PGR¥€ Šï5`0€Ô Write$DD_PGF0€Ô Write$DD_2S€0€Ô Write$DD_2LF€0€Ô Write$DD_2HOF€0€Ô Write$DD_2FOF€0€Ô Write$DF_PF€0€Ô Write$DF_RM0€Ô Write$DF_CB0€Ô Write$D_TYPE¢€Égenrl0€Ô Write$D_SG_RT0€Ô Write$C_FR¢€É Fixed Frame0€Ô Write$C_TA¢€ÉTable0€Ô Write$C_L¢€ÉBulleted List0€Ô Write$C_FN¢€É Footnote0€Ô Write$C_PG¢€ÉPage-L0€Ô Write$C_M1¢€ÉPage0€Ô Write$C_P¢€É Paragraph0€Ô Write$C_TR¢€ÉTrim Textblock0€Ô Write$C_TTL¢€É Table Title0€Ô Write$C_TOC¢€ÉTOC0€ÔW$HT0€ÔW$HU0€ÔW$HV0€ÔW$HW„19970127131433¥€Ô$STSÔ$LO1Ô$FMTD¦€0€€+ ‡s¡€ÉDDIF‚%cda$library_en_us:wr_genrl.doc_styleƒ$RMS„§€€en_US€en_GB€fr_FR€fr_CA€de_DE€de_CH€sv_SE€es_ES€it_IT€da_DK€nl_NL€pt_PT€no_NO€fi_FI€ja_JP€zh_CN€zh_TW€ko_KR€fr_CH€it_CH€fr_BE€iw_IL en_Medical en_Businessˆ¢€b€£€‚$T¤€0€€$PG¡€0€€$PG.ru¡€£€€0€€$PG.rl¡€£€€0€€$PG.au¡€£€€0€€$PG.al¡€£€€‡©€€ ¡€É centipoints«€ €¡€"€«€0€ €€€¬€0€€f9-ADOBE-Helvetica-Medium-R-Normal--*-120-*-*-P-*-ISO8859-10€€l9-ADOBE-Helvetica-Medium-R-Normal--*-140-*-*-P-*-ISO8859-10€€i9-ADOBE-Helvetica-Medium-R-Normal--*-180-*-*-P-*-ISO8859-10€€g7-ADOBE-Helvetica-Bold-R-Normal--*-120-*-*-P-*-ISO8859-10€€n9-ADOBE-Helvetica-Medium-O-Normal--*-120-*-*-P-*-ISO8859-10€€k7-ADOBE-Helvetica-Bold-O-Normal--*-120-*-*-P-*-ISO8859-10€€m7-ADOBE-Helvetica-Bold-O-Normal--*-140-*-*-P-*-ISO8859-10€€j7-ADOBE-Helvetica-Bold-O-Normal--*-180-*-*-P-*-ISO8859-10€€h5-ADOBE-Times-Medium-R-Normal--*-100-*-*-P-*-ISO8859-10€€e5-ADOBE-Times-Medium-R-Normal--*-120-*-*-P-*-ISO8859-10€€o3-ADOBE-Times-Bold-R-Normal--*-120-*-*-P-*-ISO8859-1­€0€€e¡€ €€‚¤€0€ÔWrite$ColorName¢€ÉBlack0€€f¡€ €€@@‚@¤€0€ÔWrite$ColorName¢€ÉWhite0€€g¡€ €€@þ‚¤€0€ÔWrite$ColorName¢€ÉRed0€€h¡€ €€@þ‚¤€0€ÔWrite$ColorName¢€ÉGreen0€€i¡€ €€‚@þ¤€0€ÔWrite$ColorName¢€ÉBlue0€€j¡€ €€@þ@þ‚¤€0€ÔWrite$ColorName¢€ÉYellow0€€k¡€ €€@þ‚@þ¤€0€ÔWrite$ColorName¢€ÉCyan0€€l¡€ €€@þ‚@þ¤€0€ÔWrite$ColorName¢€ÉMagenta0€€m¢€€¡€0€€n¢€€¡€0€€o¢€€¡€0€€p¢€€¡€°€0€€Date¢€C 0€€ Footer Text¢€C 0€€ Header Text¢€C ±€0€€Flow¢€¡€Ô$DB‚$T£€Ô$FLOW¤€0€€ $TTL.tab.1¡€€ $TTL.tab.10€€$FN¡€€$FN0€€ $TTL.fig.1¡€€ $TTL.fig.10€€S1¢€£€Ô$S.10€€S2¢€£€Ô$S.20€€S3¢€£€Ô$S.30€€Trim Textblock¢€£€Ô$G³€ €€dƒ„…‡‰µ€%€ €€,¡€€,¢€€,£€€,£€0€Ô Write$TR_DH0€Ô Write$TR_TYP0€Ô Write$TR_B€0€Ô Write$TR_F€0€Ô Write$TR_VA€0€Ô Write$TR_AC€0€€ Fixed Frame¢€‚$2D£€Ô$F­€0€€q¢€€¡€ee³€ €€dƒ„…‡‰q·€€¡€ € €€¡€€¡€ €€¡€€£€ €€€€€€€€€¤€ €€¡€€¤€€¡€0€€Page-L¡€0€Ô Write$PG_FMT¢€É#0€ÔWrite$PG_PTFMT¢€É.#0€Ô Write$PG_CB¥€èd0€Ô Write$PG_TRT¢€É Textblock0€Ô Write$PG_NUMÿ0€ÔWrite$PG_POINT0€Ô Write$PG_NSTY0€Ô Write$PG_PSTY0€Ô Write$PG_MG¥€      0€Ô Write$PG_FN¥€È0€Ô Write$PG_FIT€£€€Page-L¡€ € €€ï¡€ €€5`‚¤€b€£€‚$2D£€Ô$F³€ €€„…‡‰·€€¡€ € €€¡€€¡€ €€5`¡€€ï£€ €€€ï€€€5`€€5`€ï¤€ €€¡€€b€‚ Textblock£€ €0€Ô Write$TR_DH0€Ô Write$TR_PGF¢€É Paragraph0€Ô Write$TR_TYP£€Ô$G³€ €€dµ€%€ €€ ¡€€¢€€ £€€ #€$€€ GLY$Page-L.1¡€ € €€ ¡€€ ¡€ €€@¡€€Òðƒ$¤€Ô$DBÔ$RL… GLY$Page-L.1Ab€‚ Textblock£€ €0€Ô Write$TR_DH0€Ô Write$TR_PGF¢€É Paragraph0€Ô Write$TR_TYP£€Ô$GÔ $GRP.MWXBKBJG³€ €€dµ€%€ €€ ¡€€¢€€ £€€ #€$€€GLY$Page-L.hdr.1¡€ € €€¡€€×®¡€ €€ß–¡€€äVƒ ¤€Ô$HDRÔ$RL‡Ab€‚ Textblock£€ €0€Ô Write$TR_DH0€Ô Write$TR_PGF¢€É Paragraph0€Ô Write$TR_TYP£€Ô$GÔ $GRP.MMBPKBJG³€ €€dµ€%€ €€ ¡€€¢€€ £€€ #€$€€GLY$Page-L.ftr.1¡€ € €€㹡€€Ï¡€ €€@¡€€ƒ ¤€Ô$FTRÔ$RL‡Ab€‚ Textblock£€ €0€Ô Write$TR_DH0€Ô Write$TR_PGF¢€É Paragraph0€Ô Write$TR_TYP£€Ô$GÔ $GRP.MWXBKBJG³€ €€dµ€%€ €€ ¡€€ ¢€€ £€€ #€$€€GLY$Page-L.trim.1¡€ € €€áy¡€€×°¡€ €€÷¡€€äVƒ ¤€Ô$DBÔ$RL‡Ab€‚ Textblock£€ €0€Ô Write$TR_DH0€Ô Write$TR_PGF¢€É Paragraph0€Ô Write$TR_TYP£€Ô$GÔ $GRP.MMBPKBJG³€ €€dµ€%€ €€ ¡€€¢€€ £€€ #€$€€GLY$Page-L.trim.2¡€ € €€ ¡€€Ï¡€ €€âò¡€€ƒ ¤€Ô$DBÔ$RL‡Ab€‚Flow£€‚$T«€ €¡€"€ GLY$Page-L.1Ab€‚Flow£€¡€Ô$HDR‚$T«€ €¡€"€GLY$Page-L.hdr.1b€‚ Paragraph£€ €£€Ô$P«€ €¡€"€o€ Header TextIAAb€‚Flow£€¡€Ô$FTR‚$T«€ €¡€"€GLY$Page-L.ftr.1b€‚ Paragraph£€ €£€Ô$P«€ € €!€€¡€"€b€£€¥€‚$PGAIAAb€‚Flow£€‚$T«€ €¡€"€GLY$Page-L.trim.1b€‚ Paragraph£€ €£€Ô$P«€ € €!€€¡€"€o€DateIAAb€‚Flow£€‚$T«€ €¡€"€GLY$Page-L.trim.2b€‚ Paragraph£€ €£€Ô$P«€ €¡€"€o€ Footer TextIAAA¥€ € €€0¡€0€Ô Write$PG_FMT¢€É#0€ÔWrite$PG_PTFMT¢€É.#0€Ô Write$PG_CB¥€èd0€Ô Write$PG_TRT¢€É Textblock0€Ô Write$PG_NUM0€ÔWrite$PG_POINT0€Ô Write$PG_NSTY0€Ô Write$PG_PSTY0€Ô Write$PG_MG¥€      0€Ô Write$PG_FN¥€È0€Ô Write$PG_FR€£€€0¡€ € €€ï¡€ €€5`ƒPage¤€b€£€‚$2D£€Ô$F³€ €€„…‡‰·€€¡€ € €€¡€€¡€ €€ï¡€€5`£€ €€€5`€€€ï€€ï€5`¤€ €€¡€€b€‚ Textblock£€ €0€Ô Write$TR_DH0€Ô Write$TR_PGF¢€É Paragraph0€Ô Write$TR_TYP£€Ô$GÔ $GRP.MTJWKBJG³€ €€dµ€%€ €€ ¡€€ ¢€€ £€€ #€$€€GLY$Page.hdr.1-1¡€ € €€ ¡€€.¡€ €€Œˆ¡€€*Ôƒ ¤€Ô$HDRÔ$RL‡Ab€‚ Textblock£€ €0€Ô Write$TR_DH0€Ô Write$TR_PGF¢€É Paragraph0€Ô Write$TR_TYP£€Ô$GÔ $GRP.MXBWKBJG³€ €€dµ€%€ €€ ¡€€ ¢€€ £€€ #€$€€GLY$Page.ftr.1-1¡€ € €€©N¡€€¡€ €€Òð¡€€”ƒ ¤€Ô$FTRÔ$RL‡Ab€‚ Textblock£€ €0€Ô Write$TR_DH0€Ô Write$TR_PGF¢€É Paragraph0€Ô Write$TR_TYP£€Ô$GÔ $GRP.MXBWKBJG³€ €€dµ€%€ €€ ¡€€ ¢€€ £€€ #€$€€GLY$Page.trim.1-1¡€ € €€ ¡€€n¡€ €€¨À¡€€”ƒ ¤€Ô$DBÔ$RL‡Ab€‚ Textblock£€ €0€Ô Write$TR_DH0€Ô Write$TR_PGF¢€É Paragraph0€Ô Write$TR_TYP£€Ô$GÔ $GRP.MTJWKBJG³€ €€dµ€%€ €€ ¡€€ ¢€€ £€€ #€$€€GLY$Page.trim.2-1¡€ € €€ŒØ¡€€.¡€ €€Òð¡€€*Ôƒ ¤€Ô$DBÔ$RL‡Ab€‚Flow£€¡€Ô$HDR‚$T«€ €¡€"€GLY$Page.hdr.1-1b€‚ Paragraph£€ €£€Ô$P«€ €¡€"€o€ Header TextIAAb€‚Flow£€¡€Ô$FTR‚$T«€ €¡€"€GLY$Page.ftr.1-1b€‚ Paragraph£€ €£€Ô$P«€ € €!€€¡€"€b€£€¥€‚$PGC1AIAAb€‚Flow£€‚$T«€ €¡€"€GLY$Page.trim.1-1b€‚ Paragraph£€ €£€Ô$P«€ €¡€"€o€ Footer TextIAAb€‚Flow£€‚$T«€ €¡€"€GLY$Page.trim.2-1b€‚ Paragraph£€ €£€Ô$P«€ € €!€€¡€"€o€DateIAAb€‚ Textblock£€ €0€Ô Write$TR_DH0€Ô Write$TR_PGF¢€É Paragraph0€Ô Write$TR_TYP£€Ô$G³€ €€dµ€%€ €€ ¡€€ ¢€€ £€€ #€$€€ GLY$TBTBBGJG¡€ € €€ ¡€€ ¡€ €€Òð¡€€@ƒ ¤€Ô$DBÔ$RL† GLY$TBPBTXJGAA €€1¡€0€Ô Write$PG_FMT¢€É#0€ÔWrite$PG_PTFMT¢€É.#0€Ô Write$PG_CB¥€èd0€Ô Write$PG_TRT¢€É Textblock0€Ô Write$PG_NUM0€ÔWrite$PG_POINT0€Ô Write$PG_NSTY0€Ô Write$PG_PSTY0€Ô Write$PG_MG¥€      0€Ô Write$PG_FN¥€È0€Ô Write$PG_FR€£€€1¡€ € €€ï¡€ €€5`ƒPage¤€b€£€‚$2D£€Ô$F³€ €€„…‡‰·€€¡€ € €€¡€€¡€ €€ï¡€€5`£€ €€€5`€€€ï€€ï€5`¤€ €€¡€€b€‚ Textblock£€ €0€Ô Write$TR_DH0€Ô Write$TR_PGF¢€É Paragraph0€Ô Write$TR_TYP£€Ô$GÔ $GRP.MTJWKBJG³€ €€dµ€%€ €€ ¡€€ ¢€€ £€€ #€$€€GLY$Page.hdr.1-2¡€ € €€ ¡€€.¡€ €€Œˆ¡€€*Ôƒ ¤€Ô$HDRÔ$RL‡Ab€‚ Textblock£€ €0€Ô Write$TR_DH0€Ô Write$TR_PGF¢€É Paragraph0€Ô Write$TR_TYP£€Ô$GÔ $GRP.MXBWKBJG³€ €€dµ€%€ €€ ¡€€ ¢€€ £€€ #€$€€GLY$Page.ftr.1-2¡€ € €€©N¡€€¡€ €€Òð¡€€”ƒ ¤€Ô$FTRÔ$RL‡Ab€‚ Textblock£€ €0€Ô Write$TR_DH0€Ô Write$TR_PGF¢€É Paragraph0€Ô Write$TR_TYP£€Ô$GÔ $GRP.MXBWKBJG³€ €€dµ€%€ €€ ¡€€ ¢€€ £€€ #€$€€GLY$Page.trim.1-2¡€ € €€ ¡€€n¡€ €€¨À¡€€”ƒ ¤€Ô$DBÔ$RL‡Ab€‚ Textblock£€ €0€Ô Write$TR_DH0€Ô Write$TR_PGF¢€É Paragraph0€Ô Write$TR_TYP£€Ô$GÔ $GRP.MTJWKBJG³€ €€dµ€%€ €€ ¡€€ ¢€€ £€€ #€$€€GLY$Page.trim.2-2¡€ € €€ŒØ¡€€.¡€ €€Òð¡€€*Ôƒ ¤€Ô$DBÔ$RL‡Ab€‚Flow£€¡€Ô$HDR‚$T«€ €¡€"€GLY$Page.hdr.1-2b€‚ Paragraph£€ €£€Ô$P«€ €¡€"€o€ Header TextIAAb€‚Flow£€¡€Ô$FTR‚$T«€ €¡€"€GLY$Page.ftr.1-2b€‚ Paragraph£€ €£€Ô$P«€ € €!€€¡€"€b€£€¥€‚$PGC2AIAAb€‚Flow£€‚$T«€ €¡€"€GLY$Page.trim.1-2b€‚ Paragraph£€ €£€Ô$P«€ €¡€"€o€ Footer TextIAAb€‚Flow£€‚$T«€ €¡€"€GLY$Page.trim.2-2b€‚ Paragraph£€ €£€Ô$P«€ € €!€€¡€"€o€DateIAAb€‚ Textblock£€ €0€Ô Write$TR_DH0€Ô Write$TR_PGF¢€É Paragraph0€Ô Write$TR_TYP£€Ô$G³€ €€dµ€%€ €€ ¡€€ ¢€€ £€€ #€$€€ GLY$TBPBTXJG¡€ € €€ ¡€€ ¡€ €€Òð¡€€@ƒ ¤€Ô$DBÔ$RL† GLY$TBGGDXJGAA €€2¡€0€Ô Write$PG_FMT¢€É#0€ÔWrite$PG_PTFMT¢€É.#0€Ô Write$PG_CB¥€èd0€Ô Write$PG_TRT¢€É Textblock0€Ô Write$PG_NUM0€ÔWrite$PG_POINT0€Ô Write$PG_NSTY0€Ô Write$PG_PSTY0€Ô Write$PG_MG¥€      0€Ô Write$PG_FN¥€È0€Ô Write$PG_FR€£€€2¡€ € €€ï¡€ €€5`ƒPage¤€b€£€‚$2D£€Ô$F³€ €€„…‡‰·€€¡€ € €€¡€€¡€ €€ï¡€€5`£€ €€€5`€€€ï€€ï€5`¤€ €€¡€€b€‚ Textblock£€ €0€Ô Write$TR_DH0€Ô Write$TR_PGF¢€É Paragraph0€Ô Write$TR_TYP£€Ô$GÔ $GRP.MTJWKBJG³€ €€dµ€%€ €€ ¡€€ ¢€€ £€€ #€$€€GLY$Page.hdr.1-3¡€ € €€ ¡€€.¡€ €€Œˆ¡€€*Ôƒ ¤€Ô$HDRÔ$RL‡Ab€‚ Textblock£€ €0€Ô Write$TR_DH0€Ô Write$TR_PGF¢€É Paragraph0€Ô Write$TR_TYP£€Ô$GÔ $GRP.MXBWKBJG³€ €€dµ€%€ €€ ¡€€ ¢€€ £€€ #€$€€GLY$Page.ftr.1-3¡€ € €€©N¡€€¡€ €€Òð¡€€”ƒ ¤€Ô$FTRÔ$RL‡Ab€‚ Textblock£€ €0€Ô Write$TR_DH0€Ô Write$TR_PGF¢€É Paragraph0€Ô Write$TR_TYP£€Ô$GÔ $GRP.MXBWKBJG³€ €€dµ€%€ €€ ¡€€ ¢€€ £€€ #€$€€GLY$Page.trim.1-3¡€ € €€ ¡€€n¡€ €€¨À¡€€”ƒ ¤€Ô$DBÔ$RL‡Ab€‚ Textblock£€ €0€Ô Write$TR_DH0€Ô Write$TR_PGF¢€É Paragraph0€Ô Write$TR_TYP£€Ô$GÔ $GRP.MTJWKBJG³€ €€dµ€%€ €€ ¡€€ ¢€€ £€€ #€$€€GLY$Page.trim.2-3¡€ € €€ŒØ¡€€.¡€ €€Òð¡€€*Ôƒ ¤€Ô$DBÔ$RL‡Ab€‚Flow£€¡€Ô$HDR‚$T«€ €¡€"€GLY$Page.hdr.1-3b€‚ Paragraph£€ €£€Ô$P«€ €¡€"€o€ Header TextIAAb€‚Flow£€¡€Ô$FTR‚$T«€ €¡€"€GLY$Page.ftr.1-3b€‚ Paragraph£€ €£€Ô$P«€ € €!€€¡€"€b€£€¥€‚$PGC3AIAAb€‚Flow£€‚$T«€ €¡€"€GLY$Page.trim.1-3b€‚ Paragraph£€ €£€Ô$P«€ €¡€"€o€ Footer TextIAAb€‚Flow£€‚$T«€ €¡€"€GLY$Page.trim.2-3b€‚ Paragraph£€ €£€Ô$P«€ € €!€€¡€"€o€DateIAAb€‚ Textblock£€ €0€Ô Write$TR_DH0€Ô Write$TR_PGF¢€É Paragraph0€Ô Write$TR_TYP£€Ô$G³€ €€dµ€%€ €€ ¡€€ ¢€€ £€€ #€$€€ GLY$TBGGDXJG¡€ € €€ ¡€€ ¡€ €€Òð¡€€@ƒ ¤€Ô$DBÔ$RL† GLY$WGKBXBPGAb€£€³€ €€d„…‰l€€𢀀&@€ø‹€D €ø‹€D €Ú+€&@€Ú+Ab€£€³€ €€d„…‰l€¢€€6€Ú!€5 €ÎAb€£€³€ €€d„…‰l€€Š¢€€, €Î}€?`€Î}€?`€Á¹€, €Á¹£€ €ÿ?&¨ª¢€€°Ab€£€³€ €€d„…‰l€€Š¢€€Š`€÷k€° €÷k€° €Õ?€Š`€Õ?Ab€£€³€ €€d„…‰l€¢€€D €óJ€‹€€óJAb€£€³€ €€d„…‰l€¢€€E`€ᤀŠ€á¤Ab€£€‚$2D‡«€¡€ € €€^ €óJ€y›€óJ²€e³€‰C MSCP servingAb€£€‚$2D‡«€¡€ € €€^€€âd€u΀âd²€e³€‰C QIO servingAb€£€‚$2D‡«€¡€ € €€+à€æ…€9I€æ…²€e³€‰CCPU RAb€£€‚$2D‡«€¡€ € €€‘à€å€Ÿð€å²€e³€‰CCPU SAb€£€‚$2D‡«€¡€ € €€0À€Åz€9›€Åz²€e³€‰CDiskAA €€3¡€0€Ô Write$PG_FMT¢€É#0€ÔWrite$PG_PTFMT¢€É.#0€Ô Write$PG_CB¥€èd0€Ô Write$PG_TRT¢€É Textblock0€Ô Write$PG_NUM0€ÔWrite$PG_POINT0€Ô Write$PG_NSTY0€Ô Write$PG_PSTY0€Ô Write$PG_MG¥€      0€Ô Write$PG_FN¥€È0€Ô Write$PG_FR€£€€3¡€ € €€ï¡€ €€5`ƒPage¤€b€£€‚$2D£€Ô$F³€ €€„…‡‰·€€¡€ € €€¡€€¡€ €€ï¡€€5`£€ €€€5`€€€ï€€ï€5`¤€ €€¡€€b€‚ Textblock£€ €0€Ô Write$TR_DH0€Ô Write$TR_PGF¢€É Paragraph0€Ô Write$TR_TYP£€Ô$GÔ $GRP.MTJWKBJG³€ €€dµ€%€ €€ ¡€€ ¢€€ £€€ #€$€€GLY$Page.hdr.1-4¡€ € €€ ¡€€.¡€ €€Œˆ¡€€*Ôƒ ¤€Ô$HDRÔ$RL‡Ab€‚ Textblock£€ €0€Ô Write$TR_DH0€Ô Write$TR_PGF¢€É Paragraph0€Ô Write$TR_TYP£€Ô$GÔ $GRP.MXBWKBJG³€ €€dµ€%€ €€ ¡€€ ¢€€ £€€ #€$€€GLY$Page.ftr.1-4¡€ € €€©N¡€€¡€ €€Òð¡€€”ƒ ¤€Ô$FTRÔ$RL‡Ab€‚ Textblock£€ €0€Ô Write$TR_DH0€Ô Write$TR_PGF¢€É Paragraph0€Ô Write$TR_TYP£€Ô$GÔ $GRP.MXBWKBJG³€ €€dµ€%€ €€ ¡€€ ¢€€ £€€ #€$€€GLY$Page.trim.1-4¡€ € €€ ¡€€n¡€ €€¨À¡€€”ƒ ¤€Ô$DBÔ$RL‡Ab€‚ Textblock£€ €0€Ô Write$TR_DH0€Ô Write$TR_PGF¢€É Paragraph0€Ô Write$TR_TYP£€Ô$GÔ $GRP.MTJWKBJG³€ €€dµ€%€ €€ ¡€€ ¢€€ £€€ #€$€€GLY$Page.trim.2-4¡€ € €€ŒØ¡€€.¡€ €€Òð¡€€*Ôƒ ¤€Ô$DBÔ$RL‡Ab€‚Flow£€¡€Ô$HDR‚$T«€ €¡€"€GLY$Page.hdr.1-4b€‚ Paragraph£€ €£€Ô$P«€ €¡€"€o€ Header TextIAAb€‚Flow£€¡€Ô$FTR‚$T«€ €¡€"€GLY$Page.ftr.1-4b€‚ Paragraph£€ €£€Ô$P«€ € €!€€¡€"€b€£€¥€‚$PGC4AIAAb€‚Flow£€‚$T«€ €¡€"€GLY$Page.trim.1-4b€‚ Paragraph£€ €£€Ô$P«€ €¡€"€o€ Footer TextIAAb€‚Flow£€‚$T«€ €¡€"€GLY$Page.trim.2-4b€‚ Paragraph£€ €£€Ô$P«€ € €!€€¡€"€o€DateIAAb€‚ Textblock£€ €0€Ô Write$TR_DH0€Ô Write$TR_PGF¢€É Paragraph0€Ô Write$TR_TYP£€Ô$G³€ €€dµ€%€ €€ ¡€€ ¢€€ £€€ #€$€€ GLY$WGKBXBPG¡€ € €€ ¡€€ ¡€ €€Òð¡€€@ƒ ¤€Ô$DBÔ$RL… GLY$Page.1AAb€€Flow.1‚Flow£€‚$T«€ €¡€"€ GLY$TBTBBGJGb€‚ Paragraph£€ €£€Ô$P«€ €¡€"€CFrom: Glenn C. EverhartICDate: 27-Jan-1996IIC`This note is about the design of the switching system. I would like to clarify if possible some JCissues.IAb€‚ Paragraph£€ €£€Ô$P«€ €¡€"€CaMy original design spec design speaks about a switch intercept that grabs control, crudely, just JCZ"below" the start - IO so that I/O done pointing to a UCB still uses that UCB, but the I/OIC^in fact gets rerouted to one or more underlying paths. That way, any existing pointers to the JCZunderlying UCB remain valid, and the device name associated with this UCB now denotes the JCentire tuple of paths.IAb€‚ Paragraph£€ €£€Ô$P«€ €¡€"€C%Consider the following configuration:IAb€‚ Paragraph£€ €£€Ô$P«€ €¡€"€Ib€‚Floating Frame£€ €0€Ô Write$F_DX`0€Ô Write$F_DYôÁ‚$2D£€Ô$F³€„…‡‰·€€¡€ € €€¡€€¡€ €€¢`¡€€¥™£€ €€€¥™€€€¢`€€¢`€¥™¦€¢€€`£€€ ?b€£€l€€Š¢€€@€€›Ñ€]`€›Ñ€]`€Š‹€@€€Š‹Ab€£€l€€Š¢€€ €`|€) €`|€) €O7€ €O7Ab€£€l€€Š¢€€oÀ€`€“À€`€“À€MV€oÀ€MVAb€£€³€„…l€¢€€V €‹K€y€€`Ab€£€³€„…l€¢€€EÀ€Šë€"à€`|Ab€£€³€„…l€¢€€*€VY€p €VYAb€£€³€„…l€€Š¢€€Cà€@ò€\@€@ò€\@€/¬€Cà€/¬Ab€£€³€„…l€€Š¢€€I €!Ç€W`€!Ç€W`€ƒ€I €ƒ£€ €ÿ?&¨ª¢€€°Ab€£€³€„…l€¢€€2@€t€I€€@òAb€£€³€„…l€¢€€U€€V¹€T`€ARAb€£€³€„…l€¢€€Oà€0Ì€P@€!ÇAb€£€‚$2D‡«€¡€ € €€C€€’ €Q+€’ ³€ €€‰CCPU AAb€£€‚$2D‡«€¡€ € €€ €TÙ€ €TÙ³€ €€‰CCPU BAb€£€‚$2D‡«€¡€ € €€v €SX€ƒ‰€SX³€ €€‰CCPU CAb€£€‚$2D‡«€¡€ € €€I€€5®€RZ€5®³€ €€‰CHSZAb€£€‚$2D‡«€¡€ € €€Là€Ä€U»€ij€ €€‰CDiskAb€£€‚$2D‡«€¡€ € €€"€€Z€%â€Z³€ €€‰CAAb€£€‚$2D‡«€¡€ € €€% €Q×€(@€Q׳€ €€‰CCAb€£€‚$2D‡«€¡€ € €€J €¡€iš€¡³€ €€‰C DKA0 or DKC0Ab€£€‚$2D‡«€¡€ € €€<`€x…€FF€x…³€ €€‰CSCSIAb€£€‚$2D‡«€¡€ € €€k@€wd€u&€wd³€ €€‰CSCSIAb€£€‚$2D‡«€¡€ € €€Fà€WÚ€PÆ€WÚ³€ €€‰CSCSIAb€£€³€l€¢€€@€i€€€¡Ab€£€³€l€¢€€ €Ÿ2€‡À€Ÿ’Ab€£€³€l€¢€€…à€Ÿ2€…à€gÿAb€£€‚$2D‡«€¡€ € €€8@€Ÿ’€g€Ÿ’³€ €€‰CCluster CommunicationsAb€£€³€„…l€¢€€€na€à€`Ab€£€³€„…l€¢€€O €Ÿ’€O€€›ÑAb€£€³€„…l€¢€€†@€u䀀`AAIAb€‚ Paragraph£€ €£€Ô$P«€ €¡€"€IAb€‚ Paragraph£€ €£€Ô$P«€ €¡€"€IAJb€‚ Paragraph£€ €£€Ô$P«€ €¡€"€CVNow CPU A can see the disk, let's say as DKA0; B can see DKA0 and DKC0, and CPU C can JCsee DKA0: served or DKC0:.IAb€‚ Paragraph£€ €£€Ô$P«€ €¡€"€CWNow suppose the system manager has specified the preferred path to be the one used for JCDKC0:.IAb€‚ Paragraph£€ €£€Ô$P«€ €¡€"€C`If now CPU A boots from the DKA0: path that is local to it, it can tell that this is not the preJCgferred path, but has no clue how to find the name of the other path if it is first up, unless it has a JC`configuration file or just picks a name. If it leaves the name DKA0: in place, it will conflict JCIwith other cluster members later, so needs to know what to call the disk.IAb€‚ Paragraph£€ €£€Ô$P«€ €¡€"€C^It is possible to load switching code, since we know the device is dualpathed and an HSZ, and JC[the switching code CAN rename the device, either by setting up a new UCB of its own, or by JC]setting up a new DDB if need be and naming the device in that way. In either case, there are JConly two ways to get the name:IAb€‚ Paragraph£€ €£€Ô$P«€ €¡€"€CN1. Algorithmically, via for example some counter maintained at config time, orICZ2. From a configuration file (which can be initially populated with names found algorithmiJCcally.) IAb€‚ Paragraph£€ €£€Ô$P«€ €¡€"€CdThe latter is what I think is needed, using the former at first to set the config file up, and checkJC+ing the results as noted in my Design Spec.IAb€‚ Paragraph£€ €£€Ô$P«€ €¡€"€CaFor this situation, either a brand new UCB can be used, or an existing one can be used, since we JC^can find out before any use that a dual path situation exists that a dual path exists and get JC_switching code loaded which can fix things. Note that if CPU A boots the wrong side, it cannot JC^rename DKA0: to DKC0: without config file, since it has no idea natively where the other side JCbof the HSZ is, or what bus it's on or how it's named. If the other path is preferred, it isn't at JC`CPU A locally at all, and its name is controlled by something else. CPU A has to know the right JC`name from something that will be used for the tuple, or print a message and halt, to avoid data JC_corruption. (And the naming must be checked early on once a cluster is up, to be sure everyone JCagrees on it.)Ib€£€²€¢€IAAb€‚ Paragraph£€ €£€Ô$P«€ €¡€"€b€£€²€¢€CSWhat I need to know, though, is whether an entirely new UCB is connected and to be JCBmade visible, or whether an existing UCB should be made to switch.IAAb€‚ Paragraph£€ €£€Ô$P«€ €¡€"€IAb€‚ Paragraph£€ €£€Ô$P«€ €¡€"€IICZIn the case where both QIOserver and MSCP server exist, a single node can see both paths. IC%Consider the following configuration:IAb€‚ Paragraph£€ €£€Ô$P«€ €¡€"€IIAb€‚ Paragraph£€ €£€Ô$P«€ €¡€"€IAb€‚ Paragraph£€ €£€Ô$P«€ €¡€"€IAb€‚ Paragraph£€ €£€Ô$P«€ €¡€"€IAb€‚ Paragraph£€ €£€Ô$P«€ €¡€"€IAb€‚ Paragraph£€ €£€Ô$P«€ €¡€"€IAb€‚ Paragraph£€ €£€Ô$P«€ €¡€"€IAb€‚ Paragraph£€ €£€Ô$P«€ €¡€"€IAb€‚ Paragraph£€ €£€Ô$P«€ €¡€"€IAb€‚ Paragraph£€ €£€Ô$P«€ €¡€"€IAb€‚ Paragraph£€ €£€Ô$P«€ €¡€"€IAb€‚ Paragraph£€ €£€Ô$P«€ €¡€"€C^Note that CPU S will see two paths to the disk, both named the same, from the two servers. To JC^avoid this, the MSCP server and QIO server would have to look for one another's paths and try JCYto hide their new ones if they pre-exist, since by the time QIOserver comes up, the MSCP JC>served path may have become active and have pointers all over.IAb€‚ Paragraph£€ €£€Ô$P«€ €¡€"€C[This might mean a server must look for local paths direct connected, or paths of the other JC]server. DKdriver and DUdriver would have to look for multiple kinds of served paths. If this JCTwere done, only one path might show up on CPU S, but getting MSCP to/from QIOserver JCfailover would be a bear to do.IAb€‚ Paragraph£€ €£€Ô$P«€ €¡€"€IC^It is not feasible to use a wholly different device name here. A new UCB could create one and JC[be renamed to the same as an old one, but if anyone had pointers to the old UCB, switching JC=would be impossible. The name is controlled from CPU R above.IAb€‚ Paragraph£€ €£€Ô$P«€ €¡€"€CbIt is however feasible to use an intercept that forces a UCB to switch in this case. Existing UCB JC6pointers remain valid and we "just" switch I/O around.IAb€‚ Paragraph£€ €£€Ô$P«€ €¡€"€C\The need to support this sometime is a problem with the entirely-separate-UCB scheme so far JCbas I can see. If dkdriver, dudriver, mscp server,and qioserver all have to cooperate to eliminate JCbextra UCB paths, the need for each to check all others begins to look like a future combinatorial JCexplosion as well.IAb€‚ Paragraph£€ €£€Ô$P«€ €¡€"€CXThe only way to use a new UCB to represent the switched paths would have to be that the JCaswitch code gets loaded first, in basically all cases, whether needed or not. That is akin to makJCYing EVERY disk on a system a one volume shadowset and seems wasteful. On the other hand, JCZusing the first UCB to show up avoids the problem with active UCBs gaining switching, and JC9needs the switch code only where switching is to be done.IAJb€‚ Paragraph£€ €£€Ô$P«€ €¡€"€ICZI will mention in addition that handling things like IO$_DIAGNOSE can work with something JClike this test:IAb€‚ Paragraph£€ €£€Ô$P«€ €¡€"€C[When doing the start-MV processing, mark each IRP in the queue (if not done already) as to JC`which driver's FDT routines it used. At start-io, if the driver number is the same path number, JCglet the I/O by; it is using the path it was initially processed on. If not, then if the FDT routine is JCdat the same address (or if this is a special case that's OK anyway, as write logical on a disk gets JC]checked for shadow set member for example) let it by. Otherwise flag illegal operation, or opJC[eration derailed, or some such and junk it. That way DK to DK and DU to DU switching would JCZbasically pass everything, and cross switching would pass whatever made sense, and the numJC'ber of special cases can be kept small.IAb€‚ Paragraph£€ €£€Ô$P«€ €¡€"€ICcThe code needed to handle either strategy pretty well exists, but it looks to me that the strategy JC_of intercepting a UCB is what is needed, to avoid having to redo the whole thing down the road JC not too far.IAb€‚ Paragraph£€ €£€Ô$P«€ €¡€"€C\As for UCB status, I'm inclined to have some UCB areas that are just maintained from the curJC]rently active underlying UCB, and to track individual statistics elsewhere and teach some disJCWplay(s) how to show them. For simple cases MSCP handles this seems ok now. For more comJC_plex I/O I think it can be managed in the future; there are only a few cells known outside the JCbdriver anyway that can report status. Status needed by the underlying driver itself will be there JC