<?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=Data_on_MDT_High_Level_Design</id>
	<title>Data on MDT High Level Design - Revision history</title>
	<link rel="self" type="application/atom+xml" href="http://wiki.lustre.org/index.php?action=history&amp;feed=atom&amp;title=Data_on_MDT_High_Level_Design"/>
	<link rel="alternate" type="text/html" href="http://wiki.lustre.org/index.php?title=Data_on_MDT_High_Level_Design&amp;action=history"/>
	<updated>2026-10-29T16:10:31Z</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=Data_on_MDT_High_Level_Design&amp;diff=5277&amp;oldid=prev</id>
		<title>Adilger: Move to common Architecture category</title>
		<link rel="alternate" type="text/html" href="http://wiki.lustre.org/index.php?title=Data_on_MDT_High_Level_Design&amp;diff=5277&amp;oldid=prev"/>
		<updated>2025-09-25T19:21:04Z</updated>

		<summary type="html">&lt;p&gt;Move to common Architecture category&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 12:21, 25 September 2025&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-l332&quot;&gt;Line 332:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 332:&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;* Output results&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;* Output results&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;[[Category:&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Design&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;[[Category:&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Architecture&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;[[Category:DoM]]&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:DoM]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key wiki_lustre_org:diff::1.12:old-3294:rev-5277 --&gt;
&lt;/table&gt;</summary>
		<author><name>Adilger</name></author>
	</entry>
	<entry>
		<id>http://wiki.lustre.org/index.php?title=Data_on_MDT_High_Level_Design&amp;diff=3294&amp;oldid=prev</id>
		<title>Adilger: /* Data Readahead logic */ fix image link</title>
		<link rel="alternate" type="text/html" href="http://wiki.lustre.org/index.php?title=Data_on_MDT_High_Level_Design&amp;diff=3294&amp;oldid=prev"/>
		<updated>2018-06-19T07:50:36Z</updated>

		<summary type="html">&lt;p&gt;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Data Readahead logic: &lt;/span&gt; fix image link&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 00:50, 19 June 2018&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-l240&quot;&gt;Line 240:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 240:&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;All readahead optimizations are based on fact that it is possible to return some data from small file in EA buffer which is quite big now.&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;All readahead optimizations are based on fact that it is possible to return some data from small file in EA buffer which is quite big now.&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;[[&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;media&lt;/del&gt;:dom_readahead.png]]&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;[[&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;File&lt;/ins&gt;:dom_readahead.png&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|800px&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;Typical case is `stat()`:&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;Typical case is `stat()`:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key wiki_lustre_org:diff::1.12:old-3292:rev-3294 --&gt;
&lt;/table&gt;</summary>
		<author><name>Adilger</name></author>
	</entry>
	<entry>
		<id>http://wiki.lustre.org/index.php?title=Data_on_MDT_High_Level_Design&amp;diff=3292&amp;oldid=prev</id>
		<title>Adilger: /* `OPEN` with `O_TRUNC` */ fix image link</title>
		<link rel="alternate" type="text/html" href="http://wiki.lustre.org/index.php?title=Data_on_MDT_High_Level_Design&amp;diff=3292&amp;oldid=prev"/>
		<updated>2018-06-19T07:48:02Z</updated>

		<summary type="html">&lt;p&gt;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;`OPEN` with `O_TRUNC`: &lt;/span&gt; fix image link&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 00:48, 19 June 2018&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-l228&quot;&gt;Line 228:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 228:&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;====`OPEN` with `O_TRUNC`====&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;====`OPEN` with `O_TRUNC`====&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;[[&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;media&lt;/del&gt;:dom_open_trunc.png]]&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;[[&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;File&lt;/ins&gt;:dom_open_trunc.png&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|800px&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;This optimization can truncate file during open if `O_TRUNC` flag is set.&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;This optimization can truncate file during open if `O_TRUNC` flag is set.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key wiki_lustre_org:diff::1.12:old-3290:rev-3292 --&gt;
&lt;/table&gt;</summary>
		<author><name>Adilger</name></author>
	</entry>
	<entry>
		<id>http://wiki.lustre.org/index.php?title=Data_on_MDT_High_Level_Design&amp;diff=3290&amp;oldid=prev</id>
		<title>Adilger: /* `OPEN` with `O_RDWR` */</title>
		<link rel="alternate" type="text/html" href="http://wiki.lustre.org/index.php?title=Data_on_MDT_High_Level_Design&amp;diff=3290&amp;oldid=prev"/>
		<updated>2018-06-19T07:46:51Z</updated>

		<summary type="html">&lt;p&gt;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;`OPEN` with `O_RDWR`&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 00:46, 19 June 2018&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-l218&quot;&gt;Line 218:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 218:&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;====`OPEN` with `O_RDWR`====&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;====`OPEN` with `O_RDWR`====&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;[[&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;media&lt;/del&gt;:dom_open_rw.png]]&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;[[&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;File&lt;/ins&gt;:dom_open_rw.png&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|800px&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;This optimization might help with partial page updates, when client have to read page first, adds new data in it and flush it back finally.&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;This optimization might help with partial page updates, when client have to read page first, adds new data in it and flush it back finally.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key wiki_lustre_org:diff::1.12:old-3286:rev-3290 --&gt;
&lt;/table&gt;</summary>
		<author><name>Adilger</name></author>
	</entry>
	<entry>
		<id>http://wiki.lustre.org/index.php?title=Data_on_MDT_High_Level_Design&amp;diff=3286&amp;oldid=prev</id>
		<title>Adilger: /* `MDS_GETATTR` logic */ fix image link</title>
		<link rel="alternate" type="text/html" href="http://wiki.lustre.org/index.php?title=Data_on_MDT_High_Level_Design&amp;diff=3286&amp;oldid=prev"/>
		<updated>2018-06-19T07:41:39Z</updated>

		<summary type="html">&lt;p&gt;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;`MDS_GETATTR` logic: &lt;/span&gt; fix image link&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 00:41, 19 June 2018&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-l209&quot;&gt;Line 209:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 209:&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;Optimization is to avoid glimpse requests by returning back `SIZE` and `BLOCKS` attributes.&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;Optimization is to avoid glimpse requests by returning back `SIZE` and `BLOCKS` attributes.&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;[[&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;media&lt;/del&gt;:dom_getattr.png]]&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;[[&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;File&lt;/ins&gt;:dom_getattr.png&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|800px&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;* `MDS_GETATTR` is enqueued as usual but with `PR LAYOUT` lock&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;* `MDS_GETATTR` is enqueued as usual but with `PR LAYOUT` lock&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key wiki_lustre_org:diff::1.12:old-3285:rev-3286 --&gt;
&lt;/table&gt;</summary>
		<author><name>Adilger</name></author>
	</entry>
	<entry>
		<id>http://wiki.lustre.org/index.php?title=Data_on_MDT_High_Level_Design&amp;diff=3285&amp;oldid=prev</id>
		<title>Adilger: /* DOM object layering */ fix image link</title>
		<link rel="alternate" type="text/html" href="http://wiki.lustre.org/index.php?title=Data_on_MDT_High_Level_Design&amp;diff=3285&amp;oldid=prev"/>
		<updated>2018-06-19T07:40:10Z</updated>

		<summary type="html">&lt;p&gt;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;DOM object layering: &lt;/span&gt; fix image link&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 00:40, 19 June 2018&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-l119&quot;&gt;Line 119:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 119:&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;DOM object is referred by single FID of MDS object and has no stripes, so it is presented by plain stack `ccc-&amp;gt;lov-&amp;gt;lovdom[mds_number]-&amp;gt;mdc` referred by FID of MDS object.  &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;DOM object is referred by single FID of MDS object and has no stripes, so it is presented by plain stack `ccc-&amp;gt;lov-&amp;gt;lovdom[mds_number]-&amp;gt;mdc` referred by FID of MDS object.  &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;[[&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Media&lt;/del&gt;:dom-object.png]]&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;[[&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;File&lt;/ins&gt;:dom-object.png&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|800px&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;Considering there is always single stripe, the lov+lovdom layers are trivial and have almost no extra functions/checks. All real code goes to the MDC layer.&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;Considering there is always single stripe, the lov+lovdom layers are trivial and have almost no extra functions/checks. All real code goes to the MDC layer.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key wiki_lustre_org:diff::1.12:old-3283:rev-3285 --&gt;
&lt;/table&gt;</summary>
		<author><name>Adilger</name></author>
	</entry>
	<entry>
		<id>http://wiki.lustre.org/index.php?title=Data_on_MDT_High_Level_Design&amp;diff=3283&amp;oldid=prev</id>
		<title>Adilger: /* DOM object */</title>
		<link rel="alternate" type="text/html" href="http://wiki.lustre.org/index.php?title=Data_on_MDT_High_Level_Design&amp;diff=3283&amp;oldid=prev"/>
		<updated>2018-06-19T07:30:42Z</updated>

		<summary type="html">&lt;p&gt;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;DOM object&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 00:30, 19 June 2018&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-l119&quot;&gt;Line 119:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 119:&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;DOM object is referred by single FID of MDS object and has no stripes, so it is presented by plain stack `ccc-&amp;gt;lov-&amp;gt;lovdom[mds_number]-&amp;gt;mdc` referred by FID of MDS object.  &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;DOM object is referred by single FID of MDS object and has no stripes, so it is presented by plain stack `ccc-&amp;gt;lov-&amp;gt;lovdom[mds_number]-&amp;gt;mdc` referred by FID of MDS object.  &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;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;====DOM &lt;/del&gt;object&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;====&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;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[Media:dom-&lt;/ins&gt;object&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;.png]]&lt;/ins&gt;&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;/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;Considering there is always single stripe, the lov+lovdom layers are trivial and have almost no extra functions/checks. All real code goes to the MDC layer.&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;Considering there is always single stripe, the lov+lovdom layers are trivial and have almost no extra functions/checks. All real code goes to the MDC layer.&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;!-- diff cache key wiki_lustre_org:diff::1.12:old-2695:rev-3283 --&gt;
&lt;/table&gt;</summary>
		<author><name>Adilger</name></author>
	</entry>
	<entry>
		<id>http://wiki.lustre.org/index.php?title=Data_on_MDT_High_Level_Design&amp;diff=2695&amp;oldid=prev</id>
		<title>Nrutman at 18:58, 25 August 2017</title>
		<link rel="alternate" type="text/html" href="http://wiki.lustre.org/index.php?title=Data_on_MDT_High_Level_Design&amp;diff=2695&amp;oldid=prev"/>
		<updated>2017-08-25T18:58:09Z</updated>

		<summary type="html">&lt;p&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 11:58, 25 August 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-l330&quot;&gt;Line 330:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 330:&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;* Run postmark over DoM striped directory and default one.&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;* Run postmark over DoM striped directory and default one.&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;* Output results&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;* Output results&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;&lt;/ins&gt;&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;[[Category:Design]]&lt;/ins&gt;&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;[[Category:DoM]]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key wiki_lustre_org:diff::1.12:old-2538:rev-2695 --&gt;
&lt;/table&gt;</summary>
		<author><name>Nrutman</name></author>
	</entry>
	<entry>
		<id>http://wiki.lustre.org/index.php?title=Data_on_MDT_High_Level_Design&amp;diff=2538&amp;oldid=prev</id>
		<title>Adilger: /* Introduction */ add formatting and titles</title>
		<link rel="alternate" type="text/html" href="http://wiki.lustre.org/index.php?title=Data_on_MDT_High_Level_Design&amp;diff=2538&amp;oldid=prev"/>
		<updated>2017-07-12T00:13:38Z</updated>

		<summary type="html">&lt;p&gt;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Introduction: &lt;/span&gt; add formatting and titles&lt;/span&gt;&lt;/p&gt;
&lt;a href=&quot;http://wiki.lustre.org/index.php?title=Data_on_MDT_High_Level_Design&amp;amp;diff=2538&amp;amp;oldid=2534&quot;&gt;Show changes&lt;/a&gt;</summary>
		<author><name>Adilger</name></author>
	</entry>
	<entry>
		<id>http://wiki.lustre.org/index.php?title=Data_on_MDT_High_Level_Design&amp;diff=2534&amp;oldid=prev</id>
		<title>Adilger: initial import from https://wiki.hpdd.intel.com/pages/viewpage.action?spaceKey=opensfs&amp;title=Data+On+MDT+High+Level+Design without formatting or diagrams</title>
		<link rel="alternate" type="text/html" href="http://wiki.lustre.org/index.php?title=Data_on_MDT_High_Level_Design&amp;diff=2534&amp;oldid=prev"/>
		<updated>2017-07-11T01:21:26Z</updated>

		<summary type="html">&lt;p&gt;initial import from https://wiki.hpdd.intel.com/pages/viewpage.action?spaceKey=opensfs&amp;amp;title=Data+On+MDT+High+Level+Design without formatting or diagrams&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
The Data-on-MDT project aims to achieve good performance for small file IO. The motivations for this and current behaviour of small file IO are described in [[Data on MDT Solution Architecture]] document.&lt;br /&gt;
&lt;br /&gt;
This high-level design document provides more details about approach to implement this feature in the Lustre* file system.&lt;br /&gt;
Implementation Requirements&lt;br /&gt;
Create new layout for Data-on-MDT&lt;br /&gt;
&lt;br /&gt;
While Layout Enhancement project is responsible for a new layout, we must add appropriate changes in LOV to properly recognize the new layout and use LMV/MDC cl_object interface to work with data. LOV should understand and properly handle also maximum data size for the new layout. Another part of related work is to change lfs tool so it will be able to set new layout on directory as default.&lt;br /&gt;
CLIO should be able to work with MDT&lt;br /&gt;
Make MDC devices part of CLIO&lt;br /&gt;
&lt;br /&gt;
MDC devices must become cl_device and part of CLIO stack and be used by LOV for IO if new layout. Some unification is possible between OSC and MDC methods.&lt;br /&gt;
&lt;br /&gt;
That code is orthogonal to the current MDC and is placed there for simpler access to import and request-related code. This code will become eventually the generic client that will be used by MDC and OSC.&lt;br /&gt;
MDT support for IO requests&lt;br /&gt;
IO request handlers&lt;br /&gt;
&lt;br /&gt;
Unified Target made this possible, but specific handlers do not currently exist for the MDT. They will be added as part of this work.&lt;br /&gt;
LOD must understand new layout&lt;br /&gt;
&lt;br /&gt;
LOD must be aware of a new layout and handle it properly bypassing IO methods and other operations to the local storage instead of OST&lt;br /&gt;
Lustre tools changes&lt;br /&gt;
&lt;br /&gt;
The lfs setstripe command must be extended to recognize new layout setup and set maximum size for it.&lt;br /&gt;
Functional Specification&lt;br /&gt;
New DOM layout&lt;br /&gt;
Wire/disk changes&lt;br /&gt;
&lt;br /&gt;
The lov_stripe_md (lsm) stores information about DOM layout. The lw_pattern has specific flag LOV_PATTERN_DOM set, the lw_stripe_size contains maximum data size value for DOM, the lw_stripe_count is 0, no lsm_oinfo is allocated. This does not change wire protocol because LOV_PATTERN_DOM replaces existing LOV_PATTERN_FIRST.&lt;br /&gt;
In-memory structures&lt;br /&gt;
&lt;br /&gt;
The LOV implements new interface for new LLT_DOM layout type. This set of methods are closely related with LLT_RAID0 interface and some may be reused.&lt;br /&gt;
&lt;br /&gt;
Upon new object allocation the LOV does the following:&lt;br /&gt;
&lt;br /&gt;
    lov_layout_type() checks lsm and returns related type;&lt;br /&gt;
    lov_dispatch() points to proper interface for this type;&lt;br /&gt;
&lt;br /&gt;
so the proper stack of objects is built with using sub-objects points to MDC.&lt;br /&gt;
union lov_layout_state {&lt;br /&gt;
    struct lov_layout_raid0 {&lt;br /&gt;
        ...&lt;br /&gt;
    } raid0;&lt;br /&gt;
    struct lov_layout_dom {&lt;br /&gt;
        struct lovsub_object *lo_dom;&lt;br /&gt;
    } dom;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
The lov_layout_dom refers just to single object below LOV.&lt;br /&gt;
New LOV subdevices&lt;br /&gt;
&lt;br /&gt;
For DOM we need pass IO through the MDC device, therefore LOV should have such target similar with other targets pointing to OSCs. With DNE in mind we should be able to query FLDB by FID to get proper MDC device according. The LOV implements own lov_fld_lookup() for that and may need to setup also own fld client OR use one from LMV.&lt;br /&gt;
struct lov_device {&lt;br /&gt;
    ...&lt;br /&gt;
  &lt;br /&gt;
    /* Data-on-MDT devices*/&lt;br /&gt;
    __u32                     ld_md_tgts_nr;&lt;br /&gt;
    struct lovsub_device    **ld_md_tgts;&lt;br /&gt;
    struct lu_client_fld     *ld_fld;&lt;br /&gt;
};&lt;br /&gt;
Adding MDC&lt;br /&gt;
&lt;br /&gt;
MDC devices are added in client LOV config log like them are added to the LMV. Upon new MDC addition the device stack may be not yet ready and must be saved to be added later in the lov_device_init(). The LOV device has new arrays of MDC targets ld_device:ld_md_tgts[] with the same type lovsub_device as used for OSC but with different set of methods.&lt;br /&gt;
Deleting MDC&lt;br /&gt;
&lt;br /&gt;
Unlike OSC the MDC might be cleaned up before LOV because they are controlled still by MD stack of devices. The problem can be solved by taking extra reference for MDC device at LOV or better by notification of LOV about MDC is going to shutdown. &lt;br /&gt;
LOV lovdom_device&lt;br /&gt;
&lt;br /&gt;
The lovdom device replaces lovsub device for OSC. New set of methods is introduced to handle LOV-MDC interactions.&lt;br /&gt;
static const struct lu_device_operations lovdom_lu_ops = {&lt;br /&gt;
    .ldo_object_alloc      = lovdom_object_alloc,&lt;br /&gt;
    .ldo_process_config    = NULL,&lt;br /&gt;
    .ldo_recovery_complete = NULL&lt;br /&gt;
};&lt;br /&gt;
 &lt;br /&gt;
static const struct cl_device_operations lovdom_cl_ops = {&lt;br /&gt;
        .cdo_req_init = lovsub_req_init&lt;br /&gt;
};&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
static struct lu_device *lovdom_device_alloc(const struct lu_env *env,&lt;br /&gt;
                         struct lu_device_type *t,&lt;br /&gt;
                         struct lustre_cfg *cfg)&lt;br /&gt;
{&lt;br /&gt;
    struct lu_device    *d;&lt;br /&gt;
    struct lovsub_device    *lsd;&lt;br /&gt;
    OBD_ALLOC_PTR(lsd);&lt;br /&gt;
    if (lsd != NULL) {&lt;br /&gt;
        int result;&lt;br /&gt;
        result = cl_device_init(&amp;amp;lsd-&amp;gt;acid_cl, t);&lt;br /&gt;
        if (result == 0) {&lt;br /&gt;
            d = lovsub2lu_dev(lsd);&lt;br /&gt;
            d-&amp;gt;ld_ops = &amp;amp;lovdom_lu_ops;&lt;br /&gt;
            lsd-&amp;gt;acid_cl.cd_ops = &amp;amp;lovdom_cl_ops;&lt;br /&gt;
        } else {&lt;br /&gt;
            d = ERR_PTR(result);&lt;br /&gt;
        }&lt;br /&gt;
    } else {&lt;br /&gt;
        d = ERR_PTR(-ENOMEM);&lt;br /&gt;
    }&lt;br /&gt;
    return d;&lt;br /&gt;
}&lt;br /&gt;
static const struct lu_device_type_operations lovdom_device_type_ops = {&lt;br /&gt;
    .ldto_device_alloc = lovdom_device_alloc,&lt;br /&gt;
    .ldto_device_free = lovsub_device_free,&lt;br /&gt;
    .ldto_device_init = lovsub_device_init,&lt;br /&gt;
    .ldto_device_fini = lovsub_device_fini&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
The lovdom device is much simpler than lovsub_device because it is not a top device of new sub-stack but part of the stack. That is why device alloc is different but at the same time we reuse other lovsub methods.&lt;br /&gt;
DOM object layering&lt;br /&gt;
&lt;br /&gt;
DOM object is referred by single FID of MDS object and has no stripes, so it is presented by plain stack ccc-&amp;gt;lov-&amp;gt;lovdom[mds_number]-&amp;gt;mdc referred by FID of MDS object. &lt;br /&gt;
&lt;br /&gt;
DOM object&lt;br /&gt;
&lt;br /&gt;
Considering there is always single stripe, the lov+lovdom layers are trivial and have almost no extra functions/checks. All real code goes to the MDC layer.&lt;br /&gt;
Manage max_stripe_size&lt;br /&gt;
&lt;br /&gt;
LOV specific code is max_stripe_size boundary check and code to start migration upon file growing.&lt;br /&gt;
&lt;br /&gt;
The cl_io_operations:cio_io_iter_init() method for lovdom layer checks that operation is not out of max_stripe_size boundary. The Phase I action is just -ENOSPC return code, the Phase II starts migration at this point.&lt;br /&gt;
MDC &lt;br /&gt;
MDC CLIO methods&lt;br /&gt;
&lt;br /&gt;
MDC fully reuses OSC CLIO methods with several exceptions, e.g. the device initialization methods will be different as it must call mdc_setup() instead of osc_setup(). That means we can separate that code from OSC and make it generic.&lt;br /&gt;
Locking&lt;br /&gt;
&lt;br /&gt;
All IO for DOM object is done under PW LAYOUT lock. It protects whole data on MDT exclusively. The llite is responsible for that and MDC CLIO locks operatoins are all lockless to avoid real lock enqueueing. &lt;br /&gt;
Glimpse&lt;br /&gt;
&lt;br /&gt;
With data on MDT the GETATTR request from MDT returns both OBD_MD_FLSIZE|OBD_MD_FLBLOCKS along with other attributes. Therefore glimpse is disabled by setting inode flag LLIF_MDS_SIZE_LOCK for DOM objects. &lt;br /&gt;
MDT changes&lt;br /&gt;
IO request handlers&lt;br /&gt;
&lt;br /&gt;
New set of handler is added at MDT, they are needed to handle punch/read/write operations.&lt;br /&gt;
static struct tgt_handler mdt_tgt_handlers[] = {&lt;br /&gt;
    ...&lt;br /&gt;
    TGT_MDT_HDL(HABEO_CORPUS| HABEO_REFERO, OST_BRW_READ, tgt_brw_read),&lt;br /&gt;
    TGT_MDT_HDL(HABEO_CORPUS| MUTABOR, OST_BRW_WRITE, tgt_brw_write),&lt;br /&gt;
    TGT_MDT_HDL(HABEO_CORPUS| HABEO_REFERO | MUTABOR, OST_PUNCH, mdt_punch_hdl),&lt;br /&gt;
}&lt;br /&gt;
IO object operations&lt;br /&gt;
&lt;br /&gt;
New operations are added to the MDT and sends IO requests directly to the OSD bypassing MDD and LOD. Unified Target uses OBD interface for IO methods, so MDD OBD operations are extended with the following:&lt;br /&gt;
mdt_obd_ops = {&lt;br /&gt;
    ...&lt;br /&gt;
    .o_preprw       = mdt_obd_preprw,&lt;br /&gt;
    .o_commitrw     = mdt_obd_commitrw,&lt;br /&gt;
}&lt;br /&gt;
DOM support in LOD&lt;br /&gt;
&lt;br /&gt;
LOD understand new DOM layout by checking lsm pattern with lsm_is_dom(lsm) helper function. It must not use any OSP subdevices for such layout but only local OSD target. All assertions and check on pattern should be extended from &amp;quot;only RAID0 is supported&amp;quot; to &amp;quot;RAID0 AND DOM are supported&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
MDT stack doesn&amp;#039;t filter BLOCKS | SIZE attributes from DOM object and return them to the client.&lt;br /&gt;
Quota on MDT&lt;br /&gt;
&lt;br /&gt;
As a first implementation, a user limit the DOM blocks can be provided without any code changes: for instance, if user want to set 1GB limit for DOM and the maximum size of each file on MDT is 1M, then user can just set the inode limit to 1024. This approach is in conflict with a real inode limit but provides a initial path to quota control.&lt;br /&gt;
&lt;br /&gt;
A more robust quota for Data on MDT can be executed in two phases:&lt;br /&gt;
Phase I: Support block quota on MDTs, and MDTs share same block limit with OSTs;&lt;br /&gt;
&lt;br /&gt;
In current quota framework, each MDT has only one MD qsd_instance associated with it&amp;#039;s OSD device&lt;br /&gt;
struct osd_device {&lt;br /&gt;
        ...&lt;br /&gt;
        /* quota slave instance */&lt;br /&gt;
        struct qsd_instance      *od_quota_slave;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
This will be expanded to a list, and two qsd_instance will be linked in the list for each MDT: one is MD for metadata operations, the other is DT for data operations.  Write on MDT will use the DT qsd_instance to enforce block quota, and metadata operations will have to enforce both block and inode quota with these two qsd_instances. For ZFS OSD, once block quota enabled on MDT, the approach of estimating inode accounting by used blocks will not work. Using our own ZAP to track inode usage will be the only option. Ideally, OpenZFS will support inode accounting directly.&lt;br /&gt;
Phase II: Support different block limits for DOM and OSTs;&lt;br /&gt;
&lt;br /&gt;
Because space on a MDT is often limited compared to a OST, an administrator may want to set more restricted block limit to MDTs rather than sharing same limits with OSTs. To support private limits for DOM, following changes are required:&lt;br /&gt;
&lt;br /&gt;
    Introduce a pre-defined DT pool for DOM to manage the block limit for all MDTs;&lt;br /&gt;
    Add an additional qsd_instance associated with each MDT. This acquires limits from the DOM pool; (some code could probably needs be revised to support non-default pool ID)&lt;br /&gt;
    Enhance the quota utilities to set and show quota limits for specified pool; (packing pool ID in quota request requires client to server protocol changes)&lt;br /&gt;
    Write on MDT must enforce two block quotas: the default DT quota and the DOM quota;&lt;br /&gt;
&lt;br /&gt;
Grants on MDT&lt;br /&gt;
&lt;br /&gt;
Grant support on MDT require major MDT stack changes because we need to account all changes including metadata operations with directories, extended attributes and llogs. Initial grants support will be implemented as MDT target support for grants basically. It is able to report grants and declare their support during connection, but returns zero values (means IO to be sync) or some rough estimated values. Further work will be done in accounting all operations with data and report real values. This can be done during declaration phase of transaction.&lt;br /&gt;
&lt;br /&gt;
Operations to take into account:&lt;br /&gt;
&lt;br /&gt;
    directory create/destroy&lt;br /&gt;
    EA add/delete&lt;br /&gt;
    llog accounting (changelogs mostly)&lt;br /&gt;
    Write/truncate of DOM objects&lt;br /&gt;
    DOM object destroy&lt;br /&gt;
&lt;br /&gt;
Lustre tools changes&lt;br /&gt;
LFS setstripe&lt;br /&gt;
&lt;br /&gt;
LFS tool introduces new option &amp;#039;--layout=mdt | -L mdt&amp;#039;. It means DOM layout and sets layout pattern to LOV_PATTERN_DOM, stripe counts to 0. Option --stripe-size used with --layout will set DOM maxsize. Option --stripe-count will cause error if not 0. Pool name cannot be set also for this layout at the current time.&lt;br /&gt;
Migration&lt;br /&gt;
&lt;br /&gt;
Migration happens during IO operation and consist of several steps:&lt;br /&gt;
&lt;br /&gt;
    determine a migration event&lt;br /&gt;
    create a file with new layout&lt;br /&gt;
    read data from old file and write it to the new one&lt;br /&gt;
    swap layout between files&lt;br /&gt;
    continue current operation&lt;br /&gt;
&lt;br /&gt;
That means the migration manager should be done in llite in context of current operation or be a separate thread to avoid possible conflict which CLIO thread infos for second object.&lt;br /&gt;
Migration start&lt;br /&gt;
&lt;br /&gt;
LOV determines if migration is needed. Migration is evaluated when ongoing WRITE request exceeds the max_stripe_size value of DOM object. The cl_io_operations:cio_io_iter_init() implementation for lovdom layer checks if migration is needed.&lt;br /&gt;
Layout change&lt;br /&gt;
&lt;br /&gt;
New object is created with RAID0 layout, OST objects are taken from pre-allocated pool as usual during file creation on MDT. When data is moved from one file to another the layout is switched. All operations are done under PW LAYOUT_LOCK naturally so no additional locking is needed.&lt;br /&gt;
Data migration from MDT to OST&lt;br /&gt;
&lt;br /&gt;
The whole data of DOM file is read from MDT by client and flushed back to the new RAID0 file. One possible optimization is to re-assign pages to the new file by flushing them from CLIO. This optimization is beyond the scope of this project.&lt;br /&gt;
Logic Specification&lt;br /&gt;
MDS_GETATTR logic&lt;br /&gt;
&lt;br /&gt;
Optimization is to avoid glimpse requests by returning back SIZE and BLOCKS attributes.&lt;br /&gt;
&lt;br /&gt;
dom_getattr&lt;br /&gt;
&lt;br /&gt;
    MDS_GETATTR is enqueued as usual but with PR LAYOUT lock&lt;br /&gt;
    MDT returns BLOCKS and SIZE attributes as valid&lt;br /&gt;
    llite sets flag to indicate that glimpse is not needed (already exists for SOM)&lt;br /&gt;
&lt;br /&gt;
MDS_OPEN logic and optimizations&lt;br /&gt;
OPEN with O_RDWR&lt;br /&gt;
&lt;br /&gt;
dom_open_rw&lt;br /&gt;
&lt;br /&gt;
This optimization might help with partial page updates, when client have to read page first, adds new data in it and flush it back finally.&lt;br /&gt;
&lt;br /&gt;
    OPEN is enqueued with PW LAYOUT lock on object&lt;br /&gt;
    MDT returns partial page back if fits into EA buffer&lt;br /&gt;
    client update partial page and flush pages&lt;br /&gt;
&lt;br /&gt;
OPEN with O_TRUNC&lt;br /&gt;
&lt;br /&gt;
dom_open_trunc&lt;br /&gt;
&lt;br /&gt;
This optimization can truncate file during open if O_TRUNC flag is set.&lt;br /&gt;
&lt;br /&gt;
    OPEN is invoked with PW LAYOUT lock&lt;br /&gt;
    MDS checks O_TRUNC is set and truncate file&lt;br /&gt;
    client gets reply with updated attributes&lt;br /&gt;
&lt;br /&gt;
Data Readahead logic&lt;br /&gt;
&lt;br /&gt;
All readahead optimizations are based on fact that it is possible to return some data from small file in EA buffer which is quite big now.&lt;br /&gt;
&lt;br /&gt;
dom_readahead&lt;br /&gt;
&lt;br /&gt;
Typical case is stat():&lt;br /&gt;
&lt;br /&gt;
    MDS_GETATTR is enqueued as usual&lt;br /&gt;
    MDT returns basic attributes and checks amount of free space in EA reply buffer. &lt;br /&gt;
    MDT reads data from file to EA buffer&lt;br /&gt;
    client fill pages with data from EA buffer&lt;br /&gt;
&lt;br /&gt;
Tests Specification&lt;br /&gt;
Sanity tests&lt;br /&gt;
&lt;br /&gt;
The set of tests to make sure the feature works as expected&lt;br /&gt;
test_1a - file with DOM layout&lt;br /&gt;
&lt;br /&gt;
    create file with lfs setstripe -L, check its LOV EA attribute has LOV_PATTERN_DOM pattern and has no stripes on OST&lt;br /&gt;
    write to the file, checks data is written and valid, checks file attributes are valid, checks fs free blocks is decreased according with file size.&lt;br /&gt;
    delete file, checks free blocks are returned back&lt;br /&gt;
&lt;br /&gt;
test_1b - DOM layout as default directory layout&lt;br /&gt;
&lt;br /&gt;
    set new default layout on directory with lfs setstripe -L and create file in it. &lt;br /&gt;
    all steps from test_1a&lt;br /&gt;
&lt;br /&gt;
test_2a - check size limit and migration&lt;br /&gt;
&lt;br /&gt;
    create file with DOM layout&lt;br /&gt;
    write more that max_stripe_size to the file&lt;br /&gt;
        Phase I: checks that -ENOSPC error is returned&lt;br /&gt;
        Phase II: check that migration occured&lt;br /&gt;
    (only Phase II below)&lt;br /&gt;
    checks file layout is changed to filesystem default layout and has stripes on OSTs&lt;br /&gt;
    checks file size is valid and fs free blocks data is valid as well&lt;br /&gt;
&lt;br /&gt;
Sanityn tests&lt;br /&gt;
test_1{a,...} - parallel access to the small files&lt;br /&gt;
&lt;br /&gt;
    open DOM file from client1 in different modes and pause it.&lt;br /&gt;
    perform various operations on file from client2&lt;br /&gt;
    make sure client2 is waiting client1 to finish first&lt;br /&gt;
&lt;br /&gt;
Recovery tests&lt;br /&gt;
&lt;br /&gt;
    fail MDS while performing operations like create/open/write/destroy on DOM file&lt;br /&gt;
    make sure operations are replayed back and finished as expected&lt;br /&gt;
&lt;br /&gt;
Functional tests&lt;br /&gt;
&lt;br /&gt;
Check all cases we optimize&lt;br /&gt;
Stat&lt;br /&gt;
&lt;br /&gt;
    create files with DOM layout vs 2-stripes layout&lt;br /&gt;
    fills them with data&lt;br /&gt;
    perform ls -l on them&lt;br /&gt;
    Output results for both cases&lt;br /&gt;
&lt;br /&gt;
Open with O_TRUNC&lt;br /&gt;
&lt;br /&gt;
    create files with DOM and default layout&lt;br /&gt;
    fills them with data&lt;br /&gt;
    perform open with O_TRUNC&lt;br /&gt;
    output results&lt;br /&gt;
&lt;br /&gt;
Write at the end of file with partial page&lt;br /&gt;
&lt;br /&gt;
    create many small files and fills with data so last page is filled partially&lt;br /&gt;
    performs write to the end of file&lt;br /&gt;
    Output results for DOM file vs normal file&lt;br /&gt;
&lt;br /&gt;
Readahead of small files&lt;br /&gt;
&lt;br /&gt;
    create small files with DOM and normal layout&lt;br /&gt;
    fills them with data&lt;br /&gt;
    perform grep on them&lt;br /&gt;
    output results&lt;br /&gt;
&lt;br /&gt;
Generic performance tests&lt;br /&gt;
mdsrate&lt;br /&gt;
&lt;br /&gt;
Regular MD operations should benefit from Data-on-MDT because there are no OST requests, basically only stat should benefit noticeable because open uses precreated objects and destroy is not blocked but OST objects destroy. &lt;br /&gt;
&lt;br /&gt;
use mdsrate to perform the following operations:&lt;br /&gt;
&lt;br /&gt;
    file creation with single stripe vs DOM&lt;br /&gt;
    stat &lt;br /&gt;
    unlink&lt;br /&gt;
    output results for both cases&lt;br /&gt;
&lt;br /&gt;
files with data&lt;br /&gt;
&lt;br /&gt;
The mdsrate tool must be modified to create DoM files with amount of data to test DoM files performance in common case.&lt;br /&gt;
FIO&lt;br /&gt;
&lt;br /&gt;
Check generic IO performance of small files&lt;br /&gt;
&lt;br /&gt;
    run FIO with DoM files vs normal files&lt;br /&gt;
    output results&lt;br /&gt;
&lt;br /&gt;
postmark&lt;br /&gt;
&lt;br /&gt;
The Postmark utility is designed to emulate applications such as software development, email, newsgroup servers and Web applications. It is an industry-standard benchmark for small file and metadata-intensive&lt;br /&gt;
workloads.&lt;br /&gt;
&lt;br /&gt;
    Run postmark over DoM striped directory and default one.&lt;br /&gt;
    Output results&lt;/div&gt;</summary>
		<author><name>Adilger</name></author>
	</entry>
</feed>