Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]4587[/thread]

Linux::Statistics

Leser: 1


<< |< 1 2 >| >> 11 Einträge, 2 Seiten
bloonix
 2006-05-06 02:10
#38723 #38723
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
Hallo,

ich komme im Moment einfach nicht weiter und brauche ein wenig Hilfe.

In meiner /proc/cpuinfo bzw. /proc/sysinfo Abfrage habe ich ein paar
Fehler gefunden, auf die mich jemand über CPAN aufmerksam
gemacht hat. Nun weiß ich allerdings nicht so recht, wie ich das
Problem am geschicktesten löse.

Auf x86 Hardware ist es so, dass es im /proc-Filesystem die cpuinfo
für - wie der Name schon sagt - die CPU Infos gibt. Auf IBM s390
Hardware sind die Infos allerdings etwas gesplittet. Hier gibt es nicht nur
/proc/cpuinfo, sondern auch /proc/sysinfo.

/proc/cpuinfo auf x86
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
processor       : 0
vendor_id : GenuineIntel
cpu family : 15
model : 4
model name : Intel(R) Pentium(R) 4 CPU 3.00GHz
stepping : 3
cpu MHz : 2992.682
cache size : 2048 KB
physical id : 0
siblings : 2
core id : 0
cpu cores : 1
fpu : yes
fpu_exception : yes
cpuid level : 5
wp : yes
flags : fpu vme de pse tsc msr pae # rest abgeschnitten
bogomips : 5994.78
clflush size : 64
cache_alignment : 128
address sizes : 36 bits physical, 48 bits virtual
power management:

processor : 1
vendor_id : GenuineIntel
cpu family : 15
model : 4
model name : Intel(R) Pentium(R) 4 CPU 3.00GHz
stepping : 3
cpu MHz : 2992.682
cache size : 2048 KB
physical id : 0
siblings : 2
core id : 0
cpu cores : 1
fpu : yes
fpu_exception : yes
cpuid level : 5
wp : yes
flags : fpu vme de pse tsc msr pae # rest abgeschnitten
bogomips : 5985.36
clflush size : 64
cache_alignment : 128
address sizes : 36 bits physical, 48 bits virtual
power management:


/proc/cpuinfo auf IBM s390
Code: (dl )
1
2
3
4
5
6
vendor_id       : IBM/S390
# processors : 3
bogomips per cpu: 2306.86
processor 0: version = FF, identification = 00C43F, machine = 2084
processor 1: version = FF, identification = 00C43F, machine = 2084
processor 2: version = FF, identification = 00C43F, machine = 2084


/proc/sysinfo auf IBM s390
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
Manufacturer:         IBM
Type: 2084
Model: 300
Sequence Code: 000000000003C43F
Plant: 83

CPUs Total: 10
CPUs Configured: 0
CPUs Standby: 0
CPUs Reserved: 10
Capability: 1968
Adjustment 02-way: 242
Adjustment 03-way: 234
Adjustment 04-way: 228
Adjustment 05-way: 222
Adjustment 06-way: 217
Adjustment 07-way: 212
Adjustment 08-way: 207
Adjustment 09-way: 202
Adjustment 10-way: 198

LPAR Number: 0
LPAR Characteristics: Dedicated
LPAR Name: LINUX
LPAR Adjustment: 1000
LPAR CPUs Total: 8
LPAR CPUs Configured: 8
LPAR CPUs Standby: 0
LPAR CPUs Reserved: 0
LPAR CPUs Dedicated: 8
LPAR CPUs Shared: 0

VM00 Name: LXZNFS01
VM00 Control Program: z/VM 5.2.0
VM00 Adjustment: 375
VM00 CPUs Total: 3
VM00 CPUs Configured: 3
VM00 CPUs Standby: 0
VM00 CPUs Reserved: 0


Nun möchte ich gerne in der nächsten Version 1.13 die Anzahl CPUs,
die Geschwindigkeit, den Modelnamen und die Cachesize jeder
einzelnen CPU zur Verfügung stellen.

Das ist beim Auslesen von /proc/cpuinfo auf x86 soweit kein Problem:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
      my $nmb;
$sys{CountCPUs} = 0;

while (<FC>) {
if (/^processor\s+:\s+(\d+)/) {
$nmb = $1;
$sys{CountCPUs}++;
} elsif (/^model name\s+:\s+(.*)/) {
$sys{CPUs}{"CPU$nmb"}{ModelName} = $1;
} elsif (/^cache size\s+:\s+(.*)/) {
$sys{CPUs}{"CPU$nmb"}{CacheSize} = $1;
} elsif (/^cpu MHz\s+:\s+(.*)/) {
$sys{CPUs}{"CPU$nmb"}{CPU_Power} = "$1 MHz";
}
}

