<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>http://wiki.old.lustre.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Scjody</id>
	<title>Obsolete Lustre Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="http://wiki.old.lustre.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Scjody"/>
	<link rel="alternate" type="text/html" href="http://wiki.old.lustre.org/index.php?title=Special:Contributions/Scjody"/>
	<updated>2026-04-12T10:43:47Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.7</generator>
	<entry>
		<id>http://wiki.old.lustre.org/index.php?title=Acceptance_Small_(acc-sm)_Testing_on_Lustre&amp;diff=6135</id>
		<title>Acceptance Small (acc-sm) Testing on Lustre</title>
		<link rel="alternate" type="text/html" href="http://wiki.old.lustre.org/index.php?title=Acceptance_Small_(acc-sm)_Testing_on_Lustre&amp;diff=6135"/>
		<updated>2009-05-05T14:08:42Z</updated>

		<summary type="html">&lt;p&gt;Scjody: Add detail on first time run&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Lustre QE group and developers use acceptance-small (acc-sm) tests to catch bugs early in the development cycle. Within the Lustre group, acc-sm tests are run on YALA, an automated test system. This information is being published to describe the steps to perform acceptance small testing and encourage wider acc-sm testing in the Lustre community.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE&#039;&#039;&#039;: For your convenience, this document is also available as a [http://wiki.lustre.org/images/c/c6/AccSm_Testing.pdf PDF].&lt;br /&gt;
&lt;br /&gt;
==What is acc-sm testing and why do we use it for Lustre?==&lt;br /&gt;
&lt;br /&gt;
Acceptance small (acc-sm) testing is a suite of test cases used to verify different aspects of Lustre functionality.&lt;br /&gt;
&lt;br /&gt;
* These tests are run using the acceptance-small.sh script. &lt;br /&gt;
* The script is run from the lustre/tests directory in a compiled Lustre tree. &lt;br /&gt;
* The acceptance-small.sh script runs a number of test scripts that are also run by the ltest (Buffalo) test harness on Lustre test clusters.&lt;br /&gt;
&lt;br /&gt;
==What tests comprise the acc-sm test suite?==&lt;br /&gt;
&lt;br /&gt;
Each Lustre CVS branch contains a lustre/tests sub-directory; all acc-sm tests are stored here. The acceptance-small.sh file contains a list of all tests in the acc-sm suite. To get the list, run:&lt;br /&gt;
&lt;br /&gt;
 $ grep TESTSUITE_LIST acceptance-small.sh&lt;br /&gt;
&lt;br /&gt;
The acc-sm tests are listed below, by CVS branch.&lt;br /&gt;
&lt;br /&gt;
====b1_6 branch====&lt;br /&gt;
&lt;br /&gt;
This branch includes 17 acc-sm test suites.&lt;br /&gt;
&lt;br /&gt;
 $ grep TESTSUITE_LIST acceptance-small.sh&lt;br /&gt;
 export TESTSUITE_LIST=&amp;quot;RUNTESTS SANITY DBENCH BONNIE IOZONE FSX SANITYN LFSCK&lt;br /&gt;
 LIBLUSTRE REPLAY_SINGLE CONF_SANITY RECOVERY_SMALL REPLAY_OST_SINGLE&lt;br /&gt;
 REPLAY_DUAL INSANITY SANITY_QUOTA PERFORMANCE_SANITY&amp;quot;&lt;br /&gt;
&lt;br /&gt;
====b1_8_gate branch====&lt;br /&gt;
&lt;br /&gt;
This branch includes 18 acc-sm test suites.&lt;br /&gt;
&lt;br /&gt;
 $ grep TESTSUITE_LIST acceptance-small.sh&lt;br /&gt;
 export TESTSUITE_LIST=&amp;quot;RUNTESTS SANITY DBENCH BONNIE IOZONE FSX SANITYN LFSCK&lt;br /&gt;
 LIBLUSTRE REPLAY_SINGLE CONF_SANITY RECOVERY_SMALL REPLAY_OST_SINGLE&lt;br /&gt;
 REPLAY_DUAL REPLAY_VBR INSANITY SANITY_QUOTA PERFORMANCE_SANITY&amp;quot;&lt;br /&gt;
&lt;br /&gt;
====HEAD branch====&lt;br /&gt;
&lt;br /&gt;
This branch includes 19 acc-sm test suites.&lt;br /&gt;
&lt;br /&gt;
 $ grep TESTSUITE_LIST acceptance-small.sh&lt;br /&gt;
 export TESTSUITE_LIST=&amp;quot;RUNTESTS SANITY DBENCH BONNIE IOZONE FSX SANITYN LFSCK&lt;br /&gt;
 LIBLUSTRE REPLAY_SINGLE CONF_SANITY RECOVERY_SMALL REPLAY_OST_SINGLE&lt;br /&gt;
 REPLAY_DUAL INSANITY SANITY_QUOTA SANITY_SEC SANITY_GSS&lt;br /&gt;
 PERFORMANCE_SANITY&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To see the test cases in a particular acc-sm test, run:&lt;br /&gt;
&lt;br /&gt;
 $ grep run_ &amp;lt;test suite script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For example, to see the last 3 test cases that comprise the SANITY test:&lt;br /&gt;
&lt;br /&gt;
 $ grep run_ sanity.sh | tail -3&lt;br /&gt;
&lt;br /&gt;
 run_test 130c &amp;quot;FIEMAP (2-stripe file with hole)&amp;quot;&lt;br /&gt;
 run_test 130d &amp;quot;FIEMAP (N-stripe file)&amp;quot;&lt;br /&gt;
 run_test 130e &amp;quot;FIEMAP (test continuation FIEMAP calls)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==For each acc-sm test, what does it measure or show?==&lt;br /&gt;
&lt;br /&gt;
The acc-sm test suite are described below.&lt;br /&gt;
&lt;br /&gt;
;&#039;&#039;&#039;RUNTESTS&#039;&#039;&#039;&lt;br /&gt;
: A basic regression test with unmount/remount.&lt;br /&gt;
&lt;br /&gt;
;&#039;&#039;&#039;SANITY&#039;&#039;&#039;&lt;br /&gt;
: Verifies Lustre operation under normal operating conditions.&lt;br /&gt;
&lt;br /&gt;
;&#039;&#039;&#039;DBENCH&#039;&#039;&#039;&lt;br /&gt;
:Dbench benchmark for simulating N clients to produce the filesystem load.&lt;br /&gt;
&lt;br /&gt;
;&#039;&#039;&#039;BONNIE&#039;&#039;&#039;&lt;br /&gt;
:Bonnie++ benchmark for creation, reading and deleting many small files&lt;br /&gt;
&lt;br /&gt;
;&#039;&#039;&#039;IOZONE&#039;&#039;&#039;&lt;br /&gt;
:IOzone benchmark for generating and measuring a variety of file operations.&lt;br /&gt;
&lt;br /&gt;
;&#039;&#039;&#039;FSX&#039;&#039;&#039;&lt;br /&gt;
:Filesystem exerciser.&lt;br /&gt;
&lt;br /&gt;
;&#039;&#039;&#039;SANITYN&#039;&#039;&#039;&lt;br /&gt;
:Verifies operations from two clients under normal operating conditions.&lt;br /&gt;
&lt;br /&gt;
;&#039;&#039;&#039;LFSCK&#039;&#039;&#039;&lt;br /&gt;
:Tests e2fsck and lfsck to detect and fix filesystm corruption.&lt;br /&gt;
&lt;br /&gt;
;&#039;&#039;&#039;LIBLUSTRE&#039;&#039;&#039;&lt;br /&gt;
:Runs a test linked to a liblustre client library.&lt;br /&gt;
&lt;br /&gt;
;&#039;&#039;&#039;REPLAY_SINGLE&#039;&#039;&#039;&lt;br /&gt;
:Verifies recovery after an MDS failure.&lt;br /&gt;
&lt;br /&gt;
;&#039;&#039;&#039;CONF_SANITY&#039;&#039;&#039;&lt;br /&gt;
:Verifies various Lustre configurations (including wrong ones), where the system must behave correctly.&lt;br /&gt;
&lt;br /&gt;
;&#039;&#039;&#039;RECOVERY_SMALL&#039;&#039;&#039;&lt;br /&gt;
:Verifies RPC replay after a communications failure (message loss).&lt;br /&gt;
&lt;br /&gt;
;&#039;&#039;&#039;REPLAY_OST_SINGLE&#039;&#039;&#039;&lt;br /&gt;
:Verifies recovery after an OST failure.&lt;br /&gt;
&lt;br /&gt;
;&#039;&#039;&#039;REPLAY_DUAL&#039;&#039;&#039;&lt;br /&gt;
:Verifies recovery from two clients after a server failure.&lt;br /&gt;
&lt;br /&gt;
;&#039;&#039;&#039;INSANITY&#039;&#039;&#039;&lt;br /&gt;
:Tests multiple concurrent failure conditions.&lt;br /&gt;
&lt;br /&gt;
;&#039;&#039;&#039;SANITY_QUOTA&#039;&#039;&#039;&lt;br /&gt;
:Verifies filesystem quotas.&lt;br /&gt;
&lt;br /&gt;
==How do you get the acc-sm tests?==&lt;br /&gt;
&lt;br /&gt;
The acc-sm test suite is stored in the lustre/tests sub-directory on each CVS branch (b1_6, b1_8, and HEAD).&lt;br /&gt;
&lt;br /&gt;
==Do you have to run every acc-sm test?==&lt;br /&gt;
&lt;br /&gt;
No. You can choose to run only specified acc-sm tests. Tests can be run either with or without the acceptance-sm.sh (acc-sm.sh) wrapper script. Here are several examples:&lt;br /&gt;
&lt;br /&gt;
To only run the RUNTESTS and SANITY tests:&lt;br /&gt;
&lt;br /&gt;
 ACC_SM_ONLY=”RUNTESTS SANITY” sh acceptance-small.sh&lt;br /&gt;
