~ubuntu-branches/ubuntu/gutsy/sysstat/gutsy-backports

« back to all changes in this revision

Viewing changes to sadc.c

  • Committer: Bazaar Package Importer
  • Author(s): Robert Luberda
  • Date: 2007-05-03 11:05:07 UTC
  • mfrom: (1.1.7 upstream)
  • Revision ID: james.westby@ubuntu.com-20070503110507-myx4tgq3em3dndbb
Tags: 7.1.4-1
New upstream version.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
/*
2
2
 * sadc: system activity data collector
3
 
 * (C) 1999-2006 by Sebastien GODARD (sysstat <at> wanadoo.fr)
 
3
 * (C) 1999-2007 by Sebastien GODARD (sysstat <at> wanadoo.fr)
4
4
 *
5
5
 ***************************************************************************
6
6
 * This program is free software; you can redistribute it and/or modify it *
142
142
void init_dk_drive_stat(void)
143
143
{
144
144
   file_stats.dk_drive = 0;
145
 
   file_stats.dk_drive_rio  = file_stats.dk_drive_wio  = 0;
146
 
   file_stats.dk_drive_rblk = file_stats.dk_drive_wblk = 0;
 
145
   file_stats.dk_drive_rio = file_stats.dk_drive_rblk = 0;
 
146
   file_stats.dk_drive_wio = file_stats.dk_drive_wblk = 0;
147
147
}
148
148
 
149
149
 
323
323
 */
324
324
void sa_sys_init(unsigned int *flags)
325
325
{
326
 
   /* How many processors on this machine ? */
 
326
   /* How many processors on this machine? */
327
327
   if ((cpu_nr = get_cpu_nr(NR_CPUS)) > 0)
328
328
      SREALLOC(st_cpu, struct stats_one_cpu, STATS_ONE_CPU_SIZE * cpu_nr);
329
329
 
739
739
          * Compute the uptime of the system in jiffies (1/100ths of a second
740
740
          * if HZ=100).
741
741
          * Machine uptime is multiplied by the number of processors here.
742
 
          * Note that overflow is not so far away: ULONG_MAX is 4294967295 on
743
 
          * 32 bit systems. Overflow happens when machine uptime is:
744
 
          * 497 days on a monoprocessor machine,
745
 
          * 248 days on a bi processor,
746
 
          * 124 days on a quad processor...
747
742
          */
748
743
         file_stats.uptime = file_stats.cpu_user   + file_stats.cpu_nice +
749
744
                             file_stats.cpu_system + file_stats.cpu_idle +
776
771
            }
777
772
            /* else additional CPUs have been dynamically registered in /proc/stat */
778
773
        
779
 
            if (!proc_nb)
 
774
            if (!proc_nb && !file_stats.uptime0)
780
775
               /*
781
776
                * Compute uptime reduced to one proc using proc#0.
782
 
                * Assume that proc#0 can never be offlined.
 
777
                * Done if /proc/uptime was unavailable.
783
778
                */
784
779
               file_stats.uptime0 = cc_user + cc_nice + cc_system +
785
780
                                    cc_idle + cc_iowait + cc_steal;
881
876
 
882
877
               if (dsk < disk_nr) {
883
878
                  st_disk_i = st_disk + dsk++;
884
 
                  st_disk_i->major = v_major;
885
 
                  st_disk_i->minor = v_index;
886
 
                  st_disk_i->nr_ios = v_tmp[0];
 
879
                  st_disk_i->major   = v_major;
 
880
                  st_disk_i->minor   = v_index;
 
881
                  st_disk_i->nr_ios  = v_tmp[0];
887
882
                  st_disk_i->rd_sect = v_tmp[2];
888
883
                  st_disk_i->wr_sect = v_tmp[4];
889
884
               }
944
939
 */
