<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>http://wiki.lustre.org/index.php?action=history&amp;feed=atom&amp;title=IOR</id>
	<title>IOR - Revision history</title>
	<link rel="self" type="application/atom+xml" href="http://wiki.lustre.org/index.php?action=history&amp;feed=atom&amp;title=IOR"/>
	<link rel="alternate" type="text/html" href="http://wiki.lustre.org/index.php?title=IOR&amp;action=history"/>
	<updated>2026-08-17T06:50:06Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.39.7</generator>
	<entry>
		<id>http://wiki.lustre.org/index.php?title=IOR&amp;diff=5316&amp;oldid=prev</id>
		<title>Elliswilson at 15:18, 13 October 2025</title>
		<link rel="alternate" type="text/html" href="http://wiki.lustre.org/index.php?title=IOR&amp;diff=5316&amp;oldid=prev"/>
		<updated>2025-10-13T15:18:00Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;a href=&quot;http://wiki.lustre.org/index.php?title=IOR&amp;amp;diff=5316&amp;amp;oldid=3525&quot;&gt;Show changes&lt;/a&gt;</summary>
		<author><name>Elliswilson</name></author>
	</entry>
	<entry>
		<id>http://wiki.lustre.org/index.php?title=IOR&amp;diff=3525&amp;oldid=prev</id>
		<title>Adilger: /* References */ update IOR URL, add IO-500 URL</title>
		<link rel="alternate" type="text/html" href="http://wiki.lustre.org/index.php?title=IOR&amp;diff=3525&amp;oldid=prev"/>
		<updated>2019-05-17T05:31:46Z</updated>

		<summary type="html">&lt;p&gt;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;References: &lt;/span&gt; update IOR URL, add IO-500 URL&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 22:31, 16 May 2019&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l377&quot;&gt;Line 377:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 377:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== References ==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== References ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* https://github.com/&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;LLNL&lt;/del&gt;/ior&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* https://github.com/&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;hpc&lt;/ins&gt;/ior&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;* https://github.com/VI4IO/io-500-dev&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* https://www.open-mpi.org/faq&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* https://www.open-mpi.org/faq&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Category:Benchmarking]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Category:Benchmarking]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key wiki_lustre_org:diff::1.12:old-3524:rev-3525 --&gt;
&lt;/table&gt;</summary>
		<author><name>Adilger</name></author>
	</entry>
	<entry>
		<id>http://wiki.lustre.org/index.php?title=IOR&amp;diff=3524&amp;oldid=prev</id>
		<title>Adilger: /* Preparation */ update IOR GitHub URL to modern repo</title>
		<link rel="alternate" type="text/html" href="http://wiki.lustre.org/index.php?title=IOR&amp;diff=3524&amp;oldid=prev"/>
		<updated>2019-05-17T05:30:05Z</updated>

		<summary type="html">&lt;p&gt;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Preparation: &lt;/span&gt; update IOR GitHub URL to modern repo&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 22:30, 16 May 2019&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l29&quot;&gt;Line 29:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 29:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;li&amp;gt;Download the &amp;lt;code&amp;gt;IOR&amp;lt;/code&amp;gt; source:&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;li&amp;gt;Download the &amp;lt;code&amp;gt;IOR&amp;lt;/code&amp;gt; source:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;pre style=&amp;quot;overflow-x:auto;&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;pre style=&amp;quot;overflow-x:auto;&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;git clone https://github.com/&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;LLNL&lt;/del&gt;/ior&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;.git&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;git clone https://github.com/&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;hpc&lt;/ins&gt;/ior&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/li&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/li&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key wiki_lustre_org:diff::1.12:old-2946:rev-3524 --&gt;
&lt;/table&gt;</summary>
		<author><name>Adilger</name></author>
	</entry>
	<entry>
		<id>http://wiki.lustre.org/index.php?title=IOR&amp;diff=2946&amp;oldid=prev</id>
		<title>Malcolm: /* Download and Compile MDTest */</title>
		<link rel="alternate" type="text/html" href="http://wiki.lustre.org/index.php?title=IOR&amp;diff=2946&amp;oldid=prev"/>
		<updated>2017-10-25T06:25:19Z</updated>

		<summary type="html">&lt;p&gt;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Download and Compile MDTest&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 23:25, 24 October 2017&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l17&quot;&gt;Line 17:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 17:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The remainder of this document will use OpenMPI for the examples. Integration with job schedulers is not discussed – examples will call the &amp;lt;code&amp;gt;mpirun&amp;lt;/code&amp;gt; command directly.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The remainder of this document will use OpenMPI for the examples. Integration with job schedulers is not discussed – examples will call the &amp;lt;code&amp;gt;mpirun&amp;lt;/code&amp;gt; command directly.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== Download and Compile &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;MDTest &lt;/del&gt;===&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== Download and Compile &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;IOR &lt;/ins&gt;===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;To compile the &amp;lt;code&amp;gt;ior&amp;lt;/code&amp;gt; benchmark, run the following steps on a suitable machine:&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;To compile the &amp;lt;code&amp;gt;ior&amp;lt;/code&amp;gt; benchmark, run the following steps on a suitable machine:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key wiki_lustre_org:diff::1.12:old-2500:rev-2946 --&gt;
