Re: PosixError.SysCall.simpleResultAux

Matthew Fluet <[email protected]> Tue, 23 Aug 2016 21:06:58 -0400
Newsgroups gmane.comp.lang.ml.mlton.user
Message-ID <CAMrhFL7wsqrF6js2kPdXBWJWzV4CybrW7ytRsYBxAda-ZWwM8A@mail.gmail.com>
On Tue, Aug 23, 2016 at 7:31 AM, Kostirya <[email protected]> wrote:
> Tell me, please, why PosixError.SysCall.simpleResultAux takes large percent
> in the results of profiling:
>
>               function                cur
> ------------------------------------ -----
> PosixError.SysCall.simpleResultAux   28.0%
> Sequence.concat                      14.0%
> Integer.fmt                          12.0%
> <gc>                                  6.0%
> EV.kevent_wait                        6.0%
> EV.kevent_change                      6.0%
> ...
>
> This is event driven server.
> In addition to work with string and sockets, the server use FFI call for
> kevent (bsd).
>
> And what I may do to decrease this value?

PosixError.SysCall.simpleResultAux is defined at
https://github.com/MLton/mlton/blob/master/basis-library/posix/error.sml#L291.
Essentially, it is used as a wrapper for any Posix / C library
function that returns -1 on error and sets errno.  The fact that it is
taking a large percent of the running time is probably indicative of
the fact that the program is often blocking in a system call; that
would seem to be consistent with an event driven server program.

To investigate further, you could compile with "-profile-include
'.*'".  By default, MLton excludes the Basis Library implementation
from profiling; really, this simply means that profiling will
attribute time to the outermost Basis Library function, rather than
inner functions.  With "-profile-include '.*'", you override that
default and MLton will include the Basis Library implementation with
profiling.  That might reveal which function is being called by
PosixError.SysCall.simpleResultAux.  Also, you could compile with
"-profile-stack true", which will attribute time to all functions on
the stack; see http://mlton.org/ProfilingTheStack for more details.
This might also help to understand the program.

Finally, the cost of PosixError.SysCall.simpleResultAux might be
inflated due to profiling.  Although MLton installs with profiling
signal handler with "SA_RESTART" (indicating that interrupted system
calls should be automatically restarted), it may be that a system call
is being repeatedly interrupted by the profiling signal and its
resumption is contributing to the running time.

-- 
You received this message because you are subscribed to the Google Groups "MLton-user" group.
To unsubscribe from this group and stop receiving emails from it, send an email to [email protected].


------------------------------------------------------------------------------