Superuser

Autor Thema: Wieviel Speicher hat die Kiste?  (Gelesen 4796 mal)

Offline sgt_barnes

  • Mood Master
  • ****
  • Beiträge: 250
  • Der frühe Vogel fängt den Wurm, aber die zweite Maus kriegt den Käse!
    • Profil anzeigen
Wieviel Speicher hat die Kiste?
« 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

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

Wieviel Speicher hat die Kiste?
« am: 17. Juni 2003, 12:50:55 »

SmellyCat

  • Gast
Re: Wieviel Speicher hat die Kiste?
« Antwort #1 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
  • = Main; [1] = memory; etc [3] eben = 512 bei mir. Da die Werte immer in MB angegeben werden (nehme ich an) kann ich mir [4] schenken.

    Das ganze ist dann entweder ein Unterteil Deines Programms (sollte auch z. B. mit C oder C++ gehen) oder ein eigenständiges Scritp, wenn ja lass ihn die "512" in dem Bsp einfach in eine Datei schreiben die Du dann im eigentlichen Programm weiternutzt.

    Jetzt steht zur Frage wie eine Origin2000 z. B. hinv ausspuckt iirc RAM pro CPU, hier musst Du eben noch die Option einbinden dass mehere RAM Arrays definiert werden dürfen und die am Ende addiert werden... sollte kein Problem sein hast Du ein hinv von einer Origin2000 oder sonst einer dicken Kiste zum spielen.

    Umständlich aber funktioniert ;)

    bye

    Mats

Offline sgt_barnes

  • Mood Master
  • ****
  • Beiträge: 250
  • Der frühe Vogel fängt den Wurm, aber die zweite Maus kriegt den Käse!
    • Profil anzeigen
Re: Wieviel Speicher hat die Kiste?
« Antwort #2 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

Brombaer

  • Gast
Re: Wieviel Speicher hat die Kiste? Sicher zuwenig
« Antwort #3 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

SmellyCat

  • Gast
Re: Wieviel Speicher hat die Kiste?
« Antwort #4 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.

Jasper

  • Gast
Re: Wieviel Speicher hat die Kiste?
« Antwort #5 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!

Offline sgt_barnes

  • Mood Master
  • ****
  • Beiträge: 250
  • Der frühe Vogel fängt den Wurm, aber die zweite Maus kriegt den Käse!
    • Profil anzeigen
Re: Wieviel Speicher hat die Kiste?
« Antwort #6 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