945
940
void read_proc_meminfo(void)
946
941
{
947
 
   FILE *fp;
948
 
   static char line[128];
949
 
 
950
 
   if ((fp = fopen(MEMINFO, "r")) == NULL)
 
942
   struct meminf st_mem;
 
943
   
 
944
   memset(&st_mem, 0, sizeof(struct meminf));
 
945
   
 
946
   if (readp_meminfo(&st_mem))
951
947
      return;
952
 
 
953
 
   while (fgets(line, 128, fp) != NULL) {
954
 
 
955
 
      if (!strncmp(line, "MemTotal:", 9))
956
 
         /* Read the total amount of memory in kB */
957
 
         sscanf(line + 9, "%lu", &(file_stats.tlmkb));
958
 
      else if (!strncmp(line, "MemFree:", 8))
959
 
         /* Read the amount of free memory in kB */
960
 
         sscanf(line + 8, "%lu", &(file_stats.frmkb));
961
 
 
962
 
      else if (!strncmp(line, "Buffers:", 8))
963
 
         /* Read the amount of buffered memory in kB */
964
 
         sscanf(line + 8, "%lu", &(file_stats.bufkb));
965
 
 
966
 
      else if (!strncmp(line, "Cached:", 7))
967
 
         /* Read the amount of cached memory in kB */
968
 
         sscanf(line + 7, "%lu", &(file_stats.camkb));
969
 
 
970
 
      else if (!strncmp(line, "SwapCached:", 11))
971
 
         /* Read the amount of cached swap in kB */
972
 
         sscanf(line + 11, "%lu", &(file_stats.caskb));
973
 
 
974
 
      else if (!strncmp(line, "SwapTotal:", 10))
975
 
         /* Read the total amount of swap memory in kB */
976
 
         sscanf(line + 10, "%lu", &(file_stats.tlskb));
977
 
 
978
 
      else if (!strncmp(line, "SwapFree:", 9))
979
 
         /* Read the amount of free swap memory in kB */
980
 
         sscanf(line + 9, "%lu", &(file_stats.frskb));
981
 
   }
982
 
 
983
 
   fclose(fp);
 
948
   
 
949
   file_stats.tlmkb = st_mem.tlmkb;
 
950
   file_stats.frmkb = st_mem.frmkb;
 
951
   file_stats.bufkb = st_mem.bufkb;
 
952
   file_stats.camkb = st_mem.camkb;
 
953
   file_stats.caskb = st_mem.caskb;
 
954
   file_stats.tlskb = st_mem.tlskb;
 
955
   file_stats.frskb = st_mem.frskb;
984
956
}
985
957
 
986
958
 
1469
1441
               /* Unused device: ignore it */
1470
1442
               continue;
1471
1443
            st_disk_i = st_disk + dsk++;
1472
 
            st_disk_i->major = major;
1473
 
            st_disk_i->minor = minor;
1474
 
            st_disk_i->nr_ios = rd_ios + wr_ios;
1475
 
            st_disk_i->rd_sect = rd_sec;
1476
 
            st_disk_i->wr_sect = wr_sec;
1477
 
            st_disk_i->rd_ticks = rd_ticks;
1478
 
            st_disk_i->wr_ticks = wr_ticks;
 
1444
            st_disk_i->major     = major;
 
1445
            st_disk_i->minor     = minor;
 
1446
            st_disk_i->nr_ios    = rd_ios + wr_ios;
 
1447
            st_disk_i->rd_sect   = rd_sec;
 
1448
            st_disk_i->wr_sect   = wr_sec;
 
1449
            st_disk_i->rd_ticks  = rd_ticks;
 
1450
            st_disk_i->wr_ticks  = wr_ticks;
1479
1451
            st_disk_i->tot_ticks = tot_ticks;
1480
 
            st_disk_i->rq_ticks = rq_ticks;
 
1452
            st_disk_i->rq_ticks  = rq_ticks;
1481
1453
        
1482
 
            file_stats.dk_drive += rd_ios + wr_ios;
1483
 
            file_stats.dk_drive_rio += rd_ios;
 
