diff options
author | Eric Wong <e@80x24.org> | 2015-01-15 07:48:19 +0000 |
---|---|---|
committer | Eric Wong <e@80x24.org> | 2015-01-15 07:48:19 +0000 |
commit | ee4a340bfb304f0270ef3704b09ba7faca6a3c1e (patch) | |
tree | 842e23789e7dabc2529a7d62effe36b3dbbf26a9 | |
parent | 047b0c13e91fe755fe165defc9de3ad0d8843330 (diff) | |
download | cmogstored-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.txt | 33 |
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. |