Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Do Mär 28, 2024 10:20

Foren-Übersicht » Sonstiges » Projekte
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: HardProf
BeitragVerfasst: So Mär 04, 2012 00:13 
Offline
DGL Member
Benutzeravatar

Registriert: Di Mai 18, 2004 16:45
Beiträge: 2621
Wohnort: Berlin
Programmiersprache: Go, C/C++
HardProf
HardProf steht für Hardware Profile und ist ein Service für Entwickler, welcher Informationen über Hardware bereit stellt.
Diese Informationen sind keine auflistungen von den Hardware-Specs, sondern zielen viel mehr auf Programmierer Spezifische Informationen ab.
Mit Hilfe dieses Services solle es Entwickler leichter gemacht werden, sich für bestimmte Technologien zu entscheiden und Indikatoren für Optimierungen bieten.
Der Services besteht aus 2 Komponenten, zum einem die Website, welche die Daten aufbereitet und zugriff gewährt und zum anderen ein Client, welcher die Informationen zusammen trägt und in die Datenbank einpflegt.

Technisches
Das Projekt verwendet jQuery, PHP, MySQL, C++ und die Radon Framework Bibliothek.

Als Kommunikationsprotokoll, zwischen Client und Upload-Service wird JSON over TCP/IP verwendet.

Der Upload-Service erkennt die einzelnen Devices und reduziert die notwendigen DB Einträge auf ein minimum.
Doppelte Einträge, von Devices, sind nicht möglich und jede Eigenschaft, eines Device, ist mit einem Standardwert belegt.
Sobald eine Eigenschaft nicht den Standardwert besitzt, wird die Eigenschaft in die Datenbank übernommen.

Mit Hilfe von jQuery und Plugins ist es sehr einfach, in den Daten zu suchen, zu sortieren und übersichtlich dar zu stellen.

Die Datenbank nutzt ein Property System, welches aus 2 Teilen besteht.
Der statische Teil ist die Definition von Gruppen, Devices und Properties und der dynamische Teil sind die Datensätze, die mit Hilfe der Definitionen implementiert wird.
Der Vorteil dieses Systems ist das einfache ändern, erweitern, entfernen von jeglichen Daten.
Dies hat aber den Preis, der höheren Prozessornutzung.

Der Client soll möglichst auf jeden Geräten laufen, das Hauptaugenmerk liegt allerdings auf PC-Windows/Linux, iOS und Android Geräten. Der Client ist mit C++ entwickelt und erzeugt nach einem erfolgreichen Durchlauf ein JSON File.
Diese kann, wenn möglich, vom Client aus zum Upload-Service hoch geladen werden oder muss manuell hochgeladen werden(wenn keine Verbindung besteht).
Dieses Projekt ist ein unter Projekt vom Radon Framework und verwendet dieses für alle low level Funktionalitäten und dient zur verbesserung des Hauptprojektes.
Sämtliche Informationen, über Hardware und Logischen Informationen werden durch das Framework geliefert, während spezifische Tests und die High level Logik im HardProf Projekt liegen.
Der Client ist ein Kommandozeilen Tool, welches als Kommunikation, zwischen User und Programm, die JSON Datei, Konsolenausgabe und Programm Parameter bietet.

Projekt Ressourcen

Website
Manueller Upload
Web code

Meinungs Thread

Todo
  1. Einfacher client zum generieren von JSON file
  2. hochladen der Datei
  3. erste Werte erfassen
  4. Generierung von eindeutigen User Keys
  5. speichern/laden eines user keys im lokalen filesystem
  6. DB um User funktionalität erweitern

_________________
"Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren"
Benjamin Franklin

Projekte: https://github.com/tak2004


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: HardProf
BeitragVerfasst: Do Mär 15, 2012 12:53 
Offline
DGL Member
Benutzeravatar

Registriert: Di Mai 18, 2004 16:45
Beiträge: 2621
Wohnort: Berlin
Programmiersprache: Go, C/C++
Ich hab gestern den Code für das auslesen, der CPU Extensions fertig gemacht.
Ursprünglich habe ich diese Informationen aus dem SMBIOS ausgelesen aber das ist ein Umweg, der für diese Aufgabe komplizierter ist, als der direkte Weg.
Ich habe nicht stumpf alle Extensions raus gezogen, sondern mir ganz bewusst welche raus gepickt.
Neben den üblichen SIMD Extensions(wovon es ne menge gibt), sind auch Atomic Operation 8 und 16Byte, Conditional Move, encryption und RDTSC Extensions in der Auswahl gelandet.
Es gibt noch einige Extensions mehr aber die sind entweder für die Entwicklung von OS, Debugger, Virtualisierung oder Monitoring wichtig, also nix wovon man als normaler Entwickler was hat.

Nun kommt noch Cache Informationen und CPU Name dazu, dann kann ich mal ein erstes json file raus schreiben lassen.
Ich werde mir wohl oder übel noch eine VM aufsetzten müssen, damit ich das auslesen mehrerer CPUs testen kann.

_________________
"Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren"
Benjamin Franklin

Projekte: https://github.com/tak2004


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: HardProf
BeitragVerfasst: Sa Mär 24, 2012 17:57 
Offline
DGL Member
Benutzeravatar