&lt;/table&gt;</summary>
		<author><name>Malcolm</name></author>
	</entry>
	<entry>
		<id>http://wiki.lustre.org/index.php?title=IOR&amp;diff=2500&amp;oldid=prev</id>
		<title>Malcolm: Created page with &quot;== Description ==  IOR (Interleaved or Random) is a commonly used file system benchmarking application particularly well-suited for evaluating the performance of parallel file...&quot;</title>
		<link rel="alternate" type="text/html" href="http://wiki.lustre.org/index.php?title=IOR&amp;diff=2500&amp;oldid=prev"/>
		<updated>2017-06-29T04:37:33Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;== Description ==  IOR (Interleaved or Random) is a commonly used file system benchmarking application particularly well-suited for evaluating the performance of parallel file...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== Description ==&lt;br /&gt;
&lt;br /&gt;
IOR (Interleaved or Random) is a commonly used file system benchmarking application particularly well-suited for evaluating the performance of parallel file systems. The software is most commonly distributed in source code form and normally needs to be compiled on the target platform.&lt;br /&gt;
&lt;br /&gt;
IOR is not a Lustre-specific benchmark and can be run on any POSIX-compliant file system, but it does require a fully installed and configured file system implementation in order to run. For Lustre, this means the MGS, MDS and OSS services must be installed, configured and running, and that there is a population of Lustre client nodes running with the Lustre file system mounted.&lt;br /&gt;
&lt;br /&gt;
== Purpose ==&lt;br /&gt;
&lt;br /&gt;
IOR can be used for testing performance of parallel file systems using various interfaces and access patterns. IOR uses MPI for process synchronisation – typically there are several IOR processes running in parallel across several nodes in an HPC cluster. As a user-space benchmarking application it is suitable for comparing the performance of different file systems. Typically one IOR process is run on each participating client node mounting the target file system but this is completely configurable. &lt;br /&gt;
&lt;br /&gt;
== Preparation ==&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;ior&amp;lt;/code&amp;gt; application is distributed as source code and must be compiled for use on the target environment. The software is hosted as a project on GitHub:&lt;br /&gt;
&lt;br /&gt;
https://github.com/LLNL/ior&lt;br /&gt;
&lt;br /&gt;
The remainder of this document will use OpenMPI for the examples. Integration with job schedulers is not discussed – examples will call the &amp;lt;code&amp;gt;mpirun&amp;lt;/code&amp;gt; command directly.&lt;br /&gt;
&lt;br /&gt;
=== Download and Compile MDTest ===&lt;br /&gt;
&lt;br /&gt;
To compile the &amp;lt;code&amp;gt;ior&amp;lt;/code&amp;gt; benchmark, run the following steps on a suitable machine:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Install the pre-requisite development tools. On RHEL or CentOS systems, this can be accomplished by running the following command:&lt;br /&gt;
&amp;lt;pre style=&amp;quot;overflow-x:auto;&amp;quot;&amp;gt;&lt;br /&gt;
sudo yum -y install openmpi-devel git automake&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Download the &amp;lt;code&amp;gt;IOR&amp;lt;/code&amp;gt; source:&lt;br /&gt;
&amp;lt;pre style=&amp;quot;overflow-x:auto;&amp;quot;&amp;gt;&lt;br /&gt;
git clone https://github.com/LLNL/ior.git&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Compile the software:&lt;br /&gt;
&amp;lt;pre style=&amp;quot;overflow-x:auto;&amp;quot;&amp;gt;&lt;br /&gt;
cd ior&lt;br /&gt;
module load mpi/openmpi-x86_64&lt;br /&gt;
./bootstrap&lt;br /&gt;
./configure [--with-lustre]&lt;br /&gt;
make clean &amp;amp;&amp;amp; make&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Quickly verify that the program runs:&lt;br /&gt;
&amp;lt;pre style=&amp;quot;overflow-x:auto;&amp;quot;&amp;gt;&lt;br /&gt;
./src/ior&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
For example:&lt;br /&gt;
&amp;lt;pre style=&amp;quot;overflow-x:auto;&amp;quot;&amp;gt;&lt;br /&gt;
[bench@ct73-c1 ior]$ ./src/ior &lt;br /&gt;
IOR-3.0.1: MPI Coordinated Test of Parallel I/O&lt;br /&gt;
&lt;br /&gt;
Began: Wed Jun 28 23:37:00 2017&lt;br /&gt;
Command line used: ./src/ior&lt;br /&gt;
Machine: Linux ct73-c1&lt;br /&gt;
&lt;br /&gt;
Test 0 started: Wed Jun 28 23:37:00 2017&lt;br /&gt;
Summary:&lt;br /&gt;
	api                = POSIX&lt;br /&gt;
	test filename      = testFile&lt;br /&gt;
	access             = single-shared-file&lt;br /&gt;
	ordering in a file = sequential offsets&lt;br /&gt;
	ordering inter file= no tasks offsets&lt;br /&gt;
	clients            = 1 (1 per node)&lt;br /&gt;
	repetitions        = 1&lt;br /&gt;
	xfersize           = 262144 bytes&lt;br /&gt;
	blocksize          = 1 MiB&lt;br /&gt;
	aggregate filesize = 1 MiB&lt;br /&gt;
