[Vm-dev] [DEV] Systemd socket activation patch for the VM

David T. Lewis lewis at mail.msen.com
Wed Jul 9 23:02:17 UTC 2014


I entered this as Mantis 0007819: Add Systemd socket activation patch for the VM in SocketPlugin

  http://bugs.squeak.org/view.php?id=7819

VM changes are limited to a patch for Unix SocketPlugin, and should be identical for all VM branches.

Dave


On Tue, Jul 08, 2014 at 04:08:01PM +0200, Max Leske wrote:
>  
> Hi folks
> 
> As promised a long time ago my colleague Nik Lutz has finalized the patch for the VM that enables socket activation with Systemd. I will quickly go over what the patch is supposed to achieve, how we plan to use socket activation and what (minimal) changes are necessary.
> 
> 
> Systemd Socket Activation:
> Systemd opens a (network-) socket and waits for connections. When the first client connects the assotiated service (VM) is started. Systemd indicates via environment variable (LISTEN_FDS) that it opened a network socket.
> 
> Detailed documentation on socket activation with Systemd can be found here: http://0pointer.de/blog/projects/socket-activation.html
> 
> 
> Our scenario for socket activation: 
> At Cmsbox we have hundereds of images running on a server, all of which listen on a dedicated network port for incoming connections. The server is powerful enough to run all these processes concurrently, especially since not every image receives requests all the time.
> With socket activation we could further lower the server load and free up resources for images with a high request rate. Images that don?t receive any requests for a specified amount of time can be suspended automatically and reactivated when a request comes in.
> 
> 
> 
> The VM Patch:
> The attached patch tries hard to be minimal. It defines a new socket type (ProvidedTCPSocketType) which you will also find in the image (Socket>>newSystemd). ProvidedTCPSocketType is special in that it can refer to an existing TCPSocket and does not necessarily entail the creation of a new socket.
> 
> 
> The changes in the image:
> - Socket>>newSystemd tries to open a new Systemd socket.
> - TCPListener>>haveSystemdAssignedPort tests if the LISTEN_FDS environment variable has been set by Systemd for the current process.
> - TCPListener>>primEnvironmentAtSymbol is a utility method that we need to check for the environment variable (IMPORTANT: copied from OSProcess; uses the OSProcess plugin)
> - TCPListener>>pvtNewListener: has been modified to include the check for the Systemd port. If the socket has been assigned by Systemd, use a Systemd socket, a TCP socket otherwise
> 
> Quick Howto:
> - Adapt path to vm and image in pharo at .service
> - Take a Seaside image and FileIn systemd.cs (tested with http://seaside.st/distributions/Seaside-2.8.4.zip)
> - Save as 9999.image
> - Copy pharo at .service and pharo at .socket to /etc/systemd/system
> - As root run:
>  systemctl daemon-reload
>  systemctl start pharo at 9999.socket
> - Open http://localhost:9999/seaside/config
> 
> [- systemctl stop pharo at 9999.socket]
> 
> -> Upon connection pharo at 9999.socket starts: pharo at 9999.service (which would start .../9999.image)
> 
> You can see this in action in the following screencast: http://youtu.be/MVPLZNKg5j8
> 
> 
> We hope that this patch (or some version of it) will find its way into the VM. If you have any questions please feel free to ask.
> 
> 
> Cheers,
> Max (on behalf of Nik and the rest of Netstyle.ch)
> 
> 
> 
> 
> 
> 
> 



More information about the Vm-dev mailing list