# Die Hashstruktur schaut dann so aus:
'SysInfo' => {
'CPUs' => {
'CPU1' => {
'CPU_Power' => '2992.682 MHz',
'ModelName' => 'Intel(R) Pentium(R) 4 CPU 3.00GHz',
'CPU_Cache' => '2048 KB'
},
'CPU0' => {
'CPU_Power' => '2992.682 MHz',
'ModelName' => 'Intel(R) Pentium(R) 4 CPU 3.00GHz',
'CPU_Cache' => '2048 KB'
}
},


Okay, aber auf s390 ist das nicht ganz so einfach, denn leider erhalte
ich hier keine Informationen zu jeder einzelnen CPU und die sind auch
nicht mit den Infos von x86 CPUs zu vergleichen.

Wie könnte ich das Problem jetzt am besten angehen? Derjenige,
der die SysInfo's haben möchte, wird wohl auf unterschiedliche
Hashstrukturen stoßen, wenn die CPUs abgefragt werden. Das möchte
ich gerne irgendwie vermeiden oder zumindest so "bauen", dass die
Abfrage des Hashs für den Modulbenutzer nicht zum Chaos führt.

Ich weiß nicht mehr weiter... :(

Oder soll ich die Info's für die CPU auf einer Keyebene belassen und
irgendwie konkatenieren?

Was noch hinzukommt ist, dass ich absolut nicht weiß, wie die Infos
auf anderen Architekturen aussehen könnten, zum Beispiel auf Sun
oder HP Mainframes.

Gruss,
opi

---------------------
Das Modul: CPAN:Linux::Statistics\n\n

<!--EDIT|opi|1147021888-->
What is a good module? That's hard to say.
What is good code? That's also hard to say.
One man's Thing of Beauty is another's man's Evil Hack.
betterworld
 2006-05-06 02:15
#38724 #38724
User since
2003-08-21
2614 Artikel
ModeratorIn

user image
Ueber dieses Thema war vor einiger Zeit mal ein ziemlich langer Thread auf der Linux-Kernel-Mailingliste. Irgendwie waren viele Leute dafuer, dass Userspace-Programme sowieso nichts daraus auslesen sollten und daher der Unterschied der Syntax zwischen verschiedenen Achitekturen irrelevant ist. Vielleicht findest Du es ja in den Archiven.
bloonix
 2006-05-06 02:24
#38725 #38725
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
[quote=betterworld,06.05.2006, 00:15]Irgendwie waren viele Leute dafuer, dass Userspace-Programme sowieso nichts daraus auslesen sollten und daher der Unterschied der Syntax zwischen verschiedenen Achitekturen irrelevant ist.[/quote]
*URGS* ich möchte ungern auf diese Infos verzichten :(

Vielleicht könnte ich ja als absolute Notlösung die x86 CPU Infos so
belassen, wie ich es geplant habe, nur für Mainframe keine weiteren
"Keyebenen" anlegen, sondern direkt in 'SysInfo' => { CPUs = '' }
ablegen.

Beispiel:

CPUs => '3 CPUs, 2306.86 bogomips per CPU, model IBM/S390'

Um zumindest etwas zu liefern :/

Wenn es dann auf mancher Hardware nicht läuft, müsste ich mich auf
CPAN-Reports verlassen...

Oder aber ich stelle die Infos nur für x86 zur Verfügung - mit Vermerk
in der Doku - aber so richtig befriedigend ist das nicht und die Main-
fraimler fühlen sich getreten.

[quote=betterworld,06.05.2006, 00:15]Vielleicht findest Du es ja in den Archiven.[/quote]

oh je, hast du nicht einen Link? Wie lange ist das ungefähr her?\n\n

<!--EDIT|opi|1146867940-->
What is a good module? That's hard to say.
What is good code? That's also hard to say.
One man's Thing of Beauty is another's man's Evil Hack.
betterworld
 2006-05-06 03:23
#38726 #38726
User since
2003-08-21
2614 Artikel
ModeratorIn

user image
[quote=opi,06.05.2006, 00:24]oh je, hast du nicht einen Link? Wie lange ist das ungefähr her?[/quote]
http://search.luky.org/linux-kernel.2005/thrd32.ht...
bloonix
 2006-05-06 16:39
#38727 #38727
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
[quote=betterworld,06.05.2006, 01:23]http://search.luky.org/linux-kernel.2005/thrd32.ht...
Cool, danke. Ich habe mich auch gleich auf den Thread gestürzt.

Ganz interessant, was einige Leute davon halten, aber es ist natürlich
verständlich, das /proc/cpuinfo je nach Architektur anders ausschaut.

Ich werde mich dann auf die Anzahl CPUs beschränken, denn schon
diese Information zu erhalten ist nicht ganz einfach, denn in /proc/cpuinfo
auf x86 muss ich das Vorkommen von "processors" zählen, auf s390
muss ich die Zeile "# processors : 3" auslesen.

Danke für deine Mühe!! :)
What is a good module? That's hard to say.
What is good code? That's also hard to say.
One man's Thing of Beauty is another's man's Evil Hack.
betterworld
 2006-05-06 21:54
#38728 #38728
User since
2003-08-21
2614 Artikel
ModeratorIn

user image
[quote=opi,06.05.2006, 14:39]Ich werde mich dann auf die Anzahl CPUs beschränken, denn schon
diese Information zu erhalten ist nicht ganz einfach, denn in /proc/cpuinfo
auf x86 muss ich das Vorkommen von "processors" zählen, auf s390
muss ich die Zeile "# processors : 3" auslesen.[/quote]
Um mal Andrew Morton zu zitieren (das Original ist auf obigem Link zu finden):
Quote
Question is: do you need to know the number of CPUs (why?) or do you need
to know the number of CPUs which you're currently allowed to use or do you
need to know the maximum number of CPUs which you are allowed to bind
yourself to, or what?

Wobei ich natuerlich nicht behaupten moechte, dass ich mit der Chance rechne, in absehbarer Zeit auf einem System zu arbeiten, auf dem das einen Unterschied macht :)
bloonix
 2006-05-07 00:07
#38729 #38729
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
[quote=betterworld,06.05.2006, 19:54]Wobei ich natuerlich nicht behaupten moechte, dass ich mit der Chance rechne, in absehbarer Zeit auf einem System zu arbeiten, auf dem das einen Unterschied macht :)[/quote]
Da hast du vollkommen recht. Das Modul von mir heißt ja auch
Statistics.pm und nicht SystemInfo.pm oder so :)