&lt;br /&gt;
access    bw(MiB/s)  block(KiB) xfer(KiB)  open(s)    wr/rd(s)   close(s)   total(s)   iter&lt;br /&gt;
------    ---------  ---------- ---------  --------   --------   --------   --------   ----&lt;br /&gt;
write     1072.96    1024.00    256.00     0.000022   0.000905   0.000005   0.000932   0   &lt;br /&gt;
read      266.31     1024.00    256.00     0.000005   0.003745   0.000004   0.003755   0   &lt;br /&gt;
remove    -          -          -          -          -          -          0.000280   0   &lt;br /&gt;
&lt;br /&gt;
Max Write: 1072.96 MiB/sec (1125.08 MB/sec)&lt;br /&gt;
Max Read:  266.31 MiB/sec (279.25 MB/sec)&lt;br /&gt;
&lt;br /&gt;
Summary of all tests:&lt;br /&gt;
Operation   Max(MiB)   Min(MiB)  Mean(MiB)     StdDev    Mean(s) Test# #Tasks tPN reps fPP reord reordoff reordrand seed segcnt blksiz xsize aggsize API RefNum&lt;br /&gt;
write        1072.96    1072.96    1072.96       0.00    0.00093 0 1 1 1 0 0 1 0 0 1 1048576 262144 1048576 POSIX 0&lt;br /&gt;
read          266.31     266.31     266.31       0.00    0.00375 0 1 1 1 0 0 1 0 0 1 1048576 262144 1048576 POSIX 0&lt;br /&gt;
&lt;br /&gt;
Finished: Wed Jun 28 23:37:00 2017&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Copy the &amp;lt;code&amp;gt;ior&amp;lt;/code&amp;gt; command onto all of the Lustre client nodes that will be used to run the benchmark. Alternatively, copy onto the Lustre file system itself so that the application is available on all of the nodes automatically. For example:&lt;br /&gt;
&amp;lt;pre style=&amp;quot;overflow-x:auto&amp;quot;&amp;gt;&lt;br /&gt;
sudo mkdir -p /lustre/demo/bin&lt;br /&gt;
sudo cp ./src/ior /lustre/demo/bin/.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Note:&amp;#039;&amp;#039;&amp;#039; There is currently a bug in some versions of the &amp;lt;code&amp;gt;libfabric&amp;lt;/code&amp;gt; library, notably version 1.3.0, that can cause a delay in starting MPI applications. When this occurs the following warning will appear in the command output:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;overflow-x:auto;&amp;quot;&amp;gt;&lt;br /&gt;
hfi_wait_for_device: The /dev/hfi1_0 device failed to appear after 15.0 seconds: Connection timed out&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This issue affects RHEL and CentOS 7.3, and is resolved in RHEL / CentOS 7.4+ and the upstream project. Details can be found here:&lt;br /&gt;
&lt;br /&gt;
https://bugzilla.redhat.com/show_bug.cgi?id=1408316&lt;br /&gt;
&lt;br /&gt;
=== Prepare the run-time environment ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Create a user account from which to run the application, if a suitable account does not already exist. The account must be propagated across all of the Lustre client nodes that will participate in the benchmark, as well as the MDS servers for the file system. On the servers, it is recommended that the account is disabled in order to prevent users from logging into those machines.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Some MPI implementations rely upon passphrase-less SSH keys. This will enable the &amp;lt;code&amp;gt;mpirun&amp;lt;/code&amp;gt; command to launch processes on each of the client nodes that will run the benchmark. To create a key, login as the benchmark user to one of the nodes and run the &amp;lt;code&amp;gt;ssh-keygen&amp;lt;/code&amp;gt; command, supplying an empty passphrase. For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;overflow-x:auto;&amp;quot;&amp;gt;&lt;br /&gt;
[mjcowe@ct7-c1 ~]$ ssh-keygen -t rsa -N &amp;quot;&amp;quot; -f $HOME/.ssh/id_rsa&lt;br /&gt;
Generating public/private rsa key pair.&lt;br /&gt;
Created directory &amp;#039;/home/mjcowe/.ssh&amp;#039;.&lt;br /&gt;
Your identification has been saved in /home/mjcowe/.ssh/id_rsa.&lt;br /&gt;
Your public key has been saved in /home/mjcowe/.ssh/id_rsa.pub.&lt;br /&gt;
The key fingerprint is:&lt;br /&gt;
e4:b1:10:a2:7f:e8:b1:74:f3:c3:24:76:46:3d:4d:91 mjcowe@ct7-c1&lt;br /&gt;
The key&amp;#039;s randomart image is:&lt;br /&gt;
+--[ RSA 2048]----+&lt;br /&gt;
|    . .     oo   |&lt;br /&gt;
|   . . . . oE    |&lt;br /&gt;
|  .   . + o .    |&lt;br /&gt;
|   . . = o .     |&lt;br /&gt;
|    = * S        |&lt;br /&gt;
|   o * O         |&lt;br /&gt;
|    o   +        |&lt;br /&gt;
|         .       |&lt;br /&gt;
|                 |&lt;br /&gt;
+-----------------+&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Copy the public key into the &amp;lt;code&amp;gt;$HOME/.ssh/authorized_keys&amp;lt;/code&amp;gt; file for the account.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If the user account is not hosted on a shared file system (e.g. a Lustre filesystem), then copy the public and private keys that were generated into the &amp;lt;code&amp;gt;$HOME/.ssh&amp;lt;/code&amp;gt; directory of each of the Lustre client nodes that will be used in the benchmark. Normally, user accounts are hosted on a shared resource, making this step unnecessary.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Consider relaxing the &amp;lt;code&amp;gt;StrictHostKeyChecking&amp;lt;/code&amp;gt; SSH option so that host entries are automatically added into &amp;lt;code&amp;gt;$HOME/.ssh/known_hosts&amp;lt;/code&amp;gt; rather than prompting the user to confirm the connection. When running MPI programs across many nodes, this can save a good deal of inconvenience. If the account home directory is not on a shared storage,  all nodes will need to be updated. &lt;br /&gt;
&amp;lt;pre style=&amp;quot;overflow-x:auto;&amp;quot;&amp;gt;&lt;br /&gt;
cat &amp;gt;&amp;gt;$HOME/.ssh/config &amp;lt;&amp;lt;\__EOF&lt;br /&gt;
Host *&lt;br /&gt;
  StrictHostKeyChecking no&lt;br /&gt;
