mainpage.h

00001 /*<std-header orig-src='shore' incl-file-exclusion='MAINPAGE_H'>
00002 
00003  $Id: mainpage.h,v 1.14 2010/10/27 17:04:20 nhall Exp $
00004 
00005 SHORE -- Scalable Heterogeneous Object REpository
00006 
00007 Copyright (c) 1994-99 Computer Sciences Department, University of
00008                       Wisconsin -- Madison
00009 All Rights Reserved.
00010 
00011 Permission to use, copy, modify and distribute this software and its
00012 documentation is hereby granted, provided that both the copyright
00013 notice and this permission notice appear in all copies of the
00014 software, derivative works or modified versions, and any portions
00015 thereof, and that both notices appear in supporting documentation.
00016 
00017 THE AUTHORS AND THE COMPUTER SCIENCES DEPARTMENT OF THE UNIVERSITY
00018 OF WISCONSIN - MADISON ALLOW FREE USE OF THIS SOFTWARE IN ITS
00019 "AS IS" CONDITION, AND THEY DISCLAIM ANY LIABILITY OF ANY KIND
00020 FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
00021 
00022 This software was developed with support by the Advanced Research
00023 Project Agency, ARPA order number 018 (formerly 8230), monitored by
00024 the U.S. Army Research Laboratory under contract DAAB07-91-C-Q518.
00025 Further funding for this work was provided by DARPA through
00026 Rome Research Laboratory Contract No. F30602-97-2-0247.
00027 
00028 */
00029 
00030 /* this file contains only Doxygen documentation */
00031 
00032 
00033 /**\page COPYRIGHT Copyrights and Licenses 
00034  *
00035 The main code base of the storage manager is subject to the SHORE/UW 
00036 copyright (given below) and most of it is also subject to 
00037 the SHORE-MT/DIAS copyright (also given below).
00038 Both copyrights are hereby extended to the date of this release, 2010.
00039 
00040 The atomic operations library is taken from the OPENSOLARIS release and
00041 is subject to Sun Microsystems copyright, and to the OPENSOLARIS license,
00042 found in src/atomic_ops/OPENSOLARIS.LICENSE.
00043 It is lengthy and so it is not included here.
00044 
00045 The strstream compatibility code found in src/fc/w_compat_strstream.h and
00046 src/fc/w_compat_strstream.cpp
00047 is subject to the Silicon Graphics copyright, below.
00048 
00049 The regex code found in the src/common/ library is subject to the 
00050 Henry Spencer/ATT copyright and license, contained in src/common/regex2.h, and
00051 included below.
00052 
00053 What little remains of the old SHORE sthreads library is subject to
00054 copyright given in those source files (src/sthread/sthread.h) as well as to the SHORE/UW and
00055 SHORE-MT/DIAS copyrights.
00056 
00057 
00058  -       \b SHORE/UW \b Copyright:
00059 
00060 SHORE -- Scalable Heterogeneous Object REpository
00061 
00062 Copyright (c) 1994-2010 Computer Sciences Department, University of
00063                       Wisconsin -- Madison
00064 All Rights Reserved.
00065 
00066 Permission to use, copy, modify and distribute this software and its
00067 documentation is hereby granted, provided that both the copyright
00068 notice and this permission notice appear in all copies of the
00069 software, derivative works or modified versions, and any portions
00070 thereof, and that both notices appear in supporting documentation.
00071 
00072 THE AUTHORS AND THE COMPUTER SCIENCES DEPARTMENT OF THE UNIVERSITY
00073 OF WISCONSIN - MADISON ALLOW FREE USE OF THIS SOFTWARE IN ITS
00074 "AS IS" CONDITION, AND THEY DISCLAIM ANY LIABILITY OF ANY KIND
00075 FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
00076 
00077 This software was developed with support by the Advanced Research
00078 Project Agency, ARPA order number 018 (formerly 8230), monitored by
00079 the U.S. Army Research Laboratory under contract DAAB07-91-C-Q518.
00080 Further funding for this work was provided by DARPA through
00081 Rome Research Laboratory Contract No. F30602-97-2-0247.
00082 
00083  -       \b SHORE-MT/DIAS \b Copyright:
00084 
00085 Shore-MT -- Multi-threaded port of the SHORE storage manager
00086 
00087                    Copyright (c) 2007-2009
00088   Data Intensive Applications and Systems Labaratory (DIAS)
00089            Ecole Polytechnique Federale de Lausanne
00090 
00091                      All Rights Reserved.
00092 
00093 Permission to use, copy, modify and distribute this software and
00094 its documentation is hereby granted, provided that both the
00095 copyright notice and this permission notice appear in all copies of
00096 the software, derivative works or modified versions, and any
00097 portions thereof, and that both notices appear in supporting
00098 documentation.
00099 
00100 This code is distributed in the hope that it will be useful, but
00101 WITHOUT ANY WARRANTY; without even the implied warranty of
00102 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. THE AUTHORS
00103 DISCLAIM ANY LIABILITY OF ANY KIND FOR ANY DAMAGES WHATSOEVER
00104 RESULTING FROM THE USE OF THIS SOFTWARE.
00105 
00106 
00107  -       \b Silicon \b Graphic \b Copyright \b and \b License:
00108 
00109  Copyright (c) 1998
00110  Silicon Graphics Computer Systems, Inc.
00111 
00112  Permission to use, copy, modify, distribute and sell this software
00113  and its documentation for any purpose is hereby granted without fee,
00114  provided that the above copyright notice appear in all copies and
00115  that both that copyright notice and this permission notice appear
00116  in supporting documentation.  Silicon Graphics makes no
00117  representations about the suitability of this software for any
00118  purpose.  It is provided "as is" without express or implied warranty.
00119 
00120  -       \b Henry \b Spencer/ATT \b Copyright \b and \b License:
00121 
00122 Copyright 1992, 1993, 1994, 1997 Henry Spencer.  All rights reserved.
00123 This software is not subject to any license of the American Telephone
00124 and Telegraph Company or of the Regents of the University of California.
00125 
00126 Permission is granted to anyone to use this software for any purpose on
00127 any computer system, and to alter it and redistribute it, subject
00128 to the following restrictions:
00129 
00130 1. The author is not responsible for the consequences of use of this
00131    software, no matter how awful, even if they arise from flaws in it.
00132 
00133 2. The origin of this software must not be misrepresented, either by
00134    explicit claim or by omission.  Since few users ever read sources,
00135    credits must appear in the documentation.
00136 
00137 3. Altered versions must be plainly marked as such, and must not be
00138    misrepresented as being the original software.  Since few users
00139    ever read sources, credits must appear in the documentation.
00140 
00141 4. This notice may not be removed or altered.
00142 
00143  * */
00144 /** \mainpage SHORE Storage Manager: The Multi-Threaded Version 
00145  * \section Brief Description
00146  *
00147  * This is an experiment test-bed library for use by researchers who wish to
00148  * write multi-threaded software that manages persistent data.   
00149  *
00150  * This storage engine provides the following capabilities:
00151  *  - transactions with ACID properties, with ARIES-based logging and recovery,
00152  *  primitives for partial rollback,
00153  *  transaction chaining, and early lock release,
00154  *  - prepared-transaction support for two-phased commit,
00155  *  - persistent storage structures : 
00156  *  B+ tree indexes, R* trees (spatial indexes), and files of untyped records,
00157  *  - fine-grained locking for records and B+ tree indexes with deadlock detection,
00158  *  optional lock escalation and optional coarse-grained locking, 
00159  *  - in-memory buffer management with optional prefetching, 
00160  *  - extensible statistics-gathering, option-processing, and error-handling 
00161  *  facilities.
00162  *
00163  * This software runs on Pthreads, thereby providing its client software
00164  * (e.g., a database server) multi-threading
00165  * capabilities and resulting scalability from modern SMP and NUMA 
00166  * architectures, and has been used on Linux/x86-64 and Solaris/Niagara
00167  * architectures.
00168  *
00169  * \section Background
00170  *
00171  * The SHORE (Scalable Heterogeneous Object REpository) project
00172  * at the University of Wisconsin - Madison Department of Computer Sciences
00173  * produced the first release
00174  * of this storage manager as part of the full SHORE release in 1996.
00175  * The storage manager portion of the SHORE project was used by 
00176  * other projects at the UW and elsewhere, and was intermittently
00177  * maintained through 2008.
00178  *
00179  * The SHORE Storage Manager was originally developed on single-cpu Unix-based systems,
00180  * providing support for "value-added" cooperating peer servers, which were processes
00181  * on single-CPU machines.  One such server was the
00182  * SHORE Value-Added Server (http://www.cs.wisc.edu/shore), and another of which was 
00183  * Paradise (http://www.cs.wisc.edu/paradise) at the University of Wisconsin.
00184  * The
00185  * TIMBER (http://www.eecs.umich.edu/db/timber, and http://dx.doi.org/10.1007/s00778-002-0081-x) and 
00186  * Pericope (http://www.eecs.umich.edu/periscope) projects 
00187  * at the University of Michigan, 
00188  * PREDATOR (http://www.distlab.dk/predator) at Cornell,
00189  * Lachesis (http://www.vldb.org/conf/2003/papers/S21P03.pdf)
00190  * BODHI (http://dsl.serciisc.ernet.in/projects/BODHI/homepage/index.html, http://doi.acm.org/10.1145/1007568.1007717)
00191  * used the SHORE Storage Manager.
00192  * The storage manager has been used for innumerable published studies since
00193  * then.
00194  *
00195  * The storage manager had its own (non-preemptive) threads library, which
00196  * forked a per-disk cooperating process to provide non-blocking I/O. 
00197  * The storage manager also had a communications library for peer-server communication. 
00198  * Until recently, the code structure, nomenclature, 
00199  * and contents reflected its SHORE roots.
00200  *
00201  * In 2007, the Data Intensive Applications and Systems Labaratory (DIAS)
00202  * at Ecole Polytechnique Federale de Lausanne
00203  * began work on a port of release 5.0.1 of the storage manager to Pthreads,
00204  * and developed more scalable synchronization primitives, identified
00205  * bottlenecks in the storage manager, and improved the scalability of 
00206  * the code.
00207  * This work was on a Solaris/Niagara platform and was released as Shore-MT
00208  * http://diaswww.epfl.ch/shore-mt).
00209  * It was a partial port of the storage manager and did not include documentation.
00210  * Projects using Shore-MT include
00211  * StagedDB/CMP (http://www.cs.cmu.edu/~stageddb/),
00212  * DORA (http://www.cs.cmu.edu/~ipandis/resources/pvldb10pandis.pdf)
00213  *
00214  * In 2009, the University of Wisconsin - Madison (UW) took the first Shore-MT
00215  * release and ported the remaining code to Pthreads.
00216  * This work as done on a Red Hat Linux/x86-64 platform.
00217  * The UW and DIAS cooperated on bug fixes and some internal
00218  * rewrites.
00219  * This release is the result of that work, and includes this documentation,
00220  * bug fixes, and supporting test code.   
00221  *
00222  * \section Copyrights Copyrights and Licenses
00223  *
00224 This distribution contains code and documentation subject to several copyrights and licenses.
00225 See the copyrights page \ref COPYRIGHT "Copyrights and Licenses, here".
00226 
00227  *
00228  * \section START Getting Started With the Shore Storage Manager
00229  * A good place to start is with the programming interface, described \ref SSMAPI "here".
00230  *
00231  *\section BUILD Configuring and Building the Storage Manager
00232  * See \ref OPT "this page" to configure and build the storage manager.
00233  *
00234  * \section IMPLNOTES1 Implementation Notes
00235  * See \ref IMPLNOTES "this page" for some implementation details.
00236  *
00237  * \section BUGREPORT Reporting Bugs
00238  * This is unsupported software.  We hope there will be times when someone will
00239  * be able to respond to problem reports.
00240  * A problem report should include the following information:
00241  * - Release number/version of the storage manager.
00242  * - Platform (operating system, hardware/CPU type).
00243  * - Configuration options (command used to build the storage manager).
00244  * - Copy of program that demonstrates problematic behavior, if possible (if
00245  *   not itself part of the release).
00246  * - Description of problematic behavior, and how the program is run to
00247  *    reproduce the behavior.  If you can create a script to reproduce the
00248  *    problem, include that.
00249  *
00250  * Mail this to: shore-mt@cs.wisc.edu
00251  *
00252  * \section REFS References
00253  * See \ref REFERENCES "this page" for references to selected papers 
00254  * from which ideas are used in the Shore Storage Manager. 
00255  */
00256 
00257 /**\addtogroup OPT
00258  * Configuring and building the storage manager consists of these steps,
00259  * all done at the root of the distribution directory tree.
00260  * - bootstrap
00261  * - configure
00262  * - build (make)
00263  *
00264  *\section OPTBOOT Bootstrapping 
00265  * Bootstrapping might not be necessary, but if you have the autotools
00266  * installed, it might save time to bootstrap the first time you try to 
00267  * build, particularly if you are installing on a system other than Linux.
00268  * To bootstrap, type ./bootstrap. You can also look at that script and
00269  * run selected parts of it, since all it does is run the autotools.
00270  *
00271  * Autotools run abysmally slowly on Solaris.
00272  *
00273  *\section OPTCONF Configuring 
00274  * There are two parts to configuring the storage manager.
00275  * The original configuration scheme of SHORE was encapsulated in
00276  * \e config/shore.def, which described all or most pertinent CPP macros. 
00277  * We are moving away from that scheme and replacing it with
00278  * autoconf options and features, but a few things still remain under
00279  * the control of \e shore.def.
00280  * These fall into three categories:
00281  *     - details related to autoconf-controlled options, such as pathnames
00282  *     - basic compile-time constants that someone extending the
00283  *       storage manager might want to change 
00284  *     - maintainer's tools
00285  *
00286  * There remaining some CPP macros not 
00287  * described in \e config/shore.def:
00288  *      - code of occasional utility for debugging purposes
00289  *      - code intended to be the subject of future experimentation
00290  *
00291  * Configuring amounts to running ./configure from the root of the
00292  * distribution directory tree, and, depending on the features you 
00293  * wish to use, editing \e config/shore.def.
00294  *
00295  * \remarks
00296  * The storage manager API contains a method ss_m::config_info (q.v.) that
00297  * allows a server to determine, at run time, some of the
00298  * compile-time limits determined by the configuration.
00299  *
00300  *\subsection CONFIGOPT Configuration Options
00301  * To find the configuration options, type 
00302  *\code ./configure --help \endcode, the output of which is reproduced here.
00303  *
00304  * \verbatim
00305 SHORE-specific Features:
00306   --enable-pthread-mutex default:yes    Compile to use pthreads for mutexes for
00307                                         certain critical sections.
00308   --enable-lp64         default:yes     Compile to use LP 64 data model
00309                                         No other data model is supported yet.
00310                                         But we hope some day to port back to LP32.
00311   --enable-checkrc      default:no      Generate (expensive) code to verify return-code checking
00312                                         If a w_rc_t is set but not checked with
00313                                         method is_error(), upon destruction the
00314                                         w_rc_t will print a message to the effect
00315                                         "error not checked".
00316   --enable-trace        default:no      Include tracing code
00317                                         Run-time costly.  Good for debugging
00318                                         problems that are not timing-dependent.
00319                                         Use with DEBUG_FLAGS and DEBUG_FILE
00320                                         environment variables.  See \ref SSMTRACE.
00321   --enable-dbgsymbols   default:no      Turn on debugger symbols
00322                                         Use this to override what a given
00323                                         debugging level will normally do.
00324   --enable-explicit     default:no      Compile with explicit templates
00325                                         NOT TESTED. 
00326  \todo mainpage.h compile with or remove explicit templates
00327 
00328   --enable-valgrind     default:no      Enable running valgrind run-time behavior
00329                                         Includes some code for valgrind.
00330   --enable-purify       default:no      Enable build of <prog>.pure
00331   --enable-quantify     default:no      Enable build of <prog>.quant
00332   --enable-purecov      default:no      Enable build of <prog>.purecov
00333 
00334 SHORE-specific Optional Packages:
00335   --with-page-size        1024, 2048, 4196, 8192(default), 16384, or 32768
00336   --with-hugetlbfs        Use the hugetlbfs for the buffer pool.
00337                           Depending on the target architecture, this might
00338                           be useful.  If you use it, you will need to set
00339                           a path for your hugetlbfs in config/shore.def.
00340                           The default is :
00341                           #define HUGETLBFS_PATH "/mnt/huge/SSM-BUFPOOL"
00342   --without-mmap          Do not use mmap for the buffer pool. Trumps
00343                           hugetlbfs option.
00344   --with-debug-level1     Include level 1 debug code, optimize.
00345                           This includes code in w_assert1 and 
00346                           #if W_DEBUG_LEVEL > 0 /#endif pairs and 
00347                           #if W_DEBUG_LEVEL >= 1 /#endif pairs and  and
00348                           W_IFDEBUG1
00349   --with-debug-level2     Include level 2 debug code, no optimize.
00350                           Equivalent to debug level 1 PLUS
00351                           code in w_assert2 and
00352                           #if W_DEBUG_LEVEL > 1 /#endif pairs and
00353                           #if W_DEBUG_LEVEL >= 2 /#endif pairs and
00354                           W_IFDEBUG2
00355   --with-debug-level3     Include level 3 debug code, no optimize.
00356                           Equivalent to debug level 2 PLUS
00357                           includes code in w_assert3  and
00358                           #if W_DEBUG_LEVEL > 2 /#endif pairs and
00359                           #if W_DEBUG_LEVEL >= 3 /#endif pairs and
00360                           W_IFDEBUG3
00361  \endverbatim
00362 
00363  \bug GNATS 136 Only 64-bit platforms are supported. The issue is that
00364  lsns and some other data structures need atomic methods.
00365 
00366  \bug GNATS 143 
00367  The polyphase merge-sort does not handle this case:
00368  More than one run is required AND 
00369  keys are embedded in  objects AND the keys are 
00370  already in lexicographic order in the
00371  object AND the keys are properly aligned AND the keys 
00372  span multiple pages.
00373  It returns an error indication about a "broken key" comparison not 
00374  being implemented. The workaround is to provide a marshal function
00375  or to put the sort key in the header of the object or to provide more
00376  memory (larger number of pages for the run size) for the sort.
00377  
00378 
00379  \bug GNATS 139  Convert w_assert9 to w_assert3 where the asserts are still reasonable and remove the rest.  Some of these are obsolete, some are racy in the new mt-context.  All the w_assert9's are what used to be w_assert3; they were turned into 9 to disable them until they could be evaluated for usefulness, and many have been converted to 2 or 3-level asserts; many remain to be addressed.
00380 
00381  * \subsection SHOREDEFOPT Description of Selected CPP Macros 
00382  * In this section we describe selected macros defined (or not) in
00383  * \e config/shore.def.
00384  *
00385  * - HUGETLBFS_PATH See --with-hugetlbfs in \ref CONFIGOPT;
00386  *   see also \ref REFHUGEPAGE1 "Huge Pages" for use of hugetlbfs with Linux.
00387  *
00388  * - USE_SSMTEST Define this if you want to include crash test hooks in your
00389  *   smsh.  This is for a maintainer's testing purposes and should not be
00390  *   defined for a release version of the storage manager.
00391  *
00392  * - COMMON_GTID_LENGTH : You can override the default length of a global
00393  *   transaction id. 
00394  *   Useful only if your server implements distributed 
00395  *   transactions.
00396  *
00397  * - COMMON_SERVER_HANDLE_LENGTH : You can override the default length of a 
00398  *   server handle, the handle by which the server identifies a
00399  *   coordinator of distributed transaction.
00400  *   Useful only if your server implements distributed 
00401  *   transactions.
00402  *
00403  * - SM_LOG_PARTITIONS  : You can override the default maximum number of
00404  *   open partitions for the log by defining this. 
00405  *
00406  * - SM_EXTENTSIZE  : You can override the default extent size with this.
00407  *   Warning: you must also address the alignment of Pmap_Align4
00408  *   based on the resulting size of a Pmap. See extent.h, logrec.h,
00409  *   pmap.h.
00410  *   Warning: this has never been tested. This information is included
00411  *   only for those whose hacking on the storage manager who may require larger
00412  *   extents.
00413  *
00414  *\subsection OPTTCL Tcl and smsh 
00415  * The storage manager test shell, smsh, uses Tcl.
00416  * Autoconf tries to find Tcl in a standard place; if it is found,
00417  * fine. But if not, you must define two paths to your Tcl 
00418  * library and include files in \e Makefile.local
00419  * at the top of the directory tree.  
00420  * If you Tcl installation is not built for multithreading, you must 
00421  * install such a copy and put its path in \e Makefile.local.
00422  *
00423  * Tcl is available from 
00424  * - ActiveState (http://www.activestate.com/activetcl/), or
00425  * - SourceForge (http://sourceforge.net/projects/tcl/files/).
00426  *
00427  *\section OPTBLD Building
00428  * Building the storage manager consist of running
00429  * \code
00430  make
00431  \endcode
00432  *
00433  * Since it is not alway easy to tell what options were used for the
00434  * most recent build in a directory, the compiler options used on the
00435  * build are put in the file \e makeflags 
00436  * and the rest of the options are determined in \e config/shore-config.h,
00437  * produced at configuration time.
00438  *
00439  * \note For Solaris users: if you use CC rather than gcc,
00440  * you will probably have to run configure
00441  * with environment variable CXX defined as the path to your
00442  * CC compiler, and you might also need
00443  * \code configure --enable-dependency-tracking \endcode.
00444  *
00445  * \section SHOREMKCHECK Checking the Release
00446  *
00447  * After building the storage manager, you can check it by running
00448  * \code
00449  make check
00450  \endcode
00451  * in the root of the directory tree.
00452  * This runs unit tests for each libary.
00453  *
00454  * \attention
00455  * The storage manager test shell, smsh, is run by
00456  * \code make check \endcode.  Smsh uses Tcl.  The path to you
00457  * Tcl installation is given in \e Makefile.local  at the 
00458  * top of the directory tree.
00459  *
00460  * \note
00461  * If you do not have Tcl installed and want to test the installation
00462  * without smsh, you may run
00463  * \e make \e check and ignore the fact that 
00464  * it chokes trying to build smsh, because
00465  * smsh is the last test that \e make \e check runs.
00466  *
00467  * \section SHOREMKINSTALL Installing the Release
00468  *
00469  * You may run 
00470  * \code
00471  make install
00472  \endcode
00473  * This installs:
00474  * - the header files  in 
00475  *   - <includedir> [default: <prefix>/include]
00476  * - the libraries     in 
00477  *   - <libdir> [default: <exec-prefix>/lib]
00478  *
00479  *  To change the prefixes, use one or more of these configure options:
00480  *  \code configure --prefix=<path> \endcode
00481  *  or
00482  *  \code configure --libdir=<path> \endcode
00483  *  or
00484  *  \code configure --includedir=<path> \endcode
00485  *
00486  */
00487 
00488 /**\cond skip */
00489 /**\page HUGETLBFS HugeTLBfs
00490  *
00491  * See \ref REFHUGEPAGE1 "Huge Pages" for assorted on-line documentation about
00492  * using large pages to avoid excessive load on the TLB.
00493  *
00494  * Here we do not claim to be complete for all target architectures.
00495  * This is meant to serve as an example for Linux targets.
00496  * The following steps are what we did on one RHEL5 system.
00497  *
00498  * NOTE: If you have kernel documentation installed, see:
00499  * /usr/share/doc/kernel-doc-<version>/Documentation/vm/hugetlbpage.txt
00500  *
00501  * First steps (most of this must be done by the super-user):
00502  * - Determine that our kernel supports hugetlbfs.
00503  *   - grep Hugepagesize /proc/meminfo
00504  * - Ensure that we have adequate huge pages (this example is
00505  *   for an 8GB buffer pool) on reboot:
00506  *   - echo "vm.nr_hugepages=4096" >> /etc/sysctl.conf
00507  *   To dynamically allocate pages, 
00508  *   - echo 4096 > /proc/sys/vm/nr_hugepages
00509  * - Create a group for users of the hugetlbfs using your sys admin
00510  *   applications. My group is called "ssm" and has gid 55555.
00511  * - Add users to the ssm group.
00512  * - Create the mount point for a hugetlbfs:
00513  *   - mkdir -p /mnt/huge
00514  * - Mount a pseudo filesystem of type hugetlbfs at that mount point; do this
00515  *   on reboot:
00516  *   - echo "none       /mnt/huge    hugetlbfs rw,gid=55555,size10g,mode=0770 0 0" > /etc/fstab
00517  *
00518  * - Reboot.
00519  *
00520  *\warning 
00521  * <b> If you have configured the storage manager for use with hugetlbfs
00522  * and have not taken the above steps to ensure that your system actually
00523  * has the hugetlbfs pages available for use, your storage manager (or
00524  * the 'make check' tests) will likely croak.  Unfortunately, we have
00525  * not yet figured out a way to determine ahead of time, programmatically,
00526  * whether things will go well or not, before we try to write to the 
00527  * huge pages.  </b>
00528  *
00529  *
00530  * Second steps (this can be done by users in the ssm group):
00531  * - Edit the default path for the hugetlbfs node in config/shore.def.
00532  * - Create a file in the hugetlbfs, owned by the ssm group, whose
00533  *   name matches the default path in config/shore.def, e.g.,
00534  *   - touch /etc/huge/SSM-BUFPOOL
00535  * - Configure and build the storage manager with --with-hugetlbfs.
00536  * - To run using the hugetlbfs is now the default; to run without it,
00537  *   change the sm_hugetlbfs_path run-time option to the value "NULL"; 
00538  *   here is an example from the .shoreconfig file in the smsh directory:
00539  *   - *.server.*.sm_hugetlbfs_path: NULL
00540  *
00541  *   Note that your buffer pool size will have to be set to a multiple
00542  *   of the huge page size for your system.  Thus, if your huge pages are 2 MB
00543  *   you will get an error from mmap if you use a 3 MB buffer pool.
00544  *
00545  *   On the whole, the use of mmap with the hugetlbfs is not reliable
00546  *   and, although at process end, all huge pages are supposed to be returned
00547  *   to the system, we have seen cases in which pages were "lost" and
00548  *   the mmap thereafter failing, repaired only on reboot, so consider this
00549  *   feature for performance experiments only on systems that do not
00550  *   require high availability. 
00551  *
00552  */
00553 /**\endcond skip */
00554 

Generated on Thu Dec 9 08:42:27 2010 for Shore Storage Manager by  doxygen 1.4.7