⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 omctl.c

📁 OpenMosix工具
💻 C
字号:
/*  Author(s): Ariel Rosenblatt, Amnon Shiloh  for Mosix                *//* Code derived from previous work by Amnon Shiloh and Oren Laadan.     *//*  Ported to OpenMosix kernel 2.6 by David Santo Orcero                *//*  Adapted to OpenMosix from Mosix and bugfixing by David Santo Orcero *//*  irbis@orcero.org  http://www.orcero.org/irbis                       *//* Mosix is (c) of prof. Amnon Barak http://www.mosix.org               *//* Original Mosix code is (c) of prof. Amnon Barak http://www.mosix.org *//* OpenMosix is (c) of Moshe Bar http://www.openmosix.com               *//* Each respective trademark is of its own owner                        *//* All rights reserved.                                                 *//* This software is distributed under GPL 2                             *//* THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTY IS ASSUMED.               *//* NO LIABILITY OF ANY KIND FOR ANY DAMAGES WHATSOEVER RESULTING            *//* FROM THE USE OF THIS SOFTWARE WILL BE ACCEPTED. IT CAN BURN              *//* YOUR HARD DISK, ERASE ALL YOUR DATA AND BROKE DOWN YOUR                  *//* MICROWAVE OVEN. YOU ARE ADVISED.                                         *//* THIS SOFTWARE IS PROVIDED IN ITS "AS IS" CONDITION, WITH NO WARRANTY     *//* WHATSOEVER. NO LIABILITY OF ANY KIND FOR ANY DAMAGES WHATSOEVER RESULTING*//* FROM THE USE OF THIS SOFTWARE WILL BE ACCEPTED.                          */#include "mos.h"#include "libbalancer.h"int64_tom_control (om_cmd_t cmd, int64_t arg, void *resp, int len, char *node){  struct decay_params *dec;  int val;  int64_t ofast, oslow, ointerval;  switch (cmd)    {    case D_STAY:      return (om_replace ("/proc/hpc/admin/stay", _MSXWR_NOK));    case D_NOSTAY:      return (om_replace ("/proc/hpc/admin/stay", _MSXWR_NOK));    case D_LSTAY:      return (om_replace ("/proc/hpc/admin/lstay", _MSXWR_NOK));    case D_NOLSTAY:      return (om_replace ("/proc/hpc/admin/lstay", _MSXWR_NOK));    case D_BLOCK:      return (om_replace ("/proc/hpc/admin/block", _MSXWR_NOK));    case D_NOBLOCK:      return (om_replace ("/proc/hpc/admin/block", _MSXWR_NOK));    case D_EXPEL:      return (om_write ("/proc/hpc/admin/expel", _MSXWR_NOK));    case D_BRING:      return (om_write ("/proc/hpc/admin/bring", _MSXWR_NOK));    case D_QUIET:      return (om_replace ("/proc/hpc/admin/quiet", _MSXWR_NOK));    case D_NOQUIET:      return (om_replace ("/proc/hpc/admin/quiet", _MSXWR_NOK));    case D_MFS:      return (om_replace ("/proc/hpc/admin/nomfs", _MSXWR_NOK));    case D_NOMFS:      return (om_replace ("/proc/hpc/admin/nomfs", _MSXWR_NOK));    case D_GETSSPEED:      return (om_read ("/proc/hpc/admin/sspeed"));    case D_SETSSPEED:      return (om_write ("/proc/hpc/admin/sspeed", arg));    case D_SETSPEED:      return (om_write ("/proc/hpc/admin/speed", arg));    case D_GETSPEED:      return (om_readnode (node, "speed"));    case D_GETLOAD:      return (om_readnode (node, "load"));    case D_GETMEM:      if ((*((int64_t *) resp) = om_readnode (node, "tmem")) == -1)	return (-1);      return (om_readnode (node, "mem"));    case D_GETRMEM:      if ((*((int64_t *) resp) = om_readnode (node, "tmem")) == -1)	return (-1);      return (om_readnode (node, "rmem"));    case D_GETSTAT:      return (om_readnode (node, "status"));    case D_GETUTIL:      return (om_readnode (node, "util"));    case D_GETPE:      return (om_read ("/proc/hpc/admin/mospe"));    case D_GETCPUS:      return (om_readnode (node, "cpus"));    case D_GETLOADLOCAL:      return (om_readnode (node, "loadlocal"));    case D_GETLOADREMOTE:      return (om_readnode (node, "loadremote"));    case D_GETCPULOCAL:      return (om_readnode (node, "cpulocal"));    case D_GETCPUREMOTE:      return (om_readnode (node, "cpuremote"));    case D_MOSIX_TO_IP:      printf	("WARNING: OpenMosix for kernels 2.6 uses IPs as node identificator.\n");      printf ("Please update your application/library.\n");      resp = (char *) malloc (strlen (node) * sizeof (char));      strcpy (resp, node);      return (1);    case D_IP_TO_MOSIX:      printf	("WARNING: OpenMosix for kernels 2.6 uses IPs as node identificator.\n");      printf ("Please update your application/library.\n");      resp = (char *) malloc (strlen (node) * sizeof (char));      strcpy (resp, node);      return (1);    case D_GETNTUNE:      return (om_count_ints ("/proc/hpc/admin/overheads"));    case D_GETTUNE:      return (om_fill_ints ("/proc/hpc/admin/overheads", (int *) resp, len));    case D_SETDECAY:      errno = EINVAL;      /* This gives a warning on 32-bits archs, but works, and will       * work without warnings on 64-bits architectures. */      dec = (struct decay_params *) arg;      if (dec->interval < _MSXWR_NOK || dec->interval > 65535 ||	  dec->fast < _MSXWR_NOK || dec->slow < dec->fast ||	  dec->slow > DECAY_QUOTIENT)	return (-1);      if (!om_readval ("/proc/hpc/admin/slowdecay", &oslow) ||	  !om_readval ("/proc/hpc/admin/fastdecay", &ofast) ||	  !om_readval ("/proc/hpc/admin/decayinterval", &ointerval))	return (-1);      if (!om_write	  ("/proc/hpc/admin/decayinterval", (int64_t) dec->interval))	return (-1);      if (dec->slow < ofast)	{	  if (!om_write ("/proc/hpc/admin/fastdecay", (int64_t) dec->fast))	    {	    restinterval:	      val = errno;	      om_write ("/proc/hpc/admin/decayinterval",			(int64_t) dec->interval);	      errno = val;	      return (-1);	    }	  if (!om_write ("/proc/hpc/admin/slowdecay", (int64_t) dec->slow))	    {	      val = errno;	      om_write ("/proc/hpc/admin/fastdecay", (int64_t) ofast);	      errno = val;	      goto restinterval;	      return (-1);	    }	}      else	{	  if (!om_write ("/proc/hpc/admin/slowdecay", (int64_t) dec->slow))	    goto restinterval;	  if (!om_write ("/proc/hpc/admin/fastdecay", (int64_t) dec->fast))	    {	      val = errno;	      om_write ("/proc/hpc/admin/slowdecay", (int64_t) oslow);	      errno = val;	      goto restinterval;	    }	}      return _MSXWR_NOK;    case D_GETDECAY:      dec = (struct decay_params *) resp;      if ((dec->interval =	   om_read ("/proc/hpc/admin/decayinterval")) == -1 ||	  (dec->slow =	   om_read ("/proc/hpc/admin/slowdecay")) == -1 ||	  (dec->fast = om_read ("/proc/hpc/admin/fastdecay")) == -1)	return -1;      return _MSXWR_NOK;    case D_SETWHERETO:      /* This gives a warning on 32-bits archs, but works, and will       * work without warnings on 64-bits architectures. */      printf ("This is not more the right way!!!!");      printf ("please use gotonode insead!!!!!!!!!!!!");      return (-1);    default:      return (-1);    }}intom_lock (void){  return (om_write ("/proc/self/lock", _MSXWR_NOK));}intom_unlock (void){  return (om_write ("/proc/self/lock", _MSXWR_NOK));}intom_get_own (int *decay, int *time){  return (om_readval2 ("/proc/hpc/decay/own", decay, time));}intom_get_decayinterval (void){  return (om_read ("/proc/hpc/admin/decayinterval"));}intom_get_fast (void){  return (om_read ("/proc/hpc/decay/fast"));}intom_get_slow (void){  return (om_read ("/proc/hpc/decay/slow"));}intom_get_cpujob (void){  return (om_read ("/proc/hpc/decay/cpujob"));}intom_get_iojob (void){  return (om_read ("/proc/hpc/decay/iojob"));}intom_get_slowdecay (void){  return (om_read ("/proc/hpc/admin/slowdecay"));}intom_get_fastdecay (void){  return (om_read ("/proc/hpc/admin/fastdecay"));}intom_migrate (char *node){  return (om_write_s ("/proc/self/migrate", node));}char *om_where_is (pid_t pid){  return (om_readproc_s (pid, "where"));}intom_is_lock (pid_t pid){  return (om_readproc (pid, "lock"));}intom_send (pid_t pid, char *node){  return (om_writeproc_s (pid, "goto", node));}intom_get_nmigs (pid_t pid){  return (om_readproc (pid, "nmigs"));}char *om_where_am_i (void){  return (om_read_s ("/proc/self/where"));}intom_self_is_lock (void){  return (om_read ("/proc/self/lock"));}intom_self_get_nmigs (void){  return (om_read ("/proc/self/nmigs"));}intom_send_back_home (pid_t pid){  return (om_writeproc (pid, "goto", (int64_t) D_GOBACKHOME));}intom_go_back_home (){  return (om_write ("/proc/self/migrate", (int64_t) D_GOBACKHOME));}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -