Om prestanda av den här koden är kritisk kan det vara meningsfullt att undvika heaptilldelningar för ljus s. Jag tror att det mest rimliga sättet att göra det skulle vara att göra ljus i en struktur. Även om muterbara värdetyper är onda så skulle jag också refactor Candle to Vara oföränderlig Detta innebär också att implementeringen av nyasteCandle skulle behöva bytas, förmodligen till ett par dubbelfält eller alternativt en separat, omställbar och återställbar klass. Jag ser ingen annan potentiell prestationsproblem i din kod Men när det gäller prestanda , Bör du alltid lita på profilering, inte din eller någons intuition. Jag tycker inte om några namnen på dina metoder. Specific. ValueUpdated Metodnamn borde vanligtvis vara i formuläret gör något, inte något hände Så jag tror ett bättre namn Skulle vara UpdateValue. Add Modify Det här är de två grundläggande funktionerna i din MovingAverage och jag tror att de namnen inte uttrycker meningen bra, jag skulle kalla dem något som MoveAndSetCurrent och SetC Urrent respektive Även om en sådan namngivning indikerar att de grundläggande operationerna snarare skulle vara Flytta och SetCurrent. Jag har ett vetenskapligt datalogprogram som jag har utvecklat i ett antal år nu. Vi behöver nu lägga till en del funktionaliteter så att det ger ett glidande medelvärde av Data som samlas in Jag kan skapa en kö i myDataClass för att göra femo bufferten men jag undrade vad det bästa sättet att göra medelvärdet kan vara. Som du kan se från kodexemplet nedan innehåller myDataClass olika datastrukturer, varav några kan vara medelvärda och vissa Som inte kan t. ex. strängen. Huvudfrågan är om det finns ett enkelt sätt att uppnå detta eller behöver jag skriva kod för att genomsnittliga varje objekt i myDataClass eller ska jag redesigna myDataClass Thanks. Tuesday, 12 juli 2011 9 14 AM. Personnaly , Skulle jag skapa en Class DataQueue av MyDataClass som avkänner sig om räkningen i kön passerar 10 saker På så sätt kommer du aldrig att ta hand om antalet objekt i köen från M din kod, detta kommer att ta hand om från inuti köen klass. Markerad som svar av Mike Feng Moderator onsdag 20 juli 2011 1 56 PM. Tuesday, 12 juli 2011 9 40 AM. After lite mer utredning, Jag antar att jag hittade lösningen för dig. Du kan använda CopyTo-metoden för att kopiera de vänstra objekten i kön till en array. Medveten om att jag inte har beräknat genomsnittet visade jag bara hur du kan basera dina beräkningar, men det Lägger bara till egna beräkningar baserade på din affärsregel för det. Markerat som svar från Mike Feng Moderator Onsdagen den 20 juli 2011 1 56 PM. Friday, 15 juli 2011 5 16 AM. Baserat på min förståelse är ditt krav något Som detta. Detta är data i kön. myDataClass1 datadbl 2 1 datastr someString1 dataarraydbl en dubbel array. myDataClass2 datadbl 3 5 datastr someString2 dataarraydbl en dubbel array. myDataClass10 datadbl 9 1 datastr someString10 dataarraydbl en dubbel array. Nu vill du beräkna det genomsnittliga antalet datadblfel I varje myDataClass-objekt och få det genomsnittliga antalet dataarraydbl feild. Om så kommer jag att föreslå att du gör samma sak som Crazypenie föreslog att bygga en ny klass som heter DataQueue. Jag hoppas att det här kommer att vara till hjälp, om jag har missförstått något, snälla Gärna meddela mig. Mike Feng MSFT MSDN Community Support Feedback till oss Få eller begär kod Kod från Microsoft Vänligen kom ihåg att markera svaren som svar om de hjälper och avmarkerar dem om de inte ger någon hjälp. Markerat som svar från Mike Feng Moderator Onsdag 20 juli 2011 1 55 PM. Friday, 15 juli 2011 3 33 AM. Tack, jag kan göra det så, men myDataClass är faktiskt ganska stor och loggningssystemet kan springa länge så det är mer Effektiv för mig att skräpkopior av klassen jag inte behöver faktiskt för att beräkna den genomsnittliga Queue verkade det enklaste sättet att uppnå detta. Min huvudfråga är dock hur genomsnittlig en klass som denna känner jag att jag måste skriv kod som gör det specifikt Lly för varje datatyp i myDataClass. Public Class myDataClass. Tuesday 12 July, 2011 10 40 AM. Baserat på min förståelse är ditt krav något som här. Detta är data i köen. myDataClass1 datadbl 2 1 datastr someString1 dataarraydbl a Dubbel array. myDataClass2 datadbl 3 5 datastr someString2 dataarraydbl en dubbel array. myDataClass10 datadbl 9 1 datastr someString10 dataarraydbl en dubbel array. Nu vill du beräkna det genomsnittliga antalet datadbl feild i varje myDataClass-objekt och få det genomsnittliga antalet dataarraydbl feild. Om så kommer jag att föreslå att du gör samma sak som Crazypenie föreslog att bygga en ny klass som heter DataQueue. Jag hoppas att det här kommer att vara till hjälp, om jag har missförstått något, var god och låt mig veta. Mike Feng MSFT MSDN Community Support Feedback till oss Få eller begär kod Kod från Microsoft Var god kom ihåg att markera svaren som svar om de hjälper och avmarkerar dem om de inte ger någon hjälp. Markerat som svar från Mike Feng Moderator onsdag , 20 juli 2011 1 55 PM. Friday, 15 juli 2011 3 33 AM. Average Queue Size och Storage IO Metrics. There verkar vara lite förvirring kring den metriska genomsnittliga köstorleken Detta är en metrisk som rapporterats av iostat som avgqu - sz Förvirringen förefaller uppstå när iostat rapporterar en annan avgqu-sz i dom0 och domU för en enda Virtual Block Device VBD, medan andra mätvärden som Input Output Operations per sekund IOPS och genomströmning ofta uttryckt i MB s är samma Detta Sidan kommer att beskriva vad allt detta faktiskt betyder och hur det ska tolkas. På något modernt operativsystem operativsystem är det möjligt att samtidigt skicka flera förfrågningar till en enda lagringsenhet. Denna övning hjälper normalt flera lager av datavägen att fungera bättre, Vilket gör det möjligt för system att uppnå högre tal i mätvärden, såsom IOPS och genomströmning. Det kan emellertid vara lite knepigt att mäta genomsnittet av enastående eller inflight-förfrågningar för en given blockanordning. Detta beror på att numret o F utestående förfrågningar är en omedelbar mätning Det är när du tittar kan det finnas nollförfrågningar som väntar på den enheten När du tittar igen kan det vara 28 Utan mycket bokföring och viss inblandning är det inte riktigt möjligt att berätta vad som hände emellan. De flesta användare är emellertid inte intresserade av allt som hände mellan. Människor är mycket mer intresserade av genomsnittet av utestående förfrågningar. Detta genomsnitt ger en bra förståelse för arbetsbelastningen som sker, dvs hur applikationer använder lagring och Hjälper till med att ställa in miljön för bättre prestanda. Beräkning av medelkönstorlek. För att förstå hur genomsnittskönstorleken beräknas, överväga följande diagram som presenterar ett Linux-system som kör fio som en benchmarking-användarprogram som utfärdar förfrågningar på en SCSI-skiva. Figur 1 Benchmark utfärdar förfrågningar på en disk. Programmet utfärdar förfrågningar till kärnan via bibliotek som libc eller libaio I det enkla fallet där referensvärdet Är konfigurerad med en IO djup på 1, kommer fio att försöka behålla en förfrågan som flyger hela tiden Så fort en förfrågan är klar kommer fio skicka en annan Detta kan uppnås med följande konfigurationsfil som körs i 10 sekunder och anser dev xvdb som benchmarking disk. Table 1 fio konfigurationsfil för en test arbetsbelastning. ANMÄRKNING I detta experiment har dev xvdb konfigurerats som RAW VDI. Se till att fullt ut fylla VHD VDI innan du kör experiment, speciellt om de är baserade. En av de mätvärden som görs tillgängliga av blockskiktet för en enhet är antalet läs - och skrivpinnar se på Linux Kernel-dokumentationen. Detta exponerar hur mycket tid per förfrågan som enheten har använts. Blockskiktet startar denna redovisning omedelbart innan sändningen skickas till föraren och stoppar det omedelbart efter det att förfrågan har slutförts. Figuren nedan representerar den här tiden i de röda och blåa horisontella staplarna. Figur 2 Diagram som representerar begäran om redovisning. Det är viktigt att förstå att den här metriska kan växa snabbare än tiden Detta kommer att hända om mer än en förfrågan har lämnats samtidigt. I exemplet nedan har en ny grön förfrågan lämnats in innan den första röda begäran har slutförts. Den slutfördes efter det att den röda förfrågan var klar och efter Den blå förfrågan utfärdades Under de ögonblick där förfrågningar överlappades ökade fästningen med en hastighet som var större än tiden. Figur 3 Diagram som representerar samtidig begäran om redovisning. Med denna sista siffra är det uppenbart att det fanns stunder där ingen förfrågan var närvarande i Enhetsdrivrutinen Det fanns också stunder där en eller två förfrågningar var närvarande i drivrutinen. För att beräkna genomsnittet av inflight-förfrågningar eller genomsnittlig köstorlek mellan två ögonblick, kommer verktyg som iostat att prova fläckar vid tidpunkten en, prova fläckar igen vid tidpunkt två , Och dela skillnaden mellan dessa fästingar med tidsintervallet mellan dessa moment. Figur 4 Formel för att beräkna medelkönstorleken. Genomsnittlig köstorlek i en virtualiserad miljö. I en virtualiserad miljö är datapaten mellan referensprogrammet fio som körs inuti en virtuell maskin och den faktiska lagringen annorlunda. Med tanke på XenServer 6 5 visas ett exempel på en förenkling av denna datapat som i exemplen på föregående avsnitt begärs förfrågningar i en virtuell maskin s användarutrymme-applikation När de flyttas genom kärnan riktas de dock till paravirtualiserade PV-lagringsdrivrutiner, t. ex. blkfront istället för en faktisk SCSI-drivrutin. Dessa förfrågningar hämtas av lagringsbakgrunden Tapdisk3 i dom0s användarutrymme De skickas till domokärnan via libaio, passera blockskiktet och nå diskdrivrutinerna för motsvarande lagringsinfrastruktur i det här exemplet, en SCSI-skiva. Utförande 5 Benchmark-utgivningsförfrågningar i en virtualiserad miljö. Tekniken Beskrivet ovan för att beräkna medelkönstorleken kommer att producera olika värden beroende på var den tillämpas ring diagrammet ovan, det kan användas i blockskiktet för den virtuella maskinen s i tapdisk3 eller i dom0s blockskiktet. Vart och ett av dessa skulle visa en annan köstorlek och betyder egentligen något annat. Diagrammet nedan utökar de exempel som används i denna artikel För att inkludera dessa lager. Figur 6 Diagram som representerar begäran om bokföring i en virtualiserad miljö. Siffran ovan innehåller nästan vertikala pilar mellan de lager som representerar förfrågningar som avgår från och anländer till olika systemkomponenter. Dessa pilar är något vinklade vilket föreslår att tiden går som en förfrågan rör sig från ett lager till ett annat Det finns också en viss förfluten tid mellan en pil som kommer till ett lager och en ny pil som lämnar från det lagret. En annan detalj i figuren är de horisontella röda och blå staplarna. De anger var förfrågningar redovisas vid ett visst lag Not Att denna redovisning börjar någon gång efter att en förfrågan anländer till ett lager och en viss tid innan förfrågan skickas till ett annat lager Th ese offsets är dock bara illustrerande. En noggrann titt på produktionen av specifika prestationsverktyg är nödvändig för att förstå vad genomsnittskönstorleken är för viss arbetsbelastning. Att undersöka en riktig implementering. För att placera reella nummer i den här artikeln, följer följande miljö var konfigurerad. Hardware Dell PowerEdge R310.Intel Xeon X3450 2 67GHz 1 uttag, 4 kärnanslutning, HT Enabled. BIOS Power Management inställd på OS DBPM. Xen P-State Governor inställd på prestanda, Max Idle State inställd till 1,2 x Western Digital WD2502ABYS . Dev sda XenServer Installation gäst s root disk. dev sdb LVM SR med en 10 GiB RAW VDI kopplad till guest. dom0 XenServer Creedence Build-nummer 88873.domU Debian Wheezy x8664.När utgivning av fio arbetsbelastningen enligt tabell 1 i följd läser 4 KiB-förfrågningar med libaio och med iodepth satt till 1 Under 10 sekunder rapporterar en iostat inom gästen följande. Värdet av intresse rapporteras i kolumnen avgqu-sz. Det är ungefär 0 96 i genomsnitt medan referensmarkeringen kördes. Det betyder att gästens blockskikt hänvisar till Figur 6 är Hanteringsförfrågningar nästan hela tiden. Nästa lager av lagringsundersystemet som svarar för användningen är tapdisk3 Detta värde kan erhållas genom att välja opt xensource debug xsiostat i dom0 För samma experiment rapporterar den följande. Analogt till vad som observerades inom gästen , Xsiostat rapporterar hur lång tid det hade enastående förfrågningar På detta lager rapporteras den här siffran vid cirka 0 71 medan referensvärdet kördes. Detta ger en uppfattning om den tid som p räkna med att en förfrågan redovisas i gäst s-blockskiktet och vid domos backend-system. Vidare är det möjligt att köra iostat i dom0 och ta reda på vad som är uppfattat utnyttjande vid det sista lagret innan begäran skickas till enheten Drivrutinen. I det här skiktet rapporterar blockskiktet om 0 61 för den genomsnittliga köstorleken. Variera IO-djupet. Sektionerna ovan klargjorde varför användarna kan se ett lägre köutnyttjande i dom0 när man jämför utmatningen av prestandaverktyg i olika lager av lagringsdelsystem De visade exemplen hittills täcker emellertid mest fallet där IO Depth är inställd på 1 Detta innebär att referensverktyget springer inom gästen, t. ex. fio kommer att försöka hålla en förfrågan inflight hela tiden. Detta verktyg s uppfattning, Kan vara felaktigt med tanke på att det tar tid för begäran att faktiskt nå lagringsinfrastrukturen. Använd samma miljö som beskrivs i föregående avsnitt och gradvis öka IO-djupet vid referensvärdet konfiguration kan följande data samlas. Figur 7 Genomsnittlig köstorlek vs djupdjup som konfigurerad i fio. Denna artikel förklarade vad genomsnittskönstorleken är och hur den beräknas Som exempel inkluderade den verkliga data från specifika server - och disktyper Detta Bör klargöra varför vissa arbetsbelastningar orsakar olika köutnyttjanden som uppfattas från gästen och från dom0.Follow me on twitter franciozzy Jag har varit Software Performance Engineer som arbetar för Citrix sedan oktober 2011, mer specifikt på XenServer Storage Virtualization Tidigare slutade jag en doktorand Vid Imperial College London i samma ämne När det gäller datorer och förutom prestationsutvärdering av virtualiserad lagring innehåller mina intressen också datanät, distribuerade system och högpresterande datorer för att bara nämna några Under min fritid tycker jag om att spela mina basgitarrer, öva Kyokushin Karate Och gör närbilds magi Åh, och spelar poker och Chess. Author s senaste inlägg. Måndagen den 25 maj 2015 Wh en Virtualiserad lagring är snabbare än Bare Metal. Wednesdag, 03 december 2014 Genomsnittlig köstorlek och lagring IO Metrics. Wednesdag, 02 juli 2014 XenServer Förvaringsprestanda förbättringar och Tapdisk3.Tuesday 31 December 2013 Projekt Karcygwins och virtualiserad lagringsprestation. Tuesday, 01 October 2013 VM Density and Project Pulsar. Tobias Kreidl onsdagen den 03 december 2014 19 17.Tack så mycket som Felipe, för den mycket insiktsfulla artikeln. Med ett fall där utilparametern börjar närma sig 100, skulle detta vara en indikation på mättnad, så förutom att dela upp en del av den lagringen till en annan enhet, vilka rekommendationer skulle du göra om justering av ködjupet för specifika enheter Med vissa, som SCSI eller HBA-enheter, kan du manipulera ködjupet, se till exempel , Men till skillnad från något i VMware som esxtop, är jag inte bekant med något verktyg på Xenserver för att kunna övervaka ködjup. Hälsningar, - Tobias. Tack så mycket som Fel, Fel ipe, för den mycket insiktsfulla artikeln Med ett fall där parameteren util börjar närma sig 100, skulle detta vara en indikation på mättnad, förutom att dela upp en del av den lagringen till en annan enhet, vilka rekommendationer skulle du göra om justeringen Av ködjupet för specifika enheter Med vissa, som SCSI eller HBA-enheter, kan du manipulera ködjupet, se till exempel, men till skillnad från något i VMware som esxtop, är jag inte bekant med något verktyg på Xenserver för att kunna övervaka köen Djup Vänliga hälsningar, - Tobias. Felipe Franciosi tisdagen den 16 december 2014 19 20.Tyck för frågan och ursäkta för att förseningen har kommit att reagera Kolumnen Utnyttja 100 betyder normalt att enheten är upptagen mest av tiden enligt redovisningsmekanismerna Jag förklarade i inlägget Det är viktigt att markera detta betyder inte att enheten inte kan gå snabbare, till exempel med större förfrågningar eller ett större arbetsbelastnings-ködjup. Börja med Cree Neka, xsiostat kommer att rapportera den genomsnittliga köstorleken som skiljer sig och skriver. Du kan använda det i kombination med iostat på gästen och i dom0 för att ta reda på om ditt system kan använda inställning, till exempel justering av maxkönedjupet för specifika lagringsdrivrutiner. Grundinställningarna bör fungera bra för de flesta fall med tanke på en avvägning mellan faktorer som minne och CPU-effektivitet Med det sagt är det svårt att göra rekommendationer som är för generiska eftersom det vanligtvis är många olika inslag Jag skulle titta på varje enskilt fall och experimentera där det är lämpligt. Hopp som hjälper Felipe. Hi Tobias, Tack för frågan och ursäkta för förseningen att svara. Använd-kolumnen närmar sig 100 betyder normalt att enheten är upptagen för det mesta enligt de redovisningsmekanismer jag förklarade i posten Det Är viktigt för att markera detta betyder inte att enheten inte kan gå snabbare, till exempel med större förfrågningar eller ett större arbetsbelastnings ködjup Börja med Cr Eedence kommer xsiostat att rapportera den genomsnittliga köstorleken som skiljer sig och skriver. Du kan använda det i kombination med iostat på gästen och i dom0 för att ta reda på om ditt system kan använda inställning, till exempel justering av maxkönedjupet för specifika lagringsdrivrutiner. fungera bra för de flesta fall med tanke på en avvägning mellan faktorer som minne och CPU-effektivitet Med det sagt är det svårt att göra rekommendationer som är för generiska eftersom det vanligtvis är många olika inslag jag skulle titta på varje enskilt fall och experimentera var Lämpligt hopp som hjälper Felipe. Vi förväntar oss att de totala kostnaderna för serverns infrastruktur kommer att minskas med mer än 35 på grund av XenServer. Michael Markl Global Service Owner SAP IT Infrastructure Communications Services, SAP AG. Virtuella maskiner är en del av Grupo Martins IT-ledningskultur, eftersom tiden som krävs för att skapa en med XenServer är cirka 20 minuter. Flavio Lucio Borges Martins da Silva CIO Grupo Martins. Vårt jobb är att tillgodose alla fakulteter behöver så mycket som möjligt så vi behövde hitta en lösning som kan stödja ett stort antal applikationer samt spara lagringsutrymme och personalresurser. Här har Citrix intensifierat support. Om du vill ha professionellt stöd Och service från Citrix Vi kan hjälpa till med installation, teknisk support och optimering av XenServer Kontakta Citrix. About XenServer. XenServer är den ledande open source virtualiseringsplattformen, som drivs av Xen Project hypervisor och XAPI-verktygsstacken. Den används i världens största moln Och företag.
Comments
Post a Comment