PVMD(1PVM)

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

πŸ’– PVMD β€” the PVM daemon πŸ’–

aka pvmd, pvmd3 β€” this is the manual page for the PVM daemon, straight out of PVM Version 3.4 πŸ¦‹


✨ NAME ✨

pvmd, pvmd3 β€” the PVM daemon, bestie. yes that's the whole name section, we're being efficient πŸ’…


🌸 SYNOPSIS 🌸

pvmd [ -options ] [ hostfile ]

πŸŽ€ DESCRIPTION πŸŽ€

okay so. pvmd3 is a daemon process that coordinates unix hosts in a virtual machine. and when I say one per host, I mean it β€” one pvmd3 must run on each host in the group. no skipping, no sharing, everybody gets their own 🫢

they provide the communication and process control functions that your user's PVM processes literally cannot live without. the daemon can be started manually with a host file argument, and that will automatically start the remote pvmds. the local and remote pvmds can also be started from the PVM console program pvm.

the name of the daemon executable is pvmd3. it is usually started by a shell script, $PVM_ROOT/lib/pvmd.

[v3.4 and later] Before running pvmd3, pvmd sources any commands in $HOME/.pvmprofile if this file exists. yes, it checks, yes it's a whole thing, iconic behavior honestly ✨


πŸ’… OPTIONS πŸ’…