1454
            file_stats.dk_drive      += rd_ios + wr_ios;
 
1455
            file_stats.dk_drive_rio  += rd_ios;
1484
1456
            file_stats.dk_drive_rblk += (unsigned int) rd_sec;
1485
 
            file_stats.dk_drive_wio += wr_ios;
 
1457
            file_stats.dk_drive_wio  += wr_ios;
1486
1458
            file_stats.dk_drive_wblk += (unsigned int) wr_sec;
1487
1459
         }
1488
1460
      }
1530
1502
            if (ioc_iswhole(major, minor)) {
1531
1503
               /* OK: it's a device and not a partition */
1532
1504
               st_disk_i = st_disk + dsk++;
1533
 
               st_disk_i->major = major;
1534
 
               st_disk_i->minor = minor;
1535
 
               st_disk_i->nr_ios = rd_ios + wr_ios;
1536
 
               st_disk_i->rd_sect = rd_sec;
1537
 
               st_disk_i->wr_sect = wr_sec;
1538
 
               st_disk_i->rd_ticks = rd_ticks;
1539
 
               st_disk_i->wr_ticks = wr_ticks;
 
1505
               st_disk_i->major     = major;
 
1506
               st_disk_i->minor     = minor;
 
1507
               st_disk_i->nr_ios    = rd_ios + wr_ios;
 
1508
               st_disk_i->rd_sect   = rd_sec;
 
1509
               st_disk_i->wr_sect   = wr_sec;
 
1510
               st_disk_i->rd_ticks  = rd_ticks;
 
1511
               st_disk_i->wr_ticks  = wr_ticks;
1540
1512
               st_disk_i->tot_ticks = tot_ticks;
1541
 
               st_disk_i->rq_ticks = rq_ticks;
 
1513
               st_disk_i->rq_ticks  = rq_ticks;
1542
1514
        
1543
 
               file_stats.dk_drive += rd_ios + wr_ios;
1544
 
               file_stats.dk_drive_rio += rd_ios;
 
1515
               file_stats.dk_drive      += rd_ios + wr_ios;
 
1516
               file_stats.dk_drive_rio  += rd_ios;
1545
1517
               file_stats.dk_drive_rblk += (unsigned int) rd_sec;
1546
 
               file_stats.dk_drive_wio += wr_ios;
 
1518
               file_stats.dk_drive_wio  += wr_ios;
1547
1519
               file_stats.dk_drive_wblk += (unsigned int) wr_sec;
1548
1520
            }
1549
1521
         }
1570
1542
 */
1571
1543
void read_stats(unsigned int *flags)
1572
1544
{
 
1545
   /*
 
1546
    * Init uptime0. So if /proc/uptime cannot fill it,
 
1547
    * this will be done by /proc/stat.
 
1548
    * If cpu_nr = 1, force /proc/stat to fill it.
 
1549
    * If cpu_nr = 0, uptime0 and uptime are equal.
 
1550
    * NB: uptime0 is always filled.
 
1551
    */
 
1552
   file_stats.uptime0 = 0;
 
1553
   if (cpu_nr > 1)
 
1554
      readp_uptime(&(file_stats.uptime0));
1573
1555
   read_proc_stat(*flags);
 
1556
   if (!cpu_nr)
 
1557
      file_stats.uptime0 = file_stats.uptime;
1574
1558
   read_proc_meminfo();
1575
1559
   read_proc_loadavg();
1576
1560
   read_proc_vmstat();
1617
1601
       * Init file_stats structure. Every record of other structures
1618
1602
       * is set when reading corresponding stat file (records are set
1619
1603
       * to 0 if there are not enough data to fill the structure).
 
1604
       * Exception for individual CPU's structures which must not be
 
1605
       * init'ed to keep values for CPU before they were disabled.
1620
1606
       */
1621
1607
      memset(&file_stats, 0, FILE_STATS_SIZE);
1622
1608