Die Anzahl von CPUs hat also nichts direkt mit Statistiken zu
tun... aber indirekt vielleicht, da man auf s390 Hardware die
Anzahl der CPUs je Linuxgast unter VM selbst bestimmen kann.

Wenn ich nun plötzlich sehe, dass zwei oder drei der 40
virtuellen Linuxgäste eine hohe CPU Auslastung haben, ist die
Info, wieviel CPUs sie im Moment haben, vielleicht nicht ganz
so schlecht - als DropDown Feature die System Informationen
abfragen können, so wie es in gängiger Software möglich ist.

Und da ich leider selbst so unüberlegt gehandelt habe, als ich
die SysInfo Funktion schrieb und sie auch mit der ersten
Version mitlieferte, kann ich jetzt schlecht sagen "und
tschüss, die klau ich euch jetzt wieder" =)

Mein einziges absolutes grauen ist, dass das /proc Filesystem
in naher Zukunft auf Benutzerprozesse beschränkt wird, so
wie es auf BSD üblich ist...


Denn dann müsste ich in C/C++ die Funktionen schreiben und
ins Modul laden. Das halte ich nicht für einfach.

Naja, grausam diese Gerüchteküchen. Weißt du wieviel Wahr-
heit darin steckt?\n\n

<!--EDIT|opi|1146946313-->
What is a good module? That's hard to say.
What is good code? That's also hard to say.
One man's Thing of Beauty is another's man's Evil Hack.
betterworld
 2006-05-07 01:56
#38730 #38730
User since
2003-08-21
2614 Artikel
ModeratorIn

user image
[quote=opi,06.05.2006, 22:07]Naja, grausam diese Gerüchteküchen. Weißt du wieviel Wahr-
heit darin steckt?[/quote]
Nee. Aber einige Sachen sind ja schon nach sysfs umgezogen, wobei es wahlweise noch die procfs-Einträge zur Abwärtskompabilität gibt. Du kannst ja einfach Dein Modul anpassen... sollte nicht zu viel Aufwand sein.
bloonix
 2006-05-07 02:54
#38731 #38731
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
[quote=betterworld,06.05.2006, 23:56]Aber einige Sachen sind ja schon nach sysfs umgezogen[/quote]
Ja, aber das halte ich noch nicht für ausgereift. Solange ich all meine
Infos noch aus dem procfs erhalten kann, mache ich das so, denn unter
sysfs wird es wohl noch einige Änderungen in den nächsten Versionen
geben...

So, gute Nacht und bis morgen... mir fallen gleich die Augen zu =)
What is a good module? That's hard to say.
What is good code? That's also hard to say.
One man's Thing of Beauty is another's man's Evil Hack.
renee
 2006-05-07 18:47
#38732 #38732
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Ich würde das Modul wahrscheinlich etwas anders aufbauen:

CPAN:Linux::Statistics als Basis und "Erweiterungsmodule" für die einzelnen Komponenten - also Linux::Statistics::x86, Linux::Statistics::IBMS390, etc.

Dann könnten andere auch "Plugins" schreiben. Gut wäre es, wenn man immer CPAN:Linux::Statistics einbindet und dann nur angeben muss, welches System man benutzt und das x86 als Default einstellt.

Code: (dl )
1
2
3
use Linux::Statistics;

my $linux_stats = Linux::Statistics->new(System => 'x86');
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
<< |< 1 2 >| >> 11 Einträge, 2 Seiten



View all threads created 2006-05-06 02:10.