The following options may be specified on the command line when starting the master pvmd or PVM console:

  • -dmask β€” Set the pvmd debug mask. this is for debugging the pvmd or libpvm (not intended to be used to debug application programs, so don't come for me). mask is the sum of the following bits and can be specified in hexadecimal (0x...), octal (0...) or decimal:
    • 0x1 β€” Packet routing
    • 0x2 β€” Message routing and entry points
    • 0x4 β€” Task state
    • 0x8 β€” Slave pvmd startup
    • 0x10 β€” Host table updates
    • 0x20 β€” Select loop (below packet layer)
    • 0x40 β€” IP network
    • 0x80 β€” Multiprocessor nodes
    • 0x100 β€” Resource manager interface
    • 0x200 β€” Application (messages with no destination, etc.)
    • 0x400 β€” Wait contexts
    • 0x800 β€” Shared memory operations
    • 0x1000 β€” Semaphores
    • 0x2000 β€” Locks
    • 0x4000 β€” Message route control
  • -nname β€” Specify an alternate hostname for the master pvmd to use. lowkey a lifesaver when gethostname() returns a name that isn't assigned to any network interface 😭

The following options are used by the master pvmd when starting slaves and are only of interest to someone writing a hoster. so like. don't just go using them, now. I'm serious, they said it not me πŸ™ˆ

  • -s β€” Start pvmd in slave mode. Hostfile cannot be used, and five additional parameters must be supplied: master pvmd index, master IP, master MTU, slave pvmd index, and slave IP.
  • -S β€” Same as -s, but the slave pvmd doesn't wait for its stdin to be closed after printing its parameters. used for manual startup.
  • -f β€” Slave doesn't fork after configuration (useful if the slave is to be controlled or monitored by some process). very "main character under observation" of it πŸŽ€

🌈 HOST FILE FORMAT 🌈

Every host in the virtual machine must have an entry in the host file. lines beginning with a splat (#), optionally preceded by whitespace, are ignored. shade noted, entry skipped πŸ’…

A simple host file might look like:

# my first host file
thud
fred
wilma
barney
betty

This specifies the names of five hosts to be configured in the virtual machine.

The master pvmd for a group is started by hand on the localhost, and it starts slaves on each of the remaining hosts using the rsh or rexec command. The master host may appear on any line of the host file. Host names cannot be numeric (IP) addresses, because they are passed to rsh and rexec(), which usually don't accept addresses. so like, don't try it, it will simply not work fr fr 😀

The simple format above works fine if you have the same login name on all five machines and the name of the master host in your .rhosts files on the other four. the dream setup honestly

There are several host file options available:

  • lo=NAME β€” Specifies an alternate login name (NAME) to use.
  • so=pw β€” This is necessary when the remote host cannot trust the master. Causes the master pvmd to prompt for a password for the remote host in the tty of the pvmd (note you can't start the master using the console or background it when using this option). you will see:
Password (honk.cs.utk.edu:manchek):

you should type your password for the remote host. The startup will then continue as normal. 🫢

  • dx=FILE β€” Specifies the path of the pvmd executable. FILE may be a simple filename, an absolute pathname, or a path relative to the user's home directory on the remote host. This is mainly useful to aid in debugging new versions of PVM, but may have other uses.
  • ep=PATH β€” Specifies a path for the pvmd to search for executable program components when spawning a new process. The path may have multiple elements, separated by colons (:).
  • wd=PATH β€” Specifies a working directory in which all spawned tasks on this host will execute.
  • sp=VALUE β€” Specifies the relative computational speed of this host compared to other hosts in the configuration. VALUE is an integer in the range [1 - 1000000].
  • bx=PATH β€” Specifies the debugger program path. Note: the environment variable PVM_DEBUGGER can also be set.
  • ip=NAME β€” Specifies an alternate IP address to use for the host. As with host names (when ip= is not used), the address must be a host name, not a numeric address, because it is passed to rsh and rexec(). This option allows one to pick a specific network interface for a machine without using the interface's name. It can also be used to create a virtual machine using symbolic (instead of actual) host names. very galaxy-brain of it ✨
  • so=ms β€” Rarely used. Causes the master pvmd to request user to manually perform the startup of a pvmd on a slave host when rsh and rexec network services are disabled but IP connectivity exists. See section "MANUAL STARTUP".
  • id=VMID β€” A new feature in PVM 3.4.4 is the concept of a "Virtual Machine ID". You can now set the VMID to an arbitrary string and this will distinguish and allow multiple virtual machines to run on the same set of hosts under the same userid. (This feature was originally introduced by SGI in their commercial PVM product, and has now been generalized for the public PVM system.) This feature seems to be something that people often want, and the id= hostfile option (or $PVM_VMID environment variable) is the cleanest way to provide this functionality, rather than overloading the SHAREDTMP compiler flag and other internals.
*** Make Sure *** that you appropriately set the $PVM_VMID environment variable in any shells from which PVM application tasks or the pvm console will be run, or else they won't know which virtual machine to attach to! 😭

By default, all hosts which are added to the virtual machine will inherit the same VMID. If hosts are added to the virtual machine which are running older versions of PVM (prior to 3.4.4), then the VMID will be ignored for those hosts, and hence these machines can only be added to one virtual machine for the given user. The VMID need not be consistent on every host in a virtual machine (although this is not necessarily advisable). iykyk

A dollar sign ($) in an option introduces a variable name, for example $PVM_ARCH. Names are expanded from environment variables by each pvmd.

Each of the flags above has a default value. These are:

  • lo β€” The loginname on the master host.
  • so β€” Nothing
  • dx β€” $PVM_ROOT/lib/pvmd (or environment variable PVM_DPATH)
  • ep β€” $HOME/pvm3/bin/$PVM_ARCH:$PVM_ROOT/bin/$PVM_ARCH
  • wd β€” $HOME
  • sp β€” 1000
  • bx β€” $PVM_ROOT/lib/debugger

You can change these by adding a line with a star (*) in the first field followed by the options, for example:

* lo=afriend so=pw

This sets new default values for lo and so for the remainder of the host file, or until the next * line. Options set on the last * line also apply to hosts added dynamically using pvm_addhosts(). sticky settings, obsessed

Host options can be set without starting the hosts automatically. Information on host file lines beginning with & is stored, but the hosts are not started until added using pvm_addhosts().

Example host file:

# host file for testing on various platforms
fonebone
refuge
# installed in /usr/local here
sigi.cs            dx=/usr/local/pvm3/lib/pvmd
# borrowed accts, "guest", don't trust fonebone
*                  lo=guest  so=pw
sn666.jrandom.com
cubie.misc.edu
# really painful one, must start it by hand and share a homedir
& igor.firewall.com  lo=guest2  so=ms  ep=bob/pvm3/bin/$PVM_ARCH

🧚 MANUAL STARTUP 🧚

When adding a host with this option set you will see on the tty of the pvmd:

*** Manual startup ***
Login to "honk" and type:
$PVM_ROOT/lib/pvmd -S -d0 -nhonk 1 80a9ca95:0cb6 4096 2 80a95c43:0000
Type response:

after typing the given command on host honk, you should see a line like:

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

type this line on the tty of the master pvmd. You should then see:

Thanks

and the two pvmds should be able to communicate. the handshake, the moment, the ceremony πŸŽ€

Note you can't start the master using the console or background it when using this option. fr, it needs your whole attention πŸ’…

πŸ‘‘ OVERLOADING HOSTS πŸ‘‘

You can force PVM to overload a host (start more than one pvmd on it) by putting a $ before the host name in the host file. This is not recommended unless you know what you're doing and have a good reason for it. You must build the PVM source with option OVERLOADHOST defined for it to work. like, genuinely, read that twice 😭

You may also need to use the ip= hostfile option to define several names with the same IP address. If two or more hosts in a PVM have the same name, they cannot be identified uniquely. πŸ’€


…and that's part 1 bestie, hold on, there's more coming 🌸

πŸ›‘ STOPPING PVMD3 πŸ›‘

okay bestie, listen up, because there is a right way to shut this whole thing down and a chaotic way πŸ’€

The preferred method of stopping all the pvmds is to give the halt command in the PVM console. Periodt. That one command kills all PVM tasks, all the remote daemons, the local daemon, and finally the console itself. Like, it takes the whole squad down in one go. πŸ’…

But if you're out here killing the master pvmd manually β€” no judgment, we've all been there πŸ™ˆ β€” it should be sent a SIGTERM signal so it can kill the remote pvmds and clean up various files. Don't just yank it, okay? It needs a minute to tidy up. 🧹


⚠️ vibe check, and this one's important: the pvmd can be killed in a manner that leaves the file /tmp/pvmd.uid behind on one or more hosts. Uid is the numeric user ID (from /etc/passwd) of the user. This will prevent PVM from restarting on that host. 😭

Deletion of this file will fix this problem:

rm `( grep $user /etc/passwd || ypmatch $user passwd )
     | awk -F: '{print "/tmp/pvmd."$3; exit}'`

slay that file and you're back in business ✨


πŸ“ FILES πŸ“

the receipts, bestie β€” every path and what it's giving 🫢

  • $PVM_ROOT/lib/pvmd β€” PVM daemon startup script
  • $PVM_ROOT/lib/$PVM_ARCH/pvmd3 β€” PVM daemon executable
  • $HOME/.pvmprofile β€” Shell commands read by pvmd before running pvmd3
  • $HOME/pvm3/bin/$PVM_ARCH β€” Private PVM executable directory
  • $PVM_ROOT/pvm3/bin/$PVM_ARCH β€” System PVM executable directory
  • /tmp/pvmd.uid β€” Pvmd local socket address
  • /tmp/pvml.uid β€” Pvmd runtime error log
  • $HOME/.rhosts β€” File allowing access to a host from other hosts

πŸ‘€ SEE ALSO πŸ‘€

go read these next, i'm literally obsessed with them:


and that's the whole page, bestie!! πŸŽ€ this one's from 06 May, 1994 and it lives under PVMD(1PVM) β€” yeah, it's lowkey vintage, it's giving retro icon energy πŸ‘‘ no cap, now go forth and halt responsibly πŸ’–

πŸ“¦ where this page comes from