📄 omctl.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 + -