00001 /*<std-header orig-src='shore' incl-file-exclusion='MAINPAGE_H'> 00002 00003 $Id: mainpage.h,v 1.15 2011/04/11 20:37:16 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://research.cs.wisc.edu/shore), and another of which was 00183 * Paradise (http://research.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