&lt;br /&gt;
To only run test_1 and test_2 of the SANITYN tests:&lt;br /&gt;
&lt;br /&gt;
 ACC_SM_ONLY=”SANITYN” ONLY=”1 2” sh acceptance-small.sh&lt;br /&gt;
&lt;br /&gt;
To only run the replay-single.sh test and except (not run) the test_3* and test_4* tests: &lt;br /&gt;
&lt;br /&gt;
 ACC_SM_ONLY=”REPLAY_SINGLE” REPLAY_SINGLE_EXCEPT=”3 4” sh acceptance-small.sh&lt;br /&gt;
&lt;br /&gt;
To only run conf-sanity.sh tests after #15 (without the acceptance-small.sh wrapper script):&lt;br /&gt;
&lt;br /&gt;
 CONF_SANITY_EXCEPT=”$(seq 15)“ sh conf-sanity.sh&lt;br /&gt;
&lt;br /&gt;
==Do the acc-sm tests have to be run in a specific order?==&lt;br /&gt;
&lt;br /&gt;
The test order is defined in the acceptance-small.sh script and in each test script. Users do not have to (and should not) do anything to change the order of tests.&lt;br /&gt;
&lt;br /&gt;
==Who runs the acc-sm tests?==&lt;br /&gt;
&lt;br /&gt;
Currently, the QE group and Lustre developers run acc-sm as the main test suite for Lustre testing. Acc-sm tests are run on YALA, the automated test system, with test reports submitted to Buffalo (a web interface that allows for browsing various Lustre test results). We welcome external contributions to the Lustre acc-sm test efforts – either of the Lustre code base or new testing platforms.&lt;br /&gt;
&lt;br /&gt;
==What type of Lustre environment is needed to run the acc-sm tests? Is anything special needed?==&lt;br /&gt;
&lt;br /&gt;
The default Lustre configuration for acc-sm testing is a single node setup with one MDS and two OSTs. All devices are loop-back devices. YALA, the automated test system, uses a non-default configuration.&lt;br /&gt;
&lt;br /&gt;
To run the acc-sm test suite on a non-default Lustre configuration, you have to modify the default settings in the acc-sm configuration file, lustre/tests/cfg/local.sh. The configuration variables include mds_HOST, ost_HOST, OSTCOUNT, MDS_MOUNT_OPTS and OST_MOUNT_OPTS, among others.&lt;br /&gt;
&lt;br /&gt;
To create your own configuration file, copy cfg/local.sh to cfg/my_config.sh:&lt;br /&gt;
&lt;br /&gt;
 cp cfg/local.sh cfg/my_config.sh&lt;br /&gt;
&lt;br /&gt;
Edit the necessary variables in the configuration file (my_config.sh) and run acc-sm as: NAME=my_config sh acceptance-small.sh&lt;br /&gt;
&lt;br /&gt;
==What are the steps to run acc-sm?==&lt;br /&gt;
&lt;br /&gt;
There are two methods to run the acc-sm tests.&lt;br /&gt;
&lt;br /&gt;
1. Check out a Lustre branch (b1_6, b1_8 or HEAD).&lt;br /&gt;
&lt;br /&gt;
2. Change directory to lustre/tests:&lt;br /&gt;
&lt;br /&gt;
 cd lustre/tests&lt;br /&gt;
&lt;br /&gt;
3. Build lustre/tests.&lt;br /&gt;
&lt;br /&gt;
4. Run acc-sm on a local, default Lustre configuration (1 MGS/MDT, 1 OST and 1 client):&lt;br /&gt;
&lt;br /&gt;
 sh acceptance-small.sh 2&amp;gt;&amp;amp;1 | tee /tmp/output&lt;br /&gt;
&lt;br /&gt;
- OR -&lt;br /&gt;
&lt;br /&gt;
1. Install the lustre-tests RPM (available at lts-head:/var/cache/cfs/PACKAGE/rpm/lustre).&lt;br /&gt;
&lt;br /&gt;
2. Change directory to lustre/tests:&lt;br /&gt;
&lt;br /&gt;
 cd /usr/lib/lustre/tests&lt;br /&gt;
&lt;br /&gt;
3. Create your own configuration file and edit it for your configuration.&lt;br /&gt;
&lt;br /&gt;
 cp cfg/local.sh cfg/my_config.sh&lt;br /&gt;
&lt;br /&gt;
4. Run acc-sm on a local Lustre configuration.&lt;br /&gt;
&lt;br /&gt;
Here is an example of running acc-sm on a non-default Lustre configuration (MDS is sfire7, OST is sfire8, OSCOUNT=1, etc). In this example, only the SANITY test cases are being run.&lt;br /&gt;
&lt;br /&gt;
 ACC_SM_ONLY=SANITY mds_HOST=sfire7 ost8_HOST=sfire8 MDSDEV1=/dev/sda1&lt;br /&gt;
 OSTCOUNT=1 OSTDEV1=/dev/sda1 MDSSIZE=5000000 OSTSIZE=5000000&lt;br /&gt;
 MDS_MOUNT_OPTS=&amp;quot;-o user_xattr&amp;quot; OST_MOUNT_OPTS=&amp;quot; -o user_xattr&amp;quot;&lt;br /&gt;
 REFORMAT=&amp;quot;--reformat&amp;quot; PDSH=&amp;quot;pdsh -S -w&amp;quot; sh acceptance-small.sh&lt;br /&gt;
&lt;br /&gt;
==What if I hit a failure on an acc-sm test?==&lt;br /&gt;
&lt;br /&gt;
* If you regularly hit a failure in any of these tests, check if a bug has been reported on the failure or file a new bug if one has not yet been opened.&lt;br /&gt;
* If the bug prevents you from completing the tests, set the environment variables to skip the specific test(s) until you or someone else fixes them.&lt;br /&gt;
** For example, to skip sanity.sh subtest 36g and 65, replay-single.sh subtest 42, and all of insanity.sh set in your environment:&lt;br /&gt;
**: &lt;br /&gt;
**:: &amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
**:: &lt;br /&gt;
**:: export SANITY_EXCEPT=&amp;quot;36g 65&amp;quot;&lt;br /&gt;
**:: export REPLAY_SINGLE_EXCEPT=42&lt;br /&gt;
**:: export INSANITY=no&lt;br /&gt;
**:: &amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
**:: &lt;br /&gt;
** You can also skip tests on the command line. For example, when running acceptance-small:&lt;br /&gt;
**: &lt;br /&gt;
**:: &amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
**:: SANITY_EXCEPT=&amp;quot;36g 65&amp;quot; REPLAY_SINGLE_EXCEPT=42 INSANITY=no ./acceptance-small.sh&lt;br /&gt;
**:: &amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
** The test framework is very flexible, and it is a very easy &amp;quot;hands-off&amp;quot; way of running testing while you are doing other things, like coding.&lt;br /&gt;
** Questions/problems with the test framework should be emailed to the lustre-discuss mailing list, so all Lustre users can benefit from improving and documenting it.&lt;br /&gt;
* If you do not run the entire test suite regularly, you will have no idea whether a bug is added from your code or not, and you will waste a lot of time looking.&lt;br /&gt;
&lt;br /&gt;
==How do you run acc-sm on a mounted Lustre system?==&lt;br /&gt;
&lt;br /&gt;
To run acc-sm on a Lustre system that is already mounted, you need to use the correct configuration file (according to the mounted Lustre system) and run acc-sm as: &lt;br /&gt;
&lt;br /&gt;
 SETUP=: CLEANUP=: FORMAT=: NAME=&amp;lt;config&amp;gt; sh acceptance-small.sh&lt;br /&gt;
&lt;br /&gt;
==How do you run acc-sm with and without reformat?==&lt;br /&gt;
&lt;br /&gt;
By default, the acc-sm test suite does not reformat Lustre. If you want to reformat Lustre, run acc-sm with REFORMAT=&amp;quot;--reformat&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
 REFORMAT=&amp;quot;--reformat&amp;quot; sh acceptance-small.sh&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;If this is a new system or you are using new devices for Lustre, reformatting must be done.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If needed, you can specify WRITECONF=&amp;quot;writeconf&amp;quot;, and then run acc-sm with WRITECONF=&amp;quot;writeconf&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
 WRITECONF=&amp;quot;writeconf&amp;quot; sh acceptance-small.sh&lt;br /&gt;