Registriert: Di Mai 18, 2004 16:45
Beiträge: 2621
Wohnort: Berlin
Programmiersprache: Go, C/C++
Ich habe nun alle CPU spezifischen Informationen über die Software auslesen können.
Code:
  1. Processor: 1/1
  2. AES: true
  3. AVX: true
  4. CLFLUSH: true
  5. CMOV: true
  6. CX16: true
  7. CX8: true
  8. FMA: false
  9. FMOV: true
  10. FPU: true
  11. HTT: true
  12. MMX: true
  13. MOVBE: false
  14. PCLMUL: true
  15. POPCNT: true
  16. SSE: true
  17. SSE2: true
  18. SSE3: true
  19. SSSE3: true
  20. SSE4_1: true
  21. SSE4_2: true
  22. TSC: true
  23. CPU company: GenuineIntel
  24. CPU brand:        Intel(R) Core(TM) i5-2500K CPU @ 3.30GHz
  25. Cores: 4
  26. Logical processors: 4


Die erste und letzten beiden Zeilen waren die eigentliche Arbeit, ich hab für die beiden Informationen gut 90% der Zeit investieren müssen.
Wieso war das so aufwändig ?
Die Anzahl der CPUs, Cores und Logischen Prozessoren kann man nicht aus einem Register oder per OS API abfragen.
Um dies zu bewerkstellen braucht muss man durch jeden verfügbaren logischen Prozessor(LP), den das OS bietet, ein cpuid laufen lassen.
Nach dem man alle notwendigen cpuid levels, für jeden LP gedumpt hat, kann man die maximal unterstützte LP Anzahl, APIC ID und Multi Prozessor support abfragen.
APIC ID stellt eine eindeutige ID für jeden logischen Prozessor dar und enthält die CPU ID, Core ID und Hyper Threading ID(wenn vorhanden).
Nun kann man über den Multi Prozessor support und maximale LP Anzahl die Bitmakse für APIC ID errechnen und sich die einzelnen IDs raus ziehen.
Sofern man diese hat, fängt man an die LP einer CPU und einem Core zu zu weisen und kann dann sagen, wieviele der LP, die das OS stellt zu einer CPU gehören und welche LP zu einem Kern gehören, sowie zu welcher CPU ein Kern gehört.
Dann kommen noch so lustige sachen, wie veraltete Register, da APIC nur bis zu 256 LP unterstützt(8Bit groß) aber es Systeme gibt, die mehr haben.
Eine CPU mit 8 Kernen und Hyper Threading hat 16 LP, wenn man also 17 solcher CPU's in einem Server verbaut, dann kann das Betriebssystem nicht den 17 Prozessor verwenden, daher 2xAPIC, welches 4Byte groß ist und viel Luft verschafft.

Klingt umständlich und das ist es auch :\
Sollte jemand auf die Idee kommen, ein Core nicht verfügbar zu machen, dann hat auch ein 4Kern CPU auf einmal nur 3 Kerne und man kann nicht erkennen, dass es eigentlich 4 sind. Das könnte man nur, in dem man eine Datenbank mit den wirklichen Kernanzahl verwendet.
Kernanzahl und LP sind nur in einem Fall unterschiedlich, wenn Hyper Threading zur verfügung steht, da dann auf ein Kern 2 LP laufen.

_________________
"Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren"
Benjamin Franklin

Projekte: https://github.com/tak2004


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: HardProf
BeitragVerfasst: Mi Apr 18, 2012 00:55 
Offline
DGL Member
Benutzeravatar

Registriert: Di Mai 18, 2004 16:45
Beiträge: 2621
Wohnort: Berlin
Programmiersprache: Go, C/C++
Ich habe ein neuen Codepath hinzu gefügt, damit weitere CPU's korrekt erkannt werden.
Ein bisschen Code refactoring hab ich noch gemacht und aktuell arbeite ich an Kommandozeilen Parametern.
Diese können, sobald diese fertig sind, ein binary dump aller CPUID Level, ein spezifischen CPUID Level und ein json file generieren.
Das json File kann dann erst einmal per Hand in die bereits existierende Formular übergeben werden.

_________________
"Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren"
Benjamin Franklin

Projekte: https://github.com/tak2004


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: HardProf
BeitragVerfasst: Mi Apr 25, 2012 10:14 
Offline
DGL Member
Benutzeravatar

Registriert: Di Mai 18, 2004 16:45
Beiträge: 2621
Wohnort: Berlin
Programmiersprache: Go, C/C++
Das Tool nutzt nun die Parameter API vom Radon Framework, um Kommandozeilen Parameter zu verarbeiten.
Es sind 3 Funktionen hinzu gekommen, ausgabe als Json File, dumpen von cpuid levels und dumpen aller cpuid levels für alle vorhandenen CPU's.
Der Code beträgt nun 228 Zeilen und ist recht Kompakt :)

Ich will als nächstes das Webinterface auf Rest umstellen und weg von RPC, ich hatte mir dort wenig Gedanken gemacht aber es wird einiges einfacher machen, wenn ich auf Rest umstelle.
Dann brauch ich noch ein bisschen Code für Web Requests und dann könnte ich sogar in die Alpha.

_________________
"Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren"
Benjamin Franklin

Projekte: https://github.com/tak2004


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Foren-Übersicht » Sonstiges » Projekte


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 38 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.039s | 17 Queries | GZIP : On ]