- Jul 11, 2017
-
-
Evgeny Kotkov authored
completion contexts, as that may significantly reduce the memory usage. This simple change can have a noticeable impact on the amount of memory consumed by the child process in various cases. Every completion context in the queue has an associated allocator, and every allocator has it's ap_max_mem_free memory limit which is not given back to the operating system. Once the queue grows, it cannot shrink back, and every allocator in each of the queued completion contexts keeps up to its max_free amount of memory. The queue can only grow when a server has to serve multiple concurrent connections at once. With that in mind, consider a case with a server that doesn't encounter many concurrent connections most of the time, but has occasional spikes when it has to serve multiple concurrent connections. During such spikes, the size of the completion context queue grows. The actual difference between using LIFO and FIFO orders shows up after such spikes, when the server is back to light load and doesn't see a lot of concurrency. With FIFO order, every completion context in the queue will be used in a round-robin manner, thus using *every* available allocator one by one and ultimately claiming up to (N * ap_max_mem_free memory) from the OS. With LIFO order, only the completion contexts that are close to the top of the stack will be used and reused for subsequent connections. Hence, only a small part of the allocators will be used, and this can prevent all other allocators from unnecessarily acquiring memory from the OS (and keeping it), and this reduces the overall memory footprint. Please note that this change doesn't affect the worst case behavior, as it's still (N * ap_max_mem_free memory), but tends to behave better in practice, for the reasons described above. Another thing worth considering is the new behavior when the OS decides to swap out pages of the child process, for example, in a close-to-OOM condition. Handling every new connection after the swap requires the OS to load the memory pages for the allocator from the completion context that is used for this connection. With FIFO order, the completion contexts are used one by one, and this would cause page loads for every new connection. With LIFO order, there will be almost no swapping, since the same completion context is going to be reused for subsequent new connections. git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1801655 13f79535-47bb-0310-9956-ffa450edef68
-
Evgeny Kotkov authored
are blocked on the I/O completion port during the shutdown. Prior to r1801635, the shutdown code required to know the amount of blocked threads, as it has been dispatching the same amount of completion packets. But this no longer holds, and the only reason why we maintain the corresponding g_blocked_threads variable is because of this debug diagnostic message. Drop it in order to reduce complexity of the quite critical code in the winnt_get_connection() function and to reduce the amount of global variables. git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1801640 13f79535-47bb-0310-9956-ffa450edef68
-
Evgeny Kotkov authored
This sleep occured in a situation when: - We don't have a free completion context in the queue - We can't add one, as doing so would exceed the max_num_completion_contexts limit (all worker threads are busy) - We have exceeded a 1 second timeout while waiting for it In this case, the Sleep() call is unnecessary, as there is no intermittent failure that can be waited out, but rather than that, it's an ordinary situation with all workers being busy. Presumably, calling Sleep() here can be even considered harmful, as it affects the fairness between the listeners that are blocked waiting for the completion context. So, instead of calling Sleep() just check for the possible shutdown and immediately retry acquiring a completion context. If all worker threads are still busy, the retry will block in the same WaitForSingleObject() call, which is fine. git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1801639 13f79535-47bb-0310-9956-ffa450edef68
-
Evgeny Kotkov authored
thread handles in batches. Starting from r1801636, there is no difference between ending the wait with one or multiple remaining threads. This is because we terminate the process if at least one thread is still active when we hit a timeout. Therefore, instead of making an effort to evenly distribute and batch the handles with WaitForMultipleObjects(), we could just start from one end, and wait for one thread handle at a time. git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1801637 13f79535-47bb-0310-9956-ffa450edef68
-
Evgeny Kotkov authored
hits a timeout while waiting for the worker threads to exit. Using TerminateThread() can have dangerous consequences such as deadlocks — say, if the the thread is terminated while holding a lock or a heap lock in the middle of HeapAlloc(), as these locks would not be released. Or it can corrupt the application state and cause a crash. (See https://msdn.microsoft.com/en-us/library/windows/desktop/ms686717) Rework the code to call TerminateProcess() in the described circumstances and leave the cleanup to the operating system. git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1801636 13f79535-47bb-0310-9956-ffa450edef68
-
Evgeny Kotkov authored
when shutting down the worker threads. Previously, the shutdown code was posting an amount of I/O completion packets equal to the amount of the threads blocked on the I/O completion port. Then it would Sleep() until all these threads "acknowledge" the completion packets by decrementing the global amount of blocked threads. A better way would be to send the number of IOCP_SHUTDOWN completion packets equal to the total amount of threads and immediately proceed to the next step. There is no need to block until the threads actually receive the completion, as the shutdown process includes a separate step that waits until the threads exit, and the new approach avoids an unnecessary delay. git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1801635 13f79535-47bb-0310-9956-ffa450edef68
-
Jean-Frederic Clere authored
Add logic to read the Upgrade header and use it in the response. Use we you are proxying to a server that has multiple upgrade on the same IP/Port. PR 61142 git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1801594 13f79535-47bb-0310-9956-ffa450edef68
-
- Jul 10, 2017
-
-
Evgeny Kotkov authored
values in a couple of missed places in winnt_accept(). git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1801456 13f79535-47bb-0310-9956-ffa450edef68
-
- Jul 07, 2017
-
-
Evgeny Kotkov authored
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1801148 13f79535-47bb-0310-9956-ffa450edef68
-
Evgeny Kotkov authored
would return a proper apr_status_t instead of yielding the result via the *timeout out variable. This makes the calling side easier to follow by avoiding an additional layer of if's. git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1801147 13f79535-47bb-0310-9956-ffa450edef68
-
Evgeny Kotkov authored
from the mpm_get_completion_context() function. Currently, the only possible reasons why mpm_get_completion_context() could fail are real errors such as being unable to WaitForSingleObject(), allocate memory or create an event. Retrying under such circumstances doesn't make sense, and could be as well considered harmful. git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1801146 13f79535-47bb-0310-9956-ffa450edef68
-
Evgeny Kotkov authored
filter and use an appropriate enum for it. This makes the code in winnt_accept() a bit easier to follow. As a minor side effect, it also fixes a small bug where the "unrecognized AcceptFilter '%s'" log entry would always contain "none" instead of the actually unrecognized kind of the accept filter. git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1801144 13f79535-47bb-0310-9956-ffa450edef68
-
Evgeny Kotkov authored
cleanup in the child process. git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1801143 13f79535-47bb-0310-9956-ffa450edef68
-
- Jul 06, 2017
-
-
Stefan Eissing authored
mod_http2: Simplify ready queue, less memory and better performance. Update mod_http2 version to 1.10.7. git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1800978 13f79535-47bb-0310-9956-ffa450edef68
-
- Jul 05, 2017
-
-
William A. Rowe Jr authored
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1800919 13f79535-47bb-0310-9956-ffa450edef68
-
William A. Rowe Jr authored
comparisons. Submitted by: wrowe, Robert Święcki <robert swiecki.net> git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1800917 13f79535-47bb-0310-9956-ffa450edef68
-
- Jul 04, 2017
-
-
Rainer Jung authored
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1800837 13f79535-47bb-0310-9956-ffa450edef68
-
Rainer Jung authored
Compilation now tested against Lus 5.1, 5.2 and 5.3. The libs were compiled with COMPAT flags set, but mod_lua no longer sets them so it should compile and run with non-COMPAT libs as well. git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1800833 13f79535-47bb-0310-9956-ffa450edef68
-
Rainer Jung authored
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1800830 13f79535-47bb-0310-9956-ffa450edef68
-
Rainer Jung authored
lua from r1785753. This should now no longer be needed. git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1800819 13f79535-47bb-0310-9956-ffa450edef68
-
Rainer Jung authored
Patch taken from PR58188 which picked it from openSUSE. Still needs testing. git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1800817 13f79535-47bb-0310-9956-ffa450edef68
-
Rainer Jung authored
One last use of luaL_register() with a non-NULL "name" argument remaining. Not tested yet. git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1800815 13f79535-47bb-0310-9956-ffa450edef68
-
Rainer Jung authored
PR58188, PR60831, PR61245. Still to solve: replace uses of luaL_register(). git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1800809 13f79535-47bb-0310-9956-ffa450edef68
-
Yann Ylavic authored
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1800788 13f79535-47bb-0310-9956-ffa450edef68
-
- Jul 03, 2017
-
-
Stefan Eissing authored
mod_http2: disable and give warning when mpm_prefork is encountered. The server will continue to work, but HTTP/2 will no longer be negotiated. git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1800689 13f79535-47bb-0310-9956-ffa450edef68
-
Jim Jagielski authored
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1800627 13f79535-47bb-0310-9956-ffa450edef68
-
Ruediger Pluem authored
existing passwd file. This long standing bug was triggered by fixing a bug in APR in r1791029. PR: 61240 git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1800594 13f79535-47bb-0310-9956-ffa450edef68
-
- Jul 02, 2017
-
-
Lucien Gentis authored
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1800560 13f79535-47bb-0310-9956-ffa450edef68
-
Lucien Gentis authored
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1800559 13f79535-47bb-0310-9956-ffa450edef68
-
- Jun 30, 2017
-
-
Jim Jagielski authored
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1800393 13f79535-47bb-0310-9956-ffa450edef68
-
- Jun 29, 2017
-
-
Jacob Champion authored
Reverts r1780328, r1780329, and their associated followups, which incorrectly manipulated SCRIPT_NAME by default. All proxy_fcgi.t regression tests now pass. PR: 61202 git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1800306 13f79535-47bb-0310-9956-ffa450edef68
-
- Jun 28, 2017
-
-
Daniel Ferradal authored
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1800184 13f79535-47bb-0310-9956-ffa450edef68
-
Daniel Ferradal authored
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1800183 13f79535-47bb-0310-9956-ffa450edef68
-
William A. Rowe Jr authored
PR: 61220 Submitted by: ylavic git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1800173 13f79535-47bb-0310-9956-ffa450edef68
-
William A. Rowe Jr authored
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1800171 13f79535-47bb-0310-9956-ffa450edef68
-
Ruediger Pluem authored
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1800126 13f79535-47bb-0310-9956-ffa450edef68
-
William A. Rowe Jr authored
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1800111 13f79535-47bb-0310-9956-ffa450edef68
-
- Jun 26, 2017
-
-
Daniel Ferradal authored
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1799972 13f79535-47bb-0310-9956-ffa450edef68
-
Daniel Ferradal authored
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1799971 13f79535-47bb-0310-9956-ffa450edef68
-
Christophe Jaillet authored
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1799968 13f79535-47bb-0310-9956-ffa450edef68
-