From 8028e6a66a8c12552202e23e48bc624454228de6 Mon Sep 17 00:00:00 2001 From: Viktor <36002722+vitekkor@users.noreply.github.com> Date: Sat, 11 May 2024 11:58:41 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9A=D0=BE=D1=80=D0=BE=D1=82=D0=BA=D0=B8?= =?UTF-8?q?=D1=85=20=D0=92=D0=B8=D0=BA=D1=82=D0=BE=D1=80=20/=20=D0=98?= =?UTF-8?q?=D0=A2=D0=9C=D0=9E=20DWS=20/=20Stage=206=20(#211)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * stage-3: pre-start all threads * stage-3: implement consistent hashing * stage-3: remove debug tmpDirs; remove unused imports * stage-3: fix comments * stage-3: close resources * stage-3: add local dev arg parsing * stage-3: add PUT results * stage-3: use murmur hashing * stage-3: minors * stage-3: trigger build * stage-3: delete report * stage-3: add put report * stage-3: add get results * stage-3: add report * stage-4: first try * stage-4: fix tests * stage-4: fix codestyle * stage-4: fix codestyle 2 * stage-4: fix codestyle 3 * stage-4: provide new getting list of replicas algorithm * stage-4: code refactoring * stage-4: add report template * stage-4: alloc optimization * stage-4: update report * stage-4: fix comments (part 1) * stage-4: fix comments (part 2) * stage-4: fix comments (part 3) * stage-4: fix codestyle * stage-5: init * stage-5: async implementation * stage-5: minors * stage-5: fix merge * stage-5: minors * stage-5: add put report * stage-5: add get report * stage-6: implement streaming * stage-6: fix codestyle * stage-5: process local request async * stage-5: extend report * stage-5: refactoring * stage-6: refactoring * stage-6: refactoring * stage-6: add report * stage-6: fix codeclimate * stage-6: fix comments * stage-6: fix codeclimate * stage-6: minor fixes for sending chunks --------- Co-authored-by: Vadim Tsesko --- .../test/viktorkorotkikh/LSMServerImpl.java | 133 +- .../test/viktorkorotkikh/LSMServiceImpl.java | 66 +- .../test/viktorkorotkikh/dao/MemTable.java | 8 +- .../itmo/test/viktorkorotkikh/http/Chunk.java | 27 + .../http/LSMCustomSession.java | 38 + .../viktorkorotkikh/http/LSMRangeWriter.java | 168 + .../LSMServerResponseWithMemorySegment.java | 14 +- .../reports/stage5/GET-30k.txt | 130 + .../reports/stage5/GET-8k-af-alloc.html | 3279 +++++++ .../reports/stage5/GET-8k-af-cpu.html | 5748 ++++++++++++ .../reports/stage5/GET-8k-af-lock.html | 1059 +++ .../reports/stage5/GET-8k-after-fix.txt | 126 + .../reports/stage5/GET-8k-alloc.html | 3209 +++++++ .../reports/stage5/GET-8k-cpu.html | 6163 +++++++++++++ .../reports/stage5/GET-8k-histogram.png | Bin 0 -> 160320 bytes .../reports/stage5/GET-8k-lock.html | 1070 +++ .../viktorkorotkikh/reports/stage5/GET-8k.txt | 126 + .../reports/stage5/PUT-25k-histogram.png | Bin 0 -> 153948 bytes .../reports/stage5/PUT-25k.txt | 134 + .../reports/stage5/PUT-31.5k-af-alloc.html | 3276 +++++++ .../reports/stage5/PUT-31.5k-af-cpu.html | 7960 +++++++++++++++++ .../reports/stage5/PUT-31.5k-af-lock.html | 956 ++ .../reports/stage5/PUT-31.5k-after-fix.txt | 135 + .../reports/stage5/PUT-31.5k-histogram.png | Bin 0 -> 155126 bytes .../reports/stage5/PUT-31.5k.txt | 136 + .../reports/stage5/PUT-31k-alloc.html | 3270 +++++++ .../reports/stage5/PUT-31k-cpu.html | 7859 ++++++++++++++++ .../reports/stage5/PUT-31k-lock.html | 941 ++ .../reports/stage5/PUT-60k.txt | 119 + .../viktorkorotkikh/reports/stage5/report.md | 291 + .../reports/stage6/RANGE-alloc.html | 306 + .../reports/stage6/RANGE-cpu.html | 434 + .../reports/stage6/RANGE-lock.html | 260 + .../viktorkorotkikh/reports/stage6/report.md | 41 + .../util/ClusterResponseMerger.java | 68 + .../util/LSMConstantResponse.java | 12 + .../viktorkorotkikh/util/LsmServerUtil.java | 54 +- 37 files changed, 47536 insertions(+), 80 deletions(-) create mode 100644 src/main/java/ru/vk/itmo/test/viktorkorotkikh/http/Chunk.java create mode 100644 src/main/java/ru/vk/itmo/test/viktorkorotkikh/http/LSMRangeWriter.java create mode 100644 src/main/java/ru/vk/itmo/test/viktorkorotkikh/reports/stage5/GET-30k.txt create mode 100644 src/main/java/ru/vk/itmo/test/viktorkorotkikh/reports/stage5/GET-8k-af-alloc.html create mode 100644 src/main/java/ru/vk/itmo/test/viktorkorotkikh/reports/stage5/GET-8k-af-cpu.html create mode 100644 src/main/java/ru/vk/itmo/test/viktorkorotkikh/reports/stage5/GET-8k-af-lock.html create mode 100644 src/main/java/ru/vk/itmo/test/viktorkorotkikh/reports/stage5/GET-8k-after-fix.txt create mode 100644 src/main/java/ru/vk/itmo/test/viktorkorotkikh/reports/stage5/GET-8k-alloc.html create mode 100644 src/main/java/ru/vk/itmo/test/viktorkorotkikh/reports/stage5/GET-8k-cpu.html create mode 100644 src/main/java/ru/vk/itmo/test/viktorkorotkikh/reports/stage5/GET-8k-histogram.png create mode 100644 src/main/java/ru/vk/itmo/test/viktorkorotkikh/reports/stage5/GET-8k-lock.html create mode 100644 src/main/java/ru/vk/itmo/test/viktorkorotkikh/reports/stage5/GET-8k.txt create mode 100644 src/main/java/ru/vk/itmo/test/viktorkorotkikh/reports/stage5/PUT-25k-histogram.png create mode 100644 src/main/java/ru/vk/itmo/test/viktorkorotkikh/reports/stage5/PUT-25k.txt create mode 100644 src/main/java/ru/vk/itmo/test/viktorkorotkikh/reports/stage5/PUT-31.5k-af-alloc.html create mode 100644 src/main/java/ru/vk/itmo/test/viktorkorotkikh/reports/stage5/PUT-31.5k-af-cpu.html create mode 100644 src/main/java/ru/vk/itmo/test/viktorkorotkikh/reports/stage5/PUT-31.5k-af-lock.html create mode 100644 src/main/java/ru/vk/itmo/test/viktorkorotkikh/reports/stage5/PUT-31.5k-after-fix.txt create mode 100644 src/main/java/ru/vk/itmo/test/viktorkorotkikh/reports/stage5/PUT-31.5k-histogram.png create mode 100644 src/main/java/ru/vk/itmo/test/viktorkorotkikh/reports/stage5/PUT-31.5k.txt create mode 100644 src/main/java/ru/vk/itmo/test/viktorkorotkikh/reports/stage5/PUT-31k-alloc.html create mode 100644 src/main/java/ru/vk/itmo/test/viktorkorotkikh/reports/stage5/PUT-31k-cpu.html create mode 100644 src/main/java/ru/vk/itmo/test/viktorkorotkikh/reports/stage5/PUT-31k-lock.html create mode 100644 src/main/java/ru/vk/itmo/test/viktorkorotkikh/reports/stage5/PUT-60k.txt create mode 100644 src/main/java/ru/vk/itmo/test/viktorkorotkikh/reports/stage5/report.md create mode 100644 src/main/java/ru/vk/itmo/test/viktorkorotkikh/reports/stage6/RANGE-alloc.html create mode 100644 src/main/java/ru/vk/itmo/test/viktorkorotkikh/reports/stage6/RANGE-cpu.html create mode 100644 src/main/java/ru/vk/itmo/test/viktorkorotkikh/reports/stage6/RANGE-lock.html create mode 100644 src/main/java/ru/vk/itmo/test/viktorkorotkikh/reports/stage6/report.md create mode 100644 src/main/java/ru/vk/itmo/test/viktorkorotkikh/util/ClusterResponseMerger.java diff --git a/src/main/java/ru/vk/itmo/test/viktorkorotkikh/LSMServerImpl.java b/src/main/java/ru/vk/itmo/test/viktorkorotkikh/LSMServerImpl.java index b5e3c72b3..fcbe7b035 100644 --- a/src/main/java/ru/vk/itmo/test/viktorkorotkikh/LSMServerImpl.java +++ b/src/main/java/ru/vk/itmo/test/viktorkorotkikh/LSMServerImpl.java @@ -18,11 +18,12 @@ import ru.vk.itmo.test.viktorkorotkikh.dao.exceptions.LSMDaoOutOfMemoryException; import ru.vk.itmo.test.viktorkorotkikh.dao.exceptions.TooManyFlushesException; import ru.vk.itmo.test.viktorkorotkikh.http.LSMCustomSession; +import ru.vk.itmo.test.viktorkorotkikh.http.LSMRangeWriter; import ru.vk.itmo.test.viktorkorotkikh.http.LSMServerResponseWithMemorySegment; +import ru.vk.itmo.test.viktorkorotkikh.util.ClusterResponseMerger; import ru.vk.itmo.test.viktorkorotkikh.util.HttpResponseNodeResponse; import ru.vk.itmo.test.viktorkorotkikh.util.LSMConstantResponse; import ru.vk.itmo.test.viktorkorotkikh.util.LsmServerUtil; -import ru.vk.itmo.test.viktorkorotkikh.util.NodeResponse; import ru.vk.itmo.test.viktorkorotkikh.util.OneNioNodeResponse; import ru.vk.itmo.test.viktorkorotkikh.util.ReplicaEmptyResponse; import ru.vk.itmo.test.viktorkorotkikh.util.RequestParameters; @@ -35,18 +36,14 @@ import java.net.http.HttpRequest; import java.net.http.HttpResponse; import java.nio.charset.StandardCharsets; +import java.time.Duration; import java.time.Instant; -import java.util.ArrayList; import java.util.Iterator; -import java.util.List; import java.util.Map; import java.util.SequencedSet; import java.util.Set; -import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutorService; import java.util.concurrent.RejectedExecutionException; -import java.util.concurrent.TimeUnit; -import java.util.concurrent.TimeoutException; import static java.net.HttpURLConnection.HTTP_GATEWAY_TIMEOUT; import static java.net.HttpURLConnection.HTTP_UNAVAILABLE; @@ -66,13 +63,17 @@ public class LSMServerImpl extends HttpServer { private final String selfUrl; private final HttpClient clusterClient; private final ServiceConfig serviceConfig; + private final ExecutorService clusterResponseProcessor; + private final ExecutorService localProcessor; public LSMServerImpl( ServiceConfig serviceConfig, Dao> dao, ExecutorService executorService, ConsistentHashingManager consistentHashingManager, - HttpClient clusterClient + HttpClient clusterClient, + ExecutorService clusterResponseProcessor, + ExecutorService localProcessor ) throws IOException { super(createServerConfig(serviceConfig)); this.dao = dao; @@ -81,6 +82,8 @@ public LSMServerImpl( this.selfUrl = serviceConfig.selfUrl(); this.clusterClient = clusterClient; this.serviceConfig = serviceConfig; + this.clusterResponseProcessor = clusterResponseProcessor; + this.localProcessor = localProcessor; } private static HttpServerConfig createServerConfig(ServiceConfig serviceConfig) { @@ -103,6 +106,12 @@ public void handleRequest(Request request, HttpSession session) throws IOExcepti executorService.execute(() -> { try { final String path = request.getPath(); + + if (path.startsWith("/v0/entities") && request.getMethod() == METHOD_GET) { + handleEntitiesRangeRequest(request, (LSMCustomSession) session); + return; + } + if (path.startsWith("/v0/entity")) { handleEntityRequest(request, session); } else { @@ -186,15 +195,15 @@ public void handleEntityRequest(Request request, HttpSession session) throws IOE final SequencedSet replicas = consistentHashingManager.getReplicasSet(from, key); - final Response response = getResponseFromReplicas( + getResponseFromReplicas( request, from, replicas, key, id, - ack + ack, + session ); - session.sendResponse(response); } private static RequestParameters getRequestParameters(Request request) { @@ -220,34 +229,38 @@ private static RequestParameters getRequestParameters(Request request) { return new RequestParameters(id, ack, from); } - private Response getResponseFromReplicas( + private void getResponseFromReplicas( Request request, - Integer from, + int from, SequencedSet replicas, byte[] key, String id, - Integer ack + int ack, + HttpSession session ) { - final List responses = new ArrayList<>(from); + final ClusterResponseMerger clusterResponseMerger = new ClusterResponseMerger(ack, from, request, session); final long requestTimestamp = Instant.now().toEpochMilli(); + int i = 0; for (final String replicaUrl : replicas) { if (replicaUrl.equals(selfUrl)) { - responses.add(processLocal(request, key, id, requestTimestamp)); + processLocalAsync(request, key, id, requestTimestamp, i, clusterResponseMerger); } else { - responses.add(processRemote(request, replicaUrl, id, requestTimestamp)); + processRemote(request, replicaUrl, id, requestTimestamp, i, clusterResponseMerger); } + i++; } - return LsmServerUtil.mergeReplicasResponses(request, responses, ack); } - private NodeResponse processRemote( + private void processRemote( final Request originalRequest, final String server, final String id, - long requestTimestamp + long requestTimestamp, + int index, + ClusterResponseMerger clusterResponseMerge ) { final HttpRequest request = createClusterRequest(originalRequest, server, id, requestTimestamp); - return sendClusterRequest(request); + sendClusterRequest(request, index, clusterResponseMerge); } private static HttpRequest createClusterRequest( @@ -259,7 +272,8 @@ private static HttpRequest createClusterRequest( HttpRequest.Builder builder = HttpRequest.newBuilder() .uri(URI.create(server + ENTITY_V0_PATH_WITH_ID_PARAM + id)) .header(REPLICA_REQUEST_HEADER, "") - .header(LsmServerUtil.TIMESTAMP_HEADER, String.valueOf(requestTimestamp)); + .header(LsmServerUtil.TIMESTAMP_HEADER, String.valueOf(requestTimestamp)) + .timeout(Duration.ofMillis(CLUSTER_REQUEST_TIMEOUT_MILLISECONDS)); switch (originalRequest.getMethod()) { case METHOD_GET -> builder.GET(); case METHOD_PUT -> { @@ -275,29 +289,47 @@ private static HttpRequest createClusterRequest( return builder.build(); } - private NodeResponse sendClusterRequest( - final HttpRequest request + private void sendClusterRequest( + final HttpRequest request, + final int index, + final ClusterResponseMerger clusterResponseMerger ) { - try { - return new HttpResponseNodeResponse( - clusterClient - .sendAsync(request, HttpResponse.BodyHandlers.ofByteArray()) - .get(CLUSTER_REQUEST_TIMEOUT_MILLISECONDS, TimeUnit.MILLISECONDS) - ); - } catch (InterruptedException e) { - final String clusterUrl = request.uri().toString(); - Thread.currentThread().interrupt(); - log.warn("Current thread was interrupted during processing request to cluster {}", clusterUrl); - return new ReplicaEmptyResponse(HTTP_UNAVAILABLE); - } catch (ExecutionException e) { - final String clusterUrl = request.uri().toString(); - log.error("Unexpected exception occurred while sending request to cluster {}", clusterUrl, e); - return new ReplicaEmptyResponse(HTTP_UNAVAILABLE); - } catch (TimeoutException e) { - final String clusterUrl = request.uri().toString(); - log.warn("Request timeout to cluster server {}", clusterUrl); - return new ReplicaEmptyResponse(HTTP_GATEWAY_TIMEOUT); - } + clusterClient + .sendAsync(request, HttpResponse.BodyHandlers.ofByteArray()) + .thenAcceptAsync(response -> + clusterResponseMerger.addToMerge( + index, + new HttpResponseNodeResponse(response) + ), clusterResponseProcessor) + .exceptionallyAsync(throwable -> { + if (throwable.getCause() instanceof java.net.http.HttpTimeoutException) { + final String clusterUrl = request.uri().toString(); + log.warn("Request timeout to cluster server {}", clusterUrl); + clusterResponseMerger.addToMerge(index, new ReplicaEmptyResponse(HTTP_GATEWAY_TIMEOUT)); + } else { + final String clusterUrl = request.uri().toString(); + log.error( + "Unexpected exception occurred while sending request to cluster {}", + clusterUrl, + throwable + ); + clusterResponseMerger.addToMerge(index, new ReplicaEmptyResponse(HTTP_UNAVAILABLE)); + } + return null; + }, clusterResponseProcessor).state(); + } + + private void processLocalAsync( + Request request, + byte[] key, + String id, + long requestTimestamp, + int i, + ClusterResponseMerger clusterResponseMerger + ) { + localProcessor.execute(() -> + clusterResponseMerger.addToMerge(i, processLocal(request, key, id, requestTimestamp)) + ); } private OneNioNodeResponse processLocal( @@ -406,6 +438,21 @@ public Response handleCompact(Request request) throws IOException { return LSMConstantResponse.ok(request); } + public void handleEntitiesRangeRequest(Request request, LSMCustomSession session) throws IOException { + final String start = request.getParameter("start="); + final String end = request.getParameter("end="); + if (start == null || start.isEmpty() || (end != null && end.isEmpty())) { + log.debug("Bad request: start parameter and end parameter (if it present) should not be empty"); + session.sendResponse(LSMConstantResponse.badRequest(request)); + return; + } + + final MemorySegment startMemorySegment = fromByteArray(start.getBytes(StandardCharsets.UTF_8)); + final MemorySegment endMemorySegment = end == null ? null : fromByteArray(end.getBytes(StandardCharsets.UTF_8)); + Iterator> iterator = dao.get(startMemorySegment, endMemorySegment); + session.sendRangeResponse(new LSMRangeWriter(iterator, LSMConstantResponse.keepAlive(request))); + } + private static MemorySegment fromByteArray(final byte[] data) { return MemorySegment.ofArray(data); } diff --git a/src/main/java/ru/vk/itmo/test/viktorkorotkikh/LSMServiceImpl.java b/src/main/java/ru/vk/itmo/test/viktorkorotkikh/LSMServiceImpl.java index 51794a728..f84e566d2 100644 --- a/src/main/java/ru/vk/itmo/test/viktorkorotkikh/LSMServiceImpl.java +++ b/src/main/java/ru/vk/itmo/test/viktorkorotkikh/LSMServiceImpl.java @@ -30,6 +30,14 @@ public class LSMServiceImpl implements Service { private static final long FLUSH_THRESHOLD = 1 << 20; // 1 MB private static final int TERMINATION_TIMEOUT_SECONDS = 20; + private static final int SERVER_EXECUTOR_SERVICE_THREADS_COUNT = 16; + private static final int SERVER_EXECUTOR_SERVICE_QUEUE_SIZE = 1024; + private static final int CLUSTER_HTTP_CLIENT_EXECUTOR_SERVICE_THREADS_COUNT = 16; + private static final int CLUSTER_HTTP_CLIENT_EXECUTOR_SERVICE_QUEUE_SIZE = 1024; + private static final int CLUSTER_RESPONSE_EXECUTOR_SERVICE_THREADS_COUNT = 16; + private static final int CLUSTER_RESPONSE_EXECUTOR_SERVICE_QUEUE_SIZE = 1024; + private static final int LOCAL_REQUEST_EXECUTOR_SERVICE_THREADS_COUNT = 16; + private static final int LOCAL_REQUEST_EXECUTOR_SERVICE_QUEUE_SIZE = 1024; private final ServiceConfig serviceConfig; private LSMServerImpl httpServer; private boolean isRunning; @@ -38,6 +46,8 @@ public class LSMServiceImpl implements Service { private final ConsistentHashingManager consistentHashingManager; private HttpClient clusterClient; private ExecutorService clusterClientExecutorService; + private ExecutorService clusterResponseProcessor; + private ExecutorService localProcessor; public static void main(String[] args) throws IOException, ExecutionException, InterruptedException { Path baseWorkingDir = Path.of("daoWorkingDir"); @@ -96,14 +106,43 @@ public LSMServiceImpl(ServiceConfig serviceConfig) { this.consistentHashingManager = new ConsistentHashingManager(10, serviceConfig.clusterUrls()); } - private static LSMServerImpl createServer( - ServiceConfig serviceConfig, - Dao> dao, - ExecutorService executorService, - ConsistentHashingManager consistentHashingManager, - HttpClient clusterClient + private LSMServerImpl createServer( + Dao> dao ) throws IOException { - return new LSMServerImpl(serviceConfig, dao, executorService, consistentHashingManager, clusterClient); + executorService = createExecutorService( + SERVER_EXECUTOR_SERVICE_THREADS_COUNT, + SERVER_EXECUTOR_SERVICE_QUEUE_SIZE, + "worker" + ); + clusterClientExecutorService = createExecutorService( + CLUSTER_HTTP_CLIENT_EXECUTOR_SERVICE_THREADS_COUNT, + CLUSTER_HTTP_CLIENT_EXECUTOR_SERVICE_QUEUE_SIZE, + "cluster-request" + ); + clusterResponseProcessor = createExecutorService( + CLUSTER_RESPONSE_EXECUTOR_SERVICE_THREADS_COUNT, + CLUSTER_RESPONSE_EXECUTOR_SERVICE_QUEUE_SIZE, + "cluster-response-processor" + ); + localProcessor = createExecutorService( + LOCAL_REQUEST_EXECUTOR_SERVICE_THREADS_COUNT, + LOCAL_REQUEST_EXECUTOR_SERVICE_QUEUE_SIZE, + "local-processor" + ); + + clusterClient = HttpClient.newBuilder() + .executor(clusterClientExecutorService) + .build(); + + return new LSMServerImpl( + serviceConfig, + dao, + executorService, + consistentHashingManager, + clusterClient, + clusterResponseProcessor, + localProcessor + ); } private static Dao> createLSMDao(Path workingDir) { @@ -146,14 +185,7 @@ public synchronized CompletableFuture start() throws IOException { if (isRunning) return CompletableFuture.completedFuture(null); dao = createLSMDao(serviceConfig.workingDir()); - executorService = createExecutorService(16, 1024, "worker"); - clusterClientExecutorService = createExecutorService(16, 1024, "cluster-worker"); - - clusterClient = HttpClient.newBuilder() - .executor(clusterClientExecutorService) - .build(); - - httpServer = createServer(serviceConfig, dao, executorService, consistentHashingManager, clusterClient); + httpServer = createServer(dao); httpServer.start(); isRunning = true; @@ -167,6 +199,8 @@ public synchronized CompletableFuture stop() throws IOException { shutdownHttpClient(clusterClient); shutdownExecutorService(clusterClientExecutorService); + shutdownExecutorService(clusterResponseProcessor); + shutdownExecutorService(localProcessor); shutdownExecutorService(executorService); executorService = null; clusterClient = null; @@ -211,7 +245,7 @@ private static void shutdownHttpClient(HttpClient httpClient) { } } - @ServiceFactory(stage = 4) + @ServiceFactory(stage = 6) public static class LSMServiceFactoryImpl implements ServiceFactory.Factory { @Override public Service create(ServiceConfig config) { diff --git a/src/main/java/ru/vk/itmo/test/viktorkorotkikh/dao/MemTable.java b/src/main/java/ru/vk/itmo/test/viktorkorotkikh/dao/MemTable.java index 1d606f38a..c227375f6 100644 --- a/src/main/java/ru/vk/itmo/test/viktorkorotkikh/dao/MemTable.java +++ b/src/main/java/ru/vk/itmo/test/viktorkorotkikh/dao/MemTable.java @@ -4,6 +4,7 @@ import java.lang.foreign.MemorySegment; import java.util.Collection; +import java.util.Collections; import java.util.Iterator; import java.util.NavigableMap; import java.util.NoSuchElementException; @@ -39,7 +40,12 @@ private Iterator> storageIterator(MemorySegment return storage.tailMap(from).sequencedValues().iterator(); } - return storage.subMap(from, to).sequencedValues().iterator(); + try { + return storage.subMap(from, to).sequencedValues().iterator(); + } catch (IllegalArgumentException illegalArgumentException) { + // we get inconsistent range error when from > to + return Collections.emptyIterator(); + } } public MemTableIterator iterator(MemorySegment from, MemorySegment to, int priorityReduction) { diff --git a/src/main/java/ru/vk/itmo/test/viktorkorotkikh/http/Chunk.java b/src/main/java/ru/vk/itmo/test/viktorkorotkikh/http/Chunk.java new file mode 100644 index 000000000..10fa2108f --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/viktorkorotkikh/http/Chunk.java @@ -0,0 +1,27 @@ +package ru.vk.itmo.test.viktorkorotkikh.http; + +import one.nio.util.ByteArrayBuilder; + +public class Chunk { + private final ByteArrayBuilder byteArrayBuilder; + private final int offset; + private final int length; + + public Chunk(ByteArrayBuilder buffer, int offset) { + this.byteArrayBuilder = buffer; + this.offset = offset; + this.length = buffer.length() - offset; + } + + public byte[] getBytes() { + return byteArrayBuilder.buffer(); + } + + public int offset() { + return offset; + } + + public int length() { + return length; + } +} diff --git a/src/main/java/ru/vk/itmo/test/viktorkorotkikh/http/LSMCustomSession.java b/src/main/java/ru/vk/itmo/test/viktorkorotkikh/http/LSMCustomSession.java index 7cb755352..dd616a890 100644 --- a/src/main/java/ru/vk/itmo/test/viktorkorotkikh/http/LSMCustomSession.java +++ b/src/main/java/ru/vk/itmo/test/viktorkorotkikh/http/LSMCustomSession.java @@ -10,6 +10,8 @@ import java.io.IOException; public class LSMCustomSession extends HttpSession { + private LSMRangeWriter lsmRangeWriter; + public LSMCustomSession(Socket socket, HttpServer server) { super(socket, server); } @@ -39,4 +41,40 @@ public synchronized void sendResponse(Response response) throws IOException { } } } + + @Override + protected void processWrite() throws Exception { + super.processWrite(); + sendNextRangeChunks(); + } + + public void sendRangeResponse(LSMRangeWriter lsmRangeWriter) throws IOException { + Request handling = this.handling; + if (handling == null) { + throw new IOException("Out of order response"); + } + server.incRequestsProcessed(); + + this.lsmRangeWriter = lsmRangeWriter; + sendNextRangeChunks(); + } + + private void sendNextRangeChunks() throws IOException { + if (lsmRangeWriter == null) return; + while (queueHead == null && lsmRangeWriter.hasChunks()) { + Chunk chunk = lsmRangeWriter.nextChunk(); + write(chunk.getBytes(), chunk.offset(), chunk.length()); + } + + if (!lsmRangeWriter.hasChunks()) { + this.handling = pipeline.pollFirst(); + if (handling != null) { + if (handling == FIN) { + scheduleClose(); + } else { + server.handleRequest(handling, this); + } + } + } + } } diff --git a/src/main/java/ru/vk/itmo/test/viktorkorotkikh/http/LSMRangeWriter.java b/src/main/java/ru/vk/itmo/test/viktorkorotkikh/http/LSMRangeWriter.java new file mode 100644 index 000000000..67ec9ef76 --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/viktorkorotkikh/http/LSMRangeWriter.java @@ -0,0 +1,168 @@ +package ru.vk.itmo.test.viktorkorotkikh.http; + +import one.nio.util.ByteArrayBuilder; +import one.nio.util.Utf8; +import ru.vk.itmo.test.viktorkorotkikh.dao.TimestampedEntry; +import ru.vk.itmo.test.viktorkorotkikh.util.LsmServerUtil; + +import java.lang.foreign.MemorySegment; +import java.util.Iterator; + +import static ru.vk.itmo.test.viktorkorotkikh.util.LSMConstantResponse.CHUNKED_RESPONSE_CLOSE_WITH_HEADERS_BYTES; +import static ru.vk.itmo.test.viktorkorotkikh.util.LSMConstantResponse.CHUNKED_RESPONSE_KEEP_ALIVE_WITH_HEADERS_BYTES; + +public class LSMRangeWriter { + private static final int BUFFER_SIZE = 8192; + private static final int CHUNK_SIZE_BYTES = 16; // long 8 bytes in hex + private static final byte[] CRLF_BYTES = new byte[]{'\r', '\n'}; + private final Iterator> entryIterator; + private final boolean keepAlive; + private final ByteArrayBuilder buffer; + private long chunkSize = 0; + private TimestampedEntry lastEntry; + private int lastEntryOffset; + private NextOperation nextOperation = NextOperation.WRITE_HEADERS; + + public LSMRangeWriter(Iterator> entryIterator, boolean keepAlive) { + this.entryIterator = entryIterator; + this.keepAlive = keepAlive; + this.buffer = new ByteArrayBuilder(BUFFER_SIZE); + } + + public boolean hasChunks() { + return entryIterator.hasNext() || nextOperation != null; + } + + public Chunk nextChunk() { + chunkSize = 0; + int chunkHeaderOffset = CHUNK_SIZE_BYTES + CRLF_BYTES.length; + boolean writeHttpHeaders = false; + if (nextOperation == NextOperation.WRITE_HEADERS) { + chunkHeaderOffset += keepAlive + ? CHUNKED_RESPONSE_KEEP_ALIVE_WITH_HEADERS_BYTES.length + : CHUNKED_RESPONSE_CLOSE_WITH_HEADERS_BYTES.length; + writeHttpHeaders = true; + } + buffer.setLength(chunkHeaderOffset); + + if (!appendNextOperationBytes()) { + int chunkOffset = writeChunkHeader(chunkHeaderOffset, writeHttpHeaders); + return new Chunk(buffer, chunkOffset); + } + + while (entryIterator.hasNext()) { + lastEntry = entryIterator.next(); + lastEntryOffset = 0; + + nextOperation = NextOperation.WRITE_KEY; + if (!appendNextOperationBytes()) { + int chunkOffset = writeChunkHeader(chunkHeaderOffset, writeHttpHeaders); + return new Chunk(buffer, chunkOffset); + } + } + + int chunkOffset = writeChunkHeader(chunkHeaderOffset, writeHttpHeaders); + if (chunkSize == 0) { + appendCLRF(buffer); + } else { + buffer.append(Long.toHexString(0)); + appendCLRF(buffer); + appendCLRF(buffer); + } + + nextOperation = null; + + return new Chunk(buffer, chunkOffset); + } + + private int writeChunkHeader(int chunkSizeOffset, boolean writeHttpHeaders) { + String chunkSizeHexString = Long.toHexString(chunkSize); + int chunkSizeHexStringLength = Utf8.length(chunkSizeHexString); + int chunkSizeStart = chunkSizeOffset - chunkSizeHexStringLength - CRLF_BYTES.length; + Utf8.write(chunkSizeHexString, buffer.buffer(), chunkSizeStart); + + System.arraycopy( + CRLF_BYTES, + 0, + buffer.buffer(), + chunkSizeStart + chunkSizeHexStringLength, + CRLF_BYTES.length + ); + + int headersOffset = 0; + if (writeHttpHeaders) { + byte[] headers = keepAlive + ? CHUNKED_RESPONSE_KEEP_ALIVE_WITH_HEADERS_BYTES + : CHUNKED_RESPONSE_CLOSE_WITH_HEADERS_BYTES; + System.arraycopy(headers, 0, buffer.buffer(), chunkSizeStart - headers.length, headers.length); + headersOffset = headers.length; + } + appendCLRF(buffer); + return chunkSizeStart - headersOffset; + } + + private boolean appendNextOperationBytes() { + return switch (nextOperation) { + case WRITE_HEADERS -> true; // we write headers later in writeChunkSize method + case WRITE_KEY -> { + if (buffer.length() + CRLF_BYTES.length >= buffer.capacity()) { + yield false; + } + + if (appendMemorySegment(lastEntry.key(), lastEntryOffset, true)) { + nextOperation = NextOperation.WRITE_DELIMITERS_AFTER_KEY; + yield appendNextOperationBytes(); + } + yield false; + } + case WRITE_DELIMITERS_AFTER_KEY -> { + if (buffer.length() + 1 + CRLF_BYTES.length <= buffer.capacity()) { + chunkSize += 1; + buffer.append('\n'); + nextOperation = NextOperation.WRITE_VALUE; + yield appendNextOperationBytes(); + } + yield false; + } + case WRITE_VALUE -> { + if (buffer.length() + CRLF_BYTES.length >= buffer.capacity()) { + yield false; + } + if (appendMemorySegment(lastEntry.value(), lastEntryOffset, false)) { + nextOperation = null; + yield true; + } + yield false; + } + case null -> true; + }; + } + + private boolean appendMemorySegment(MemorySegment memorySegment, int memorySegmentOffset, boolean isKey) { + int writtenMemorySegment = LsmServerUtil.copyMemorySegmentToByteArrayBuilder( + memorySegment, + memorySegmentOffset, + buffer, + buffer.capacity() - CRLF_BYTES.length + ); + chunkSize += writtenMemorySegment; + + if (lastEntryOffset + writtenMemorySegment < memorySegment.byteSize()) { + nextOperation = isKey ? NextOperation.WRITE_KEY : NextOperation.WRITE_VALUE; + lastEntryOffset += writtenMemorySegment; + return false; + } + lastEntryOffset = 0; + return true; + } + + private static void appendCLRF(final ByteArrayBuilder builder) { + builder.append(CRLF_BYTES); + } + + private enum NextOperation { + WRITE_HEADERS, + WRITE_KEY, WRITE_DELIMITERS_AFTER_KEY, + WRITE_VALUE + } +} diff --git a/src/main/java/ru/vk/itmo/test/viktorkorotkikh/http/LSMServerResponseWithMemorySegment.java b/src/main/java/ru/vk/itmo/test/viktorkorotkikh/http/LSMServerResponseWithMemorySegment.java index ddfc00463..408f2437f 100644 --- a/src/main/java/ru/vk/itmo/test/viktorkorotkikh/http/LSMServerResponseWithMemorySegment.java +++ b/src/main/java/ru/vk/itmo/test/viktorkorotkikh/http/LSMServerResponseWithMemorySegment.java @@ -3,6 +3,7 @@ import one.nio.http.Response; import one.nio.util.ByteArrayBuilder; import one.nio.util.Utf8; +import ru.vk.itmo.test.viktorkorotkikh.util.LsmServerUtil; import java.lang.foreign.MemorySegment; import java.lang.foreign.ValueLayout; @@ -46,19 +47,8 @@ public byte[] toBytes(boolean includeBody) { } builder.append('\r').append('\n'); if (includeBody) { - writeBody(memorySegmentBody, builder); + LsmServerUtil.copyMemorySegmentToByteArrayBuilder(memorySegmentBody, builder); } return builder.buffer(); } - - private static void writeBody(MemorySegment memorySegmentBody, ByteArrayBuilder builder) { - MemorySegment.copy( - memorySegmentBody, - ValueLayout.JAVA_BYTE, - 0L, - builder.buffer(), - builder.length(), - (int) memorySegmentBody.byteSize() - ); - } } diff --git a/src/main/java/ru/vk/itmo/test/viktorkorotkikh/reports/stage5/GET-30k.txt b/src/main/java/ru/vk/itmo/test/viktorkorotkikh/reports/stage5/GET-30k.txt new file mode 100644 index 000000000..9495e0c3e --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/viktorkorotkikh/reports/stage5/GET-30k.txt @@ -0,0 +1,130 @@ +Running 1m test @ http://localhost:8080 + 4 threads and 64 connections + Thread calibration: mean lat.: 2737.519ms, rate sampling interval: 10002ms + Thread calibration: mean lat.: 2751.135ms, rate sampling interval: 10027ms + Thread calibration: mean lat.: 2748.293ms, rate sampling interval: 10010ms + Thread calibration: mean lat.: 2738.065ms, rate sampling interval: 10010ms + Thread Stats Avg Stdev Max +/- Stdev + Latency 19.15s 7.91s 33.08s 57.83% + Req/Sec 3.40k 14.14 3.42k 62.50% + Latency Distribution (HdrHistogram - Recorded Latency) + 50.000% 19.12s + 75.000% 25.99s + 90.000% 30.21s + 99.000% 32.65s + 99.900% 32.92s + 99.990% 33.01s + 99.999% 33.08s +100.000% 33.10s + + Detailed Percentile spectrum: + Value Percentile TotalCount 1/(1-Percentile) + + 5480.447 0.000000 2 1.00 + 8237.055 0.100000 67690 1.11 + 10919.935 0.200000 135297 1.25 + 13664.255 0.300000 202876 1.43 + 16375.807 0.400000 270561 1.67 + 19120.127 0.500000 338390 2.00 + 20512.767 0.550000 372151 2.22 + 21856.255 0.600000 405822 2.50 + 23216.127 0.650000 439825 2.86 + 24608.767 0.700000 473661 3.33 + 25985.023 0.750000 507440 4.00 + 26656.767 0.775000 524135 4.44 + 27328.511 0.800000 541004 5.00 + 28033.023 0.825000 558037 5.71 + 28721.151 0.850000 575082 6.67 + 29392.895 0.875000 591835 8.00 + 29868.031 0.887500 600424 8.89 + 30212.095 0.900000 608795 10.00 + 30556.159 0.912500 617331 11.43 + 30900.223 0.925000 625807 13.33 + 31227.903 0.937500 634113 16.00 + 31391.743 0.943750 638349 17.78 + 31571.967 0.950000 642788 20.00 + 31735.807 0.956250 646720 22.86 + 31916.031 0.962500 651240 26.67 + 32079.871 0.968750 655309 32.00 + 32161.791 0.971875 657371 35.56 + 32243.711 0.975000 659403 40.00 + 32325.631 0.978125 661460 45.71 + 32407.551 0.981250 663545 53.33 + 32505.855 0.984375 666066 64.00 + 32538.623 0.985938 666853 71.11 + 32587.775 0.987500 668100 80.00 + 32620.543 0.989062 668938 91.43 + 32669.695 0.990625 670189 106.67 + 32702.463 0.992188 671000 128.00 + 32735.231 0.992969 671833 142.22 + 32751.615 0.993750 672240 160.00 + 32767.999 0.994531 672639 182.86 + 32800.767 0.995313 673431 213.33 + 32817.151 0.996094 673820 256.00 + 32833.535 0.996484 674200 284.44 + 32833.535 0.996875 674200 320.00 + 32849.919 0.997266 674555 365.71 + 32866.303 0.997656 674889 426.67 + 32882.687 0.998047 675210 512.00 + 32882.687 0.998242 675210 568.89 + 32882.687 0.998437 675210 640.00 + 32899.071 0.998633 675452 731.43 + 32899.071 0.998828 675452 853.33 + 32915.455 0.999023 675655 1024.00 + 32915.455 0.999121 675655 1137.78 + 32931.839 0.999219 675812 1280.00 + 32931.839 0.999316 675812 1462.86 + 32948.223 0.999414 675942 1706.67 + 32948.223 0.999512 675942 2048.00 + 32948.223 0.999561 675942 2275.56 + 32964.607 0.999609 676038 2560.00 + 32964.607 0.999658 676038 2925.71 + 32964.607 0.999707 676038 3413.33 + 32980.991 0.999756 676093 4096.00 + 32980.991 0.999780 676093 4551.11 + 32980.991 0.999805 676093 5120.00 + 32997.375 0.999829 676131 5851.43 + 32997.375 0.999854 676131 6826.67 + 33013.759 0.999878 676155 8192.00 + 33013.759 0.999890 676155 9102.22 + 33013.759 0.999902 676155 10240.00 + 33030.143 0.999915 676174 11702.86 + 33030.143 0.999927 676174 13653.33 + 33046.527 0.999939 676202 16384.00 + 33046.527 0.999945 676202 18204.44 + 33046.527 0.999951 676202 20480.00 + 33046.527 0.999957 676202 23405.71 + 33046.527 0.999963 676202 27306.67 + 33046.527 0.999969 676202 32768.00 + 33062.911 0.999973 676213 36408.89 + 33062.911 0.999976 676213 40960.00 + 33062.911 0.999979 676213 46811.43 + 33062.911 0.999982 676213 54613.33 + 33062.911 0.999985 676213 65536.00 + 33062.911 0.999986 676213 72817.78 + 33062.911 0.999988 676213 81920.00 + 33079.295 0.999989 676220 93622.86 + 33079.295 0.999991 676220 109226.67 + 33079.295 0.999992 676220 131072.00 + 33079.295 0.999993 676220 145635.56 + 33079.295 0.999994 676220 163840.00 + 33079.295 0.999995 676220 187245.71 + 33079.295 0.999995 676220 218453.33 + 33079.295 0.999996 676220 262144.00 + 33079.295 0.999997 676220 291271.11 + 33079.295 0.999997 676220 327680.00 + 33079.295 0.999997 676220 374491.43 + 33079.295 0.999998 676220 436906.67 + 33079.295 0.999998 676220 524288.00 + 33079.295 0.999998 676220 582542.22 + 33079.295 0.999998 676220 655360.00 + 33095.679 0.999999 676221 748982.86 + 33095.679 1.000000 676221 inf +#[Mean = 19147.619, StdDeviation = 7905.395] +#[Max = 33079.296, Total count = 676221] +#[Buckets = 27, SubBuckets = 2048] +---------------------------------------------------------- + 811430 requests in 1.00m, 39.88MB read + Non-2xx or 3xx responses: 31216 +Requests/sec: 13523.69 +Transfer/sec: 680.56KB diff --git a/src/main/java/ru/vk/itmo/test/viktorkorotkikh/reports/stage5/GET-8k-af-alloc.html b/src/main/java/ru/vk/itmo/test/viktorkorotkikh/reports/stage5/GET-8k-af-alloc.html new file mode 100644 index 000000000..96bea451c --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/viktorkorotkikh/reports/stage5/GET-8k-af-alloc.html @@ -0,0 +1,3279 @@ + + + + + + + +

Allocation profile

+
  
+
Produced by async-profiler
+ +
+

+

Matched:

+ diff --git a/src/main/java/ru/vk/itmo/test/viktorkorotkikh/reports/stage5/GET-8k-af-cpu.html b/src/main/java/ru/vk/itmo/test/viktorkorotkikh/reports/stage5/GET-8k-af-cpu.html new file mode 100644 index 000000000..fa936084b --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/viktorkorotkikh/reports/stage5/GET-8k-af-cpu.html @@ -0,0 +1,5748 @@ + + + + + + + +

CPU profile

+
  
+
Produced by async-profiler
+ +
+

+

Matched:

+ diff --git a/src/main/java/ru/vk/itmo/test/viktorkorotkikh/reports/stage5/GET-8k-af-lock.html b/src/main/java/ru/vk/itmo/test/viktorkorotkikh/reports/stage5/GET-8k-af-lock.html new file mode 100644 index 000000000..362d8107d --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/viktorkorotkikh/reports/stage5/GET-8k-af-lock.html @@ -0,0 +1,1059 @@ + + + + + + + +

Lock profile

+
  
+
Produced by async-profiler
+ +
+

+

Matched:

+ diff --git a/src/main/java/ru/vk/itmo/test/viktorkorotkikh/reports/stage5/GET-8k-after-fix.txt b/src/main/java/ru/vk/itmo/test/viktorkorotkikh/reports/stage5/GET-8k-after-fix.txt new file mode 100644 index 000000000..8fa882837 --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/viktorkorotkikh/reports/stage5/GET-8k-after-fix.txt @@ -0,0 +1,126 @@ +Running 1m test @ http://localhost:8080 + 4 threads and 64 connections + Thread calibration: mean lat.: 1.370ms, rate sampling interval: 10ms + Thread calibration: mean lat.: 1.458ms, rate sampling interval: 10ms + Thread calibration: mean lat.: 1.332ms, rate sampling interval: 10ms + Thread calibration: mean lat.: 1.344ms, rate sampling interval: 10ms + Thread Stats Avg Stdev Max +/- Stdev + Latency 1.35ms 607.24us 17.31ms 69.39% + Req/Sec 2.11k 161.56 3.44k 69.74% + Latency Distribution (HdrHistogram - Recorded Latency) + 50.000% 1.30ms + 75.000% 1.72ms + 90.000% 2.13ms + 99.000% 2.95ms + 99.900% 3.86ms + 99.990% 10.17ms + 99.999% 13.06ms +100.000% 17.33ms + + Detailed Percentile spectrum: + Value Percentile TotalCount 1/(1-Percentile) + + 0.116 0.000000 1 1.00 + 0.627 0.100000 40026 1.11 + 0.829 0.200000 79998 1.25 + 0.994 0.300000 120015 1.43 + 1.147 0.400000 159823 1.67 + 1.297 0.500000 199814 2.00 + 1.374 0.550000 219856 2.22 + 1.453 0.600000 239738 2.50 + 1.536 0.650000 259632 2.86 + 1.626 0.700000 279634 3.33 + 1.723 0.750000 299547 4.00 + 1.775 0.775000 309515 4.44 + 1.833 0.800000 319574 5.00 + 1.895 0.825000 329614 5.71 + 1.964 0.850000 339565 6.67 + 2.042 0.875000 349468 8.00 + 2.087 0.887500 354520 8.89 + 2.135 0.900000 359530 10.00 + 2.189 0.912500 364522 11.43 + 2.249 0.925000 369560 13.33 + 2.317 0.937500 374402 16.00 + 2.357 0.943750 376981 17.78 + 2.399 0.950000 379429 20.00 + 2.449 0.956250 381888 22.86 + 2.505 0.962500 384397 26.67 + 2.569 0.968750 386929 32.00 + 2.605 0.971875 388166 35.56 + 2.645 0.975000 389378 40.00 + 2.691 0.978125 390633 45.71 + 2.743 0.981250 391873 53.33 + 2.803 0.984375 393133 64.00 + 2.835 0.985938 393745 71.11 + 2.875 0.987500 394396 80.00 + 2.921 0.989062 395000 91.43 + 2.973 0.990625 395623 106.67 + 3.035 0.992188 396249 128.00 + 3.071 0.992969 396559 142.22 + 3.113 0.993750 396874 160.00 + 3.157 0.994531 397186 182.86 + 3.209 0.995313 397497 213.33 + 3.267 0.996094 397807 256.00 + 3.311 0.996484 397959 284.44 + 3.355 0.996875 398114 320.00 + 3.405 0.997266 398272 365.71 + 3.467 0.997656 398427 426.67 + 3.539 0.998047 398580 512.00 + 3.579 0.998242 398658 568.89 + 3.623 0.998437 398739 640.00 + 3.675 0.998633 398816 731.43 + 3.765 0.998828 398893 853.33 + 3.875 0.999023 398970 1024.00 + 3.943 0.999121 399009 1137.78 + 4.077 0.999219 399049 1280.00 + 4.187 0.999316 399087 1462.86 + 4.319 0.999414 399126 1706.67 + 4.807 0.999512 399165 2048.00 + 5.103 0.999561 399185 2275.56 + 5.491 0.999609 399204 2560.00 + 6.031 0.999658 399224 2925.71 + 6.495 0.999707 399243 3413.33 + 7.491 0.999756 399263 4096.00 + 7.903 0.999780 399273 4551.11 + 8.311 0.999805 399282 5120.00 + 8.999 0.999829 399292 5851.43 + 9.223 0.999854 399302 6826.67 + 9.775 0.999878 399313 8192.00 + 9.863 0.999890 399317 9102.22 + 10.191 0.999902 399321 10240.00 + 10.567 0.999915 399326 11702.86 + 10.799 0.999927 399331 13653.33 + 11.055 0.999939 399336 16384.00 + 11.223 0.999945 399339 18204.44 + 11.391 0.999951 399341 20480.00 + 11.559 0.999957 399344 23405.71 + 11.623 0.999963 399346 27306.67 + 11.727 0.999969 399348 32768.00 + 12.159 0.999973 399350 36408.89 + 12.175 0.999976 399351 40960.00 + 12.335 0.999979 399352 46811.43 + 12.551 0.999982 399353 54613.33 + 12.639 0.999985 399354 65536.00 + 12.927 0.999986 399355 72817.78 + 13.055 0.999988 399356 81920.00 + 13.055 0.999989 399356 93622.86 + 13.391 0.999991 399357 109226.67 + 13.391 0.999992 399357 131072.00 + 13.495 0.999993 399358 145635.56 + 13.495 0.999994 399358 163840.00 + 13.495 0.999995 399358 187245.71 + 13.759 0.999995 399359 218453.33 + 13.759 0.999996 399359 262144.00 + 13.759 0.999997 399359 291271.11 + 13.759 0.999997 399359 327680.00 + 13.759 0.999997 399359 374491.43 + 17.327 0.999998 399360 436906.67 + 17.327 1.000000 399360 inf +#[Mean = 1.354, StdDeviation = 0.607] +#[Max = 17.312, Total count = 399360] +#[Buckets = 27, SubBuckets = 2048] +---------------------------------------------------------- + 479718 requests in 1.00m, 23.57MB read + Non-2xx or 3xx responses: 18126 +Requests/sec: 7995.25 +Transfer/sec: 402.26KB diff --git a/src/main/java/ru/vk/itmo/test/viktorkorotkikh/reports/stage5/GET-8k-alloc.html b/src/main/java/ru/vk/itmo/test/viktorkorotkikh/reports/stage5/GET-8k-alloc.html new file mode 100644 index 000000000..25099f087 --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/viktorkorotkikh/reports/stage5/GET-8k-alloc.html @@ -0,0 +1,3209 @@ + + + + + + + +

Allocation profile

+
  
+
Produced by async-profiler
+ +
+

+

Matched:

+ diff --git a/src/main/java/ru/vk/itmo/test/viktorkorotkikh/reports/stage5/GET-8k-cpu.html b/src/main/java/ru/vk/itmo/test/viktorkorotkikh/reports/stage5/GET-8k-cpu.html new file mode 100644 index 000000000..67c0127ab --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/viktorkorotkikh/reports/stage5/GET-8k-cpu.html @@ -0,0 +1,6163 @@ + + + + + + + +

CPU profile

+
  
+
Produced by async-profiler
+ +
+

+

Matched:

+ diff --git a/src/main/java/ru/vk/itmo/test/viktorkorotkikh/reports/stage5/GET-8k-histogram.png b/src/main/java/ru/vk/itmo/test/viktorkorotkikh/reports/stage5/GET-8k-histogram.png new file mode 100644 index 0000000000000000000000000000000000000000..27a487777b98fe704af167d63252200395fbcaf8 GIT binary patch literal 160320 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 z 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 Z;#@u$J``xWJ`4Zbr=YqgQvUeW{|5uqVw(T} literal 0 HcmV?d00001 diff --git a/src/main/java/ru/vk/itmo/test/viktorkorotkikh/reports/stage5/GET-8k-lock.html b/src/main/java/ru/vk/itmo/test/viktorkorotkikh/reports/stage5/GET-8k-lock.html new file mode 100644 index 000000000..19079183b --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/viktorkorotkikh/reports/stage5/GET-8k-lock.html @@ -0,0 +1,1070 @@ + + + + + + + +

Lock profile

+
  
+
Produced by async-profiler
+ +
+

+

Matched:

+ diff --git a/src/main/java/ru/vk/itmo/test/viktorkorotkikh/reports/stage5/GET-8k.txt b/src/main/java/ru/vk/itmo/test/viktorkorotkikh/reports/stage5/GET-8k.txt new file mode 100644 index 000000000..81c083ede --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/viktorkorotkikh/reports/stage5/GET-8k.txt @@ -0,0 +1,126 @@ +Running 1m test @ http://localhost:8080 + 4 threads and 64 connections + Thread calibration: mean lat.: 1.395ms, rate sampling interval: 10ms + Thread calibration: mean lat.: 1.466ms, rate sampling interval: 10ms + Thread calibration: mean lat.: 1.339ms, rate sampling interval: 10ms + Thread calibration: mean lat.: 1.433ms, rate sampling interval: 10ms + Thread Stats Avg Stdev Max +/- Stdev + Latency 1.24ms 620.90us 15.56ms 70.23% + Req/Sec 2.11k 153.09 4.00k 73.39% + Latency Distribution (HdrHistogram - Recorded Latency) + 50.000% 1.17ms + 75.000% 1.60ms + 90.000% 2.03ms + 99.000% 2.96ms + 99.900% 3.96ms + 99.990% 10.31ms + 99.999% 13.86ms +100.000% 15.57ms + + Detailed Percentile spectrum: + Value Percentile TotalCount 1/(1-Percentile) + + 0.114 0.000000 3 1.00 + 0.520 0.100000 40128 1.11 + 0.709 0.200000 79905 1.25 + 0.872 0.300000 119981 1.43 + 1.023 0.400000 159959 1.67 + 1.172 0.500000 199919 2.00 + 1.248 0.550000 219762 2.22 + 1.328 0.600000 239629 2.50 + 1.413 0.650000 259611 2.86 + 1.504 0.700000 279710 3.33 + 1.604 0.750000 299618 4.00 + 1.659 0.775000 309589 4.44 + 1.719 0.800000 319579 5.00 + 1.784 0.825000 329543 5.71 + 1.855 0.850000 339467 6.67 + 1.938 0.875000 349530 8.00 + 1.984 0.887500 354494 8.89 + 2.034 0.900000 359435 10.00 + 2.091 0.912500 364575 11.43 + 2.155 0.925000 369434 13.33 + 2.233 0.937500 374521 16.00 + 2.277 0.943750 376997 17.78 + 2.327 0.950000 379504 20.00 + 2.381 0.956250 381926 22.86 + 2.445 0.962500 384414 26.67 + 2.519 0.968750 386912 32.00 + 2.561 0.971875 388144 35.56 + 2.611 0.975000 389431 40.00 + 2.663 0.978125 390664 45.71 + 2.723 0.981250 391885 53.33 + 2.795 0.984375 393158 64.00 + 2.833 0.985938 393779 71.11 + 2.877 0.987500 394389 80.00 + 2.927 0.989062 395011 91.43 + 2.989 0.990625 395635 106.67 + 3.059 0.992188 396251 128.00 + 3.101 0.992969 396561 142.22 + 3.145 0.993750 396873 160.00 + 3.199 0.994531 397184 182.86 + 3.257 0.995313 397498 213.33 + 3.325 0.996094 397810 256.00 + 3.373 0.996484 397968 284.44 + 3.421 0.996875 398118 320.00 + 3.475 0.997266 398277 365.71 + 3.535 0.997656 398431 426.67 + 3.619 0.998047 398587 512.00 + 3.665 0.998242 398665 568.89 + 3.731 0.998437 398743 640.00 + 3.795 0.998633 398821 731.43 + 3.869 0.998828 398902 853.33 + 3.979 0.999023 398976 1024.00 + 4.063 0.999121 399015 1137.78 + 4.179 0.999219 399058 1280.00 + 4.379 0.999316 399096 1462.86 + 4.639 0.999414 399134 1706.67 + 5.339 0.999512 399171 2048.00 + 5.751 0.999561 399191 2275.56 + 6.127 0.999609 399210 2560.00 + 6.687 0.999658 399230 2925.71 + 7.347 0.999707 399249 3413.33 + 8.015 0.999756 399269 4096.00 + 8.567 0.999780 399279 4551.11 + 8.927 0.999805 399288 5120.00 + 9.119 0.999829 399298 5851.43 + 9.703 0.999854 399308 6826.67 + 10.063 0.999878 399318 8192.00 + 10.175 0.999890 399323 9102.22 + 10.335 0.999902 399327 10240.00 + 10.503 0.999915 399332 11702.86 + 10.695 0.999927 399337 13653.33 + 10.927 0.999939 399342 16384.00 + 11.119 0.999945 399345 18204.44 + 11.231 0.999951 399347 20480.00 + 11.519 0.999957 399349 23405.71 + 11.799 0.999963 399352 27306.67 + 11.991 0.999969 399354 32768.00 + 12.367 0.999973 399356 36408.89 + 12.703 0.999976 399357 40960.00 + 12.719 0.999979 399358 46811.43 + 13.103 0.999982 399359 54613.33 + 13.263 0.999985 399360 65536.00 + 13.527 0.999986 399361 72817.78 + 13.863 0.999988 399362 81920.00 + 13.863 0.999989 399362 93622.86 + 14.231 0.999991 399363 109226.67 + 14.231 0.999992 399363 131072.00 + 14.271 0.999993 399364 145635.56 + 14.271 0.999994 399364 163840.00 + 14.271 0.999995 399364 187245.71 + 14.895 0.999995 399365 218453.33 + 14.895 0.999996 399365 262144.00 + 14.895 0.999997 399365 291271.11 + 14.895 0.999997 399365 327680.00 + 14.895 0.999997 399365 374491.43 + 15.567 0.999998 399366 436906.67 + 15.567 1.000000 399366 inf +#[Mean = 1.244, StdDeviation = 0.621] +#[Max = 15.560, Total count = 399366] +#[Buckets = 27, SubBuckets = 2048] +---------------------------------------------------------- + 479724 requests in 1.00m, 23.58MB read + Non-2xx or 3xx responses: 18709 +Requests/sec: 7995.27 +Transfer/sec: 402.43KB diff --git a/src/main/java/ru/vk/itmo/test/viktorkorotkikh/reports/stage5/PUT-25k-histogram.png b/src/main/java/ru/vk/itmo/test/viktorkorotkikh/reports/stage5/PUT-25k-histogram.png new file mode 100644 index 0000000000000000000000000000000000000000..559d7307a011049d740892439c8951e4b8a9636a GIT binary patch literal 153948 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 A)&Kwi literal 0 HcmV?d00001 diff --git a/src/main/java/ru/vk/itmo/test/viktorkorotkikh/reports/stage5/PUT-25k.txt b/src/main/java/ru/vk/itmo/test/viktorkorotkikh/reports/stage5/PUT-25k.txt new file mode 100644 index 000000000..339fa7c53 --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/viktorkorotkikh/reports/stage5/PUT-25k.txt @@ -0,0 +1,134 @@ +Running 1m test @ http://localhost:8080 + 4 threads and 64 connections + Thread calibration: mean lat.: 216.928ms, rate sampling interval: 1547ms + Thread calibration: mean lat.: 219.273ms, rate sampling interval: 1563ms + Thread calibration: mean lat.: 51.288ms, rate sampling interval: 470ms + Thread calibration: mean lat.: 217.368ms, rate sampling interval: 1554ms + Thread Stats Avg Stdev Max +/- Stdev + Latency 1.35ms 609.01us 8.03ms 70.39% + Req/Sec 6.25k 8.63 6.28k 76.12% + Latency Distribution (HdrHistogram - Recorded Latency) + 50.000% 1.27ms + 75.000% 1.70ms + 90.000% 2.13ms + 99.000% 3.20ms + 99.900% 4.40ms + 99.990% 5.68ms + 99.999% 7.04ms +100.000% 8.03ms + + Detailed Percentile spectrum: + Value Percentile TotalCount 1/(1-Percentile) + + 0.107 0.000000 1 1.00 + 0.645 0.100000 125277 1.11 + 0.826 0.200000 249850 1.25 + 0.978 0.300000 375123 1.43 + 1.123 0.400000 499386 1.67 + 1.271 0.500000 624719 2.00 + 1.348 0.550000 687198 2.22 + 1.427 0.600000 749034 2.50 + 1.511 0.650000 811413 2.86 + 1.601 0.700000 874023 3.33 + 1.701 0.750000 936253 4.00 + 1.756 0.775000 967440 4.44 + 1.816 0.800000 998699 5.00 + 1.880 0.825000 1029609 5.71 + 1.953 0.850000 1061037 6.67 + 2.035 0.875000 1092070 8.00 + 2.081 0.887500 1107614 8.89 + 2.133 0.900000 1123722 10.00 + 2.189 0.912500 1139263 11.43 + 2.251 0.925000 1154665 13.33 + 2.323 0.937500 1170175 16.00 + 2.365 0.943750 1177968 17.78 + 2.411 0.950000 1185622 20.00 + 2.465 0.956250 1193543 22.86 + 2.527 0.962500 1201322 26.67 + 2.603 0.968750 1209133 32.00 + 2.649 0.971875 1212961 35.56 + 2.701 0.975000 1216901 40.00 + 2.765 0.978125 1220762 45.71 + 2.839 0.981250 1224590 53.33 + 2.939 0.984375 1228503 64.00 + 2.999 0.985938 1230467 71.11 + 3.069 0.987500 1232421 80.00 + 3.147 0.989062 1234353 91.43 + 3.239 0.990625 1236288 106.67 + 3.345 0.992188 1238243 128.00 + 3.409 0.992969 1239214 142.22 + 3.481 0.993750 1240195 160.00 + 3.555 0.994531 1241174 182.86 + 3.645 0.995313 1242144 213.33 + 3.741 0.996094 1243107 256.00 + 3.797 0.996484 1243602 284.44 + 3.865 0.996875 1244089 320.00 + 3.933 0.997266 1244579 365.71 + 4.007 0.997656 1245063 426.67 + 4.099 0.998047 1245561 512.00 + 4.147 0.998242 1245783 568.89 + 4.199 0.998437 1246032 640.00 + 4.263 0.998633 1246275 731.43 + 4.331 0.998828 1246519 853.33 + 4.407 0.999023 1246767 1024.00 + 4.451 0.999121 1246880 1137.78 + 4.519 0.999219 1247006 1280.00 + 4.587 0.999316 1247125 1462.86 + 4.659 0.999414 1247246 1706.67 + 4.755 0.999512 1247367 2048.00 + 4.803 0.999561 1247429 2275.56 + 4.867 0.999609 1247490 2560.00 + 4.935 0.999658 1247550 2925.71 + 5.031 0.999707 1247611 3413.33 + 5.119 0.999756 1247672 4096.00 + 5.183 0.999780 1247702 4551.11 + 5.235 0.999805 1247733 5120.00 + 5.299 0.999829 1247764 5851.43 + 5.403 0.999854 1247795 6826.67 + 5.523 0.999878 1247824 8192.00 + 5.595 0.999890 1247839 9102.22 + 5.715 0.999902 1247856 10240.00 + 5.759 0.999915 1247871 11702.86 + 5.815 0.999927 1247885 13653.33 + 5.935 0.999939 1247900 16384.00 + 5.979 0.999945 1247908 18204.44 + 6.051 0.999951 1247916 20480.00 + 6.143 0.999957 1247923 23405.71 + 6.315 0.999963 1247931 27306.67 + 6.531 0.999969 1247938 32768.00 + 6.667 0.999973 1247942 36408.89 + 6.691 0.999976 1247946 40960.00 + 6.735 0.999979 1247950 46811.43 + 6.795 0.999982 1247954 54613.33 + 6.895 0.999985 1247957 65536.00 + 6.963 0.999986 1247959 72817.78 + 6.991 0.999988 1247961 81920.00 + 7.015 0.999989 1247963 93622.86 + 7.135 0.999991 1247965 109226.67 + 7.231 0.999992 1247967 131072.00 + 7.335 0.999993 1247968 145635.56 + 7.375 0.999994 1247969 163840.00 + 7.379 0.999995 1247970 187245.71 + 7.471 0.999995 1247971 218453.33 + 7.519 0.999996 1247972 262144.00 + 7.519 0.999997 1247972 291271.11 + 7.563 0.999997 1247973 327680.00 + 7.563 0.999997 1247973 374491.43 + 7.627 0.999998 1247974 436906.67 + 7.627 0.999998 1247974 524288.00 + 7.627 0.999998 1247974 582542.22 + 7.795 0.999998 1247975 655360.00 + 7.795 0.999999 1247975 748982.86 + 7.795 0.999999 1247975 873813.33 + 7.795 0.999999 1247975 1048576.00 + 7.795 0.999999 1247975 1165084.44 + 8.035 0.999999 1247976 1310720.00 + 8.035 1.000000 1247976 inf +#[Mean = 1.348, StdDeviation = 0.609] +#[Max = 8.032, Total count = 1247976] +#[Buckets = 27, SubBuckets = 2048] +---------------------------------------------------------- + 1492888 requests in 1.00m, 95.39MB read + Non-2xx or 3xx responses: 7 +Requests/sec: 24881.45 +Transfer/sec: 1.59MB diff --git a/src/main/java/ru/vk/itmo/test/viktorkorotkikh/reports/stage5/PUT-31.5k-af-alloc.html b/src/main/java/ru/vk/itmo/test/viktorkorotkikh/reports/stage5/PUT-31.5k-af-alloc.html new file mode 100644 index 000000000..27c1f4187 --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/viktorkorotkikh/reports/stage5/PUT-31.5k-af-alloc.html @@ -0,0 +1,3276 @@ + + + + + + + +

Allocation profile

+
  
+
Produced by async-profiler
+ +
+

+

Matched:

+ diff --git a/src/main/java/ru/vk/itmo/test/viktorkorotkikh/reports/stage5/PUT-31.5k-af-cpu.html b/src/main/java/ru/vk/itmo/test/viktorkorotkikh/reports/stage5/PUT-31.5k-af-cpu.html new file mode 100644 index 000000000..8113f6d91 --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/viktorkorotkikh/reports/stage5/PUT-31.5k-af-cpu.html @@ -0,0 +1,7960 @@ + + + + + + + +

CPU profile

+
  
+
Produced by async-profiler
+ +
+

+

Matched:

+ diff --git a/src/main/java/ru/vk/itmo/test/viktorkorotkikh/reports/stage5/PUT-31.5k-af-lock.html b/src/main/java/ru/vk/itmo/test/viktorkorotkikh/reports/stage5/PUT-31.5k-af-lock.html new file mode 100644 index 000000000..61761229b --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/viktorkorotkikh/reports/stage5/PUT-31.5k-af-lock.html @@ -0,0 +1,956 @@ + + + + + + + +

Lock profile

+
  
+
Produced by async-profiler
+ +
+

+

Matched:

+ diff --git a/src/main/java/ru/vk/itmo/test/viktorkorotkikh/reports/stage5/PUT-31.5k-after-fix.txt b/src/main/java/ru/vk/itmo/test/viktorkorotkikh/reports/stage5/PUT-31.5k-after-fix.txt new file mode 100644 index 000000000..eb7018905 --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/viktorkorotkikh/reports/stage5/PUT-31.5k-after-fix.txt @@ -0,0 +1,135 @@ +Running 1m test @ http://localhost:8080 + 4 threads and 64 connections + Thread calibration: mean lat.: 5.188ms, rate sampling interval: 14ms + Thread calibration: mean lat.: 5.123ms, rate sampling interval: 14ms + Thread calibration: mean lat.: 5.185ms, rate sampling interval: 13ms + Thread calibration: mean lat.: 5.544ms, rate sampling interval: 24ms + Thread Stats Avg Stdev Max +/- Stdev + Latency 2.25ms 1.34ms 13.90ms 82.68% + Req/Sec 8.16k 672.58 10.50k 71.96% + Latency Distribution (HdrHistogram - Recorded Latency) + 50.000% 1.87ms + 75.000% 2.62ms + 90.000% 3.92ms + 99.000% 7.36ms + 99.900% 9.93ms + 99.990% 11.80ms + 99.999% 12.97ms +100.000% 13.91ms + + Detailed Percentile spectrum: + Value Percentile TotalCount 1/(1-Percentile) + + 0.142 0.000000 1 1.00 + 1.076 0.100000 157624 1.11 + 1.313 0.200000 314774 1.25 + 1.504 0.300000 472309 1.43 + 1.683 0.400000 629840 1.67 + 1.870 0.500000 786517 2.00 + 1.977 0.550000 865134 2.22 + 2.099 0.600000 944424 2.50 + 2.241 0.650000 1022662 2.86 + 2.411 0.700000 1101193 3.33 + 2.623 0.750000 1179734 4.00 + 2.753 0.775000 1218685 4.44 + 2.909 0.800000 1258248 5.00 + 3.093 0.825000 1297506 5.71 + 3.311 0.850000 1336732 6.67 + 3.581 0.875000 1376003 8.00 + 3.739 0.887500 1395671 8.89 + 3.919 0.900000 1415277 10.00 + 4.131 0.912500 1434906 11.43 + 4.383 0.925000 1454585 13.33 + 4.695 0.937500 1474328 16.00 + 4.875 0.943750 1484062 17.78 + 5.079 0.950000 1493773 20.00 + 5.307 0.956250 1503714 22.86 + 5.555 0.962500 1513515 26.67 + 5.827 0.968750 1523292 32.00 + 5.983 0.971875 1528249 35.56 + 6.147 0.975000 1533100 40.00 + 6.327 0.978125 1537997 45.71 + 6.535 0.981250 1542934 53.33 + 6.779 0.984375 1547833 64.00 + 6.919 0.985938 1550276 71.11 + 7.075 0.987500 1552741 80.00 + 7.251 0.989062 1555206 91.43 + 7.447 0.990625 1557684 106.67 + 7.667 0.992188 1560101 128.00 + 7.791 0.992969 1561365 142.22 + 7.931 0.993750 1562591 160.00 + 8.083 0.994531 1563794 182.86 + 8.271 0.995313 1565038 213.33 + 8.503 0.996094 1566263 256.00 + 8.615 0.996484 1566862 284.44 + 8.743 0.996875 1567487 320.00 + 8.887 0.997266 1568104 365.71 + 9.055 0.997656 1568700 426.67 + 9.263 0.998047 1569329 512.00 + 9.375 0.998242 1569623 568.89 + 9.503 0.998437 1569943 640.00 + 9.647 0.998633 1570241 731.43 + 9.783 0.998828 1570544 853.33 + 9.951 0.999023 1570857 1024.00 + 10.047 0.999121 1571012 1137.78 + 10.143 0.999219 1571166 1280.00 + 10.263 0.999316 1571310 1462.86 + 10.407 0.999414 1571469 1706.67 + 10.583 0.999512 1571623 2048.00 + 10.663 0.999561 1571700 2275.56 + 10.751 0.999609 1571769 2560.00 + 10.847 0.999658 1571846 2925.71 + 10.991 0.999707 1571923 3413.33 + 11.143 0.999756 1572002 4096.00 + 11.215 0.999780 1572039 4551.11 + 11.327 0.999805 1572077 5120.00 + 11.415 0.999829 1572117 5851.43 + 11.543 0.999854 1572153 6826.67 + 11.663 0.999878 1572194 8192.00 + 11.719 0.999890 1572213 9102.22 + 11.823 0.999902 1572230 10240.00 + 11.887 0.999915 1572252 11702.86 + 11.967 0.999927 1572268 13653.33 + 12.031 0.999939 1572289 16384.00 + 12.071 0.999945 1572297 18204.44 + 12.135 0.999951 1572307 20480.00 + 12.239 0.999957 1572317 23405.71 + 12.295 0.999963 1572327 27306.67 + 12.407 0.999969 1572336 32768.00 + 12.495 0.999973 1572340 36408.89 + 12.559 0.999976 1572345 40960.00 + 12.583 0.999979 1572350 46811.43 + 12.735 0.999982 1572355 54613.33 + 12.831 0.999985 1572360 65536.00 + 12.847 0.999986 1572362 72817.78 + 12.927 0.999988 1572364 81920.00 + 12.967 0.999989 1572368 93622.86 + 13.079 0.999991 1572369 109226.67 + 13.207 0.999992 1572372 131072.00 + 13.223 0.999993 1572373 145635.56 + 13.247 0.999994 1572374 163840.00 + 13.287 0.999995 1572375 187245.71 + 13.383 0.999995 1572376 218453.33 + 13.527 0.999996 1572378 262144.00 + 13.527 0.999997 1572378 291271.11 + 13.631 0.999997 1572379 327680.00 + 13.631 0.999997 1572379 374491.43 + 13.679 0.999998 1572380 436906.67 + 13.767 0.999998 1572381 524288.00 + 13.767 0.999998 1572381 582542.22 + 13.767 0.999998 1572381 655360.00 + 13.767 0.999999 1572381 748982.86 + 13.807 0.999999 1572382 873813.33 + 13.807 0.999999 1572382 1048576.00 + 13.807 0.999999 1572382 1165084.44 + 13.807 0.999999 1572382 1310720.00 + 13.807 0.999999 1572382 1497965.71 + 13.911 0.999999 1572383 1747626.67 + 13.911 1.000000 1572383 inf +#[Mean = 2.251, StdDeviation = 1.344] +#[Max = 13.904, Total count = 1572383] +#[Buckets = 27, SubBuckets = 2048] +---------------------------------------------------------- + 1881040 requests in 1.00m, 120.19MB read +Requests/sec: 31351.04 +Transfer/sec: 2.00MB diff --git a/src/main/java/ru/vk/itmo/test/viktorkorotkikh/reports/stage5/PUT-31.5k-histogram.png b/src/main/java/ru/vk/itmo/test/viktorkorotkikh/reports/stage5/PUT-31.5k-histogram.png new file mode 100644 index 0000000000000000000000000000000000000000..119a1faad0d544589159156c1befcf5012854d7b GIT binary patch literal 155126 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 + + + + + + +

Allocation profile

+
  
+
Produced by async-profiler
+ +
+

+

Matched:

+ diff --git a/src/main/java/ru/vk/itmo/test/viktorkorotkikh/reports/stage5/PUT-31k-cpu.html b/src/main/java/ru/vk/itmo/test/viktorkorotkikh/reports/stage5/PUT-31k-cpu.html new file mode 100644 index 000000000..5c8690069 --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/viktorkorotkikh/reports/stage5/PUT-31k-cpu.html @@ -0,0 +1,7859 @@ + + + + + + + +

CPU profile

+
  
+
Produced by async-profiler
+ +
+

+

Matched:

+ diff --git a/src/main/java/ru/vk/itmo/test/viktorkorotkikh/reports/stage5/PUT-31k-lock.html b/src/main/java/ru/vk/itmo/test/viktorkorotkikh/reports/stage5/PUT-31k-lock.html new file mode 100644 index 000000000..fae255f47 --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/viktorkorotkikh/reports/stage5/PUT-31k-lock.html @@ -0,0 +1,941 @@ + + + + + + + +

Lock profile

+
  
+
Produced by async-profiler
+ +
+

+

Matched:

+ diff --git a/src/main/java/ru/vk/itmo/test/viktorkorotkikh/reports/stage5/PUT-60k.txt b/src/main/java/ru/vk/itmo/test/viktorkorotkikh/reports/stage5/PUT-60k.txt new file mode 100644 index 000000000..3de1bc93c --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/viktorkorotkikh/reports/stage5/PUT-60k.txt @@ -0,0 +1,119 @@ +Running 1m test @ http://localhost:8080 + 4 threads and 64 connections + Thread calibration: mean lat.: 1509.704ms, rate sampling interval: 6045ms + Thread calibration: mean lat.: 1505.639ms, rate sampling interval: 6037ms + Thread calibration: mean lat.: 1508.103ms, rate sampling interval: 6045ms + Thread calibration: mean lat.: 1504.514ms, rate sampling interval: 6037ms + Thread Stats Avg Stdev Max +/- Stdev + Latency 12.97s 5.67s 23.43s 58.22% + Req/Sec 9.02k 283.19 9.27k 87.50% + Latency Distribution (HdrHistogram - Recorded Latency) + 50.000% 12.80s + 75.000% 17.84s + 90.000% 20.92s + 99.000% 23.17s + 99.900% 23.38s + 99.990% 23.41s + 99.999% 23.43s +100.000% 23.45s + + Detailed Percentile spectrum: + Value Percentile TotalCount 1/(1-Percentile) + + 3379.199 0.000000 1 1.00 + 5283.839 0.100000 179915 1.11 + 7159.807 0.200000 359597 1.25 + 8994.815 0.300000 539218 1.43 + 10854.399 0.400000 718700 1.67 + 12795.903 0.500000 898600 2.00 + 13795.327 0.550000 988613 2.22 + 14794.751 0.600000 1078193 2.50 + 15769.599 0.650000 1168130 2.86 + 16793.599 0.700000 1257615 3.33 + 17842.175 0.750000 1348155 4.00 + 18350.079 0.775000 1392525 4.44 + 18841.599 0.800000 1437455 5.00 + 19349.503 0.825000 1482145 5.71 + 19857.407 0.850000 1528086 6.67 + 20381.695 0.875000 1572833 8.00 + 20643.839 0.887500 1594873 8.89 + 20922.367 0.900000 1618081 10.00 + 21184.511 0.912500 1640664 11.43 + 21430.271 0.925000 1662417 13.33 + 21708.799 0.937500 1684268 16.00 + 21872.639 0.943750 1696596 17.78 + 22069.247 0.950000 1707074 20.00 + 22282.239 0.956250 1718382 22.86 + 22462.463 0.962500 1729517 26.67 + 22659.071 0.968750 1741005 32.00 + 22740.991 0.971875 1746397 35.56 + 22822.911 0.975000 1752111 40.00 + 22888.447 0.978125 1757217 45.71 + 22970.367 0.981250 1763934 53.33 + 23035.903 0.984375 1769307 64.00 + 23068.671 0.985938 1771929 71.11 + 23101.439 0.987500 1774467 80.00 + 23134.207 0.989062 1776937 91.43 + 23183.359 0.990625 1781001 106.67 + 23216.127 0.992188 1783702 128.00 + 23232.511 0.992969 1784949 142.22 + 23248.895 0.993750 1786133 160.00 + 23265.279 0.994531 1787247 182.86 + 23281.663 0.995313 1788338 213.33 + 23314.431 0.996094 1790645 256.00 + 23314.431 0.996484 1790645 284.44 + 23330.815 0.996875 1791879 320.00 + 23330.815 0.997266 1791879 365.71 + 23347.199 0.997656 1793065 426.67 + 23347.199 0.998047 1793065 512.00 + 23363.583 0.998242 1794199 568.89 + 23363.583 0.998437 1794199 640.00 + 23363.583 0.998633 1794199 731.43 + 23379.967 0.998828 1795212 853.33 + 23379.967 0.999023 1795212 1024.00 + 23379.967 0.999121 1795212 1137.78 + 23379.967 0.999219 1795212 1280.00 + 23396.351 0.999316 1796004 1462.86 + 23396.351 0.999414 1796004 1706.67 + 23396.351 0.999512 1796004 2048.00 + 23396.351 0.999561 1796004 2275.56 + 23396.351 0.999609 1796004 2560.00 + 23396.351 0.999658 1796004 2925.71 + 23396.351 0.999707 1796004 3413.33 + 23412.735 0.999756 1796376 4096.00 + 23412.735 0.999780 1796376 4551.11 + 23412.735 0.999805 1796376 5120.00 + 23412.735 0.999829 1796376 5851.43 + 23412.735 0.999854 1796376 6826.67 + 23412.735 0.999878 1796376 8192.00 + 23412.735 0.999890 1796376 9102.22 + 23412.735 0.999902 1796376 10240.00 + 23412.735 0.999915 1796376 11702.86 + 23412.735 0.999927 1796376 13653.33 + 23429.119 0.999939 1796494 16384.00 + 23429.119 0.999945 1796494 18204.44 + 23429.119 0.999951 1796494 20480.00 + 23429.119 0.999957 1796494 23405.71 + 23429.119 0.999963 1796494 27306.67 + 23429.119 0.999969 1796494 32768.00 + 23429.119 0.999973 1796494 36408.89 + 23429.119 0.999976 1796494 40960.00 + 23429.119 0.999979 1796494 46811.43 + 23429.119 0.999982 1796494 54613.33 + 23429.119 0.999985 1796494 65536.00 + 23429.119 0.999986 1796494 72817.78 + 23429.119 0.999988 1796494 81920.00 + 23429.119 0.999989 1796494 93622.86 + 23429.119 0.999991 1796494 109226.67 + 23429.119 0.999992 1796494 131072.00 + 23429.119 0.999993 1796494 145635.56 + 23445.503 0.999994 1796505 163840.00 + 23445.503 1.000000 1796505 inf +#[Mean = 12973.783, StdDeviation = 5667.175] +#[Max = 23429.120, Total count = 1796505] +#[Buckets = 27, SubBuckets = 2048] +---------------------------------------------------------- + 2194003 requests in 1.00m, 140.19MB read + Non-2xx or 3xx responses: 1 +Requests/sec: 36566.85 +Transfer/sec: 2.34MB diff --git a/src/main/java/ru/vk/itmo/test/viktorkorotkikh/reports/stage5/report.md b/src/main/java/ru/vk/itmo/test/viktorkorotkikh/reports/stage5/report.md new file mode 100644 index 000000000..514acbefa --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/viktorkorotkikh/reports/stage5/report.md @@ -0,0 +1,291 @@ +# Stage 5 + +- [Stage 5](#stage-5) + * [Конфигурация](#Конфигурация) + * [PUT](#put) + + [CPU profile](#cpu-profile) + + [Alloc profile](#alloc-profile) + + [Lock profile](#lock-profile) + * [GET](#get) + + [CPU profile](#cpu-profile-1) + + [Alloc profile](#alloc-profile-1) + + [Lock profile](#lock-profile-1) + * [Асинхронное выполнение локального запроса](#асинхронное-выполнение-локального-запроса) + + [PUT](#put-1) + + [GET](#get-1) + +## Конфигурация + +wrk2 - 64 connections, 4 threads + +Конфигурация кластера - 3 ноды, запущенные в отдельных процессах. Профилируем ноду, на которую шлём все запросы. + +Запросы без параметров ack и from -> по умолчанию реплицирование 2 из 3 + +## PUT + +[PUT-60k.txt](PUT-60k.txt) + +``` + Thread Stats Avg Stdev Max +/- Stdev + Latency 12.97s 5.67s 23.43s 58.22% + Req/Sec 9.02k 283.19 9.27k 87.50% + Latency Distribution (HdrHistogram - Recorded Latency) + 50.000% 12.80s + 75.000% 17.84s + 90.000% 20.92s + 99.000% 23.17s + 99.900% 23.38s + 99.990% 23.41s + 99.999% 23.43s +100.000% 23.45s +---------------------------------------------------------- + 2194003 requests in 1.00m, 140.19MB read + Non-2xx or 3xx responses: 1 +Requests/sec: 36566.85 +Transfer/sec: 2.34MB +``` + +60k RPS мы всё ещё не держим, но показатели лучше, чем в [прошлой реализации](../stage4/PUT-60k.txt) - wrk удалось +пропихнуть на 6.5k RPS больше. Посмотрим, что происходит на нагрузке в 25k RPS: + +[PUT-25k.txt](PUT-25k.txt) + +``` + Thread Stats Avg Stdev Max +/- Stdev + Latency 1.35ms 609.01us 8.03ms 70.39% + Req/Sec 6.25k 8.63 6.28k 76.12% + Latency Distribution (HdrHistogram - Recorded Latency) + 50.000% 1.27ms + 75.000% 1.70ms + 90.000% 2.13ms + 99.000% 3.20ms + 99.900% 4.40ms + 99.990% 5.68ms + 99.999% 7.04ms +100.000% 8.03ms +``` + +![PUT-25k-histogram.png](PUT-25k-histogram.png) + +Latency на нагрузке в 25k RPS уменьшились в 2 раза, а график теперь похож на прямую зависимость. +Имеет смысл найти новую точку разладки. Очевидно, что это где-то между 25k и 36.5k (столько максимум смог впихнуть wrk +при требуемой от него нагрузки в 60k RPS). + +Путём экспериментов была выбрана точка разладки в 31.5к RPS. + +[PUT-31.5k.txt](PUT-31.5k.txt) + +``` + Thread Stats Avg Stdev Max +/- Stdev + Latency 1.79ms 0.88ms 12.33ms 77.46% + Req/Sec 8.30k 813.43 12.00k 72.55% + Latency Distribution (HdrHistogram - Recorded Latency) + 50.000% 1.63ms + 75.000% 2.19ms + 90.000% 2.82ms + 99.000% 4.61ms + 99.900% 8.77ms + 99.990% 11.05ms + 99.999% 11.90ms +100.000% 12.34ms +``` + +![PUT-31.5k-histogram.png](PUT-31.5k-histogram.png) + +Благодаря асинхронным операциям удалось нарастить пропускную способность нашего кластера на 26%. Теперь мы по-настоящему +ждём 2 успешных ответа из 3 и после этого отвечаем на запрос, соответственно, 1/3 самых медленных запросов выполняется, +но мы не ждём их полного завершения. Это в целом коррелирует с приростом в 26%. + +### CPU profile + +[PUT-31k-cpu.html](PUT-31k-cpu.html) + +На профиле также, как и в [прошлый раз](../stage4/report.md#cpu-profile) видно работу GC - 6% от общего числа сэмплов. + +Уменьшилось количество сэмплов метода `handleEntityRequest` по сравнению +с [предыдущим stage](../stage4/PUT-25k-cpu.html): + +1. В 2 раза меньше сэмплов в методе `processRemote`, так как теперь мы обрабатываем ответы в + отдельном `ExecutorService`. +2. `LsmCustomSession::sendResponse` выполняется тоже асинхронно в отдельном `ExecutorService`. + +В остальном профиль в целом такой же. + +### Alloc profile + +Аллокации не изменились (в рамках погрешности) (раньше было так [PUT-25k-alloc.html](../stage4/PUT-25k-alloc.html)): + +[PUT-31k-alloc.html](PUT-31k-alloc.html) + +### Lock profile + +[PUT-31k-lock.html](PUT-31k-lock.html) + +Блокировки относительно [прошлого результата](../stage4/PUT-25k-lock.html) изменились: + +1. Появились явные блокировки на `HttpClient` при вызове метода `sendAsync`. +2. Блокировки на методе `HttpClient::cancelTimer` из-за того, что таймаут теперь реализуется не с помощью + метода `CompletableFututre::get`, а при создании запроса через builder. +3. Блокировки на внутренних локах `HttpClient` +4. Почти исчезли блокировки на `EPollSelectorImpl::wakeup` - вероятно из-за лучшей утилизации пула потоков, который мы + передали в `HttpClient`, ведь теперь мы не последовательно выполняем 1, а потом второй запрос (в рамках одного + пришедшего запроса), а 2 запроса параллельно, что, вероятно, позволяет потокам не ждать события сокета, а заниматься + обработкой других запросов. + +## GET + +База объемом ~1.5G, каждая нода хранит около 517mb. + +[GET-30k.txt](GET-30k.txt) + +``` + Thread Stats Avg Stdev Max +/- Stdev + Latency 19.15s 7.91s 33.08s 57.83% + Req/Sec 3.40k 14.14 3.42k 62.50% + Latency Distribution (HdrHistogram - Recorded Latency) + 50.000% 19.12s + 75.000% 25.99s + 90.000% 30.21s + 99.000% 32.65s + 99.900% 32.92s + 99.990% 33.01s + 99.999% 33.08s +100.000% 33.10s +---------------------------------------------------------- + 811430 requests in 1.00m, 39.88MB read + Non-2xx or 3xx responses: 31216 +Requests/sec: 13523.69 +Transfer/sec: 680.56KB +``` + +Ошибки Non-2xx or 3xx responses связаны с тем, что иногда мы ищем ключ, которого нет в нашем dao. + +Показатели latency GET запросов тоже стали лучше относительно [прошлого результата](../stage4/GET-30k.txt). wrk уже смог +пропихнуть не 10k RPS, а 13.5k. + +[GET-8k.txt](GET-8k.txt) + +``` + Thread Stats Avg Stdev Max +/- Stdev + Latency 1.24ms 620.90us 15.56ms 70.23% + Req/Sec 2.11k 153.09 4.00k 73.39% + Latency Distribution (HdrHistogram - Recorded Latency) + 50.000% 1.17ms + 75.000% 1.60ms + 90.000% 2.03ms + 99.000% 2.96ms + 99.900% 3.96ms + 99.990% 10.31ms + 99.999% 13.86ms +100.000% 15.57ms +``` + +Но точка разладки по всей видимости примерно такая же, как и была (либо поднялась, но на незначительные показатели). + +![GET-8k-histogram.png](GET-8k-histogram.png) + +### CPU profile + +[GET-8k-cpu.html](GET-8k-cpu.html) + +1. В 2 раза меньше сэмплов в методе `processRemote`, так как теперь мы обрабатываем ответы в + отдельном `ExecutorService`. +2. `LsmCustomSession::sendResponse` выполняется тоже асинхронно в отдельном `ExecutorService` - пропали столбики из + метода `handleEntityRequest`. +3. Чуть-чуть больше стало (~1% против 0.33% ранее) сэмплов GC - вероятно из-за того, что асинхронные операции добавили + разных аллокаций внутреннего мира `HttpClient`. + +В остальном профиль не поменялся относительно [прошлого](../stage4/GET-8k-cpu-2.html). + +### Alloc profile + +[GET-8k-alloc.html](GET-8k-alloc.html) + +С точки зрения аллокаций тут всё снова примерно также, как и [было](../stage4/GET-8k-alloc-2.html). + +Меньше аллокаций в методе `purgeExpiredConnectionsAndReturnNextDeadline` - 2% сэмплов было, а стало 0.09%. Скорее всего +мы теперь лучше переиспользуем соединения. + +### Lock profile + +[GET-8k-lock.html](GET-8k-lock.html) + +Локи изменились сильнее: + +1. Также, как и в PUT, появились явные блокировки на `HttpClient` при вызове метода `sendAsync` из-за асинхронности - + ранее 2 запроса к кластеру выполнялись последовательно, а теперь параллельно и один из них всегда ждёт лок. +2. Появились блокировки на методе `HttpClient::registerTimer` из-за того, что таймаут теперь реализуется не с помощью + метода `CompletableFututre::get`, а при создании запроса через builder. +3. Количество сэмплов на `purgeExpiredConnectionsAndReturnNextDeadline` тоже увеличилось. Вероятно, стало больше гонок + из-за параллельного выполнения запросов к кластеру - отсюда и локи. + +## Асинхронное выполнение локального запроса + +### PUT + +[PUT-31.5k-after-fix.txt](PUT-31.5k-after-fix.txt) + +``` + Thread Stats Avg Stdev Max +/- Stdev + Latency 2.25ms 1.34ms 13.90ms 82.68% + Req/Sec 8.16k 672.58 10.50k 71.96% + Latency Distribution (HdrHistogram - Recorded Latency) + 50.000% 1.87ms + 75.000% 2.62ms + 90.000% 3.92ms + 99.000% 7.36ms + 99.900% 9.93ms + 99.990% 11.80ms + 99.999% 12.97ms +100.000% 13.91ms +``` + +Относительно результатов выше новые показатели отличаются незначительно - latency 99.999-100.000% увеличились на 1ms. +Вероятнее всего это может быть связано с дополнительными переключениями контекста при отправке запроса на выполнение в +отдельный `ExecutorService`. + +[PUT-31.5k-af-cpu.html](PUT-31.5k-af-cpu.html) + +Профиль CPU практически не изменился. Единственное, что поменялось - теперь "столбик" с вызовом `processLocal` отделился +от `processRemote`. Это естественно, ведь теперь мы запускаем локальную обработку асинхронно. + +[PUT-31.5k-af-alloc.html](PUT-31.5k-af-alloc.html) + +[PUT-31.5k-af-lock.html](PUT-31.5k-af-lock.html) + +Остальные профили изменились в рамках погрешности. + +### GET + +[GET-8k-after-fix.txt](GET-8k-after-fix.txt) + +``` + Thread Stats Avg Stdev Max +/- Stdev + Latency 1.35ms 607.24us 17.31ms 69.39% + Req/Sec 2.11k 161.56 3.44k 69.74% + Latency Distribution (HdrHistogram - Recorded Latency) + 50.000% 1.30ms + 75.000% 1.72ms + 90.000% 2.13ms + 99.000% 2.95ms + 99.900% 3.86ms + 99.990% 10.17ms + 99.999% 13.06ms +100.000% 17.33ms +``` + +У GET запросов изменился лишь 100-й перцентиль задержек - он стал на 2ms больше. Опять же вероятно связано с +переключениями контекстов, но на GET запросы не такое влияние, как на PUT, так как тут нагрузка почти в 4 раза меньше, +да и сами GET запросы тяжелее. + +[GET-8k-af-cpu.html](GET-8k-af-cpu.html) + +Профиль CPU практически не изменился. Единственное, что поменялось - теперь "столбик" с вызовом `processLocal` отделился +от `processRemote`. Это естественно, ведь теперь мы запускаем локальную обработку асинхронно. + +[GET-8k-af-alloc.html](GET-8k-af-alloc.html) + +[GET-8k-af-lock.html](GET-8k-af-lock.html) + +Остальные профили практически не изменились, показатели одинаковы в рамках погрешности. diff --git a/src/main/java/ru/vk/itmo/test/viktorkorotkikh/reports/stage6/RANGE-alloc.html b/src/main/java/ru/vk/itmo/test/viktorkorotkikh/reports/stage6/RANGE-alloc.html new file mode 100644 index 000000000..b911a3e3c --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/viktorkorotkikh/reports/stage6/RANGE-alloc.html @@ -0,0 +1,306 @@ + + + + + + + +

Allocation profile

+
  
+
Produced by async-profiler
+ +
+

+

Matched:

+ diff --git a/src/main/java/ru/vk/itmo/test/viktorkorotkikh/reports/stage6/RANGE-cpu.html b/src/main/java/ru/vk/itmo/test/viktorkorotkikh/reports/stage6/RANGE-cpu.html new file mode 100644 index 000000000..f4eb898be --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/viktorkorotkikh/reports/stage6/RANGE-cpu.html @@ -0,0 +1,434 @@ + + + + + + + +

CPU profile

+
  
+
Produced by async-profiler
+ +
+

+

Matched:

+ diff --git a/src/main/java/ru/vk/itmo/test/viktorkorotkikh/reports/stage6/RANGE-lock.html b/src/main/java/ru/vk/itmo/test/viktorkorotkikh/reports/stage6/RANGE-lock.html new file mode 100644 index 000000000..ef7bf570d --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/viktorkorotkikh/reports/stage6/RANGE-lock.html @@ -0,0 +1,260 @@ + + + + + + + +

Lock profile

+
  
+
Produced by async-profiler
+ +
+

+

Matched:

+ diff --git a/src/main/java/ru/vk/itmo/test/viktorkorotkikh/reports/stage6/report.md b/src/main/java/ru/vk/itmo/test/viktorkorotkikh/reports/stage6/report.md new file mode 100644 index 000000000..33a652d2a --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/viktorkorotkikh/reports/stage6/report.md @@ -0,0 +1,41 @@ +# Stage 6 + +- [Stage 6](#stage-6) + * [Конфигурация](#Конфигурация) + * [CPU profile](#cpu-profile) + * [Alloc profile](#alloc-profile) + * [Lock profile](#lock-profile) + +## Конфигурация + +Наполнение одной ноды - 1335Mb (1.3Gb). Все ключи имеют вид `key%d+`. + +Запрос: `curl -vvv 'http://localhost:8080/v0/entities?start=key'` + +## CPU profile + +[RANGE-cpu.html](RANGE-cpu.html) + +Почти все сэмплы занимает операция сдвига итераторов. Во время сдвига мы удаляем и добавляем итераторы обратно в очередь. +Каждая такая операция сопровождается сравнением ключей `MemorySegment`. Сравнения были заинлайнены компилятором. +Сравнения также были оптимизированы с помощью векторных инструкций. + +Из интересного - `MemorySegment::copy` использует avx512 при копировании данных в `ByteArrayBuilder`. + +Такое количество сэмплов на операцию сдвига итераторов объясняется тем, что у нас дублируются данные в Sstable, поэтому +нам приходится скипать ключи. + +## Alloc profile + +[RANGE-alloc.html](RANGE-alloc.html) + +Аллокации невероятно красивые - всё, что нам приходится тут аллоцировать, так это `TimestampedEntry` (но без этого никак, +такой у нас интерфейс) и `MemorySegment`. При этом аллокации `MemorySegment` происходят лишь в методе +`MergeIterator::next`, то есть при сдвигах итераторов мы не аллоцируем память, а сравниваем `MemorySegment`'ы прямиком +на диске (а точнее скорее всего в page cache). Достойно уважения. + +## Lock profile + +[RANGE-lock.html](RANGE-lock.html) + +Локи пустые. Блокирующих операций у нас действительно нет. diff --git a/src/main/java/ru/vk/itmo/test/viktorkorotkikh/util/ClusterResponseMerger.java b/src/main/java/ru/vk/itmo/test/viktorkorotkikh/util/ClusterResponseMerger.java new file mode 100644 index 000000000..d38bdbc05 --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/viktorkorotkikh/util/ClusterResponseMerger.java @@ -0,0 +1,68 @@ +package ru.vk.itmo.test.viktorkorotkikh.util; + +import one.nio.http.HttpSession; +import one.nio.http.Request; +import one.nio.http.Response; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.IOException; +import java.net.HttpURLConnection; +import java.util.concurrent.atomic.AtomicInteger; + +public class ClusterResponseMerger { + private static final Logger log = LoggerFactory.getLogger(ClusterResponseMerger.class); + private final int ack; + private final int allowedUnsuccessfulResponses; + private final Request originalRequest; + private final HttpSession session; + private final NodeResponse[] nodeResponses; + private final AtomicInteger unsuccessfulResponsesCount; + private final AtomicInteger successfulResponsesCount; + + public ClusterResponseMerger(int ack, int from, Request originalRequest, HttpSession session) { + this.ack = ack; + this.allowedUnsuccessfulResponses = from - ack; + this.originalRequest = originalRequest; + this.session = session; + this.nodeResponses = new NodeResponse[from]; + this.unsuccessfulResponsesCount = new AtomicInteger(); + this.successfulResponsesCount = new AtomicInteger(); + } + + public void addToMerge(int index, NodeResponse response) { + nodeResponses[index] = response; + if (isSuccessfulResponse(response.statusCode())) { + int newSuccessfulResponsesCount = successfulResponsesCount.incrementAndGet(); + if (newSuccessfulResponsesCount == ack) { + sendResponse(); + } + return; + } + int newUnsuccessfulResponsesCount = unsuccessfulResponsesCount.incrementAndGet(); + if (newUnsuccessfulResponsesCount > allowedUnsuccessfulResponses && successfulResponsesCount.get() < ack) { + sendResponseAndCloseSessionOnError(LSMConstantResponse.notEnoughReplicas(originalRequest)); + } + } + + private void sendResponse() { + Response response = LsmServerUtil.mergeReplicasResponses(originalRequest, nodeResponses, ack); + sendResponseAndCloseSessionOnError(response); + } + + private void sendResponseAndCloseSessionOnError(final Response response) { + try { + session.sendResponse(response); + } catch (IOException ex) { + log.error("I/O error occurred when sending response"); + session.scheduleClose(); + } + } + + private static boolean isSuccessfulResponse(int responseStatusCode) { + return responseStatusCode == HttpURLConnection.HTTP_OK + || responseStatusCode == HttpURLConnection.HTTP_CREATED + || responseStatusCode == HttpURLConnection.HTTP_ACCEPTED + || responseStatusCode == HttpURLConnection.HTTP_NOT_FOUND; + } +} diff --git a/src/main/java/ru/vk/itmo/test/viktorkorotkikh/util/LSMConstantResponse.java b/src/main/java/ru/vk/itmo/test/viktorkorotkikh/util/LSMConstantResponse.java index 79cca831e..ea460842b 100644 --- a/src/main/java/ru/vk/itmo/test/viktorkorotkikh/util/LSMConstantResponse.java +++ b/src/main/java/ru/vk/itmo/test/viktorkorotkikh/util/LSMConstantResponse.java @@ -22,6 +22,7 @@ public final class LSMConstantResponse { public static final Response GATEWAY_TIMEOUT_CLOSE = new Response(Response.GATEWAY_TIMEOUT, Response.EMPTY); public static final Response NOT_ENOUGH_REPLICAS_CLOSE = new Response(NOT_ENOUGH_REPLICAS, Response.EMPTY); + public static final byte[] CHUNKED_RESPONSE_CLOSE_WITH_HEADERS_BYTES; private static final String CONNECTION_KEEP_ALIVE_HEADER = "Connection: Keep-Alive"; public static final Response BAD_REQUEST_KEEP_ALIVE = new Response(Response.BAD_REQUEST, Response.EMPTY); @@ -40,6 +41,7 @@ public final class LSMConstantResponse { new Response(Response.GATEWAY_TIMEOUT, Response.EMPTY); public static final Response NOT_ENOUGH_REPLICAS_KEEP_ALIVE = new Response(NOT_ENOUGH_REPLICAS, Response.EMPTY); + public static final byte[] CHUNKED_RESPONSE_KEEP_ALIVE_WITH_HEADERS_BYTES; static { BAD_REQUEST_CLOSE.addHeader(CONNECTION_CLOSE_HEADER); @@ -65,6 +67,16 @@ public final class LSMConstantResponse { SERVICE_UNAVAILABLE_KEEP_ALIVE.addHeader(CONNECTION_KEEP_ALIVE_HEADER); GATEWAY_TIMEOUT_KEEP_ALIVE.addHeader(CONNECTION_KEEP_ALIVE_HEADER); NOT_ENOUGH_REPLICAS_KEEP_ALIVE.addHeader(CONNECTION_KEEP_ALIVE_HEADER); + + Response chunkedResponseKeepAlive = new Response(Response.OK); + chunkedResponseKeepAlive.addHeader("Transfer-Encoding: chunked"); + chunkedResponseKeepAlive.addHeader(CONNECTION_KEEP_ALIVE_HEADER); + CHUNKED_RESPONSE_KEEP_ALIVE_WITH_HEADERS_BYTES = chunkedResponseKeepAlive.toBytes(false); + + Response chunkedResponseClose = new Response(Response.OK); + chunkedResponseKeepAlive.addHeader("Transfer-Encoding: chunked"); + chunkedResponseKeepAlive.addHeader(CONNECTION_CLOSE_HEADER); + CHUNKED_RESPONSE_CLOSE_WITH_HEADERS_BYTES = chunkedResponseClose.toBytes(false); } public static Response ok(final Request request) { diff --git a/src/main/java/ru/vk/itmo/test/viktorkorotkikh/util/LsmServerUtil.java b/src/main/java/ru/vk/itmo/test/viktorkorotkikh/util/LsmServerUtil.java index ebd45d1d5..5dc1ac38b 100644 --- a/src/main/java/ru/vk/itmo/test/viktorkorotkikh/util/LsmServerUtil.java +++ b/src/main/java/ru/vk/itmo/test/viktorkorotkikh/util/LsmServerUtil.java @@ -2,8 +2,11 @@ import one.nio.http.Request; import one.nio.http.Response; +import one.nio.util.ByteArrayBuilder; -import java.util.List; +import java.lang.foreign.MemorySegment; +import java.lang.foreign.ValueLayout; +import java.util.NoSuchElementException; import static java.net.HttpURLConnection.HTTP_BAD_REQUEST; import static java.net.HttpURLConnection.HTTP_ENTITY_TOO_LARGE; @@ -24,7 +27,7 @@ public static String timestampToHeader(long timestamp) { public static Response mergeReplicasResponses( final Request originalRequest, - final List responses, + final NodeResponse[] responses, final int ack ) { switch (originalRequest.getMethod()) { @@ -41,11 +44,12 @@ public static Response mergeReplicasResponses( } } - private static Response mergeGetResponses(Request originalRequest, List responses, int ack) { + private static Response mergeGetResponses(Request originalRequest, NodeResponse[] responses, int ack) { long maxTimestamp = -1; NodeResponse lastValue = null; int successfulResponses = 0; for (NodeResponse response : responses) { + if (response == null) continue; final long valueTimestamp = getTimestamp(response); if (valueTimestamp > maxTimestamp) { maxTimestamp = valueTimestamp; @@ -59,10 +63,10 @@ private static Response mergeGetResponses(Request originalRequest, List lastValue.okResponse(); + case HTTP_OK -> Response.ok(lastValue.body()); case HTTP_BAD_REQUEST -> LSMConstantResponse.badRequest(originalRequest); case HTTP_NOT_FOUND -> LSMConstantResponse.notFound(originalRequest); case HTTP_ENTITY_TOO_LARGE -> LSMConstantResponse.entityTooLarge(originalRequest); @@ -74,7 +78,7 @@ private static Response mergeGetResponses(Request originalRequest, List responses, + NodeResponse[] responses, int ack ) { if (hasNotEnoughReplicas(responses, ack)) { @@ -85,7 +89,7 @@ private static Response mergePutResponses( private static Response mergeDeleteResponses( Request originalRequest, - List responses, + NodeResponse[] responses, int ack ) { if (hasNotEnoughReplicas(responses, ack)) { @@ -94,9 +98,10 @@ private static Response mergeDeleteResponses( return LSMConstantResponse.accepted(originalRequest); } - private static boolean hasNotEnoughReplicas(List responses, int ack) { + private static boolean hasNotEnoughReplicas(NodeResponse[] responses, int ack) { int successfulResponses = 0; for (NodeResponse response : responses) { + if (response == null) continue; if (response.statusCode() >= 200 && response.statusCode() < 300) { successfulResponses++; } @@ -111,4 +116,37 @@ private static long getTimestamp(final NodeResponse response) { } return Long.parseLong(timestamp); } + + private static NodeResponse firstNotNull(NodeResponse[] responses) { + for (NodeResponse response : responses) { + if (response != null) return response; + } + throw new NoSuchElementException(); + } + + public static int copyMemorySegmentToByteArrayBuilder(MemorySegment memorySegmentBody, ByteArrayBuilder builder) { + return copyMemorySegmentToByteArrayBuilder(memorySegmentBody, 0, builder, builder.capacity()); + } + + public static int copyMemorySegmentToByteArrayBuilder( + MemorySegment memorySegment, + int memorySegmentOffset, + ByteArrayBuilder builder, + int builderCapacity + ) { + int estimatedCapacityInBuffer = builderCapacity - builder.length(); + int toWrite = memorySegment.byteSize() > estimatedCapacityInBuffer + ? estimatedCapacityInBuffer + : (int) memorySegment.byteSize() - memorySegmentOffset; + MemorySegment.copy( + memorySegment, + ValueLayout.JAVA_BYTE, + memorySegmentOffset, + builder.buffer(), + builder.length(), + toWrite + ); + builder.setLength(builder.length() + toWrite); + return toWrite; + } }