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
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
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
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:
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:
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.