<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>http://wiki.old.lustre.org/index.php?action=history&amp;feed=atom&amp;title=Architecture_-_OSS-on-DMU</id>
	<title>Architecture - OSS-on-DMU - Revision history</title>
	<link rel="self" type="application/atom+xml" href="http://wiki.old.lustre.org/index.php?action=history&amp;feed=atom&amp;title=Architecture_-_OSS-on-DMU"/>
	<link rel="alternate" type="text/html" href="http://wiki.old.lustre.org/index.php?title=Architecture_-_OSS-on-DMU&amp;action=history"/>
	<updated>2026-04-15T00:45:53Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.39.7</generator>
	<entry>
		<id>http://wiki.old.lustre.org/index.php?title=Architecture_-_OSS-on-DMU&amp;diff=10603&amp;oldid=prev</id>
		<title>Docadmin at 21:20, 22 January 2010</title>
		<link rel="alternate" type="text/html" href="http://wiki.old.lustre.org/index.php?title=Architecture_-_OSS-on-DMU&amp;diff=10603&amp;oldid=prev"/>
		<updated>2010-01-22T21:20:06Z</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 14:20, 22 January 2010&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-l1&quot;&gt;Line 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&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;&#039;&#039;&#039;&#039;&#039;Note:&#039;&#039;&#039;&#039;&#039; &#039;&#039;The content on this page reflects the state of design of a Lustre feature at a particular point in time and may contain outdated information.&#039;&#039; &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;&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;== Definitions ==&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;== Definitions ==&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;/table&gt;</summary>
		<author><name>Docadmin</name></author>
	</entry>
	<entry>
		<id>http://wiki.old.lustre.org/index.php?title=Architecture_-_OSS-on-DMU&amp;diff=10528&amp;oldid=prev</id>
		<title>Docadmin: Protected &quot;Architecture - OSS-on-DMU&quot; ([edit=sysop] (indefinite) [move=sysop] (indefinite))</title>
		<link rel="alternate" type="text/html" href="http://wiki.old.lustre.org/index.php?title=Architecture_-_OSS-on-DMU&amp;diff=10528&amp;oldid=prev"/>
		<updated>2010-01-22T18:47:43Z</updated>

		<summary type="html">&lt;p&gt;Protected &amp;quot;&lt;a href=&quot;/index.php?title=Architecture_-_OSS-on-DMU&quot; title=&quot;Architecture - OSS-on-DMU&quot;&gt;Architecture - OSS-on-DMU&lt;/a&gt;&amp;quot; ([edit=sysop] (indefinite) [move=sysop] (indefinite))&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 11:47, 22 January 2010&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;en&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(No difference)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Docadmin</name></author>
	</entry>
	<entry>
		<id>http://wiki.old.lustre.org/index.php?title=Architecture_-_OSS-on-DMU&amp;diff=9920&amp;oldid=prev</id>
		<title>Docadmin: Created page with &#039;== Definitions ==  DMU - Data Management Unit, the core of ZFS filesystem implementing object storage, transactions, snapshots, pool management.  ZAP - an indexing subsystem of D...&#039;</title>
		<link rel="alternate" type="text/html" href="http://wiki.old.lustre.org/index.php?title=Architecture_-_OSS-on-DMU&amp;diff=9920&amp;oldid=prev"/>
		<updated>2010-01-14T23:15:21Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;#039;== Definitions ==  DMU - Data Management Unit, the core of ZFS filesystem implementing object storage, transactions, snapshots, pool management.  ZAP - an indexing subsystem of D...&amp;#039;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== Definitions ==&lt;br /&gt;
