REG_HOSTER(3PVM)

πŸ“¦ version 3.4.6, in debian bookworm, ubuntu jammy

πŸ’… REG_HOSTER (3PVM) β€” the tea on pvm_reg_hoster 🫢

okay so bestie, welcome to PVM Version 3.4, and today's main character is the page REG_HOSTER(3PVM). she's niche. she's powerful. she is not for beginners and she said so herself. let's get into it πŸ’–


✨ NAME ✨

pvm_reg_hoster β€” register your task as a PVM slave starter, no cap πŸ‘‘


🌸 SYNOPSIS 🌸

C girlies, this is your moment:

#include <pvmsdpro.h>

int cc = pvm_reg_hoster()

Fortran girlies... Not Available. sorry bestie, it's giving exclusivity 😭


πŸ¦‹ DESCRIPTION πŸ¦‹

So what does this actually do? It registers the calling task as a PVM slave pvmd starter. And then the cute part: when the master pvmd gets a DM_ADD message, instead of starting the new slave pvmd processes itself, it passes the message to the hoster, and the hoster does the dirty work and sends a message back to the pvmd. teamwork makes the dream work fr fr 🫢

⚠️ Note: this function isn't for beginners. If you don't grok what it does, you probably don't need it. (she said what she said πŸ’€) For a more complete explanation of what's going on here, you should refer to the PVM source code and/or the user guide section on implementation β€” this is just a man page. That said...

🌈 the whole plot, step by step

When the master pvmd receives a DM_ADD message (that's a request to add hosts to the virtual machine), it:

  1. looks up the new host IP addresses,
  2. gets parameters from the host file if it was started with one,
  3. and sets default parameters.

Then it either attempts to start the processes itself (using rsh or rexec()) β€” or, if a hoster has registered, it sends it an SM_STHOST message. periodt.

πŸ’Œ the format of the SM_STHOST message is:

int nhosts                // number of hosts
{
    int tid               // of host
    string options        // from hostfile so= field
    string login          // in form ``[username@]hostname.domain''
    string command        // to run on remote host
} [nhosts]

The hoster should attempt to run each command on each host and record the result. a command usually looks like:

$PVM_ROOT/lib/pvmd -s -d8 -nhonk 1 80a9ca95:0f5a 4096 3 80a95c43:0000

and a reply from a slave pvmd like:

ddpro<2312> arch<ALPHA> ip<80a95c43:0b3f> mtu<4096>

πŸŽ€ the reply arc

When finished, the hoster should send a SM_STHOSTACK message back to the address of the sender (that's the master pvmd, bestie). The format of the reply message is:

{
    int tid               // of host, must match request
    string status         // result line from slave or error code
} []                      // implied count

The TIDs in the reply must match those in the request. They may be in a different order, however. (chaotic but valid ✨)

The result string should contain the entire reply (a single line) from each new slave pvmd, or an error code if something went wrong. Legal error codes are the literal names of the pvm_errno codes, for example `PvmCantStart`. The default PVM hoster can return PvmDSysErr or PvmCantStart, and the slave pvmd itself can return PvmDupHost.


🧚 the rules of the house (do NOT skip these)

  • The hoster must use pvm_setmwid() to set the wait ID in the reply message to the same value as in the request. The wait ID in the request is obtained by calling pvm_getmwid().
  • The hoster task must use pvm_setopt(PvmResvTids, 1) to allow sending reserved messages. iykyk.
  • Messages should be packed using encoding PvmDataDefault to ensure they can be unpacked anywhere in the system. literally everywhere. slay.

πŸ‘‘ return value

pvm_reg_hoster() returns PvmOk when successful. that's it. that's the win. ate and left no crumbs πŸ’…


🌟 SEE ALSO 🌟

  • pvm_addhosts(3PVM)
  • pvm_config(3PVM)
  • pvm_setmwid(3PVM)

and that's the whole page, bestie πŸ’œ this iconic lil man page is from 4 March, 1994 (yes she's vintage, yes she still serves), and she shipped with PVM Version 3.4. mwah πŸŽ€βœ¨

πŸ“¦ where this page comes from