PVMD(1PVM)
π PVMD(1PVM) β the PVM daemon, aka pvmd, aka pvmd3 π
okay bestie, sit down, hydrate, and let's talk about the daemon that literally holds your whole virtual machine together π«Ά
β¨ NAME β¨
pvmd, pvmd3 β the PVM daemon. that's it, that's the name, she's iconic and she knows it π
πΈ SYNOPSIS πΈ
pvmd [ -options ] [ hostfile ]
look at her. so simple. so powerful. no cap. β¨
π¦ DESCRIPTION π¦
So Pvmd3 is a daemon process, and what she does is coordinate unix hosts into one big virtual machine. One pvmd3 must run on every single host in the group β like, no exceptions, everyone shows up to the group chat or nobody gets anything done π
They're the ones providing all the communication and process control functions that your user's PVM processes need. The daemon can be started manually with a host file argument, and that will automatically start the remote pvmds. You can also start the local and remote pvmds from the PVM console program pvm.
The name of the daemon executable is pvmd3. It's usually started by a shell script, $PVM_ROOT/lib/pvmd. (she doesn't answer to her legal name in public, we get it π)
[v3.4 and later] Before running pvmd3, pvmd sources any commands in $HOME/.pvmprofile if this file exists. cute little pre-game ritual, love that for her β¨
π OPTIONS π
The following options may be specified on the command line when starting the master pvmd or PVM console:
-dmaskβ Set pvmd debug mask. This one's for debugging the pvmd or libpvm (NOT intended to be used to debug application programs, bestie, stay in your lane π). Mask is the sum of the following bits and can be specified in hexadecimal (0x...), octal (0...) or decimal:0x1β Packet routing0x2β Message routing and entry points0x4β Task state0x8β Slave pvmd startup0x10β Host table updates0x20β Select loop (below packet layer)0x40β IP network0x80β Multiprocessor nodes0x100β Resource manager interface0x200β Application (messages with no destination, etc.)0x400β Wait contexts0x800β Shared memory operations0x1000β Semaphores0x2000β Locks0x4000β Message route control
-nnameβ Specify an alternate hostname for the master pvmd to use. Super handy whengethostname()returns a name that isn't assigned to any network interface. like girl, that's not your name, please use the one on your ID π
The following options are used by the master pvmd when starting slaves, and they're only of interest to someone writing a hoster. Don't just go using them, now. (seriously, she said what she said π)
-sβ Start pvmd in slave mode.Hostfilecannot 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).
π 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. (the # is giving "not today, this line is cancelled" π)
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. (flintstones house, we love to see it π)
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. no numbers-only energy allowed, she needs a real name π«
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.
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) and 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.FILEmay 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.VALUEis an integer in the range[1 - 1000000].bx=PATHβ Specifies the debugger program path. Note: the environment variablePVM_DEBUGGERcan also be set.ip=NAMEβ Specifies an alternate IP address to use for the host. As with host names (whenip=is not used), the address must be a host name, not a numeric address, because it is passed torshandrexec(). 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 "choose your own identity" 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 whenrshandrexecnetwork 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 theVMIDto 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 theid=hostfile option (or$PVM_VMIDenvironment variable) is the cleanest way to provide this functionality, rather than overloading theSHAREDTMPcompiler flag and other internals.
* Make Sure * that you appropriately set the$PVM_VMIDenvironment variable in any shells from which PVM application tasks or thepvmconsole will be run, or else they won't know which virtual machine to attach to! π (fr fr, do not skip this step)
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). (like, you can, but why would you π« )
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(). the star line is literally the main character of this file β
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. π«Ά
Note: you can't start the master using the console or background it when using this option.
π₯ 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.
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. like two people with the same name in the same group chat... chaos, and not the fun kind π
(part 1 done bestie, there's more coming, don't go anywhere π)
π STOPPING PVMD3 π
okay bestie so the preferred way to shut down all the pvmds is just... type the halt command in the PVM console. that's it. that's the move. β¨
and like, halt is not playing around β it kills:
- all the PVM tasks π
- all the remote daemons
- the local daemon
- and then finally the console itself, which is giving main character exit energy honestly π
but listen. if you're gonna kill the master pvmd manually (chaotic of you), you gotta send it aSIGTERMsignal, fr fr. that's the only way it gets to kill the remote pvmds and clean up various files on its way out. noSIGTERM, no cleanup, and then you're just living in the mess you made. π
the whole "why won't it restart" saga π
so here's the thing. the pvmd can get killed in a way that leaves the file /tmp/pvmd.uid behind on one or more hosts. and uid here means the numeric user ID β the one from /etc/passwd β of the user.
and if that file's still sitting there? PVM will not restart on that host. periodt. that's the vibe check it fails.
the fix is lowkey iconic in its simplicity: just delete the file.
rm `( grep $user /etc/passwd || ypmatch $user passwd )
| awk -F: '{print "/tmp/pvmd."$3; exit}'`
slay. problem gone. π
π FILES π
here's the whole roster, no cap:
$PVM_ROOT/lib/pvmdβ the PVM daemon startup script πΈ$PVM_ROOT/lib/$PVM_ARCH/pvmd3β the PVM daemon executable itself (the actual star of the show) β$HOME/.pvmprofileβ shell commands that get read by pvmd before it runs pvmd3 π«Ά$HOME/pvm3/bin/$PVM_ARCHβ your private PVM executable directory π$PVM_ROOT/pvm3/bin/$PVM_ARCHβ the system PVM executable directory π/tmp/pvmd.uidβ the pvmd local socket address π¦/tmp/pvml.uidβ the pvmd runtime error log (where the drama gets recorded) π$HOME/.rhostsβ the file that lets a host be accessed from other hosts π
π SEE ALSO π
go read these next, iykyk:
pvm(1PVM)pvm_intro(1PVM)rhosts(5)
and that's the whole page, bestie!! this one's from way back β 06 May, 1994, page PVMD(1PVM) β so like, vintage. an elder. a legend. we stan a manpage that's been serving looks since before we were born. πβ¨
π¦ where this page comes from
- debian bookworm: pvm 3.4.6-5
- ubuntu jammy: pvm 3.4.6-3.2
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms