Having a brief look at ERR_clear_error in openssl it looks like that various 
locking operations are performed to get the
error state. I assume that this causes a lot of contention in the load case.
The question is whether there is another solution to BZ62590 but to call 
ERR_clear_error before every read and write. So
far, I have no idea for an efficient check of not processed errors in the stack 
and only clear if they are present /
consider them correctly for further error processing.

Regards

RĂ¼diger


On 08/29/2018 09:16 AM, Ruediger Pluem wrote:
> I guess it would be helpful to know which openssl version was used for the 
> test. There was a valid use case for BZ62590
> and the question is why ERR_clear_error is that expensive. But the 
> expensiveness might depend on the used openssl version.
> 
> Regards
> 
> RĂ¼diger
> 
> 
> On 08/28/2018 04:54 PM, William A Rowe Jr wrote:
>> As we unwind various regressions and breakage, one non-lethal but somewhat 
>> horrid report stands out. Eric correctly tied
>> it to the patch applied for 
>> https://bz.apache.org/bugzilla/show_bug.cgi?id=62590 in the 2.4.24 timeframe.
>>
>> Server Software:        Apache/2.2.34
>> SSL/TLS Protocol:       TLSv1/SSLv3,AES256-GCM-SHA384,1024,256
>>
>> vs
>>
>> Server Software:        Apache/2.4.34SSL/TLS Protocol:       
>> TLSv1/SSLv3,AES256-GCM-SHA384,1024,256
>>
>> Measures out with
>>
>> Time taken for tests:   192.131 seconds
>> Total transferred:      731130414 bytes
>> HTML transferred:       88000000 bytes
>> Requests per second:    10409.59 [#/sec] (mean)
>> Time per request:       5.764 [ms] (mean)
>> Time per request:       0.096 [ms] (mean, across all concurrent requests)
>> Transfer rate:          3716.20 [Kbytes/sec] received
>>
>> vs
>>
>> Time taken for tests:   571.058 seconds
>> Total transferred:      689130083 bytes
>> HTML transferred:       90000000 bytes
>> Requests per second:    3502.27 [#/sec] (mean)
>> Time per request:       17.132 [ms] (mean)
>> Time per request:       0.286 [ms] (mean, across all concurrent requests)
>> Transfer rate:          1178.48 [Kbytes/sec] received
>>
>>
>>
>>
>> Connection Times (ms)
>>               min  mean[+/-sd] median   max
>> Connect:        0    0   0.4      0      87
>> Processing:     0    6   1.2      6      71
>> Waiting:        0    6   1.2      5      70
>> Total:          0    6   1.3      6      98
>>
>> Percentage of the requests served within a certain time (ms)
>>   50%      6
>>   66%      6
>>   75%      6
>>   80%      6
>>   90%      7
>>   95%      8
>>   98%      9
>>   99%     10
>>  100%     98 (longest request)
>>  
>> ----
>>
>> I did then the same for Apache/2.4.34 (with apr-1.6.3 and apr-util-1.6.1), 
>> with the following changes in the httpd.conf (including ssl-support):
>> StartServers         1
>> ServerLimit          1
>> ThreadLimit          2500
>> ThreadsPerChild      2500
>> ThreadStackSize      1048576 
>> MinSpareThreads      1
>> MaxSpareThreads      500
>> MaxRequestWorkers      2500
>> MaxConnectionsPerChild  0
>>
>>  
>> and here the output of ApacheBench:
>>
>> ab -k -n 2000000 -c 60 'https://adnvl005:44300/'
>> This is ApacheBench, Version 2.3 <$Revision: 655654 $>
>> Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
>> Licensed to The Apache Software Foundation, http://www.apache.org/
>>
>> Benchmarking adnvl005 (be patient)
>> Completed 200000 requests
>> Completed 400000 requests
>> Completed 600000 requests
>> Completed 800000 requests
>> Completed 1000000 requests
>> Completed 1200000 requests
>> Completed 1400000 requests
>> Completed 1600000 requests
>> Completed 1800000 requests
>> Completed 2000000 requests
>> Finished 2000000 requests
>>
>>
>> Connection Times (ms)
>>               min  mean[+/-sd] median   max
>> Connect:        0    0   2.1      0     208
>> Processing:     0   17  20.3     10     285
>> Waiting:        0   17  20.3     10     285
>> Total:          0   17  20.4     10     285
>>
>> Percentage of the requests served within a certain time (ms)
>>   50%     10
>>   66%     16
>>   75%     23
>>   80%     28
>>   90%     44
>>   95%     59
>>   98%     79
>>   99%     94
>>  100%    285 (longest request)
>>
>>
>>
>>
>> ---------- Forwarded message ----------
>> From: ** <bugzi...@apache.org <mailto:bugzi...@apache.org>>
>> Date: Mon, Aug 27, 2018 at 9:11 AM
>> Subject: [Bug 62590] performance drop after moving from apache 2.2 to apache 
>> 2.4
>> To: b...@httpd.apache.org <mailto:b...@httpd.apache.org>
>>
>>
>> https://bz.apache.org/bugzilla/show_bug.cgi?id=62590 
>> <https://bz.apache.org/bugzilla/show_bug.cgi?id=62590>
>>
>> --- Comment #1 from paolo <pa...@adnovum.ch <mailto:pa...@adnovum.ch>> ---
>> After some debug-session I found out that  the problem are the 
>> ERR_clear_error
>> calls in ssl_filter_write and ssl_io_input_read. If I remove those calls the
>> performance is the same like with httpd/2.2.
>>
>> Are those calls really needed in the ssl_io_input_read/ssl_filter_write
>> function?
>> Isn't it enough to have it only in the ssl_io_filter_handshake function.
>>
>> Or what about to call this function only if an error occurred:
>>
>>         else /* (rc < 0) */ {
>>             int ssl_err = SSL_get_error(inctx->filter_ctx->pssl, rc);
>>             conn_rec *c = 
>> (conn_rec*)SSL_get_app_data(inctx->filter_ctx->pssl);
>>
>>  +           ERR_clear_error();
>>
>>             if (ssl_err == SSL_ERROR_WANT_READ) {
>>
>>
>> Many thanks for any answer.
>>
>> -- 
>> You are receiving this mail because:
>> You are the assignee for the bug.
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: bugs-unsubscr...@httpd.apache.org 
>> <mailto:bugs-unsubscr...@httpd.apache.org>
>> For additional commands, e-mail: bugs-h...@httpd.apache.org 
>> <mailto:bugs-h...@httpd.apache.org>
>>
>>
> 

Reply via email to