&lt;br /&gt;
==How do you run acc-sm in a Lustre configuration with several clients?==&lt;br /&gt;
&lt;br /&gt;
The default configuration file for acc-sm is cfg/local.sh, which uses only one client (local). To use additional remote clients, specify the RCLIENTS list and use the cfg/ncli.sh configuration file (or your own copy of ncli configuration).&lt;br /&gt;
&lt;br /&gt;
 NAME=ncli RCLIENT=&amp;lt;space-separated list of remote clients&amp;gt; sh acceptance-small.sh&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
 NAME=ncli RCLIENT=&amp;quot;client2 client3 client11&amp;quot; sh acceptance-small.sh&lt;br /&gt;
&lt;br /&gt;
==What is the SLOW variable and how is it used with acc-sm?==&lt;br /&gt;
&lt;br /&gt;
The SLOW variable is used to run a subset of acc-sm tests. By default, the variable is set to SLOW=no, which causes some of the longer acc-sm tests to be skipped and acc-sm test run to complete in less than 2 hours. To run all of the acc-sm tests, set the variable to SLOW=yes:&lt;br /&gt;
&lt;br /&gt;
 SLOW=yes sh acceptance-small.sh&lt;br /&gt;
&lt;br /&gt;
==What is the FAIL_ON_ERROR variable and how is it used with acc-sm?==&lt;br /&gt;
&lt;br /&gt;
The FAIL_ON_ERROR variable is used to &amp;quot;stop&amp;quot; or &amp;quot;continue&amp;quot; running acc-sm tests after a test failure occurs. If the variable is set to &amp;quot;true&amp;quot; (FAIL_ON_ERROR=true), then acc-sm stops after test_N fails and test_N+1 does not run. If the variable is set to &amp;quot;false&amp;quot; (FAIL_ON_ERROR=false), then acc-sm continues after test_N fails and test_N+1 does run.&lt;br /&gt;
&lt;br /&gt;
FALSE_ON_ERROR=false, by default, for the sanity, sanityn and sanity-quota tests. FALSE_ON_ERROR=true for the replay/recovery tests.&lt;br /&gt;
&lt;br /&gt;
==What is the PDSH variable and how it is used with acc-sm?==&lt;br /&gt;
&lt;br /&gt;
The PDSH variable is used to provide remote shell access. If acc-sm is run on a Lustre configuration with remote servers, specify PDSH like this:&lt;br /&gt;
&lt;br /&gt;
 PDSH=&amp;quot;pdsh -S w&amp;quot; sh acceptance-small.sh&lt;br /&gt;
