| <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> |
| <HTML> |
| <HEAD> |
| <TITLE>Apache module mod_mmap_static</TITLE> |
| </HEAD> |
| <!-- Background white, links blue (unvisited), navy (visited), red (active) --> |
| <BODY |
| BGCOLOR="#FFFFFF" |
| TEXT="#000000" |
| LINK="#0000FF" |
| VLINK="#000080" |
| ALINK="#FF0000" |
| > |
| <!--#include virtual="header.html" --> |
| <H1 ALIGN="CENTER">Module mod_mmap_static</H1> |
| |
| <P> |
| This module is contained in the <CODE>mod_mmap_static.c</CODE> file, with |
| Apache 1.3 and later. It provides mmap()ing of a statically configured list |
| of frequently requested but not changed files. It is not compiled into the |
| server by default. To use <CODE>mod_mmap_static</CODE> you have to enable |
| the following line in the server build <CODE>Configuration</CODE> file: |
| <PRE> |
| AddModule modules/experimental/mod_mmap_static.o |
| </PRE> |
| </P> |
| |
| <H2>Summary</H2> |
| <P> |
| This is an <STRONG>experimental</STRONG> module and should be used with |
| care. You can easily create a broken site using this module, read this |
| document carefully. |
| <CODE>mod_mmap_static</CODE> maps a list of statically configured files (via |
| <CODE>MMapFile</CODE> directives in the main server configuration) into |
| memory through the system call <CODE>mmap()</CODE>. This system |
| call is available on most modern Unix derivates, but not on all. There |
| are sometimes system-specific limits on the size and number of files that |
| can be mmap()d, experimentation is probably the easiest way to find out. |
| </P> |
| <P> |
| This mmap()ing is done once at server start or restart, only. So whenever |
| one of the mapped files changes on the filesystem you <EM>have</EM> to |
| restart the server by at least sending it a HUP or USR1 signal (see the |
| <A HREF="../stopping.html">Stopping and Restarting</A> documentation). To |
| reiterate that point: if the files are modified <EM>in place</EM> without |
| restarting the server you may end up serving requests that are completely |
| bogus. You should update files by unlinking the old copy and putting a new |
| copy in place. Most tools such as <CODE>rdist</CODE> and <CODE>mv</CODE> do |
| this. The reason why this modules doesn't take care of changes to the files |
| is that this check would need an extra <CODE>stat()</CODE> every time which |
| is a waste and against the intent of I/O reduction. |
| </P> |
| |
| <H2>Directives</H2> |
| <UL> |
| <LI><A HREF="#mmapfile">MMapFile</A> |
| </LI> |
| </UL> |
| |
| <HR> |
| |
| <H2><A NAME="mmapfile">MMapFile</A></H2> |
| <P> |
| <A |
| HREF="directive-dict.html#Syntax" |
| REL="Help" |
| ><STRONG>Syntax:</STRONG></A> MMapFile <EM>filename ...</EM> |
| <BR> |
| <A |
| HREF="directive-dict.html#Default" |
| REL="Help" |
| ><STRONG>Default:</STRONG></A> <EM>None</EM> |
| <BR> |
| <A |
| HREF="directive-dict.html#Context" |
| REL="Help" |
| ><STRONG>Context:</STRONG></A> server-config |
| <BR> |
| <A |
| HREF="directive-dict.html#Override" |
| REL="Help" |
| ><STRONG>Override:</STRONG></A> <EM>Not applicable</EM> |
| <BR> |
| <A |
| HREF="directive-dict.html#Status" |
| REL="Help" |
| ><STRONG>Status:</STRONG></A> Experimental |
| <BR> |
| <A |
| HREF="directive-dict.html#Module" |
| REL="Help" |
| ><STRONG>Module:</STRONG></A> mod_mmap_static |
| <BR> |
| <A |
| HREF="directive-dict.html#Compatibility" |
| REL="Help" |
| ><STRONG>Compatibility:</STRONG></A> Only available in Apache 1.3 or later |
| |
| <P> |
| The <CODE>MMapFile</CODE> directive maps one or more files (given as |
| whitespace separated arguments) into memory at server startup time. They |
| are automatically unmapped on a server shutdown. When the files have changed |
| on the filesystem at least a HUP or USR1 signal should be send to the server |
| to re-mmap them. |
| </P> |
| |
| <P> |
| Be careful with the <EM>filename</EM> arguments: They have to literally |
| match the filesystem path Apache's URL-to-filename translation handlers |
| create. We cannot compare inodes or other stuff to match paths through |
| symbolic links <EM>etc.</EM> because that again would cost extra <CODE>stat()</CODE> |
| system calls which is not acceptable. This module may or may not work |
| with filenames rewritten by <CODE>mod_alias</CODE> or |
| <CODE>mod_rewrite</CODE>... it is an experiment after all. |
| </P> |
| |
| <P> |
| Notice: You cannot use this for speeding up CGI programs or other files |
| which are served by special content handlers. It can only be used for |
| regular files which are usually served by the Apache core content handler. |
| </P> |
| |
| Example: |
| |
| <PRE> |
| MMapFile /usr/local/apache/htdocs/index.html |
| </PRE> |
| |
| <P> |
| <STRONG>Note</STRONG>: don't bother asking for a for a <CODE>MMapDir</CODE> |
| directive which |
| recursively maps all the files in a directory. Use Unix the way it was |
| meant to be used. For example, see the |
| <A HREF="core.html#include">Include</A> directive, and consider this command: |
| <PRE> |
| find /www/htdocs -type f -print \ |
| | sed -e 's/.*/mmapfile &/' > /www/conf/mmap.conf |
| </PRE> |
| |
| <!--#include virtual="footer.html" --> |
| </BODY> |
| </HTML> |