__EOF&lt;br /&gt;
chmod 0600 $HOME/.ssh/config&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Install the MPI runtime onto all Lustre client nodes:&lt;br /&gt;
&amp;lt;pre style=&amp;quot;overflow-x:auto;&amp;quot;&amp;gt;&lt;br /&gt;
sudo yum -y install openmpi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Append the following lines to &amp;lt;code&amp;gt;$HOME/.bashrc&amp;lt;/code&amp;gt; (assuming BASH is the login shell) on the account running the benchmark:&lt;br /&gt;
&amp;lt;pre style=&amp;quot;overflow-x:auto&amp;quot;&amp;gt;&lt;br /&gt;
module purge&lt;br /&gt;
module load mpi/openmpi-x86_64&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This ensures that the Open MPI library path and binary path are added to the user environment every time the user logs in (and every time &amp;lt;code&amp;gt;mpirun&amp;lt;/code&amp;gt; is invoked across multiple nodes). The &amp;lt;code&amp;gt;.bash_profile&amp;lt;/code&amp;gt; file is not read when &amp;lt;code&amp;gt;mpirun&amp;lt;/code&amp;gt; starts processes on remote nodes, which is why it is not chosen in this case.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Benchmark Execution ==&lt;br /&gt;
&lt;br /&gt;
=== Setup ===&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Login to one of the compute nodes as the benchmark user&lt;br /&gt;
&amp;lt;li&amp;gt;Create a host file for the &amp;lt;code&amp;gt;mpirun&amp;lt;/code&amp;gt; command, containing the list of Lustre clients that will be used for the benchmark. Each line in the file represents a machine and the number of slots (usually equal to the number of CPU cores). For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;overflow-x:auto&amp;quot;&amp;gt;&lt;br /&gt;
for i in `seq -f &amp;quot;%03g&amp;quot; 1 32`; do&lt;br /&gt;
  echo &amp;quot;n&amp;quot;$i&amp;quot; slots=16&amp;quot;&lt;br /&gt;
