Umzugs Durchschnitt Warteschlange


Wenn die Leistung dieses Codes kritisch ist, dann könnte es sinnvoll sein, Heap-Zuweisungen für Kerzen zu vermeiden. Ich denke, die vernünftigste Art und Weise zu tun, dass würde Kerze in eine struct. Though veränderliche Wert-Typen sind böse, so würde ich auch umstellen Kerze zu Sei unveränderlich Dies bedeutet auch, dass die Implementierung von newestCandle sich ändern muss, vermutlich in ein Paar Doppelfelder oder alternativ eine separate, veränderliche und rücksetzbare Klasse. Ich sehe kein anderes Potenzial in deinem Code. Aber wenn es um Leistung geht , Sollten Sie sich immer auf Profiling, nicht Ihre oder jemand anderes s Intuition. Auch, ich don t wie einige Namen Ihrer Methoden Specifically. ValueUpdated Methoden Namen sollten in der Regel in der Form etwas tun, nicht etwas passiert Also ich denke, ein besserer Name Wäre UpdateValue. Add Modify Dies sind die beiden grundlegenden Operationen von deinem MovingAverage und ich denke, dass diese Namen don t ausdrücken die Bedeutung gut Ich würde sie so etwas wie MoveAndSetCurrent und SetCurrent nennen, obwohl diese Namensgebung zeigt, dass die grundlegenden Operationen eher bewegen und SetCurrent. Ich habe ein wissenschaftliches Datenlogging-Programm, das ich seit einigen Jahren entwickelt habe. Wir müssen nun einige Funktionalität hinzufügen, damit es einen gleitenden Durchschnitt der gesammelten Daten erzeugt. Ich kann eine Schlange von myDataClass erstellen, um den Fifo-Puffer zu machen Aber ich habe mich gefragt, was der beste Weg, um die Mittelung könnte sein Wie Sie aus dem Codebeispiel unten sehen können myDataClass enthält verschiedene Datenstrukturen, von denen einige gemittelt werden können und einige, die nicht zB die Zeichenfolge sein können. Die Hauptfrage ist, ob es einfach ist Weg, um dies zu erreichen oder muss ich Code schreiben, um jedes Element innerhalb myDataClass zu durchschnittlich oder sollte ich redesign myDataClass Thanks. Tuesday, 12. Juli 2011 9 14 AM. Personnaly, würde ich eine Klasse DataQueue von MyDataClass, die sich dequeue, wenn die Zählung zu schaffen In der Warteschlange Pass 10 Elemente Auf diese Weise müssen Sie nie auf die Anzahl der Artikel in der Warteschlange aus Ihrem Code zu kümmern, wird dies kümmern sich aus der Warteschlange class. Marked als Antwort von Mike Feng Moderator Mittwoch, Juli 20, 2011 1 56 PM. Tuesday, 12. Juli 2011 9 40 AM. Nach ein wenig mehr Untersuchung, ich glaube, ich habe die Lösung für Sie gefunden. Sie können die CopyTo-Methode verwenden, um die linken Elemente in die Warteschlange zu einem Array zu kopieren. Be bewusst, dass ich nicht berechnen den Durchschnitt, zeigte ich nur, wie Sie die Basis Ihrer Berechnungen bekommen können, aber das ist nur das Hinzufügen Ihrer eigenen Berechnungen auf der Grundlage Ihrer Geschäftsregel für that. Marked als Antwort von Mike Feng Moderator Mittwoch, 20. Juli, 2011 1 56 PM. Friday, 15. Juli 2011 5 16 AM. Basiert auf mein Verständnis, Ihre Anforderung ist so etwas wie this. This ist die Daten in der Warteschlange. myDataClass1 datadbl 2 1 datastr someString1 dataarraydbl ein double array. myDataClass2 datadbl 3 5 Datastr someString2 dataarraydbl ein doppeltes array. myDataClass10 datadbl 9 1 datastr someString10 dataarraydbl ein doppeltes array. Jetzt möchten Sie die durchschnittliche Anzahl von datadbl feild in jedem myDataClass Objekt berechnen und erhalten die durchschnittliche Anzahl von dataarraydbl feild. If so, werde ich vorschlagen Sie zu tun, die gleiche Sache wie Crazypenie vorgeschlagen, bauen eine neue Klasse namens DataQueue. I hoffe, dies wird hilfreich sein, wenn ich etwas falsch verstanden haben, fühlen Sie sich bitte frei, mich zu informieren. Mike Feng MSFT MSDN Community Support Feedback zu uns Get oder Request Code Beispiel von Microsoft Bitte denken Sie daran, die Antworten als Antworten zu markieren, wenn sie helfen und sie aufheben, wenn sie keine Hilfe geben. Marked als Antwort von Mike Feng Moderator Mittwoch, 20. Juli 2011 1 55 PM. Friday, 15. Juli 2011 3 33 Uhr. Danke Cor, ich könnte es so machen, aber myDataClass ist eigentlich ziemlich groß und das Logging-System kann für eine lange Zeit laufen, also ist es effizienter für mich zu Junk-Kopien der Klasse, die ich eigentlich nicht für die Berechnung der durchschnittlichen Warteschlange scheine Der einfachste Weg, dies zu erreichen. Meine Hauptfrage ist aber, wie durchschnittlich eine Klasse wie diese Ich bekomme das Gefühl, dass ich Code schreiben muss, der es speziell für jeden Datentyp in myDataClass. Public Class myDataClass. Tuesday, Juli macht 12, 2011 10 40 AM. Basiert auf mein Verständnis, Ihre Anforderung ist so etwas wie this. This ist die Daten in der Warteschlange. myDataClass1 datadbl 2 1 datastr someString1 dataarraydbl ein doppeltes array. myDataClass2 datadbl 3 5 datastr someString2 dataarraydbl ein double array. myDataClass10 Datadbl 9 1 datastr someString10 dataarraydbl ein doppeltes array. Jetzt möchten Sie die durchschnittliche Anzahl von datadbl feild in jedem myDataClass Objekt zu berechnen, und erhalten Sie die durchschnittliche Anzahl von dataarraydbl feild. If so, ich werde Ihnen vorschlagen, dasselbe zu tun wie Crazypenie Vorgeschlagen, eine neue Klasse namens DataQueue. I hoffen, dass dies hilfreich sein wird, wenn ich etwas falsch verstanden habe, fühlen Sie sich bitte frei, mich zu informieren. Mike Feng MSFT MSDN Community Support Feedback zu uns Get oder Anfrage Code Beispiel von Microsoft Bitte denken Sie daran, die Marke zu markieren Antwortet als Antworten, wenn sie helfen und unmark sie, wenn sie keine help. Marked als Antwort von Mike Feng Moderator Mittwoch, 20. Juli 2011 1 55 PM. Friday, 15. Juli 2011 3 33 AM. Average Queue Größe und Speicher IO Metriken. Es scheint ein bisschen Verwirrung um die metrische durchschnittliche Warteschlangengröße zu geben. Dies ist eine Metrik, die von iostat als avgqu-sz gemeldet wird. Die Verwirrung scheint zu entstehen, wenn iostat ein anderes avgqu-sz in dom0 und in domU für eine einzelne virtuelle Blockvorrichtung VBD berichtet , Während andere Metriken wie Input Output Operations pro Sekunde IOPS und Durchsatz oft in MB s ausgedrückt sind die gleichen Diese Seite wird beschreiben, was all dies tatsächlich bedeuten und wie dies interpretiert werden sollte. Auf jedem modernen Betriebssystem Betriebssystem ist es möglich, Gleichzeitig mehrere Anfragen an ein einziges Speichergerät übergeben Diese Praxis hilft normalerweise, mehrere Schichten des Datenpfads besser zu machen, so dass Systeme höhere Zahlen in Metriken wie IOPS und Durchsatz erreichen können. Jedoch messen Sie den Durchschnitt der hervorragenden oder Anfluganforderungen für einen bestimmten Block Gerät über einen Zeitraum von Zeit kann ein bisschen schwierig Dies ist, weil die Anzahl der ausstehenden Anfragen ist ein Instant-Metrik Das ist, wenn Sie schauen, könnte es null Anfragen anhängig für dieses Gerät Wenn Sie noch einmal schauen, könnte es 28 Ohne eine Viel Buchhaltung und etwas Intrusivität, ist es nicht wirklich möglich zu sagen, was passiert in-between. Most Benutzer sind jedoch nicht interessiert an alles, was passiert ist zwischen Menschen sind viel mehr interessiert in den Durchschnitt der ausstehenden Anfragen Dieser Durchschnitt gibt ein Ein gutes Verständnis der Arbeitsbelastung, die stattfindet, dh wie Anwendungen mit Speicher arbeiten und hilft bei der Abstimmung der Umgebung für eine bessere Leistung. Bearbeitung der durchschnittlichen Warteschlangengröße. Um zu verstehen, wie die durchschnittliche Warteschlangengröße berechnet wird, betrachten Sie das folgende Diagramm, das ein Linux-System präsentiert Läuft fio als Benchmarking-Benutzeranwendung, die Anfragen an einen SCSI-Datenträger ausgibt. Abbildung 1 Benchmark, der Anfragen an einen Datenträger ausgibt. Die Anwendung fordert Anfragen an den Kernel durch Bibliotheken wie libc oder libaio Auf dem einfachen Fall, in dem der Benchmark mit einer IO-Tiefe konfiguriert ist Von 1, fio wird versuchen, eine anfrage fliegen zu jeder Zeit zu halten Sobald eine anfrage abgeschlossen ist, wird fio ein weiteres senden Dies kann mit der folgenden Konfigurationsdatei erreicht werden, die für 10 Sekunden läuft und betrachtet dev xvdb als Benchmarking-Diskette. Table 1 Fio Konfigurationsdatei für einen Test workload. NOTE In diesem Experiment wurde dev xvdb als RAW VDI konfiguriert. Stellen Sie sicher, dass VHD VDIs vollständig bevölkert werden, bevor Sie Experimente ausführen, besonders wenn sie gelesen werden. Einer der Metriken, die von der Blockschicht für eine Gerät ist die Anzahl der Lese - und Schreib-Ticks auf der Linux-Kernel-Dokumentation Hiermit wird die Zeitdauer pro Anforderung ausgesetzt, dass das Gerät belegt wurde. Der Baustein-Layer startet diese Abrechnung unmittelbar vor dem Versand der Anforderung an den Fahrer und stoppt ihn sofort nach der Anfrage Abgeschlossen Die folgende Abbildung stellt diese Zeit in den ROTEN und BLAUEN horizontalen Balken dar. Abbildung 2 Diagramm, das die Anforderungsbuchhaltung darstellt. Es ist wichtig zu verstehen, dass diese Metrik schneller als die Zeit wachsen kann. Dies geschieht, wenn mehr als eine Anfrage gleichzeitig eingereicht wurde. Auf dem Beispiel Unten wurde eine neue grüne anforderung eingereicht, bevor die erste rote anforderung abgeschlossen wurde. Es wurde nach der roten anfrage beendet und nachdem die blaue anfrage ausgegeben wurde. Während der Momente, in denen die Anfragen überlappten, stieg die Zeckenmetrik mit einer Rate, die größer als die Zeit war 3 Diagramm, das gleichzeitige Anforderung Buchhaltung darstellt. Looking an dieser letzten Figur, ist es klar, dass es Momente gab keine Anforderung war in der Gerätetreiber vorhanden Es gab auch Momente, wo ein oder zwei Anfragen waren im Fahrer vorhanden Um den Durchschnitt der Inflight Anfragen zu berechnen Oder durchschnittliche Warteschlangengröße zwischen zwei Momenten in der Zeit, Werkzeuge wie iostat Probe Zecken im Moment eins, Probe tickt wieder im Moment zwei, und teilen Sie den Unterschied zwischen diesen Zecken durch das Zeitintervall zwischen diesen Momenten. Figure 4 Formel, um die durchschnittliche Warteschlange zu berechnen Size. The durchschnittliche Warteschlangengröße in einer virtualisierten Umgebung. In einer virtualisierten Umgebung ist der Datenpfad zwischen der Benchmarking-Anwendung, die innerhalb einer virtuellen Maschine läuft, und der tatsächlichen Speicher unterschiedlich. Unter Berücksichtigung von XenServer 6 5 als Beispiel, zeigt die folgende Abbildung eine Vereinfachung Datapath Wie in den Beispielen des vorherigen Abschnitts beginnen Anfragen in einer virtuellen Maschine s Benutzerraumanwendung Beim Bewegen durch den Kernel werden sie jedoch auf paravirtualisierte PV-Speicher-Treiber gerichtet, zB blkfront anstelle eines tatsächlichen SCSI-Treibers. Diese Anfragen werden abgeholt Das Speicher-Backend tapdisk3 im Dom0-User-Space Sie werden über libaio dem Dom0-Kernel übergeben, die Block-Layer übergeben und die Disk-Treiber für die entsprechende Speicher-Infrastruktur in diesem Beispiel, einem SCSI-Datenträger, erreichen. Abbildung 5 Benchmark, der Anfragen an eine virtualisierte Umgebung ausgibt Die oben beschriebene Technik, um die durchschnittliche Warteschlangengröße zu berechnen, erzeugt unterschiedliche Werte, je nachdem, wo sie angewendet wird. Angesichts des obigen Diagramms könnte sie in der Blockschicht der virtuellen Maschine verwendet werden, in tapdisk3 oder in der dom0 s-Blockschicht Würde eine andere Warteschlangengröße zeigen und tatsächlich etwas anderes bedeuten Das Diagramm unten erweitert die Beispiele, die in diesem Artikel verwendet werden, um diese Schichten zu enthalten. Bild 6 Diagramm, das die Anforderungsabrechnung in einer virtualisierten Umgebung darstellt. Die obige Abbildung enthält fast vertikale Pfeile zwischen den Schichten, die Anfragen abgeben Von und kommen zu verschiedenen Systemkomponenten Diese Pfeile sind leicht abgewinkelt, was darauf hindeutet, dass die Zeit vergeht, wenn sich eine Anforderung von einer Schicht zur anderen bewegt. Es gibt auch einige verstrichene Zeit zwischen einem Pfeil, der an einer Schicht ankommt, und einen neuen Pfeil, der von dieser Schicht abweicht Der Abbildung sind die horizontalen roten und blauen Balken Sie geben an, wo Anfragen auf einer bestimmten Schicht berücksichtigt werden. Beachten Sie, dass diese Buchhaltung einige Zeit beginnt, nachdem eine Anforderung an einer Schicht ankommt und einige Zeit bevor die Anforderung an eine andere Ebene übergeht. Diese Offsets sind jedoch Nur illustrativ Ein gründlicher Blick auf die Ausgabe von spezifischen Performance-Tools ist notwendig, um zu verstehen, was die durchschnittliche Warteschlange Größe für bestimmte Workloads. Investigation eine echte Deployment. In um echte Zahlen in diesem Artikel platzieren, wurde die folgende Umgebung konfiguriert. Hardware Dell PowerEdge R310.Intel Xeon X3450 2 67GHz 1 Sockel, 4 Cores Sockel, HT Enabled. BIOS Power Management auf OS eingestellt DBPM. Xen P-State Governor auf Performance eingestellt, Max Idle State auf 1,2 x Western Digital WD2502ABYS eingestellt. Dev sda XenServer Installation guest s Root Festplatte. Dev sdb LVM SR mit einem 10 GiB RAW VDI an die guest. dom0 XenServer Creedence Build Nummer 88873.domU Debian Wheezy x8664.Wenn die Ausgabe der Fio Workload, wie in Tabelle 1 angegeben, sequenziell lesen 4 KiB-Anfragen mit libaio und mit iodepth auf 1 gesetzt Während 10 Sekunden ein iostat innerhalb des Gastes berichtet die folgenden. Der Wert von Interesse wird in der Spalte avgqu-sz gemeldet Es ist etwa 0 96 im Durchschnitt, während die Benchmark läuft Dies bedeutet, dass die Gast-Block-Schicht bezieht sich auf Abbildung 6 ist Handhabungsanforderungen fast die gesamte Zeit. Die nächste Schicht des Speichersubsystems, die für die Auslastung verantwortlich ist, ist tapdisk3 Dieser Wert kann erhalten werden, das opt xensource Debug xsiostat in dom0 zu erreichen. Für das gleiche Experiment berichtet es folgendes. Analogly, was im Gast beobachtet wurde , Xsiostat berichtet über die Zeit, in der es hervorragende Anfragen hatte. Bei dieser Schicht wird diese Zahl bei etwa 0 71 gemeldet, während die Benchmark läuft. Dies gibt eine Vorstellung von der Zeit, die zwischen einer Anforderung, die in der Blockschicht des Gastes berücksichtigt wird, vergangen ist Und bei der dom0 s backend-System Weiter geht es darum, iostat in dom0 laufen zu lassen und herauszufinden, was die wahrgenommene Nutzung in der letzten Schicht ist, bevor die Anfrage an den Gerätetreiber ausgegeben wird. Auf dieser Ebene berichtet die Blockschicht über 0 61 für die durchschnittliche Warteschlangengröße. Sehr der IO-Tiefe. Die Abschnitte oben geklärt, warum Benutzer eine niedrigere Warteschlangenauslastung in dom0 sehen könnten, wenn sie die Ausgabe von Performance-Tools in verschiedenen Schichten des Speichersubsystems verglichen werden. Die bisher gezeigten Beispiele wurden jedoch überwiegend abgedeckt Der Fall, in dem die IO-Tiefe auf 1 gesetzt ist. Dies bedeutet, dass das Benchmark-Tool innerhalb des Gastes lief, zB fio wird versuchen, jederzeit eine Anforderung zu bewältigen. Die Wahrnehmung dieses Werkzeugs könnte jedoch falsch sein, da es Zeit für die Anfrage gibt Tatsächlich die Speicherinfrastruktur erreichen. Mit der gleichen Umgebung, die auf dem vorherigen Abschnitt beschrieben wurde und allmählich die IO-Tiefe bei der Benchmark-Konfiguration erhöht, können die folgenden Daten gesammelt werden. Figure 7 Durchschnittliche Warteschlangengröße vs io Tiefe, wie in fio. This Artikel erklärt was Die durchschnittliche Warteschlangengröße ist und wie es berechnet wird. Als Beispiel enthält es reale Daten aus bestimmten Server - und Datenträgertypen. Dies sollte klären, warum bestimmte Workloads unterschiedliche Warteschlangen-Auslastungen aus dem Gast und von dom0.Follow ich auf twitter franciozzy ich habe War ein Software-Performance-Ingenieur für Citrix seit Oktober 2011, genauer auf XenServer Storage Virtualisierung Bisher habe ich eine Promotion am Imperial College London am selben Thema bearbeitet. In Bezug auf Computing und neben Performance-Bewertung von virtualisierten Speicher, meine Interessen auch Computernetzwerke, verteilt Systeme und Hochleistungs-Computing, um nur einige zu nennen In meiner Freizeit spiele ich gerne meine Bass-Gitarren, übe Kyokushin Karate und mache Nahaufnahmen Magie Oh, und Poker und Chess zu spielen. Zu den letzten Beiträgen. Montag, 25. Mai 2015 When Virtualized Speicher ist schneller als Bare Metal. Wednesday, 03 Dezember 2014 Durchschnittliche Warteschlangengröße und Speicher IO Metrics. Wednesday, 02. Juli 2014 XenServer Storage Performance Improvements und Tapdisk3.Tag, 31. Dezember 2013 Projekt Karcygwins und Virtualized Storage Performance. Tag, 01. Oktober 2013 VM Dichte und Projekt Pulsar. Tobias Kreidl am Mittwoch, den 03. Dezember 2014 19 17.Danke wie immer, Felipe, für den sehr aufschlussreichen Artikel. Mit einem Fall, in dem der Einsatzparameter sich 100 nähert, wäre dies ein Hinweis auf die Sättigung, also beiseite Von der Aufteilung eines dieser Speicher auf ein anderes Gerät insgesamt, welche Empfehlungen würden Sie über die Anpassung der Warteschlange Tiefe für bestimmte Geräte Mit einigen, wie SCSI oder HBA-Geräte, können Sie manipulieren die Warteschlange Tiefe sehen, zum Beispiel, aber Im Gegensatz zu etwas in VMware wie esxtop, bin ich nicht vertraut mit jedem Dienstprogramm auf Xenserver in der Lage sein, Warteschlange Tiefen zu überwachen Beste Grüße, - Tobias. Thanks viel wie immer, Felipe, für die sehr aufschlussreiche Artikel Mit einem Fall, wo die util-Parameter beginnt zu nähern 100, wäre dies ein Hinweis auf Sättigung, also abgesehen von der Aufteilung von einigen dieser Speicherung auf ein anderes Gerät insgesamt, welche Empfehlungen würden Sie über die Anpassung der Warteschlange Tiefe für bestimmte Geräte Mit einigen, wie SCSI oder HBA-Geräte, Du kannst die Warteschlangen-Tiefe zum Beispiel manipulieren, aber im Gegensatz zu etwas in VMware wie esxtop bin ich mit keinem Dienstprogramm auf Xenserver vertraut, um Warteschlangen-Tiefen zu überwachen. Mit freundlichen Grüßen, - Tobias. Felipe Franciosi am Dienstag, 16. Dezember 2014 19 20.Dank für die Frage und entschuldigt für die Verzögerung bei der Reaktion Die util Spalte nähert sich 100 normalerweise bedeutet, dass das Gerät ist die meiste Zeit beschäftigt nach den Buchhaltungsmechanismen, die ich in der Post erklärt Es ist wichtig zu markieren, dies bedeutet nicht, das Gerät Könnte nicht schneller gehen, zum Beispiel mit größeren Anfragen oder einer größeren Workload-Warteschlange Tiefe. Starting mit Creedence, wird xsiostat berichten die durchschnittliche Warteschlange Größe Trennung liest und schreibt Sie können das in Kombination mit iostat in der Gast und in dom0 zu arbeiten, wenn Ihr System könnte Tuning verwenden, wie z. B. die Anpassung der max-Warteschlangen-Tiefe für bestimmte Speichertreiber. Die Vorgaben sollten gut für die meisten Fälle unter Berücksichtigung eines Kompromisses zwischen Faktoren wie Speicher und CPU-Effizienz Having said that, ist es schwer, Empfehlungen zu machen Zu generisch, da gibt es in der Regel viele verschiedene Elemente beteiligt Ich würde jeden Fall einzeln anschauen und experimentieren, wo angemessen. Hop das hilft, Felipe. Hi Tobias, Vielen Dank für die Frage und entschuldigt für die Verzögerung bei der Reaktion Die util Spalte nähert 100 normalerweise bedeutet, dass Das Gerät ist die meiste Zeit beschäftigt nach den Buchhaltungsmechanismen, die ich in der Post erklärt habe. Es ist wichtig, dies zu markieren bedeutet nicht, dass das Gerät nicht schneller gehen kann, zum Beispiel mit größeren Anfragen oder einer größeren Workload-Warteschlangen-Tiefe beginnend mit Creedence, xsiostat Wird die durchschnittliche Warteschlange Größe Trennung liest und schreibt Sie können dies in Kombination mit iostat in der Gast und in dom0 zu arbeiten, wenn Ihr System könnte Tuning wie die Anpassung der max Warteschlange Tiefe für bestimmte Speichertreiber Die Vorgaben sollten gut für Die meisten Fälle unter Berücksichtigung eines Kompromisses zwischen Faktoren wie Speicher und CPU-Effizienz Having said that, ist es schwer, Empfehlungen, die zu generisch sind, da es in der Regel viele verschiedene Elemente beteiligt sind, würde ich bei jedem Fall einzeln aussehen und experimentieren, wo angemessen Hoffe, dass Hilft, Felipe. Wir erwarten, dass die Gesamtkosten für die Server-Infrastruktur um mehr als 35 reduziert werden, weil XenServer. Michael Markl Global Service-Inhaber SAP IT Infrastructure Communications Services, SAP AG. Virtuelle Maschinen sind Teil der Grupo Martins IT-Management-Kultur, weil die Zeit, die es braucht, um eine mit XenServer zu schaffen ist etwa 20 Minuten. Flavio Lucio Borges Martins da Silva CIO Grupo Martins. Unsere Aufgabe ist es, alle Fakultäten so viel wie möglich zu beherbergen, also mussten wir eine Lösung finden, die eine Vielzahl von Anwendungen unterstützen könnte und Speicherplatz und Personalressourcen sparen könnte. Hier ist Citrix, der die kommerzielle Unterstützung unterstützt Und Service von Citrix Wir helfen bei der Installation, dem technischen Support und der Optimierung von XenServer Kontakt Citrix. About XenServer. XenServer ist die führende Open-Source-Virtualisierungsplattform, die vom Xen Project Hypervisor und dem XAPI Toolstack angetrieben wird. Es wird in den weltweit größten Clouds eingesetzt Und Unternehmen.

Comments