this is really good!

sebastian

o/

> On 08/07/2014, at 11:08, Max Leske <[email protected]> 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 [email protected]
> - Take a Seaside image and FileIn systemd.cs (tested with 
> http://seaside.st/distributions/Seaside-2.8.4.zip)
> - Save as 9999.image
> - Copy [email protected] and [email protected] to /etc/systemd/system
> - As root run:
>  systemctl daemon-reload
>  systemctl start [email protected]
> - Open http://localhost:9999/seaside/config
> 
> [- systemctl stop [email protected]]
> 
> -> Upon connection [email protected] starts: [email protected] (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)
> 
> 
> <systemd.cs>
> <[email protected]>
> <squeak-svn.diff>
> <[email protected]>
> 

Reply via email to