[ClusterLabs] Antw: Re: [ClusterLabs Developers] Resource Agent language discussion

Ulrich Windl Ulrich.Windl at rz.uni-regensburg.de
Tue Aug 11 02:30:54 EDT 2015

>>> "Fabio M. Di Nitto" <fabbione at fabbione.net> schrieb am 11.08.2015 um 06:42
Nachricht <55C97D3D.5040601 at fabbione.net>:

> first of all, our end user is not necessarily a developer. Most of them
> are in fact sysadmins and one common that sysadmins have is that they
> know bash/shell.

But actually you can make much more errors in a shell script than in a Perl
(just  one language example) script. With "errors" I mean errors that aren't
discovered until the script runs, and errors that are discovered during run (by
the interpreter, not by the programmer).

> If needs arise to debug a RA, shell is pretty much the only common
> denominator with our user base.

Why? Debugging Perl is much easier than debugging a shell script. Or do you
talk about "-x" to trace the commands?

One of the biggest problems in shell is the "text substitution model" when
using variables. Things depend very much what is in a variable (like
backslashes quotes, spaces, etc.).

> The other problem i see in using other languages is how they operate
> under extreme conditions (memory pressure, disk I/O etc).

I agree that the old Bourne shell was quite robust under extreme conditions,
but the shell is only the basic part. Every command invoked by the shell has to
be robust also. And most important: The programmer has to take care about
exceptional conditions. In my experience especially that is hardly ever done in
shell scripts.

> Just for the fun of it, I did some basic profiling of "hello world" in
> bash and perl. Please dońt take this as an attempt to start a
> "language" flame war here. I just want to explain differences on why
> shell vs others.
> Perl is at least 3 times slower than bash
> Perl uses at least 4/5 times more memory to execute the same command

Did you also comapre it with "echo 'hello world'"? ;-) I mean which RA
consists of exaclty one line? If you read a directory with 500 entries,
detecting all that are files, I guess Perl should be already faster than the
comparable shell script, because Perl does not need to run external processes
for most of the commands being used.

> Granted, it́s an incredibly small test et all, but all I am trying to
> say is that Cluster is supposed to be as reliable as possible under
> extreme conditions.

So program RAs in C or anoter language that has almost no runtime that could
be unreliable? Oh well, unreliable... I'd better stop here...

> In most systems, all commands required to execute a RA in shell are
> already cached in ram and requirements to re-run them are minimal (and
> could save a system).

But still with shared libraries there is overhead to get the started as a
process. (Having statically linked binaries would be different). Oh well, for
your Perl example: Did you run it more than once?

You'll also have to compare loading time vs. execution time. While simple
scripts seem faster in shell, you'll have real trouble implementing any complex
algorithm in a shell script.

> with Perl, there was no caching that I could see (even executing the
> command several times), with lots of I/O to load modules from disks.

That's not fair: You say the files for external commands and the shell is
cached, but the files for Perl are not? Why should that be?

I did a test myself (SLES11SP3 x86_64 in a Xen-PVM) (you did not post your
v04:/tmp> echo "echo 'hello world'" >hi.sh
v04:/tmp> chmod +x hi.sh
v04:/tmp> echo 'print "hello world\n";' >hi.pl
v04:/tmp> chmod +x hi.pl
v04:/tmp> time sh hi.sh
hello world

real    0m0.011s
user    0m0.000s
sys     0m0.004s
v04:/tmp> time perl hi.pl
hello world

real    0m0.009s
user    0m0.004s
sys     0m0.004s
v04:/tmp> #again
v04:/tmp> time sh hi.sh
hello world

real    0m0.007s
user    0m0.000s
sys     0m0.004s
v04:/tmp> time perl hi.pl
hello world

real    0m0.007s
user    0m0.004s
sys     0m0.000s
So Perl is NOT any slower than Shell in this simple case!

> So given that, is it worth rewriting the RA in another language (and
> what defines a "simple" vs "complex" ras from above)? or wouldńt it
> better to just fix the current ones for stuff like escapes and handling
> of spaces in the options?

I could not verify most of your arguments, sorry!

> Just 2c
> Fabio

More information about the Users mailing list