done &amp;gt; $HOME/hfile&lt;br /&gt;
  &lt;br /&gt;
# Result:&lt;br /&gt;
n001 slots=16&lt;br /&gt;
n002 slots=16&lt;br /&gt;
n003 slots=16&lt;br /&gt;
n004 slots=16&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The first column of the host file contains the name of the nodes. This can also be an IP address if the &amp;lt;code&amp;gt;/etc/hosts&amp;lt;/code&amp;gt; file or DNS is not set up.&lt;br /&gt;
&amp;lt;li&amp;gt;The second column is used to represent the number of CPU cores.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Run a quick test using &amp;lt;code&amp;gt;mpirun&amp;lt;/code&amp;gt; to launch the benchmark and verify that the environment is set up correctly. For example:&lt;br /&gt;
&amp;lt;pre style=&amp;quot;overflow-x:auto&amp;quot;&amp;gt;&lt;br /&gt;
mpirun --hostfile $HOME/hfile --map-by node -np `cat $HOME/hfile|wc -l` hostname&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This should return the hostnames of all the machines that are in the test environment. The results are returned unsorted, in order of completion.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Note:&amp;#039;&amp;#039;&amp;#039; If the &amp;lt;code&amp;gt;--map-by node&amp;lt;/code&amp;gt; does not work, and the output has only one or a very small number of unique hostnames repeated in the output, then set &amp;lt;code&amp;gt;slots=1&amp;lt;/code&amp;gt; for each host in the host file. Otherwise, &amp;lt;code&amp;gt;mpirun&amp;lt;/code&amp;gt; will fill up the slots on the first node before launching processes on subsequent nodes.&lt;br /&gt;
&lt;br /&gt;
This may be desirable for multi-process tests but not for the single task per client test. Do not set the slot count higher than the number of cores present. If over-subscription is required, set the -np flag to greater than the number of physical cores. This informs OpenMPI that the task will be oversubscribed and will run in a mode that yields the processor to peers. &lt;br /&gt;
&lt;br /&gt;
Refer to: [https://www.open-mpi.org/faq/?category=all#oversubscribing OpenMPI FAQ -- Oversubscribing Nodes], and also the [[#Notes_on_OpenMPI|notes on OpenMPI]] at the end of this document.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example: IOR Read / Write Test, Single File, Multiple Clients ===&lt;br /&gt;
&lt;br /&gt;
The following annotated script demonstrates how to configure an IOR benchmark for a single, shared file, test:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;overflow-x:auto&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
module purge&lt;br /&gt;
module load mpi/openmpi-x86_64&lt;br /&gt;
 &lt;br /&gt;
IOREXE=&amp;quot;/lustre/demo/bin/ior&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Node count -- not very accurate&lt;br /&gt;
NCT=`grep -v ^# hfile |wc -l`&lt;br /&gt;
 &lt;br /&gt;
# Date Stamp for benchmark&lt;br /&gt;
DS=`date +&amp;quot;%F_%H:%M:%S&amp;quot;`&lt;br /&gt;
# IOR will be run in a loop, doubling the number of processes per client node&lt;br /&gt;
# with every iteration from $SEQ -&amp;gt; $MAXPROCS. If SEQ=1 and MAXPROCS=8, then the&lt;br /&gt;
# iterations will be 1, 2, 4, 8 processes per node.&lt;br /&gt;
# SEQ and MAXPROCS should be a power of 2 (including 2^0).&lt;br /&gt;
SEQ=1&lt;br /&gt;
MAXPROCS=8&lt;br /&gt;
 &lt;br /&gt;
# Overall data set size in GiB. Must be &amp;gt;=MAXPROCS. Should be a power of 2.&lt;br /&gt;
DATA_SIZE=8&lt;br /&gt;
  &lt;br /&gt;
BASE_DIR=/lustre/demo/iorbench&lt;br /&gt;
mkdir -p ${BASE_DIR}&lt;br /&gt;
 &lt;br /&gt;
while [ ${SEQ} -le ${MAXPROCS} ]; do&lt;br /&gt;
NPROC=`expr ${NCT} \* ${SEQ}`&lt;br /&gt;
# Pick a reasonable block size, bearing in mind the size of the target file system.&lt;br /&gt;
# Bear in mind that the overall data size will be block size * number of processes.&lt;br /&gt;
# Block size must be a multiple of transfer size (-t option in command line).&lt;br /&gt;
BSZ=`expr ${DATA_SIZE} / ${SEQ}`&amp;quot;g&amp;quot;&lt;br /&gt;
# Alternatively, set to a static value and let the data size increase.&lt;br /&gt;
# BSZ=&amp;quot;1g&amp;quot;&lt;br /&gt;
# BSZ=&amp;quot;${DATA_SIZE}&amp;quot;&lt;br /&gt;
mpirun -np ${NPROC} --map-by node -hostfile ./hfile \&lt;br /&gt;
  ${IOREXE} -v -w -r -i 4 \&lt;br /&gt;
  -o ${BASE_DIR}/ior-test.file \&lt;br /&gt;
  -t 1m -b ${BSZ} \&lt;br /&gt;
  -O &amp;quot;lustreStripeCount=-1&amp;quot; | tee ${HOME}/IOR-RW-Single_File-c_${NCT}-s_${SEQ}_${DS}&lt;br /&gt;
SEQ=`expr ${SEQ} \* 2`&lt;br /&gt;
done&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example: IOR Read/Write Test, Multiple Files per Process, Multiple Clients ===&lt;br /&gt;
&lt;br /&gt;
This script is similar to the previous example, but this time the &amp;lt;code&amp;gt;-F&amp;lt;/code&amp;gt; flag is used, informing IOR to create a unique file per process. Additionally, the Lustre stripe count is set to 1.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;overflow-x:auto&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
 &lt;br /&gt;
module purge&lt;br /&gt;
module load mpi/openmpi-x86_64&lt;br /&gt;
&lt;br /&gt;
IOREXE=&amp;quot;/lustre/demo/bin/ior&amp;quot;&lt;br /&gt;
&lt;br /&gt;
NCT=`grep -v ^# hfile |wc -l`&lt;br /&gt;
DS=`date +&amp;quot;%F_%H:%M:%S&amp;quot;`&lt;br /&gt;
SEQ=1&lt;br /&gt;
MAXPROCS=8&lt;br /&gt;
DATA_SIZE=8&lt;br /&gt;
BASE_DIR=/lustre/demo/iorbench&lt;br /&gt;
mkdir -p ${BASE_DIR}&lt;br /&gt;
&lt;br /&gt;
while [ ${SEQ} -le ${PROCS} ]; do&lt;br /&gt;
NPROC=`expr ${NCT} \* ${SEQ}`&lt;br /&gt;
BSZ=`expr ${DATA_SIZE} / ${SEQ}`&amp;quot;g&amp;quot;&lt;br /&gt;
# BSZ=&amp;quot;1g&amp;quot;&lt;br /&gt;
# BSZ=&amp;quot;${DATA_SIZE}&amp;quot;&lt;br /&gt;
mpirun -np ${NPROC} --map-by node -hostfile ./hfile \&lt;br /&gt;
  ${IOREXE} -v -w -r -i 4 -F \&lt;br /&gt;
  -o ${BASE_DIR}/test/ior-test.file \&lt;br /&gt;
  -t 1m -b ${BSZ} \&lt;br /&gt;
  -O &amp;quot;lustreStripeCount=1&amp;quot; | tee ${HOME}/IOR-RW-Multiple_Files-Common_Dir-c_${NCT}-s_${SEQ}_${DS}&lt;br /&gt;
SEQ=`expr ${SEQ} \* 2`&lt;br /&gt;
done&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Optionally, add the &amp;lt;code&amp;gt;-u&amp;lt;/code&amp;gt; flag to create a unique directory for each file created. The full file name paths for each process can also be specified by supplying a list of files delimited by &amp;lt;code&amp;gt;@&amp;lt;/code&amp;gt; to the &amp;lt;code&amp;gt;-o&amp;lt;/code&amp;gt; flag. This can be useful for DNE testing.&lt;br /&gt;
&lt;br /&gt;
=== Commonly Used Options ===&lt;br /&gt;
&lt;br /&gt;
{| border=1 cellpadding=5 style=&amp;quot;border-collapse: collapse; border: solid 1px #ccc;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;text-align: left; vertical-align: bottom; background-color: #eee;&amp;quot;&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Option&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; style=&amp;quot;width:50%&amp;quot; | Description&lt;br /&gt;
|- style=&amp;quot;text-align: left; vertical-align: top;&amp;quot;&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| &amp;lt;code&amp;gt;-w&amp;lt;/code&amp;gt;&lt;br /&gt;
| Write file&lt;br /&gt;
|- style=&amp;quot;text-align: left; vertical-align: top;&amp;quot;&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| &amp;lt;code&amp;gt;-r&amp;lt;/code&amp;gt;&lt;br /&gt;
| Read existing file – when combined with &amp;lt;code&amp;gt;-w&amp;lt;/code&amp;gt;, the write text executes first to create the file for the read test to use.&lt;br /&gt;
|- style=&amp;quot;text-align: left; vertical-align: top;&amp;quot;&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| &amp;lt;code&amp;gt;-o &amp;lt;file&amp;gt; [[@&amp;lt;file&amp;gt;] [@file] ...]&amp;lt;/code&amp;gt;&lt;br /&gt;
| The file [list] to use in the test. For multi-file (file-per-process) tests, the file name is a template for each file that will be created (file path will be appended with a unique number). When combined with the unique directory name option, each directory is numbered and the files created one per numbered directory. For example:&lt;br /&gt;
&amp;lt;pre style=&amp;quot;overflow-x:auto&amp;quot;&amp;gt;&lt;br /&gt;
-F -o /lustre/demo/test.dat &amp;amp;rarr; /lustre/demo/test.dat.{seq}&lt;br /&gt;
-F -u -o /lustre/scratch/test.dat &amp;amp;rarr; /lustre/scratch/{index}/test.dat.{seq}&lt;br /&gt;
-F -u -o /lustre/demo/test.dat0@/lustre/demo/test.dat1@/lustre/demo/test.dat2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|- style=&amp;quot;text-align: left; vertical-align: top;&amp;quot;&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| &amp;lt;code&amp;gt;-O &amp;quot;&amp;lt;directive&amp;gt;&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
| Comma-separated list of IOR directives to set various parameters. There are several Lustre-specific directives, for example:&lt;br /&gt;
; &amp;lt;code&amp;gt;lustreStripeCount=&amp;amp;lt;int&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: set the lustre stripe count for the test file(s) [default 0]&lt;br /&gt;
; &amp;lt;code&amp;gt;lustreStripeSize=&amp;amp;lt;int&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: set the lustre stripe size for the test file(s) [default 0]&lt;br /&gt;
; &amp;lt;code&amp;gt;lustreStartOST=&amp;amp;lt;int&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: set the starting OST for the test file(s) [default 0]&lt;br /&gt;
; &amp;lt;code&amp;gt;lustreIgnoreLocks=&amp;amp;lt;int&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
; disable lustre range locking [default 0]&lt;br /&gt;
|- style=&amp;quot;text-align: left; vertical-align: top;&amp;quot;&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| &amp;lt;code&amp;gt;-t &amp;amp;lt;int&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
| Size of data transfer in bytes (e.g. 8, 4k, 2m, 1g). This is the equivalent of the RPC transaction size and should normally be set to &amp;lt;code&amp;gt;1m&amp;lt;/code&amp;gt; for Lustre.&lt;br /&gt;
|- style=&amp;quot;text-align: left; vertical-align: top;&amp;quot;&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| &amp;lt;code&amp;gt;-b &amp;amp;lt;int&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
| Size of data block in bytes (e.g. 8, 4k, 2m, 1g). This is the size of the block of data that each process will write and must be a multiple of the transfer size. Set it to a large number. For single file tests, multiply the block size by the number of tasks to get the file size. For multiple file tasks, each file will be &amp;lt;code&amp;gt;block size&amp;lt;/code&amp;gt; bytes. File system must have &amp;lt;code&amp;gt;block size * nprocs&amp;lt;/code&amp;gt; free space.&lt;br /&gt;
|- style=&amp;quot;text-align: left; vertical-align: top;&amp;quot;&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| &amp;lt;code&amp;gt;-i &amp;amp;lt;int&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
| The number of iterations to run.&lt;br /&gt;
|- style=&amp;quot;text-align: left; vertical-align: top;&amp;quot;&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| &amp;lt;code&amp;gt;-v[v[v] ...]&amp;lt;/code&amp;gt;&lt;br /&gt;
| Increase verbosity of output. Add more &amp;lt;code&amp;gt;-v&amp;lt;/code&amp;gt; flags to increase the level of detail.&lt;br /&gt;
|- style=&amp;quot;text-align: left; vertical-align: top;&amp;quot;&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| &amp;lt;code&amp;gt;-u&amp;lt;/code&amp;gt;&lt;br /&gt;
| When each process creates a separate file, use a unique directory name for each file-per-process&lt;br /&gt;
|- style=&amp;quot;text-align: left; vertical-align: top;&amp;quot;&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| &amp;lt;code&amp;gt;-C&amp;lt;/code&amp;gt;&lt;br /&gt;
| Re-order tasks: change the task ordering to &amp;lt;code&amp;gt;n+1&amp;lt;/code&amp;gt; ordering for read-back. May avoid the read cache effects on clients&lt;br /&gt;
|- style=&amp;quot;text-align: left; vertical-align: top;&amp;quot;&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| &amp;lt;code&amp;gt;-F&amp;lt;/code&amp;gt;&lt;br /&gt;
| Create a separate file in each process (often referred to as file-per-process)&lt;br /&gt;
|- style=&amp;quot;text-align: left; vertical-align: top;&amp;quot;&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| &amp;lt;code&amp;gt;-m&amp;lt;/code&amp;gt;&lt;br /&gt;
| Multi-file option: use the number of iterations (the &amp;lt;code&amp;gt;-i&amp;lt;/code&amp;gt; flag) for the count of the number of  files&lt;br /&gt;
|- style=&amp;quot;text-align: left; vertical-align: top;&amp;quot;&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| &amp;lt;code&amp;gt;-k&amp;lt;/code&amp;gt;&lt;br /&gt;
| Do not remove test file(s) on program exit&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Notes on OpenMPI ===&lt;br /&gt;
&lt;br /&gt;
When preparing the benchmark, pay careful attention to the distribution of processes across the nodes. &amp;lt;code&amp;gt;mpirun&amp;lt;/code&amp;gt; will, by default, fill the slots of one node before allocating processes to the next node in the list. i.e. all of the slots on the first node in the file will be consumed before allocating processes to the second node, then third node, and so on. If the number of slots requested is lower than the overall number of slots in the host file, then utlisation will not be evenly distributed, and some nodes may not be used at all.&lt;br /&gt;
&lt;br /&gt;
If the number of process is larger than the number of available slots, &amp;lt;code&amp;gt;mpirun&amp;lt;/code&amp;gt; will oversubscribe one or more nodes until all the processes have been launched. This can be exploited to create more even distribution of processes across nodes by setting the number of slots per host to 1. However, note that &amp;lt;code&amp;gt;mpirun&amp;lt;/code&amp;gt; will decide where the additional processes will run, which can lead to performance variance from run to run of a job.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;--map-by node&amp;lt;/code&amp;gt; option distributes processes evenly across the nodes, and does not try to consume all of the slots from one node before allocating processes to the next node in the list. For example, if there are 4 nodes, each with 16 slots (64 slots total), and a job is submitted that requires only 24 slots, then each node will be allocated 6 processes.&lt;br /&gt;
&lt;br /&gt;
Experiment with the options by using the &amp;lt;code&amp;gt;hostname&amp;lt;/code&amp;gt; command as the target application. For example:&lt;br /&gt;
&amp;lt;pre style=&amp;quot;overflow-x:auto&amp;quot;&amp;gt;&lt;br /&gt;
[mduser@ct7-c1 ~]$ cat $HOME/hfile &lt;br /&gt;
ct7-c1 slots=16&lt;br /&gt;
ct7-c2 slots=16&lt;br /&gt;
ct7-c3 slots=16&lt;br /&gt;
ct7-c4 slots=16&lt;br /&gt;
&lt;br /&gt;
# By default, mpirun will fill slots on one node before allocating slots from the next:&lt;br /&gt;
[mduser@ct7-c1 ~]$ mpirun --hostfile $HOME/hfile -np `cat $HOME/hfile|wc -l` hostname&lt;br /&gt;
ct7-c1&lt;br /&gt;
ct7-c1&lt;br /&gt;
ct7-c1&lt;br /&gt;
ct7-c1&lt;br /&gt;
&lt;br /&gt;
# The --map-by node option distributes the processes evenly:&lt;br /&gt;
[mduser@ct7-c1 ~]$ mpirun --hostfile $HOME/hfile --map-by node -np `cat $HOME/hfile|wc -l` hostname&lt;br /&gt;
ct7-c2&lt;br /&gt;
ct7-c1&lt;br /&gt;
ct7-c3&lt;br /&gt;
ct7-c4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;-np&amp;lt;/code&amp;gt; parameter is the total number of threads. If the host file has 16 nodes but the value of &amp;lt;code&amp;gt;-np&amp;lt;/code&amp;gt;is 1, then only one thread on one node is being used to complete the operations.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;mpirun(1)&amp;lt;/code&amp;gt; man page provides a comprehensive description of the available options.&lt;br /&gt;
&lt;br /&gt;
See also the [https://www.open-mpi.org/faq/ OpenMPI FAQ], and the section on [https://www.open-mpi.org/faq/?category=all#oversubscribing oversubscription].&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
* https://github.com/LLNL/ior&lt;br /&gt;
* https://www.open-mpi.org/faq&lt;br /&gt;
&lt;br /&gt;
[[Category:Benchmarking]]&lt;/div&gt;</summary>
		<author><name>Malcolm</name></author>
	</entry>
</feed>