&lt;br /&gt;
DMU - Data Management Unit, the core of ZFS filesystem implementing object storage, transactions, snapshots, pool management.&lt;br /&gt;
&lt;br /&gt;
ZAP - an indexing subsystem of DMU, allows to operate on set of key-&amp;gt;value pairs&lt;br /&gt;
&lt;br /&gt;
FID - cluster-wide ID of any Lustre object, including objects on MDS&amp;#039;es and OSS&amp;#039;es&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Requirements ==&lt;br /&gt;
&lt;br /&gt;
{| border=1 cellspacing=0&lt;br /&gt;
|-&lt;br /&gt;
| id || quality || trigger || affected || description&lt;br /&gt;
|-&lt;br /&gt;
| dio || performance || reads/writes || fsfilt || reads/writes should be zero-copy to allow high throughput&lt;br /&gt;
|-&lt;br /&gt;
| cache || performance || small writes, reads || obdfilter/dmu || cache should be used to aggregate writes and avoid repeating reads (clients booting from lustre)&lt;br /&gt;
|-&lt;br /&gt;
| 90% of bandwidth || performance || reads, writes || dmu || &amp;#039;&amp;#039;is it our responsibility? is it 90%?&amp;#039;&amp;#039;&lt;br /&gt;
|-&lt;br /&gt;
| mount || usability || startup || obdfilter/OSD/fsfilt || standalone uOSS process attaches to requested pool and starts serving it via lustre protocol&lt;br /&gt;
|-&lt;br /&gt;
| stats || usability || explicit request || OST/obdfilter/OSD/fsfilt/dmu || we should provide user with different runtime information for all components&lt;br /&gt;
|-&lt;br /&gt;
| control interface || usability || explicit request || OST/obdfilter/OSD/fsfilt/dmu || be able to control runtime behavior of all components&lt;br /&gt;
|-&lt;br /&gt;
| read/write || usability || data access || obdfilter/fsfilt ||&lt;br /&gt;
|-&lt;br /&gt;
| lockless read/write || usability || data access || obdfilter || in some cases it&amp;#039;s more efficient to switch to cache-disabled ftp-like protocol to maintain good performance&lt;br /&gt;
|-&lt;br /&gt;
| create on write || usability || || obdfilter || first write/setattr creates object &lt;br /&gt;
|-&lt;br /&gt;
| interoperability || usability || fids enabled || OSD || different on-disk layout depending on fids enabled or not&lt;br /&gt;
|-&lt;br /&gt;
| grants || usability || || obdfilter || clients should be given limited amount of writeback cache to avoid late -ENOSPC&lt;br /&gt;
|-&lt;br /&gt;
| disk quota || usability || || dmu || probably regular per-user/group quota to be implemented in DMU &lt;br /&gt;
|-&lt;br /&gt;
| rich OSD/fsfilt API || modifiability || different backends || OSD/fsfilt || hide DMU specifics in fsfilt, keep OSD API abstract enough&lt;br /&gt;
|-&lt;br /&gt;
| compile || modifiability || developer || libcfs/build || first targets are Solaris and Linux, but it&amp;#039;s likely there will be more platforms&lt;br /&gt;
|-&lt;br /&gt;
| transaction callbacks || availability || cluster failures || fsfilt/dmu || obdfilter to be notified once transaction is committed&lt;br /&gt;
|-&lt;br /&gt;
| orphans || availability || cluster failures || || a mechanism to track and clean unreferenced OST objects&lt;br /&gt;
|-&lt;br /&gt;
| aborted write || availability || cluster failures ||  || regular recovery to be used: every write is assigned a trasno and flushed in transno order&lt;br /&gt;
|-&lt;br /&gt;
| aborted destroy || availability || cluster failures ||  || llog record on MDS is canceled upon destroy commit&lt;br /&gt;
|-&lt;br /&gt;
| aborted setattr || availability || cluster failures || || regular recovery to be used&lt;br /&gt;
|-&lt;br /&gt;
| aborted setuid/setgid || availability || cluster failures || || llog record on MDS is canceled upon commit (if requested)&lt;br /&gt;
|-&lt;br /&gt;
| aborted size change || availability || cluster failures || || every time size/blocks change with new IO epoch, llog record is generated&lt;br /&gt;
|-&lt;br /&gt;
| data rollback || availability || cluster failures || obdfilter/fsfilt/dmu || required for SNS&lt;br /&gt;
|-&lt;br /&gt;
| ZFS compatibility || availability || any modification || dmu/fsfilt || dmu/fsfilt should maintain underlying filesystem compatible with ZFS&lt;br /&gt;
|-&lt;br /&gt;
| failure simulation || testability || the more, the better || all || keep existing failure simulation with OBD_FAIL&lt;br /&gt;
|-&lt;br /&gt;
| capabilities || security || any access || ost || with capabilities enabled, any access to be signed and checked with key provided by MDS&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Implementation Constraints ==&lt;br /&gt;
# use ZAP for fid-&amp;gt;dnode mapping&lt;br /&gt;
# use DMU&amp;#039;s transactions&lt;br /&gt;
# single process to serve all DMU pools&lt;br /&gt;
# synchronous IO from libzpool to system (Solaris doesn&amp;#039;t do AIO well)&lt;br /&gt;
&lt;br /&gt;
== OSS on DMU Architecture ==&lt;br /&gt;
&lt;br /&gt;
The architecture of OSS includes few components:&lt;br /&gt;
&lt;br /&gt;
{| border=1 cellspacing=0&lt;br /&gt;
|-&lt;br /&gt;
|fsfilt||hides filesystem specific (in this case DMU) from upper layers as many APIs we&amp;#039;re going to use are not standard. Provides data, index and transaction management.&lt;br /&gt;
|-&lt;br /&gt;
|OSD||implements Object Storage Device with objects addressable by Lustre FIDs, uses fsfilt to manipulate filesystem&amp;#039;s objects, indices and transactions.&lt;br /&gt;
|-&lt;br /&gt;
|obdfilter||Implements grants, quota, distributed locking, wraps transactions, capabilities, Size-on-MDS&lt;br /&gt;
|-&lt;br /&gt;
|OST||RPCs: receiving, parsing, swabbing, bulks, replying&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Docadmin</name></author>
	</entry>
</feed>