[openssl-users] Openssl asynchronous operation in real network
Ananthu Unnikrishnan
ananthuu741 at gmail.com
Wed Jan 16 05:36:08 UTC 2019
Hi Matt,
Thanks for your update. Will try to implement one scheme using the
same.
I have one doubt regarding the points which we have discussed
earlier.
I am now facing an issue of getting an invalid waitctx address
while trying to get it using ASYNC_get_wait_ctx(). I have checked using
gdb, in which got memory inaccessible print when I tried to dump
the waitctx structure. If I put some delay in the engine, things are
working fine, ie. no corruption of waitctx structure address.
But I am just copying the address of job structure before the
ASYNC_pause(). After the HW operation is completed I will use this address
to get waitctx and fd using ASYNC_get_wait_ctx() and
ASYNC_WAIT_CTX_get_fd() from the thread which I have created from the
engine. I haven't access the job address directly from the thread.
I know you have already told me that I should be careful while
handling ASYNC_JOB structure from outside threads. But I have only a little
experience on handling these ASYNC_JOB structures. If you can provide a
solution for this, it would be helpful.
On 14 Jan 2019 5:33 pm, "Matt Caswell" <matt at openssl.org> wrote:
>
>
> On 13/01/2019 04:36, Ananthu Unnikrishnan wrote:
> > Hi Matt,
> >
> > Thanks a lot for the response. The alternative method to
> resume job
> > operation is a good one.
> >
> > I need some more clarifications regarding the async job
> operation.
> > Please help.
> > In ssl/ss_lib.c, ssl_start_async_job() function found. In
> which
> > ASYNC_start_job function is calling but no mechanism found for polling
> the fd's.
> > Is it written elsewhere?.
>
> You are supposed to write the fd polling code yourself, e.g. by using
> SSL_get_all_async_fds() or SSL_get_changed_async_fds() to get hold of the
> fds,
> and then followed by "select" or similar.
>
> See:
>
> https://www.openssl.org/docs/man1.1.1/man3/SSL_get_all_async_fds.html
>
> mATT
>
>
>
> >
> >
> > On Fri, Jan 11, 2019 at 3:12 PM Matt Caswell <matt at openssl.org
> > <mailto:matt at openssl.org>> wrote:
> >
> >
> >
> > On 10/01/2019 18:09, Ananthu Unnikrishnan wrote:
> > > Hi Matt,
> > >
> > > Thanks a lot for the reply.
> > >
> > > After calling ASYNC_pause_job() from the engine, control
> will
> > transfer to
> > > the place where we start the ASYNC_start_job right? So how can we
> write
> > the code
> > > to put a trigger on fd in the same thread?
> >
> > I'm not saying you can't use threads to do this - only that you need
> to be
> > careful about using them and must obey the rules.
> >
> >
> > > If I am wrong please correct me.
> > > Also if u can suggest where resume operation should be done, it
> would be
> > helpful.
> >
> > Typically the calling application will wait on the fd (e.g. using
> "select" or
> > similar) until it is readable. Once it sees the fd as readable then
> it calls
> > ASYNC_start_job() again.
> >
> >
> > As an aside you may also be interested in this PR that is currently
> being
> > reviewed:
> >
> > https://github.com/openssl/openssl/pull/7573
> >
> > This adds an alternative mechanism for signalling other than using
> fds (i.e. to
> > use a callback instead) and will be available in OpenSSL 3.0 when it
> gets
> > released.
> >
> > Matt
> >
> >
> >
> > >
> > > On Thu, Jan 10, 2019 at 10:11 PM Matt Caswell <matt at openssl.org
> > <mailto:matt at openssl.org>
> > > <mailto:matt at openssl.org <mailto:matt at openssl.org>>> wrote:
> > >
> > >
> > >
> > > On 10/01/2019 09:39, Ananthu Unnikrishnan wrote:
> > > > Hi all,
> > > >
> > > > We are not able to access the waitctx address from
> the job
> > address
> > > using
> > > > ASYNC_get_wait_ctx(job) from a thread which starts in the
> bind
> > section of the
> > > > dynamic engine. The job address is the same as that we got
> > > > using ASYNC_get_current_job. Can anyone help on this?
> > >
> > > It's very unclear from the your various emails what you are
> trying to
> > achieve
> > > and the problem that you are experiencing.
> > >
> > > From the above it sounds like you are starting threads from
> inside
> > your dynamic
> > > engine? ASYNC_JOBs are always local to a thread. When a job is
> started
> > it is
> > > associated with the current thread. So ASYNC_get_current_job()
> returns
> > the job
> > > associated with the current thread. Similarly if you pause a
> job,
> > > ASYNC_pause_job() must be called from that same thread.
> Finally if you
> > restart a
> > > paused job it must also be restarted on the same thread.
> > >
> > > If you are starting new threads from within your engine then
> extreme
> > care must
> > > be taken to obey the above rules - otherwise you are likely to
> get strange
> > > results.
> > >
> > > Matt
> > >
> > >
> > > >
> > > >
> > > >
> > > > On Tue, Jan 8, 2019 at 11:26 AM Ananthu Unnikrishnan
> > > <ananthuu741 at gmail.com <mailto:ananthuu741 at gmail.com>
> > <mailto:ananthuu741 at gmail.com <mailto:ananthuu741 at gmail.com>>
> > > > <mailto:ananthuu741 at gmail.com <mailto:ananthuu741 at gmail.com>
> > <mailto:ananthuu741 at gmail.com <mailto:ananthuu741 at gmail.com>>>>
> wrote:
> > > >
> > > > Can anyone please help on this? If u need any additional
> information
> > > please
> > > > let me know.
> > > >
> > > > On Mon, Jan 7, 2019 at 6:25 PM Ananthu Unnikrishnan
> > > <ananthuu741 at gmail.com <mailto:ananthuu741 at gmail.com>
> > <mailto:ananthuu741 at gmail.com <mailto:ananthuu741 at gmail.com>>
> > > > <mailto:ananthuu741 at gmail.com <mailto:
> ananthuu741 at gmail.com>
> > <mailto:ananthuu741 at gmail.com <mailto:ananthuu741 at gmail.com>>>>
> wrote:
> > > >
> > > > Hi all,
> > > >
> > > > Adding more details to the previous mail. We have
> edited the
> > OpenSSL
> > > > code for implementing the polling for changed
> fd's as in
> > OpenSSL speed
> > > > command. Attached the code snippet of the same along
> with
> > this mail.
> > > > Mentioned below some observations which found
> doubtful:
> > > >
> > > > 1) We have got prints in ASYNC_FINISH case, before
> getting
> > print in
> > > > ASYNC_PAUSE case. Attaching the log also, so you can
> understand
> > > easily.
> > > > 2) Shown below the code snippet which we have
> written to
> > provide a
> > > write
> > > > on fd.
> > > >
> > > > if ((waitctx = ASYNC_get_wait_ctx((ASYNC_JOB *)job))
> == NULL) {
> > > > printf("In dynamic engine | waitctx == NULL
> : %d\n",
> > > __LINE__);
> > > > return ret;
> > > > }
> > > >
> > > > printf("\n----- In dynamic engine | After
> pausing | job
> > is %lx |
> > > > waitctx in resume job %lx |-----\n", job, waitctx);
> > > >
> > > > if ((ret = ASYNC_WAIT_CTX_get_fd(waitctx,
> engine_id,
> > &efd,
> > > > &custom)) > 0) {
> > > > if (write(efd, &buf, sizeof(uint64_t)) ==
> -1) {
> > > > printf("\nFailed to write\n");
> > > > }
> > > > }
> > > >
> > > > Here waitctx is getting NULL when we tried to fetch
> waitctx
> > using
> > > > ASYNC_get_wait_ctx(). We have printed data of
> sizeof(ASYNC_JOB)
> > > ie.1176
> > > > bytes contained in the job address from the engine,
> we got
> > > correct data
> > > > before calling ASYNC_pause() and but got half data
> zero data
> > when we
> > > > tried to access the same address after
> ASYNC_pause().
> > > >
> > > > Attaching both job structure contents before and
> after calling
> > > > ASYNC_pause(). Also, we got the correct data in the
> same address
> > > when we
> > > > have printed from ssl_start_async_job() before
> polling starts,
> > > where we
> > > > have started the async_job
> > > > .
> > > > The prints starting with "In dynamic engine" are
> prints
> > inside the
> > > > engine, rest prints are from ss/ssl_lib.c. Kindly
> check this and
> > > please
> > > > point out if anything is wrong somewhere. Thanks in
> advance.
> > > >
> > > >
> > > > On Sun, Jan 6, 2019 at 10:30 AM Ananthu Unnikrishnan
> > > > <ananthuu741 at gmail.com <mailto:ananthuu741 at gmail.com
> >
> > <mailto:ananthuu741 at gmail.com <mailto:ananthuu741 at gmail.com>>
> > > <mailto:ananthuu741 at gmail.com <mailto:ananthuu741 at gmail.com>
> > <mailto:ananthuu741 at gmail.com <mailto:ananthuu741 at gmail.com>>>>
> wrote:
> > > >
> > > > Hi all,
> > > >
> > > > We have implemented a dynamic engine and
> tested
> > in the
> > > async
> > > > mode using OpenSSL speed command. But in a real
> network
> > > scenario, we
> > > > have seen only starting the async_job(in file
> ssl/ssl_lib.c,
> > > > function: ssl_start_async_job) in the OpenSSL. We
> > haven't seen
> > > > polling async_fd's for resuming the job as in
> > apps/speed.c(in
> > > speed
> > > > command case).
> > > > So can anyone please suggest any
> solution for
> > resuming the
> > > > async_jobs in real network scenario? Thanks in
> advance.
> > > >
> > > >
> > > >
> > > >
> > > >
> > > > --
> > > > With best Regards,
> > > >
> > > > Ananthu
> > > >
> > > >
> > > >
> > > >
> > > > --
> > > > With best Regards,
> > > >
> > > > Ananthu
> > > >
> > > >
> > > >
> > > >
> > > > --
> > > > With best Regards,
> > > >
> > > > Ananthu
> > > >
> > > >
> > > >
> > > --
> > > openssl-users mailing list
> > > To unsubscribe:
> https://mta.openssl.org/mailman/listinfo/openssl-users
> > >
> > >
> > >
> > > --
> > > With best Regards,
> > >
> > > Ananthu
> > >
> > >
> > >
> > --
> > openssl-users mailing list
> > To unsubscribe:
> https://mta.openssl.org/mailman/listinfo/openssl-users
> >
> >
> >
> > --
> > With best Regards,
> >
> > Ananthu
> >
> >
> >
> --
> openssl-users mailing list
> To unsubscribe: https://mta.openssl.org/mailman/listinfo/openssl-users
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mta.openssl.org/pipermail/openssl-users/attachments/20190116/a1991443/attachment-0001.html>
More information about the openssl-users
mailing list