&lt;br /&gt;
If the client has no access to the servers, you can run acc-sm without PDSH, but the tests which need PDSH access are skipped. A summary report is generated which lists the skipped tests.&lt;br /&gt;
&lt;br /&gt;
==What is the CMD configuration for HEAD?==&lt;br /&gt;
&lt;br /&gt;
For the HEAD branch, specify the MDSCOUNT variable (number of MDTs). By default, the variable is set to 1. If you have a Lustre configuration with several MDT nodes, they need to be specified in the configuration file as mds1_HOST, mds2_HOST, ...&lt;br /&gt;
&lt;br /&gt;
By default, all of these variables are set to the mds_HOST value.&lt;br /&gt;
&lt;br /&gt;
==What do we do with the acc-sm test results?==&lt;br /&gt;
&lt;br /&gt;
Acc-sm results are sent to Buffalo, a web interface for Lustre test results. The default Buffalo display shows a summary of tests run on different hardware configurations for various CVS branches for the past 24 hours, with links to the various reports. For more information on reporting test results&lt;br /&gt;
to Buffalo, see [http://wiki.lustre.org/index.php?title=Buffalizing_Tests Buffalizing Tests].&lt;br /&gt;
&lt;br /&gt;
If an acc-sm test fails, then the failure is investigated. If the investigation reveals there is a Lustre defect, a bug is opened in Bugzilla to fix the problem and also the acc-sm issue.&lt;/div&gt;</summary>
		<author><name>Scjody</name></author>
	</entry>
	<entry>
		<id>http://wiki.old.lustre.org/index.php?title=Acceptance_Small_(acc-sm)_Testing_on_Lustre&amp;diff=6134</id>
		<title>Acceptance Small (acc-sm) Testing on Lustre</title>
		<link rel="alternate" type="text/html" href="http://wiki.old.lustre.org/index.php?title=Acceptance_Small_(acc-sm)_Testing_on_Lustre&amp;diff=6134"/>
		<updated>2009-05-05T14:07:32Z</updated>

		<summary type="html">&lt;p&gt;Scjody: Fix examples&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Lustre QE group and developers use acceptance-small (acc-sm) tests to catch bugs early in the development cycle. Within the Lustre group, acc-sm tests are run on YALA, an automated test system. This information is being published to describe the steps to perform acceptance small testing and encourage wider acc-sm testing in the Lustre community.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE&#039;&#039;&#039;: For your convenience, this document is also available as a [http://wiki.lustre.org/images/c/c6/AccSm_Testing.pdf PDF].&lt;br /&gt;
&lt;br /&gt;
==What is acc-sm testing and why do we use it for Lustre?==&lt;br /&gt;
&lt;br /&gt;
Acceptance small (acc-sm) testing is a suite of test cases used to verify different aspects of Lustre functionality.&lt;br /&gt;
&lt;br /&gt;
* These tests are run using the acceptance-small.sh script. &lt;br /&gt;
* The script is run from the lustre/tests directory in a compiled Lustre tree. &lt;br /&gt;
* The acceptance-small.sh script runs a number of test scripts that are also run by the ltest (Buffalo) test harness on Lustre test clusters.&lt;br /&gt;
&lt;br /&gt;
==What tests comprise the acc-sm test suite?==&lt;br /&gt;
&lt;br /&gt;
Each Lustre CVS branch contains a lustre/tests sub-directory; all acc-sm tests are stored here. The acceptance-small.sh file contains a list of all tests in the acc-sm suite. To get the list, run:&lt;br /&gt;
&lt;br /&gt;
 $ grep TESTSUITE_LIST acceptance-small.sh&lt;br /&gt;
&lt;br /&gt;
The acc-sm tests are listed below, by CVS branch.&lt;br /&gt;
&lt;br /&gt;
====b1_6 branch====&lt;br /&gt;
&lt;br /&gt;
This branch includes 17 acc-sm test suites.&lt;br /&gt;
&lt;br /&gt;
 $ grep TESTSUITE_LIST acceptance-small.sh&lt;br /&gt;
 export TESTSUITE_LIST=&amp;quot;RUNTESTS SANITY DBENCH BONNIE IOZONE FSX SANITYN LFSCK&lt;br /&gt;
 LIBLUSTRE REPLAY_SINGLE CONF_SANITY RECOVERY_SMALL REPLAY_OST_SINGLE&lt;br /&gt;
 REPLAY_DUAL INSANITY SANITY_QUOTA PERFORMANCE_SANITY&amp;quot;&lt;br /&gt;
&lt;br /&gt;
====b1_8_gate branch====&lt;br /&gt;
&lt;br /&gt;
This branch includes 18 acc-sm test suites.&lt;br /&gt;
&lt;br /&gt;
 $ grep TESTSUITE_LIST acceptance-small.sh&lt;br /&gt;
 export TESTSUITE_LIST=&amp;quot;RUNTESTS SANITY DBENCH BONNIE IOZONE FSX SANITYN LFSCK&lt;br /&gt;
 LIBLUSTRE REPLAY_SINGLE CONF_SANITY RECOVERY_SMALL REPLAY_OST_SINGLE&lt;br /&gt;
 REPLAY_DUAL REPLAY_VBR INSANITY SANITY_QUOTA PERFORMANCE_SANITY&amp;quot;&lt;br /&gt;
&lt;br /&gt;
====HEAD branch====&lt;br /&gt;
&lt;br /&gt;
This branch includes 19 acc-sm test suites.&lt;br /&gt;
&lt;br /&gt;
 $ grep TESTSUITE_LIST acceptance-small.sh&lt;br /&gt;
 export TESTSUITE_LIST=&amp;quot;RUNTESTS SANITY DBENCH BONNIE IOZONE FSX SANITYN LFSCK&lt;br /&gt;
 LIBLUSTRE REPLAY_SINGLE CONF_SANITY RECOVERY_SMALL REPLAY_OST_SINGLE&lt;br /&gt;
 REPLAY_DUAL INSANITY SANITY_QUOTA SANITY_SEC SANITY_GSS&lt;br /&gt;
 PERFORMANCE_SANITY&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To see the test cases in a particular acc-sm test, run:&lt;br /&gt;
&lt;br /&gt;
 $ grep run_ &amp;lt;test suite script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For example, to see the last 3 test cases that comprise the SANITY test:&lt;br /&gt;
&lt;br /&gt;
 $ grep run_ sanity.sh | tail -3&lt;br /&gt;
&lt;br /&gt;
 run_test 130c &amp;quot;FIEMAP (2-stripe file with hole)&amp;quot;&lt;br /&gt;
 run_test 130d &amp;quot;FIEMAP (N-stripe file)&amp;quot;&lt;br /&gt;
 run_test 130e &amp;quot;FIEMAP (test continuation FIEMAP calls)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==For each acc-sm test, what does it measure or show?==&lt;br /&gt;
&lt;br /&gt;
The acc-sm test suite are described below.&lt;br /&gt;
&lt;br /&gt;
;&#039;&#039;&#039;RUNTESTS&#039;&#039;&#039;&lt;br /&gt;
: A basic regression test with unmount/remount.&lt;br /&gt;
&lt;br /&gt;
;&#039;&#039;&#039;SANITY&#039;&#039;&#039;&lt;br /&gt;
: Verifies Lustre operation under normal operating conditions.&lt;br /&gt;
&lt;br /&gt;
;&#039;&#039;&#039;DBENCH&#039;&#039;&#039;&lt;br /&gt;
:Dbench benchmark for simulating N clients to produce the filesystem load.&lt;br /&gt;
&lt;br /&gt;
;&#039;&#039;&#039;BONNIE&#039;&#039;&#039;&lt;br /&gt;
:Bonnie++ benchmark for creation, reading and deleting many small files&lt;br /&gt;
&lt;br /&gt;
;&#039;&#039;&#039;IOZONE&#039;&#039;&#039;&lt;br /&gt;
:IOzone benchmark for generating and measuring a variety of file operations.&lt;br /&gt;
&lt;br /&gt;
;&#039;&#039;&#039;FSX&#039;&#039;&#039;&lt;br /&gt;
:Filesystem exerciser.&lt;br /&gt;
&lt;br /&gt;
;&#039;&#039;&#039;SANITYN&#039;&#039;&#039;&lt;br /&gt;
:Verifies operations from two clients under normal operating conditions.&lt;br /&gt;
&lt;br /&gt;
;&#039;&#039;&#039;LFSCK&#039;&#039;&#039;&lt;br /&gt;
:Tests e2fsck and lfsck to detect and fix filesystm corruption.&lt;br /&gt;
&lt;br /&gt;
;&#039;&#039;&#039;LIBLUSTRE&#039;&#039;&#039;&lt;br /&gt;
:Runs a test linked to a liblustre client library.&lt;br /&gt;
&lt;br /&gt;
;&#039;&#039;&#039;REPLAY_SINGLE&#039;&#039;&#039;&lt;br /&gt;
:Verifies recovery after an MDS failure.&lt;br /&gt;
&lt;br /&gt;
;&#039;&#039;&#039;CONF_SANITY&#039;&#039;&#039;&lt;br /&gt;
:Verifies various Lustre configurations (including wrong ones), where the system must behave correctly.&lt;br /&gt;
&lt;br /&gt;
;&#039;&#039;&#039;RECOVERY_SMALL&#039;&#039;&#039;&lt;br /&gt;
:Verifies RPC replay after a communications failure (message loss).&lt;br /&gt;
&lt;br /&gt;
;&#039;&#039;&#039;REPLAY_OST_SINGLE&#039;&#039;&#039;&lt;br /&gt;
:Verifies recovery after an OST failure.&lt;br /&gt;
&lt;br /&gt;
;&#039;&#039;&#039;REPLAY_DUAL&#039;&#039;&#039;&lt;br /&gt;
:Verifies recovery from two clients after a server failure.&lt;br /&gt;
&lt;br /&gt;
;&#039;&#039;&#039;INSANITY&#039;&#039;&#039;&lt;br /&gt;
:Tests multiple concurrent failure conditions.&lt;br /&gt;
&lt;br /&gt;
;&#039;&#039;&#039;SANITY_QUOTA&#039;&#039;&#039;&lt;br /&gt;
:Verifies filesystem quotas.&lt;br /&gt;
&lt;br /&gt;
==How do you get the acc-sm tests?==&lt;br /&gt;
&lt;br /&gt;
The acc-sm test suite is stored in the lustre/tests sub-directory on each CVS branch (b1_6, b1_8, and HEAD).&lt;br /&gt;
&lt;br /&gt;
==Do you have to run every acc-sm test?==&lt;br /&gt;
&lt;br /&gt;
No. You can choose to run only specified acc-sm tests. Tests can be run either with or without the acceptance-sm.sh (acc-sm.sh) wrapper script. Here are several examples:&lt;br /&gt;
&lt;br /&gt;
To only run the RUNTESTS and SANITY tests:&lt;br /&gt;
&lt;br /&gt;
 ACC_SM_ONLY=”RUNTESTS SANITY” sh acceptance-small.sh&lt;br /&gt;
&lt;br /&gt;
To only run test_1 and test_2 of the SANITYN tests:&lt;br /&gt;
&lt;br /&gt;
 ACC_SM_ONLY=”SANITYN” ONLY=”1 2” sh acceptance-small.sh&lt;br /&gt;
&lt;br /&gt;
To only run the replay-single.sh test and except (not run) the test_3* and test_4* tests: &lt;br /&gt;
&lt;br /&gt;
 ACC_SM_ONLY=”REPLAY_SINGLE” REPLAY_SINGLE_EXCEPT=”3 4” sh acceptance-small.sh&lt;br /&gt;
&lt;br /&gt;
To only run conf-sanity.sh tests after #15 (without the acceptance-small.sh wrapper script):&lt;br /&gt;
&lt;br /&gt;
 CONF_SANITY_EXCEPT=”$(seq 15)“ sh conf-sanity.sh&lt;br /&gt;
&lt;br /&gt;
==Do the acc-sm tests have to be run in a specific order?==&lt;br /&gt;
&lt;br /&gt;
The test order is defined in the acceptance-small.sh script and in each test script. Users do not have to (and should not) do anything to change the order of tests.&lt;br /&gt;
&lt;br /&gt;
==Who runs the acc-sm tests?==&lt;br /&gt;
&lt;br /&gt;
Currently, the QE group and Lustre developers run acc-sm as the main test suite for Lustre testing. Acc-sm tests are run on YALA, the automated test system, with test reports submitted to Buffalo (a web interface that allows for browsing various Lustre test results). We welcome external contributions to the Lustre acc-sm test efforts – either of the Lustre code base or new testing platforms.&lt;br /&gt;
&lt;br /&gt;
==What type of Lustre environment is needed to run the acc-sm tests? Is anything special needed?==&lt;br /&gt;
&lt;br /&gt;
The default Lustre configuration for acc-sm testing is a single node setup with one MDS and two OSTs. All devices are loop-back devices. YALA, the automated test system, uses a non-default configuration.&lt;br /&gt;
&lt;br /&gt;
To run the acc-sm test suite on a non-default Lustre configuration, you have to modify the default settings in the acc-sm configuration file, lustre/tests/cfg/local.sh. The configuration variables include mds_HOST, ost_HOST, OSTCOUNT, MDS_MOUNT_OPTS and OST_MOUNT_OPTS, among others.&lt;br /&gt;
&lt;br /&gt;
To create your own configuration file, copy cfg/local.sh to cfg/my_config.sh:&lt;br /&gt;
&lt;br /&gt;
 cp cfg/local.sh cfg/my_config.sh&lt;br /&gt;
&lt;br /&gt;
Edit the necessary variables in the configuration file (my_config.sh) and run acc-sm as: NAME=my_config sh acceptance-small.sh&lt;br /&gt;
&lt;br /&gt;
==What are the steps to run acc-sm?==&lt;br /&gt;
&lt;br /&gt;
There are two methods to run the acc-sm tests.&lt;br /&gt;
&lt;br /&gt;
1. Check out a Lustre branch (b1_6, b1_8 or HEAD).&lt;br /&gt;
&lt;br /&gt;
2. Change directory to lustre/tests:&lt;br /&gt;
&lt;br /&gt;
 cd lustre/tests&lt;br /&gt;
&lt;br /&gt;
3. Build lustre/tests.&lt;br /&gt;
&lt;br /&gt;
4. Run acc-sm on a local, default Lustre configuration (1 MGS/MDT, 1 OST and 1 client):&lt;br /&gt;
&lt;br /&gt;
 sh acceptance-small.sh 2&amp;gt;&amp;amp;1 | tee /tmp/output&lt;br /&gt;
&lt;br /&gt;
- OR -&lt;br /&gt;
&lt;br /&gt;
1. Install the lustre-tests RPM (available at lts-head:/var/cache/cfs/PACKAGE/rpm/lustre).&lt;br /&gt;
&lt;br /&gt;
2. Change directory to lustre/tests:&lt;br /&gt;
&lt;br /&gt;
 cd /usr/lib/lustre/tests&lt;br /&gt;
&lt;br /&gt;
3. Create your own configuration file and edit it for your configuration.&lt;br /&gt;
&lt;br /&gt;
 cp cfg/local.sh cfg/my_config.sh&lt;br /&gt;
&lt;br /&gt;
4. Run acc-sm on a local Lustre configuration.&lt;br /&gt;
&lt;br /&gt;
Here is an example of running acc-sm on a non-default Lustre configuration (MDS is sfire7, OST is sfire8, OSCOUNT=1, etc). In this example, only the SANITY test cases are being run.&lt;br /&gt;
&lt;br /&gt;
 ACC_SM_ONLY=SANITY mds_HOST=sfire7 ost8_HOST=sfire8 MDSDEV1=/dev/sda1&lt;br /&gt;
 OSTCOUNT=1 OSTDEV1=/dev/sda1 MDSSIZE=5000000 OSTSIZE=5000000&lt;br /&gt;
 MDS_MOUNT_OPTS=&amp;quot;-o user_xattr&amp;quot; OST_MOUNT_OPTS=&amp;quot; -o user_xattr&amp;quot;&lt;br /&gt;
 REFORMAT=&amp;quot;--reformat&amp;quot; PDSH=&amp;quot;pdsh -S -w&amp;quot; sh acceptance-small.sh&lt;br /&gt;
&lt;br /&gt;
==What if I hit a failure on an acc-sm test?==&lt;br /&gt;
&lt;br /&gt;
* If you regularly hit a failure in any of these tests, check if a bug has been reported on the failure or file a new bug if one has not yet been opened.&lt;br /&gt;
* If the bug prevents you from completing the tests, set the environment variables to skip the specific test(s) until you or someone else fixes them.&lt;br /&gt;
** For example, to skip sanity.sh subtest 36g and 65, replay-single.sh subtest 42, and all of insanity.sh set in your environment:&lt;br /&gt;
**: &lt;br /&gt;
**:: &amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
**:: &lt;br /&gt;
**:: export SANITY_EXCEPT=&amp;quot;36g 65&amp;quot;&lt;br /&gt;
**:: export REPLAY_SINGLE_EXCEPT=42&lt;br /&gt;
**:: export INSANITY=no&lt;br /&gt;
**:: &amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
**:: &lt;br /&gt;
** You can also skip tests on the command line. For example, when running acceptance-small:&lt;br /&gt;
**: &lt;br /&gt;
**:: &amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
**:: SANITY_EXCEPT=&amp;quot;36g 65&amp;quot; REPLAY_SINGLE_EXCEPT=42 INSANITY=no ./acceptance-small.sh&lt;br /&gt;
**:: &amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
** The test framework is very flexible, and it is a very easy &amp;quot;hands-off&amp;quot; way of running testing while you are doing other things, like coding.&lt;br /&gt;
** Questions/problems with the test framework should be emailed to the lustre-discuss mailing list, so all Lustre users can benefit from improving and documenting it.&lt;br /&gt;
* If you do not run the entire test suite regularly, you will have no idea whether a bug is added from your code or not, and you will waste a lot of time looking.&lt;br /&gt;
&lt;br /&gt;
==How do you run acc-sm on a mounted Lustre system?==&lt;br /&gt;
&lt;br /&gt;
To run acc-sm on a Lustre system that is already mounted, you need to use the correct configuration file (according to the mounted Lustre system) and run acc-sm as: &lt;br /&gt;
&lt;br /&gt;
 SETUP=: CLEANUP=: FORMAT=: NAME=&amp;lt;config&amp;gt; sh acceptance-small.sh&lt;br /&gt;
&lt;br /&gt;
==How do you run acc-sm with and without reformat?==&lt;br /&gt;
&lt;br /&gt;
By default, the acc-sm test suite does not reformat Lustre. If you want to reformat Lustre, run acc-sm with REFORMAT=&amp;quot;--reformat&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
 REFORMAT=&amp;quot;--reformat&amp;quot; sh acceptance-small.sh&lt;br /&gt;
&lt;br /&gt;
If needed, you can specify WRITECONF=&amp;quot;writeconf&amp;quot;, and then run acc-sm with WRITECONF=&amp;quot;writeconf&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
 WRITECONF=&amp;quot;writeconf&amp;quot; sh acceptance-small.sh&lt;br /&gt;
&lt;br /&gt;
==How do you run acc-sm in a Lustre configuration with several clients?==&lt;br /&gt;
&lt;br /&gt;
The default configuration file for acc-sm is cfg/local.sh, which uses only one client (local). To use additional remote clients, specify the RCLIENTS list and use the cfg/ncli.sh configuration file (or your own copy of ncli configuration).&lt;br /&gt;
&lt;br /&gt;
 NAME=ncli RCLIENT=&amp;lt;space-separated list of remote clients&amp;gt; sh acceptance-small.sh&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
 NAME=ncli RCLIENT=&amp;quot;client2 client3 client11&amp;quot; sh acceptance-small.sh&lt;br /&gt;
&lt;br /&gt;
==What is the SLOW variable and how is it used with acc-sm?==&lt;br /&gt;
&lt;br /&gt;
The SLOW variable is used to run a subset of acc-sm tests. By default, the variable is set to SLOW=no, which causes some of the longer acc-sm tests to be skipped and acc-sm test run to complete in less than 2 hours. To run all of the acc-sm tests, set the variable to SLOW=yes:&lt;br /&gt;
&lt;br /&gt;
 SLOW=yes sh acceptance-small.sh&lt;br /&gt;
&lt;br /&gt;
==What is the FAIL_ON_ERROR variable and how is it used with acc-sm?==&lt;br /&gt;
&lt;br /&gt;
The FAIL_ON_ERROR variable is used to &amp;quot;stop&amp;quot; or &amp;quot;continue&amp;quot; running acc-sm tests after a test failure occurs. If the variable is set to &amp;quot;true&amp;quot; (FAIL_ON_ERROR=true), then acc-sm stops after test_N fails and test_N+1 does not run. If the variable is set to &amp;quot;false&amp;quot; (FAIL_ON_ERROR=false), then acc-sm continues after test_N fails and test_N+1 does run.&lt;br /&gt;
&lt;br /&gt;
FALSE_ON_ERROR=false, by default, for the sanity, sanityn and sanity-quota tests. FALSE_ON_ERROR=true for the replay/recovery tests.&lt;br /&gt;
&lt;br /&gt;
==What is the PDSH variable and how it is used with acc-sm?==&lt;br /&gt;
&lt;br /&gt;
The PDSH variable is used to provide remote shell access. If acc-sm is run on a Lustre configuration with remote servers, specify PDSH like this:&lt;br /&gt;
&lt;br /&gt;
 PDSH=&amp;quot;pdsh -S w&amp;quot; sh acceptance-small.sh&lt;br /&gt;
&lt;br /&gt;
If the client has no access to the servers, you can run acc-sm without PDSH, but the tests which need PDSH access are skipped. A summary report is generated which lists the skipped tests.&lt;br /&gt;
&lt;br /&gt;
==What is the CMD configuration for HEAD?==&lt;br /&gt;
&lt;br /&gt;
For the HEAD branch, specify the MDSCOUNT variable (number of MDTs). By default, the variable is set to 1. If you have a Lustre configuration with several MDT nodes, they need to be specified in the configuration file as mds1_HOST, mds2_HOST, ...&lt;br /&gt;
&lt;br /&gt;
By default, all of these variables are set to the mds_HOST value.&lt;br /&gt;
&lt;br /&gt;
==What do we do with the acc-sm test results?==&lt;br /&gt;
&lt;br /&gt;
Acc-sm results are sent to Buffalo, a web interface for Lustre test results. The default Buffalo display shows a summary of tests run on different hardware configurations for various CVS branches for the past 24 hours, with links to the various reports. For more information on reporting test results&lt;br /&gt;
to Buffalo, see [http://wiki.lustre.org/index.php?title=Buffalizing_Tests Buffalizing Tests].&lt;br /&gt;
&lt;br /&gt;
If an acc-sm test fails, then the failure is investigated. If the investigation reveals there is a Lustre defect, a bug is opened in Bugzilla to fix the problem and also the acc-sm issue.&lt;/div&gt;</summary>
		<author><name>Scjody</name></author>
	</entry>
	<entry>
		<id>http://wiki.old.lustre.org/index.php?title=Coding_Guidelines&amp;diff=3892</id>
		<title>Coding Guidelines</title>
		<link rel="alternate" type="text/html" href="http://wiki.old.lustre.org/index.php?title=Coding_Guidelines&amp;diff=3892"/>
		<updated>2007-08-28T13:38:15Z</updated>

		<summary type="html">&lt;p&gt;Scjody: Add autoconf info&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;All Lustre developers should follow the guidelines in this page very strictly to avoid problems during code merges later on. Please make the required changes to the default formatting rules in the editor you use to comply to the guidelines below.&lt;br /&gt;
&lt;br /&gt;
== Guidelines ==&lt;br /&gt;
&lt;br /&gt;
1. There should be no tabs in any Lustre or LNET files.  The exceptions are libsysio (maintained by someone else), ldiskfs and kernel patches (also part of a non-CFS project).&lt;br /&gt;
&lt;br /&gt;
2. Blocks should be indented by 8 spaces.&lt;br /&gt;
&lt;br /&gt;
3. New files should contain the following along with the license boilerplate.  This will cause vim and emacs to use spaces instead of tabs for indenting.  If you use a different editor, it also needs to be set to use spaces for indening Lustre code.&lt;br /&gt;
&amp;lt;pre style=&amp;quot;background:lightgrey;&amp;quot;&amp;gt;&lt;br /&gt;
  /* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*-&lt;br /&gt;
   * vim:expandtab:shiftwidth=8:tabstop=8:&lt;br /&gt;
   */&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
4. All lines should wrap at 80 characters. If it&#039;s getting too hard to wrap there, you probably need to break it up into more functions.  In some cases, it is acceptable to remove a few spaces between function arguments to avoid overflowing onto the next line.&lt;br /&gt;
&lt;br /&gt;
5. Don&#039;t have spaces or tabs on blank lines or at the end of lines.  Find these with some regexps in your patch (grep, or in vim) before attaching it to bugzilla:&lt;br /&gt;
&lt;br /&gt;
 /[ \t]$/&lt;br /&gt;
&lt;br /&gt;
6. Don&#039;t use &amp;quot;inline&amp;quot; unless you&#039;re doing something so performance critical that the function call overhead will make a difference -- in other words: never.  It makes debugging harder.&lt;br /&gt;
&lt;br /&gt;
All of our wrapping, parenthesis, brace placement, etc. rules are basically Linux kernel rules, which are basically K&amp;amp;R. For those of you in need of a refresher, great detail is provided below.&lt;br /&gt;
&lt;br /&gt;
7. For Autoconf macros, follow the [http://www.gnu.org/software/autoconf/manual/html_node/Coding-Style.html style suggested in the autoconf manual].&lt;br /&gt;
&lt;br /&gt;
== Great detail ==&lt;br /&gt;
&lt;br /&gt;
a. When you wrap, the next line should start after the parenthesis:&lt;br /&gt;
&amp;lt;pre style=&amp;quot;background:lightgrey;&amp;quot;&amp;gt;&lt;br /&gt;
  right:&lt;br /&gt;
 &lt;br /&gt;
  variable = do_something_complicated(long_argument, longer_argument,&lt;br /&gt;
                                      longest_argument(sub_argument,&lt;br /&gt;
                                                       foo_argument),&lt;br /&gt;
                                      last_argument);&lt;br /&gt;
 &lt;br /&gt;
  if (some_long_condition(arg1, arg2, arg3) &amp;lt; some_long_value &amp;amp;&amp;amp;&lt;br /&gt;
      another_long_condition(very_long_argument_name,&lt;br /&gt;
                             another_long_argument_name) &amp;gt;&lt;br /&gt;
      second_long_value) {&lt;br /&gt;
  }&lt;br /&gt;
                             &lt;br /&gt;
 &lt;br /&gt;
  wrong:&lt;br /&gt;
 &lt;br /&gt;
  variable = do_something_complicated(long_argument, longer_argument,&lt;br /&gt;
                    longest_argument(sub_argument, foo_argument),&lt;br /&gt;
                    last_argument);&lt;br /&gt;
 &lt;br /&gt;
  if (some_long_condition(arg1, arg2, arg3) &amp;lt; some_long_value &amp;amp;&amp;amp;&lt;br /&gt;
              another_long_condition(very_long_argument_name,&lt;br /&gt;
                    another_long_argument_name) &amp;gt;&lt;br /&gt;
                    second_long_value) {&lt;br /&gt;
  }&lt;br /&gt;
 &amp;lt;/pre&amp;gt;&lt;br /&gt;
b. If you&#039;re wrapping put the operators at the end of the line, and if there are no parentheses indent 8 more:&lt;br /&gt;
 &amp;lt;pre style=&amp;quot;background:lightgrey;&amp;quot;&amp;gt;&lt;br /&gt;
  off = le32_to_cpu(fsd-&amp;gt;fsd_client_start) +&lt;br /&gt;
          cl_idx * le16_to_cpu(fsd-&amp;gt;fsd_client_size);&lt;br /&gt;
 &amp;lt;/pre&amp;gt;&lt;br /&gt;
c. Binary and ternary (but not unary) operators should be separated from their arguments by one space.&lt;br /&gt;
 &amp;lt;pre style=&amp;quot;background:lightgrey;&amp;quot;&amp;gt;&lt;br /&gt;
  a++;&lt;br /&gt;
  b |= c;&lt;br /&gt;
  d = f &amp;gt; g ? 0 : 1;&lt;br /&gt;
 &amp;lt;/pre&amp;gt;&lt;br /&gt;
d. Function calls should be nestled against the parentheses, the parentheses should crowd the arguments, and one space after commas:&lt;br /&gt;
 &amp;lt;pre style=&amp;quot;background:lightgrey;&amp;quot;&amp;gt;&lt;br /&gt;
  right: do_foo(bar, baz);&lt;br /&gt;
  wrong: do_foo ( bar,baz );&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
e. All &#039;&#039;if&#039;&#039;, &#039;&#039;for&#039;&#039;, &#039;&#039;while&#039;&#039;, etc. expressions should be separated by a space from the parenthesis, one space after the semicolons:&lt;br /&gt;
 &amp;lt;pre style=&amp;quot;background:lightgrey;&amp;quot;&amp;gt;&lt;br /&gt;
  for (a = 0; a &amp;lt; b; a++)&lt;br /&gt;
  if (a &amp;lt; b || a == c)&lt;br /&gt;
  while (1)&lt;br /&gt;
 &amp;lt;/pre&amp;gt;&lt;br /&gt;
f. Opening braces should be on the same line as the line that introduces the block, except for function calls.  Closing braces get their own line, except for &amp;quot;else&amp;quot;.&lt;br /&gt;
 &amp;lt;pre style=&amp;quot;background:lightgrey;&amp;quot;&amp;gt;&lt;br /&gt;
  int foo(void)&lt;br /&gt;
  {&lt;br /&gt;
          if (bar) {&lt;br /&gt;
                  this();&lt;br /&gt;
                  that();&lt;br /&gt;
          } else if (baz) {&lt;br /&gt;
                  ;&lt;br /&gt;
          } else {&lt;br /&gt;
                  ;&lt;br /&gt;
          }&lt;br /&gt;
          do {&lt;br /&gt;
                  cow();&lt;br /&gt;
          } while (0);&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
g. If one part of a compound &#039;&#039;if&#039;&#039; block has braces, all should.&lt;br /&gt;
&amp;lt;pre style=&amp;quot;background:lightgrey;&amp;quot;&amp;gt;&lt;br /&gt;
  right:&lt;br /&gt;
 &lt;br /&gt;
  if (foo) {&lt;br /&gt;
          bar();&lt;br /&gt;
          baz();&lt;br /&gt;
  } else {&lt;br /&gt;
          salmon();&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
  wrong:&lt;br /&gt;
 &lt;br /&gt;
  if (foo) {&lt;br /&gt;
          bar();&lt;br /&gt;
          baz();&lt;br /&gt;
  } else&lt;br /&gt;
          moose();&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
h. When you make a macro, protect those who might call it by using do/while and parentheses; line up your backslashes:&lt;br /&gt;
&amp;lt;pre style=&amp;quot;background:lightgrey;&amp;quot;&amp;gt;&lt;br /&gt;
  right:&lt;br /&gt;
 &lt;br /&gt;
  #define DO_STUFF(a)                              \&lt;br /&gt;
  do {                                             \&lt;br /&gt;
          int b = (a) + MAGIC;                     \&lt;br /&gt;
          do_other_stuff(b);                       \&lt;br /&gt;
  } while (0)&lt;br /&gt;
 &lt;br /&gt;
  wrong:&lt;br /&gt;
 &lt;br /&gt;
  #define DO_STUFF(a) \&lt;br /&gt;
  { \&lt;br /&gt;
          int b = a + MAGIC; \&lt;br /&gt;
          do_other_stuff(b); \&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
i. If you nest preprocessor commands, use spaces to visually delineate:&lt;br /&gt;
&amp;lt;pre style=&amp;quot;background:lightgrey;&amp;quot;&amp;gt;&lt;br /&gt;
  #ifdef __KERNEL__&lt;br /&gt;
  # include &amp;lt;goose&amp;gt;&lt;br /&gt;
  # define MOOSE steak&lt;br /&gt;
  #else&lt;br /&gt;
  # include &amp;lt;mutton&amp;gt;&lt;br /&gt;
  # define MOOSE prancing&lt;br /&gt;
  #endif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
j.  For very long #ifdefs include the conditional with each #endif to make it readable:&lt;br /&gt;
&amp;lt;pre style=&amp;quot;background:lightgrey;&amp;quot;&amp;gt;&lt;br /&gt;
  #ifdef __KERNEL__&lt;br /&gt;
  # if LINUX_VERSION_CODE &amp;gt;= KERNEL_VERSION(2,5,0)&lt;br /&gt;
  /* lots&lt;br /&gt;
     of&lt;br /&gt;
     stuff */&lt;br /&gt;
  # endif /* KERNEL_VERSION(2,5,0) */&lt;br /&gt;
  #else /* !__KERNEL__ */&lt;br /&gt;
  # if HAVE_FEATURE&lt;br /&gt;
  /* more&lt;br /&gt;
   * stuff */&lt;br /&gt;
  # endif&lt;br /&gt;
  #endif /* __KERNEL__ */ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
k. Comments should have the leading &#039;&#039;&#039;/*&#039;&#039;&#039; on the same line as the comment, and the trailing &#039;&#039;&#039;*/&#039;&#039;&#039; at the end of the last comment line.  Intermediate lines should start with a &#039;&#039;&#039;*&#039;&#039;&#039; aligned with the first line&#039;s &#039;&#039;&#039;*&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;pre style=&amp;quot;background:lightgrey;&amp;quot;&amp;gt; &lt;br /&gt;
 /* This is a short comment */&lt;br /&gt;
 &lt;br /&gt;
  /* This is a multi-line comment.  I wish the line would wrap already,&lt;br /&gt;
   * as I don&#039;t have much to write about. */&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
l. Function declarations absolutely should NOT go into .c files, unless they are forward declarations for static functions that can&#039;t otherwise be moved before the caller.  Instead, the declaration should go into the most &amp;quot;local&amp;quot; header available (preferrably *_internal.h for a given piece of code).&lt;br /&gt;
&lt;br /&gt;
m. Structure and constant declarations should not be declared in multiple places.  Put the struct into the most &amp;quot;local&amp;quot; header possible.  If it is something that is passed over the wire it needs to go into lustre_idl.h, and needs to be correctly swabbed when the RPC message is unpacked.&lt;br /&gt;
&lt;br /&gt;
n. The types and printf/printk formats used by Lustre code are:&lt;br /&gt;
&amp;lt;pre style=&amp;quot;background:lightgrey;&amp;quot;&amp;gt;&lt;br /&gt;
   __u64                 LPU64/LPX64/LPD64 (unsigned, hex, signed)&lt;br /&gt;
   size_t                LPSZ (or cast to int and use %u / %d)&lt;br /&gt;
   __u32/int             %u/%x/%d (unsigned, hex, signed)&lt;br /&gt;
   (unsigned) long long  %llu/%llx/%lld&lt;br /&gt;
   loff_t                %lld after a cast to long long (unfortunately)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
*&#039;&#039;&#039;[http://wiki.lustre.org/index.php?title=Front_Page FrontPage]&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Scjody</name></author>
	</entry>
	<entry>
		<id>http://wiki.old.lustre.org/index.php?title=Coding_Guidelines&amp;diff=2829</id>
		<title>Coding Guidelines</title>
		<link rel="alternate" type="text/html" href="http://wiki.old.lustre.org/index.php?title=Coding_Guidelines&amp;diff=2829"/>
		<updated>2007-06-01T02:11:48Z</updated>

		<summary type="html">&lt;p&gt;Scjody: Coding Guide lines moved to Coding Guidelines: Remove extraneous space in title&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;All Lustre developers should follow the guidelines in this page very strictly to avoid problems during code merges later on. Please make the required changes to the default formatting rules in the editor you use to comply to the guidelines below.&lt;br /&gt;
&lt;br /&gt;
== Guidelines ==&lt;br /&gt;
&lt;br /&gt;
1. There should be no tabs in any files.&lt;br /&gt;
&lt;br /&gt;
2. Blocks should be indented by 8 spaces.&lt;br /&gt;
&lt;br /&gt;
3. New files should contain the following along with the license boilerplate.  This will cause vim and emacs to use spaces instead of tabs for indenting.  If you use a different editor, it also needs to be set to use spaces for indening Lustre code.&lt;br /&gt;
&lt;br /&gt;
  /* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*-&lt;br /&gt;
   * vim:expandtab:shiftwidth=8:tabstop=8:&lt;br /&gt;
   */&lt;br /&gt;
&lt;br /&gt;
4. All lines should wrap at 80 characters. If it&#039;s getting too hard to wrap there, you probably need to break it up into more functions.  In some cases, it is acceptable to remove a few spaces between function arguments to avoid overflowing onto the next line.&lt;br /&gt;
&lt;br /&gt;
5. Don&#039;t have spaces or tabs on blank lines or at the end of lines.&lt;br /&gt;
&lt;br /&gt;
6. Don&#039;t use &amp;quot;inline&amp;quot; unless you&#039;re doing something so performance critical that the function call overhead will make a difference -- in other words: never.  It makes debugging harder.&lt;br /&gt;
&lt;br /&gt;
All of our wrapping, parenthesis, brace placement, etc. rules are basically Linux kernel rules, which are basically K&amp;amp;R. For those of you in need of a refresher, great detail is provided below.&lt;br /&gt;
&lt;br /&gt;
== Great detail ==&lt;br /&gt;
&lt;br /&gt;
a. When you wrap, the next line should start after the parenthesis:&lt;br /&gt;
 &lt;br /&gt;
  right:&lt;br /&gt;
 &lt;br /&gt;
  variable = do_something_complicated(long_argument, longer_argument,&lt;br /&gt;
                                      longest_argument(sub_argument,&lt;br /&gt;
                                                       foo_argument),&lt;br /&gt;
                                      last_argument);&lt;br /&gt;
 &lt;br /&gt;
  if (some_long_condition(arg1, arg2, arg3) &amp;lt; some_long_value &amp;amp;&amp;amp;&lt;br /&gt;
      another_long_condition(very_long_argument_name,&lt;br /&gt;
                             another_long_argument_name) &amp;gt;&lt;br /&gt;
      second_long_value) {&lt;br /&gt;
  }&lt;br /&gt;
                             &lt;br /&gt;
 &lt;br /&gt;
  wrong:&lt;br /&gt;
 &lt;br /&gt;
  variable = do_something_complicated(long_argument, longer_argument,&lt;br /&gt;
                    longest_argument(sub_argument, foo_argument),&lt;br /&gt;
                    last_argument);&lt;br /&gt;
 &lt;br /&gt;
  if (some_long_condition(arg1, arg2, arg3) &amp;lt; some_long_value &amp;amp;&amp;amp;&lt;br /&gt;
              another_long_condition(very_long_argument_name,&lt;br /&gt;
                    another_long_argument_name) &amp;gt;&lt;br /&gt;
                    second_long_value) {&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
b. If you&#039;re wrapping put the operators at the end of the line, and if there are no parentheses indent 8 more:&lt;br /&gt;
 &lt;br /&gt;
  off = le32_to_cpu(fsd-&amp;gt;fsd_client_start) +&lt;br /&gt;
          cl_idx * le16_to_cpu(fsd-&amp;gt;fsd_client_size);&lt;br /&gt;
 &lt;br /&gt;
c. Binary and ternary (but not unary) operators should be separated from their arguments by one space.&lt;br /&gt;
 &lt;br /&gt;
  a++;&lt;br /&gt;
  b |= c;&lt;br /&gt;
  d = f &amp;gt; g ? 0 : 1;&lt;br /&gt;
 &lt;br /&gt;
d. Function calls should be nestled against the parentheses, the parentheses should crowd the arguments, and one space after commas:&lt;br /&gt;
 &lt;br /&gt;
  right: do_foo(bar, baz);&lt;br /&gt;
  wrong: do_foo ( bar,baz );&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
e. All &#039;&#039;if&#039;&#039;, &#039;&#039;for&#039;&#039;, &#039;&#039;while&#039;&#039;, etc. expressions should be separated by a space from the parenthesis, one space after the semicolons:&lt;br /&gt;
 &lt;br /&gt;
  for (a = 0; a &amp;lt; b; a++)&lt;br /&gt;
  if (a &amp;lt; b || a == c)&lt;br /&gt;
  while (1)&lt;br /&gt;
 &lt;br /&gt;
f. Opening braces should be on the same line as the line that introduces the block, except for function calls.  Closing braces get their own line, except for &amp;quot;else&amp;quot;.&lt;br /&gt;
 &lt;br /&gt;
  int foo(void)&lt;br /&gt;
  {&lt;br /&gt;
          if (bar) {&lt;br /&gt;
                  this();&lt;br /&gt;
                  that();&lt;br /&gt;
          } else if (baz) {&lt;br /&gt;
                  ;&lt;br /&gt;
          } else {&lt;br /&gt;
                  ;&lt;br /&gt;
          }&lt;br /&gt;
          do {&lt;br /&gt;
                  cow();&lt;br /&gt;
          } while (0);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
g. If one part of a compound &#039;&#039;if&#039;&#039; block has braces, all should.&lt;br /&gt;
&lt;br /&gt;
  right:&lt;br /&gt;
 &lt;br /&gt;
  if (foo) {&lt;br /&gt;
          bar();&lt;br /&gt;
          baz();&lt;br /&gt;
  } else {&lt;br /&gt;
          salmon();&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
  wrong:&lt;br /&gt;
 &lt;br /&gt;
  if (foo) {&lt;br /&gt;
          bar();&lt;br /&gt;
          baz();&lt;br /&gt;
  } else&lt;br /&gt;
          moose();&lt;br /&gt;
&lt;br /&gt;
h. When you make a macro, protect those who might call it by using do/while and parentheses; line up your backslashes:&lt;br /&gt;
&lt;br /&gt;
  right:&lt;br /&gt;
 &lt;br /&gt;
  #define DO_STUFF(a)                              \&lt;br /&gt;
  do {                                             \&lt;br /&gt;
          int b = (a) + MAGIC;                     \&lt;br /&gt;
          do_other_stuff(b);                       \&lt;br /&gt;
  } while (0)&lt;br /&gt;
 &lt;br /&gt;
  wrong:&lt;br /&gt;
 &lt;br /&gt;
  #define DO_STUFF(a) \&lt;br /&gt;
  { \&lt;br /&gt;
          int b = a + MAGIC; \&lt;br /&gt;
          do_other_stuff(b); \&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
i. If you nest preprocessor commands, use spaces to visually delineate:&lt;br /&gt;
&lt;br /&gt;
  #ifdef __KERNEL__&lt;br /&gt;
  # include &amp;lt;goose&amp;gt;&lt;br /&gt;
  # define MOOSE steak&lt;br /&gt;
  #else&lt;br /&gt;
  # include &amp;lt;mutton&amp;gt;&lt;br /&gt;
  # define MOOSE prancing&lt;br /&gt;
  #endif&lt;br /&gt;
&lt;br /&gt;
j.  For very long #ifdefs include the conditional with each #endif to make it readable:&lt;br /&gt;
&lt;br /&gt;
  #ifdef __KERNEL__&lt;br /&gt;
  # if LINUX_VERSION_CODE &amp;gt;= KERNEL_VERSION(2,5,0)&lt;br /&gt;
  /* lots&lt;br /&gt;
     of&lt;br /&gt;
     stuff */&lt;br /&gt;
  # endif /* KERNEL_VERSION(2,5,0) */&lt;br /&gt;
  #else /* !__KERNEL__ */&lt;br /&gt;
  # if HAVE_FEATURE&lt;br /&gt;
  /* more&lt;br /&gt;
   * stuff */&lt;br /&gt;
  # endif&lt;br /&gt;
  #endif /* __KERNEL__ */ &lt;br /&gt;
&lt;br /&gt;
k. Comments should have the leading &#039;&#039;&#039;/*&#039;&#039;&#039; on the same line as the comment, and the trailing &#039;&#039;&#039;*/&#039;&#039;&#039; at the end of the last comment line.  Intermediate lines should start with a &#039;&#039;&#039;*&#039;&#039;&#039; aligned with the first line&#039;s &#039;&#039;&#039;*&#039;&#039;&#039;:&lt;br /&gt;
  /* This is a short comment */&lt;br /&gt;
 &lt;br /&gt;
  /* This is a multi-line comment.  I wish the line would wrap already,&lt;br /&gt;
   * as I don&#039;t have much to write about. */&lt;br /&gt;
&lt;br /&gt;
l. Function declarations absolutely should NOT go into .c files, unless they are forward declarations for static functions that can&#039;t otherwise be moved before the caller.  Instead, the declaration should go into the most &amp;quot;local&amp;quot; header available (preferrably *_internal.h for a given piece of code).&lt;br /&gt;
&lt;br /&gt;
m. Structure and constant declarations should not be declared in multiple places.  Put the struct into the most &amp;quot;local&amp;quot; header possible.  If it is something that is passed over the wire it needs to go into lustre_idl.h, and needs to be correctly swabbed when the RPC message is unpacked.&lt;br /&gt;
&lt;br /&gt;
n. The types and printf/printk formats used by Lustre code are:&lt;br /&gt;
&lt;br /&gt;
   __u64                 LPU64/LPX64/LPD64 (unsigned, hex, signed)&lt;br /&gt;
   size_t                LPSZ (or cast to int and use %u / %d)&lt;br /&gt;
   __u32/int             %u/%x/%d (unsigned, hex, signed)&lt;br /&gt;
   (unsigned) long long  %llu/%llx/%lld&lt;br /&gt;
   loff_t                %lld after a cast to long long (unfortunately)&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
*&#039;&#039;&#039;[http://wiki.lustre.org/index.php?title=Front_Page FrontPage]&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Scjody</name></author>
	</entry>
	<entry>
		<id>http://wiki.old.lustre.org/index.php?title=Lustre_Documentation&amp;diff=1733</id>
		<title>Lustre Documentation</title>
		<link rel="alternate" type="text/html" href="http://wiki.old.lustre.org/index.php?title=Lustre_Documentation&amp;diff=1733"/>
		<updated>2007-05-01T23:39:45Z</updated>

		<summary type="html">&lt;p&gt;Scjody: Fix PDF links&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Lustre Documentation =&lt;br /&gt;
== Lustre Manual ==&lt;br /&gt;
&lt;br /&gt;
=== Lustre 1.6 ===&lt;br /&gt;
 * &#039;&#039;&#039;Lustre Manual - HTML &#039;&#039;&#039;[https://mail.clusterfs.com/wikis/attachments/LustreManual1_6.html Lustre 1.6 manual V1.1]&lt;br /&gt;
 * &#039;&#039;&#039;Lustre Manual - PDF&#039;&#039;&#039;&lt;br /&gt;
  . &#039;&#039;&#039;&#039;&#039;&#039;[https://mail.clusterfs.com/wikis/attachments/LustreManual1_6.pdf Lustre 1.6 manual V1.1(A4)]&lt;br /&gt;
  . &#039;&#039;&#039;&#039;&#039;&#039;[https://mail.clusterfs.com/wikis/attachments/LustreManual-letter1_6.pdf Lustre 1.6 manual V1.1(Letter)]&lt;br /&gt;
 * &#039;&#039;&#039;Lustre Manual Changelog &#039;&#039;&#039;[https://mail.clusterfs.com/wikis/attachments/manual-changelog1_6.html Lustre Manual-Change log]&lt;br /&gt;
 * &#039;&#039;&#039;[http://wiki.lustre.org/index.php?title=Mount_Conf MountConf wiki]&#039;&#039;&#039; - A quick reference for those familiar with older versions of Lustre&lt;br /&gt;
&lt;br /&gt;
=== Lustre 1.4.8 ===&lt;br /&gt;
 * &#039;&#039;&#039;Lustre Manual - HTML &#039;&#039;&#039;[https://mail.clusterfs.com/wikis/attachments/LustreManual.html Lustre 1.4.8 manual V1.37]&lt;br /&gt;
 * &#039;&#039;&#039;Lustre Manual - PDF&#039;&#039;&#039;&lt;br /&gt;
  . &#039;&#039;&#039;&#039;&#039;&#039;[https://mail.clusterfs.com/wikis/attachments/LustreManual37.pdf Lustre 1.4.8 manual V1.37(A4)]&lt;br /&gt;
 * &#039;&#039;&#039;Lustre Manual Changelog &#039;&#039;&#039;[https://mail.clusterfs.com/wikis/attachments/manual-changelog.html Lustre Manual-Change log]&lt;br /&gt;
&lt;br /&gt;
== Interim Lustre 1.8 Documentation ==&lt;br /&gt;
 * &#039;&#039;&#039;[http://wiki.lustre.org/index.php?title=Kerb_Lustre KerbLustre]&#039;&#039;&#039; - The 1.8 interim Lustre documentation (Kerberos....)&lt;br /&gt;
&lt;br /&gt;
== Older Documentation ==&lt;br /&gt;
This documentation will be incorporated into the manual. Until that is done you may find useful bits and pieces here.&lt;br /&gt;
&lt;br /&gt;
 * &#039;&#039;&#039;Frequently Asked Questions&#039;&#039;&#039;&lt;br /&gt;
  . [http://www.clusterfs.com/faq.html Lustre Faq]&lt;br /&gt;
 * &#039;&#039;&#039;Knowledge Base&#039;&#039;&#039;&lt;br /&gt;
  . [http://bugzilla.lustre.org/showdependencytree.cgi?id=2374 Lustre Knowledge Base] - questions and answers&lt;br /&gt;
 * &#039;&#039;&#039;Configuration&#039;&#039;&#039;&lt;br /&gt;
  * &#039;&#039;&#039;[http://wiki.lustre.org/index.php?title=Lustre_Howto LustreHowto]&#039;&#039;&#039; - A guide to getting Lustre cluster started.&lt;br /&gt;
  * &#039;&#039;&#039;[http://wiki.lustre.org/index.php?title=Lustre_LDAP LustreLDAP]&#039;&#039;&#039; - A guide for using LDAP with Lustre.&lt;br /&gt;
  * &#039;&#039;&#039;[http://wiki.lustre.org/index.php?title=Lustre_Wizard LustreWizard]&#039;&#039;&#039; - The &#039;&#039;Lustre wizard&#039;&#039; or &#039;&#039;lwizard&#039;&#039; is a utility that helps with creation of configuration file for a cluster through asking some simple questions.&lt;br /&gt;
  * &#039;&#039;&#039;[http://wiki.lustre.org/index.php?title=Lustre_Failover LustreFailover]&#039;&#039;&#039; - Managing failover&lt;br /&gt;
  * &#039;&#039;&#039;[http://wiki.lustre.org/index.php?title=Filesystem_Backup FilesystemBackup]&#039;&#039;&#039; - How to back up a Lustre filesystem&lt;br /&gt;
  * &#039;&#039;&#039;[http://wiki.lustre.org/index.php?title=Fsck_Suppor FsckSupport]&#039;&#039;&#039; - The lustre fsck tool and Lustre-patched e2fsck (extents, large inode/EA support)&lt;br /&gt;
  * &#039;&#039;&#039;Filesystem Tuning&#039;&#039;&#039;&lt;br /&gt;
   * [https://mail.clusterfs.com/wikis/attachments/LustreManual.html#Chapter_III-2._LustreProc LustreProc] - A guide on the &#039;&#039;&#039;proc&#039;&#039;&#039; tunables parameters for Lustre and their usage. It describes several of the &#039;&#039;proc&#039;&#039; tunables including those that effect the client&#039;s RPC behaviour and prepare for a substantial reorganization of proc entries.&lt;br /&gt;
   * &#039;&#039;&#039;[https://mail.clusterfs.com/wikis/attachments/LustreManual.html#3.2_DDN_Tuning LustreDdnTuning]&#039;&#039;&#039; - A brief guide on tuning DDN S2A 8500 (and maybe 9500) storage optimally for Lustre&lt;/div&gt;</summary>
		<author><name>Scjody</name></author>
	</entry>
</feed>