]> Zhao Yanbai Git Server - minix.git/commitdiff
getloadavg
authorBen Gras <ben@minix3.org>
Mon, 14 Nov 2005 15:58:07 +0000 (15:58 +0000)
committerBen Gras <ben@minix3.org>
Mon, 14 Nov 2005 15:58:07 +0000 (15:58 +0000)
include/minix/com.h
include/minix/syslib.h
include/minix/type.h
include/stdlib.h
include/unistd.h

index e4bf92c8820727748099e925115da1e2404a7875..8508826103bf51480ca97c3d714d13c914caf72b 100755 (executable)
 #   define GET_MACHINE           12    /* get machine information */
 #   define GET_LOCKTIMING 13   /* get lock()/unlock() latency timing */
 #   define GET_BIOSBUFFER 14   /* get a buffer for BIOS calls */
+#   define GET_LOADINFO   15   /* get load average information */
 #define I_PROC_NR      m7_i4   /* calling process */
 #define I_VAL_PTR      m7_p1   /* virtual address at caller */ 
 #define I_VAL_LEN      m7_i1   /* max length of value */
index 4de6e077ad56ebf3a95565592444b19ba50d2baa..8317ea6f5045642b2a775eab5ae228cc14abc209 100755 (executable)
@@ -106,6 +106,7 @@ _PROTOTYPE(int sys_segctl, (int *index, u16_t *seg, vir_bytes *off,
 /* Shorthands for sys_getinfo() system call. */
 #define sys_getkmessages(dst)  sys_getinfo(GET_KMESSAGES, dst, 0,0,0)
 #define sys_getkinfo(dst)      sys_getinfo(GET_KINFO, dst, 0,0,0)
+#define sys_getloadinfo(dst)   sys_getinfo(GET_LOADINFO, dst, 0,0,0)
 #define sys_getmachine(dst)    sys_getinfo(GET_MACHINE, dst, 0,0,0)
 #define sys_getproctab(dst)    sys_getinfo(GET_PROCTAB, dst, 0,0,0)
 #define sys_getprivtab(dst)    sys_getinfo(GET_PRIVTAB, dst, 0,0,0)
index a3aa7de54bc1f879d57d0d79a22d07786ad29a3f..8c260335615e55830803112a92c5239db4cd4c22 100755 (executable)
@@ -107,6 +107,24 @@ struct kinfo {
   int relocking;               /* relocking check (for debugging) */
 };
 
+/* Load data accounted every this no. of seconds. */
+#define _LOAD_UNIT_SECS                 6 
+
+/* Load data history is kept for this long. */
+#define _LOAD_HISTORY_MINUTES  15
+#define _LOAD_HISTORY_SECONDS  (60*_LOAD_HISTORY_MINUTES)
+
+/* We need this many slots to store the load history. */
+#define _LOAD_HISTORY  (_LOAD_HISTORY_SECONDS/_LOAD_UNIT_SECS)
+
+/* Runnable processes and other load-average information. */
+struct loadinfo {
+  u16_t procs_enqueued;                /* current no. of runnable processes */
+  u16_t proc_load_history[_LOAD_HISTORY];      /* history of proc_s_cur */
+  u16_t proc_last_slot;
+  clock_t last_clock;
+};
+
 struct machine {
   int pc_at;
   int ps_mca;
index 827a691648d7d12e9b48637503fcf336d5d18813..670893f3cad26a2fea33ca4bc0b0dcadae7d7f24 100755 (executable)
@@ -71,6 +71,7 @@ _PROTOTYPE( char *initstate, (unsigned _seed, char *_state,
 _PROTOTYPE( long random, (void)                                                );
 _PROTOTYPE( char *setstate, (const char *state)                                );
 _PROTOTYPE( void srandom, (unsigned seed)                              );
+_PROTOTYPE( int getloadavg, (double *, int)                            );
 #endif
 
 #ifdef _MINIX
index f05e94add4f9c99c36cf2033a69c51d99a0c3309..c45f945003105e2460780ebe242b04dfb29ff451 100755 (executable)
@@ -42,6 +42,7 @@
 #define SI_DMAP_TAB       3    /* get device <-> driver mappings */
 #define SI_MEM_ALLOC      4    /* get memory allocation data */
 #define SI_DATA_STORE     5    /* get copy of data store */
+#define SI_LOADINFO       6    /* get copy of load average structure */
 
 /* NULL must be defined in <unistd.h> according to POSIX Sec. 2.7.1. */
 #define NULL    ((void *)0)