about summary refs log tree commit homepage
diff options
context:
space:
mode:
authorEric Wong <e@80x24.org>2015-01-15 07:48:19 +0000
committerEric Wong <e@80x24.org>2015-01-15 07:48:19 +0000
commitee4a340bfb304f0270ef3704b09ba7faca6a3c1e (patch)
tree842e23789e7dabc2529a7d62effe36b3dbbf26a9
parent047b0c13e91fe755fe165defc9de3ad0d8843330 (diff)
downloadcmogstored-ee4a340bfb304f0270ef3704b09ba7faca6a3c1e.tar.gz
In case I forget, writing this down while my mind is on
the subject for other projects.
-rw-r--r--doc/design.txt33
1 files changed, 32 insertions, 1 deletions
diff --git a/doc/design.txt b/doc/design.txt
index f873834..495e1bf 100644
--- a/doc/design.txt
+++ b/doc/design.txt
@@ -1,4 +1,3 @@
-
 object relationships
 --------------------
 
@@ -26,3 +25,35 @@ mog_cfg[0] -- mog_svc[0] --- mog_mgmt[N]
                  |
 mog_cfg[1] -- mog_svc[1] --- mog_mgmt[M]
                          \-- mog_http[M]
+
+
+memory management
+-----------------
+
+cmogstored avoids dynamic memory allocation in common cases.
+Each file descriptor is mapped to a 128-byte (on 64-bit systems)
+slot of memory which maps all the critical data needed for most
+connections.  See fdmap.c for details.
+
+Userspace socket read buffers are per-thread in the common case (rather
+than per-client), as most request buffers do not need to live longer
+than a single event loop step (iteration).
+
+performance compromises
+-----------------------
+
+We still use snprintf to generate HTTP response headers, and we use
+Ragel-generated code for the HTTP parser.  These choices were made for
+maintainability and readability rather than performance.
+
+Even with these performance compromises, cmogstored performance is
+expected to be competitive in the best-case (hot cache[1]) scenarios
+with other HTTP servers.
+
+Where cmogstored (and the original Perl mogstored) shines is in avoiding
+pathological head-of-line blocking when serving files from multiple
+mountpounts.  See queues.txt for more on the unique queue design for
+to take advantage of multiple cores and disks.
+
+[1] cmogstored does not do any caching on its own, it relies on the
+    operating system kernel.