mood-indigo.org - Das unabhängige Silicon Graphics User Forum

Irix => Programmieren, Kompilieren => Thema gestartet von: sgt_barnes am 17. Juni 2003, 12:50:55

Titel: Wieviel Speicher hat die Kiste?
Beitrag von: sgt_barnes am 17. Juni 2003, 12:50:55
Ok, ok, ich weiss: eigentlich will man das als Programm gar nicht wissen, da kümmert sich ja das Betriebssystem drum.

Ich will aber trotzdem irgendwie rauskriegen, wieviel Speicher in der Kiste verbaut ist, auf der mein Programm gerade läuft.

sysinfo(2) und sysconf(3C) liefern alles mögliche nur nicht das was ich suche, getinvent(3) scheint die Information irgendwie zu liefern, aber anscheinend bediene ich das falsch (frisst sich in einer Endlosschleife fest).

Langer Rede kurzer Sinn: Wie kann man in einem Programm unter IRIX feststellen wieviel Speicher die Maschine hat? Gibt es irgendwo ein Beispiel zu getinvent(3) ?

Danke,
Tilmann
Titel: Re: Wieviel Speicher hat die Kiste?
Beitrag von: SmellyCat am 17. Juni 2003, 13:26:13
mit "hinv"

Du willst es automatisieren? - Übergib hinv an das Programm, jede Zeile eine Variable und lass alles rausschmeissen bis auf "Main memory size: xxx MB"

Da das, entsprechend der Anzahl der CPUs, immer in einer anderen Zeile steht kannst Du nicht die Variable nach den Zeilen rauspicken sondern musst sie nach einem eindeutigem Kennzeichner suchen, eben "Main memory..."
Machst Du es in Perl als Array ist die Mem Size "@var[3]"

Ein Bsp - ich übergebe das an ein Perl Script:
---
2 270 MHZ IP27 Processors
CPU: MIPS R12000 Processor Chip Revision: 2.3
FPU: MIPS R12010 Floating Point Chip Revision: 2.3
Main memory size: 512 Mbytes
Instruction cache size: 32 Kbytes
Data cache size: 32 Kbytes
Secondary unified instruction/data cache size: 4 Mbytes
Integral SCSI controller 0: Version QL1040B (rev. 2), single ended
 Disk drive: unit 1 on SCSI controller 0
 Disk drive: unit 2 on SCSI controller 0
 Disk drive: unit 3 on SCSI controller 0
 Disk drive: unit 4 on SCSI controller 0
 Disk drive: unit 5 on SCSI controller 0
Integral SCSI controller 1: Version QL1040B (rev. 2), single ended
 CDROM: unit 1 on SCSI controller 1
IOC3/IOC4 serial port: tty1
IOC3/IOC4 serial port: tty2
IOC3 parallel port: plp1
Integral Fast Ethernet: ef0, version 1, module 1, slot MotherBoard, pci 2
Origin 200 base I/O, module 1 slot 1
IOC3/IOC4 external interrupts: 1
---

nun habe ich x Vars - eben für jede Zeile eine. Nun mach ich aus jeder scalaren eine Array somit kann ich die Variablen nach Werten durchsuchen und kann die einzelnen Werte ändern.

Jetzt durchsuche ich die Arrays nach @var[0] = Main; - so hat das Programm die Variable rausgepickt die ich wissen will, eben die Memsize. Weiter weiss ich dass beim Hinv die schreibweise immer die selbe ist. Sprich
Titel: Re: Wieviel Speicher hat die Kiste?
Beitrag von: sgt_barnes am 17. Juni 2003, 14:05:10
Danke Mats, das geht auf jeden Fall. Aber schön ist das nicht, ich hatte gehofft, dass ich das wie mit dem Linux-sysinfo mit einem einzigen call erledigen kann. :(

Na ja, ich werde heute Abend mal ein wenig mit dem getinvent rumspielen (der das Interface zum Hardware Inventory darstellt).  Evtl. mal einfach alles rausdumpen, was da kommt. Der hinv muss das ja auch irgendwie rauskriegen!

Und wenn das nix hilft dann eben analog Deiner Lösung mit dem guten alten exec und dann strcmp... :-/

Tilmann
Titel: Re: Wieviel Speicher hat die Kiste? Sicher zuwenig
Beitrag von: Brombaer am 17. Juni 2003, 21:24:25
Hab leider meine SGI-Kiste nicht in der Nähe aber hat SGI nicht ein /proc-Filesystem in dem diese Einträge in irgendeinem File drin stehen ?

Gruß

Matthias
Titel: Re: Wieviel Speicher hat die Kiste?
Beitrag von: SmellyCat am 17. Juni 2003, 22:55:11
dachte ich auch aber:

sind nur viiiiiiele Files mit viiiiiielen Zahlen als Bez drinnen, alle durchgehen wollte ich dann nun auch nicht, eine schöne Aufschlüsslung a la Linux ist leider nicht vorhanden.
Titel: Re: Wieviel Speicher hat die Kiste?
Beitrag von: Jasper am 17. Juni 2003, 23:18:20
Aber, aber, geht doch mit getinvent:

Nach Blick in sys/invent.h:
======= CUT HERE ============


#include <stdio.h>
#include <invent.h>
#include <stdlib.h>

int main(int argc, char ** argv) {
   unsigned int error = 0;
   int entry_num = 0;
   inventory_t * invEntry;

   printf("Reading inventory:\n");
   printf("=================;\n");

   error = setinvent();

   if(error == -1) {
     printf("Error initializing inventory, exiting!!!\n");
     exit(1);
   }

   while((invEntry = getinvent()) != NULL) {
     printf("Entry: %d\n", ++entry_num);
     if(invEntry->inv_class==INV_MEMORY &&
        invEntry->inv_type==INV_MAIN || invEntry->inv_type==INV_MAIN_MB) {
         printf("\tClass     : %d\n", invEntry->inv_class);
         printf("\tType      : %d\n", invEntry->inv_type);
         printf("\tController: %d\n", invEntry->inv_controller);
         printf("\tUnit      : %d\n", invEntry->inv_unit);
         printf("\tState     : %ld\n", invEntry->inv_state);
     }
   }
   endinvent();
}


===========CUT HERE =============================

Latscht durch deine inventory table, falls die Werte fuer inv_class und inv_type passen, steht in inv_state der gesuchte Wert drin (was INV_MAIN ist, habe ich allerdings nicht rauskriegen koennen, ich vermute, die RAM-Groesse in Byte...)

Viel Spass!
Titel: Re: Wieviel Speicher hat die Kiste?
Beitrag von: sgt_barnes am 18. Juni 2003, 13:04:34
Ist wie jedesmal: Wer lesen kann ist klar im Vorteil.

Das endinvent() hatte ich natürlich nicht drin und dummerweise die Funktion zweimal aufgerufen. Bei zweiten mal war dann natürlich Schicht im Schacht, weil da nie "INV_MEMORY" kam (kam ja nur noch NULL zurück). ::)

Danke Jasper!

in <sys/invent.h> findet sich dann irgendwo der folgende Kommentar:


/* types for class memory */
/* NB. the states for class memory are sizes in bytes */


Also steht in inv_state die RAM-Grösse in Bytes wenn (inv_type == INV_MAIN).

MfG,
Tilmann