<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>An enjoyed kernel apprentice</title>
	<atom:link href="http://blog.coly.li/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://blog.coly.li</link>
	<description>Just another WordPress weblog</description>
	<lastBuildDate>Mon, 26 Jul 2010 05:20:38 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Don&#8217;t waste your SSD blocks</title>
		<link>http://blog.coly.li/?p=124</link>
		<comments>http://blog.coly.li/?p=124#comments</comments>
		<pubDate>Mon, 26 Jul 2010 05:20:38 +0000</pubDate>
		<dc:creator>colyli</dc:creator>
				<category><![CDATA[File System Magic]]></category>

		<guid isPermaLink="false">http://blog.coly.li/?p=124</guid>
		<description><![CDATA[These days, one of my colleagues asked me a question, he formatted an ~80G Ext3 file system on SSD. After mounted the file system, the df output was, Filesystem 1K-blocks Used Available Use% Mounted on /dev/sdb1 77418272 184216 73301344 1 /mnt As well as from fdisk output, it said, Device Boot Start End Blocks Id [...]]]></description>
			<content:encoded><![CDATA[<p>These days, one of my colleagues asked me a question, he formatted an ~80G Ext3 file system on SSD. After mounted the file system, the df output was,</p>
<p><!--   		BODY,DIV,TABLE,THEAD,TBODY,TFOOT,TR,TH,TD,P { font-family:"Liberation Sans"; font-size:x-small } --></p>
<table border="0" cellspacing="0" frame="void" rules="none">
<colgroup span="1">
<col span="1" width="90"></col>
<col span="1" width="90"></col>
<col span="1" width="69"></col>
<col span="1" width="65"></col>
<col span="1" width="89"></col>
<col span="1" width="104"></col>
</colgroup>
<tbody>
<tr>
<td width="90" height="17" align="right"><span style="font-family: Droid Serif;">Filesystem</span></td>
<td width="90" align="right"><span style="font-family: Droid Serif;">1K-blocks</span></td>
<td width="69" align="right"><span style="font-family: Droid Serif;">Used</span></td>
<td width="65" align="right"><span style="font-family: Droid Serif;">Available</span></td>
<td width="89" align="right"><span style="font-family: Droid Serif;">Use%</span></td>
<td width="104" align="right"><span style="font-family: Droid Serif;">Mounted on</span></td>
</tr>
<tr>
<td height="17" align="right"><span style="font-family: Droid Serif;">/dev/sdb1</span></td>
<td align="right"><span style="font-family: Droid Serif;">77418272</span></td>
<td align="right"><span style="font-family: Droid Serif;">184216</span></td>
<td align="right"><span style="font-family: Droid Serif;">73301344</span></td>
<td align="right"><span style="font-family: Droid Serif;">1</span></td>
<td align="right"><span style="font-family: Droid Serif;">/mnt</span></td>
</tr>
</tbody>
</table>
<p>As well as from fdisk output, it said,</p>
<p><!--   		BODY,DIV,TABLE,THEAD,TBODY,TFOOT,TR,TH,TD,P { font-family:"Liberation Sans"; font-size:x-small } --></p>
<table border="0" cellspacing="0" frame="void" rules="none">
<colgroup span="1">
<col span="1" width="90"></col>
<col span="1" width="90"></col>
<col span="1" width="69"></col>
<col span="1" width="65"></col>
<col span="1" width="89"></col>
<col span="1" width="104"></col>
<col span="1" width="81"></col>
</colgroup>
<tbody>
<tr>
<td width="90" height="17" align="right"><span style="font-family: Droid Serif;">Device</span></td>
<td width="90" align="right"><span style="font-family: Droid Serif;">Boot</span></td>
<td width="69" align="right"><span style="font-family: Droid Serif;">Start</span></td>
<td width="65" align="right"><span style="font-family: Droid Serif;">End</span></td>
<td width="89" align="right"><span style="font-family: Droid Serif;">Blocks</span></td>
<td width="104" align="right"><span style="font-family: Droid Serif;">Id</span></td>
<td width="81" align="right"><span style="font-family: Droid Serif;">System</span></td>
</tr>
<tr>
<td height="17" align="right"><span style="font-family: Droid Serif;">/dev/sdb1</span></td>
<td align="right"><span style="font-family: Droid Serif;"><br />
</span></td>
<td align="right"><span style="font-family: Droid Serif;">7834</span></td>
<td align="right"><span style="font-family: Droid Serif;">17625</span></td>
<td align="right"><span style="font-family: Droid Serif;">78654240</span></td>
<td align="right"><span style="font-family: Droid Serif;">83</span></td>
<td align="right"><span style="font-family: Droid Serif;">Linux</span></td>
</tr>
</tbody>
</table>
<p>From his observation, before format the SSD, there was 78654240 1k blocks available on the partition, after the format, 77418272 1k blocks could be used, which means almost 1G space unused from the partition.</p>
<p>A more serious question was, from the output of df, used blocks + available blocks = 73485560, but the file system had 77418272 blocks &#8212; 4301144 1k blocks disappeared ! This 160G SSD costs him 430USD, he complained around 15USD was payed for nothing.</p>
<p>IMHO, this is a quite interesting question, and asked by many people for many times. This time, I&#8217;d like to spend some time to explain how the blocks are wasted, and how to make better usage of every block on the SSD (since it&#8217;s quite expensive).</p>
<p>First of all, better storage usage depends on the I/O pattern in practice. This SSD is used to store large file for random I/O, especially most of the I/O (99%+) is reading on random file offset, the writing can almost be ignored. Therefore, it is wanted to use every available block to store a very big files on the Ext3 file systems.</p>
<p>If only using the default command line to format an Ext3 file system like &#8220;mkfs.ext3 /dev/sdb1&#8243;, mkfs.ext3 will do the following things for block allocation,</p>
<p>- Allocates reserved blocks for root user, to avoid non-privilege users using up all disk space.</p>
<p>- Allocates metadata like superblock, backed superblock, block group descriptors, block bitmap for each block group, inode bitmap for each block group, inode table for each block group.</p>
<p>- Allocates reserved block group blocks for offline file system extension.</p>
<p>- Allocates blocks for journal</p>
<p>Since the SSD is only for data storage, no operation system installed on it, and writing performance is disregarded here, and no requirement for further file system size extension, and only a few files are stored on the file systems, some blocks allocation is unnecessary and useless,</p>
<p>- Journal blocks</p>
<p>- Inodes blocks</p>
<p>- Reserved group descriptor blocks for file system resize</p>
<p>- Reserved blocks for root user</p>
<p>Let&#8217;s run dumpe2fs to see how many blocks are wasted on the above items, I only list part of the output (outlines) here,</p>
<blockquote><p>&gt; dumpe2fs /dev/sdb1</p></blockquote>
<blockquote><p>Filesystem volume name:   &lt;none&gt;<br />
Last mounted on:          &lt;not available&gt;<br />
Filesystem UUID:          f335ba18-70cc-43f9-bdc8-ed0a8a1a5ad3<br />
Filesystem magic number:  0xEF53<br />
Filesystem revision #:    1 (dynamic)<br />
Filesystem features:      has_journal ext_attr <strong><span style="color: #ff0000;">resize_inode</span></strong> dir_index filetype needs_recovery sparse_super large_file<br />
Filesystem flags:         signed_directory_hash<br />
Default mount options:    (none)<br />
Filesystem state:         clean<br />
Errors behavior:          Continue<br />
Filesystem OS type:       Linux<br />
Inode count:              4923392<br />
Block count:              19663560<br />
<strong><span style="color: #ff0000;">Reserved block count:     983178</span></strong><br />
Free blocks:              19308514<br />
Free inodes:              4923381<br />
First block:              0<br />
Block size:               4096<br />
Fragment size:            4096<br />
<strong><span style="color: #ff0000;">Reserved GDT blocks:      1019</span></strong><br />
Blocks per group:         32768<br />
Fragments per group:      32768<br />
<span style="color: #ff0000;"><strong>Inodes per group:         8192<br />
Inode blocks per group:   512</strong><br />
</span>Filesystem created:       Tue Jul  6 21:42:32 2010<br />
Last mount time:          Tue Jul  6 21:44:42 2010<br />
Last write time:          Tue Jul  6 21:44:42 2010<br />
Mount count:              1<br />
Maximum mount count:      39<br />
Last checked:             Tue Jul  6 21:42:32 2010<br />
Check interval:           15552000 (6 months)<br />
Next check after:         Sun Jan  2 21:42:32 2011<br />
Reserved blocks uid:      0 (user root)<br />
Reserved blocks gid:      0 (group root)<br />
First inode:              11<br />
<strong><span style="color: #ff0000;">Inode size:               256</span></strong><br />
Required extra isize:     28<br />
Desired extra isize:      28<br />
Journal inode:            8<br />
Default directory hash:   half_md4<br />
Directory Hash Seed:      3ef6ca72-c800-4c44-8c77-532a21bcad5a<br />
Journal backup:           inode blocks<br />
Journal features:         (none)<br />
<strong><span style="color: #ff0000;">Journal size:             128M<br />
</span></strong>Journal length:           32768<br />
Journal sequence:         0&#215;00000001<br />
Journal start:            0</p></blockquote>
<blockquote><p>Group 0: (Blocks 0-32767)<br />
Primary superblock at 0, Group descriptors at 1-5<br />
<strong><span style="color: #ff0000;">Reserved GDT blocks at 6-1024</span></strong><br />
Block bitmap at 1025 (+1025), Inode bitmap at 1026 (+1026)<br />
<strong><span style="color: #ff0000;">Inode table at 1027-1538 (+1027)</span></strong><br />
31223 free blocks, 8181 free inodes, 2 directories<br />
Free blocks: 1545-32767<br />
Free inodes: 12-8192</p>
<p>[snip ....]</p></blockquote>
<p>The file system block size is 4KB, which is different from the output block size of df and fdisk. In the above output, I mark the outlines with <strong><span style="color: #ff0000;">RED</span></strong> color. Now let&#8217;s look at the line for reserved block,</p>
<blockquote><p><strong><span style="color: #ff0000;">Reserved block count:     983178</span></strong></p></blockquote>
<p>These 983178 4K blocks are served for root user, since the system and user home is not on SSD, we don&#8217;t need to reserve these blocks.  Read mkfs.ext3(8), there is a parameter &#8216;-m&#8217; to set reserved-blocks-percentage, set &#8216;-m 0&#8242; to reserve zero block for privilege user.</p>
<p>From file system features line, we can see resize_inode is one of the default enabled feature,</p>
<blockquote><p>Filesystem features:      has_journal ext_attr <span style="color: #ff0000;"><strong>resize_inode</strong></span> dir_index filetype needs_recovery sparse_super large_file</p></blockquote>
<p>resize_inode feature reserves quite a lot blocks for new extended block group descriptors, these blocks can be found from lines like,</p>
<blockquote><p><strong><span style="color: #ff0000;">Reserved GDT blocks at 6-1024</span></strong></p></blockquote>
<p>When resize_inode feature enabled, mkfs.ext3 will reserve some blocks after block group descriptor blocks, called &#8220;Reserved GDT blocks&#8221;.  If file system will be extended in future (e.g. the file system is created on a logical volume), these reserved blocks can be used for new block group descriptors. Now the storage media is SSD, not file system extension in future, we don&#8217;t have to pay money (on SSD, blocks means money) for this kind of blocks. To disable resize_inode feature, use &#8220;-O ^resize_inode&#8221; in mkfs.ext3(8).</p>
<p>Then look at these 2 lines for inode blocks,</p>
<blockquote><p><strong><span style="color: #ff0000;">Inodes per group:         8192<br />
Inode blocks per group:   512</span></strong><span style="color: #ff0000;"><br />
</span></p></blockquote>
<p>We only store no more than 5 files on the whole file systems,  but here 512 blocks in each block groups are allocated for inode table. There are 601 block groups, which means 512&#215;601=307712 blocks (≈ 1.2GB space) wasted for inode tables.  Using &#8216;-N 16&#8242; in mkfs.ext3(8) to specify only 16 inodes in the file system, though mkfs.ext3(3) at least allocate one inode table block in each block group (more then 16 inodes), we only wast 1 block other than 512 blocks for inode able now.</p>
<blockquote><p><strong><span style="color: #ff0000;">Journal size:             128M</span><br />
</strong></p></blockquote>
<p>If most of the I/O are readings while writing performance is ignored, and people are really care about space usage, the journal area can be reduced to minimum size (1024 file system blocks), for 4KB blocks Ext3, it&#8217;s 4MB: -J size=4M</p>
<p>By above efforts, there is around 4GB+ space back to use. If you really care about the space usage efficiency of your SSD, how about making the file system with:</p>
<blockquote><p>mkfs.ext3 -J size=4M -m 0 -O ^resize_inode -I 16  &lt;device&gt;</p></blockquote>
<p>Then you have chance to get more data blocks into usage on your expensive SSD <img src='http://blog.coly.li/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.coly.li/?feed=rss2&amp;p=124</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Taobao joins open source</title>
		<link>http://blog.coly.li/?p=112</link>
		<comments>http://blog.coly.li/?p=112#comments</comments>
		<pubDate>Wed, 30 Jun 2010 16:27:57 +0000</pubDate>
		<dc:creator>colyli</dc:creator>
				<category><![CDATA[Great Days]]></category>

		<guid isPermaLink="false">http://blog.coly.li/?p=112</guid>
		<description><![CDATA[Today, Taobao announces its open source community  &#8212; http://code.taobao.org. This is a historical day, a China local  internet and e-business leading company joins open source world by its practice approved activity. The first project released on code.taobao.org is TAIR. Tair is a distributed, high performance key/value storage system, using in Taobao&#8217;s infrastructure for time.  Taobao [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://code.taobao.org"><img class="alignnone size-thumbnail wp-image-115" title="Taobao Code" src="http://blog.coly.li/wp-content/uploads/2010/06/logo_en-150x40.gif" alt="Taobao's open source commnity" width="150" height="40" /></a></p>
<p><a href="http://code.taobao.org"><img class="alignnone size-thumbnail wp-image-116" title="Taobao Open Source" src="http://blog.coly.li/wp-content/uploads/2010/06/logo_ch-150x40.gif" alt="Taobao's open source community" width="150" height="40" /></a></p>
<p>Today, Taobao announces its open source community  &#8212; http://code.taobao.org.</p>
<p>This is a historical day, a China local  internet and e-business leading company joins open source world by its practice approved activity.</p>
<p>The first project released on code.taobao.org is TAIR. Tair is a distributed, high performance key/value storage system, using in Taobao&#8217;s infrastructure for time.  Taobao is on the way to make more internal projects to be open source. Yes, talk is cheap, show the code !</p>
<p><a href="http://blog.coly.li/wp-content/uploads/2010/06/first_page1.jpg"><img class="alignnone size-full wp-image-122" title="first page on code.taobao.org" src="http://blog.coly.li/wp-content/uploads/2010/06/first_page1.jpg" alt="" width="800" height="526" /></a></p>
<p>If you are working on large scale website, with more than 10K server nodes, checking projects on code.taobao.org may help you to avoid making another wheel. Please, visit http://code.taobao.org, and join the community to contribute. I believe people can improve the community better and better. Currently, most of the expect developers are Chinese spoken, that&#8217;s why you can find square characters on the website. I believe more changes will come in future, because the people behind the community like continuously improvement <img src='http://blog.coly.li/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>Of cause there are some other contributions to open source community from Taobao can not be found on code.taobao.org, For example, I believer patches from Taobao will appear in Linux kernel changelog very soon <img src='http://blog.coly.li/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.coly.li/?feed=rss2&amp;p=112</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Random I/O &#8212; Is raw device always faster than file system ?</title>
		<link>http://blog.coly.li/?p=87</link>
		<comments>http://blog.coly.li/?p=87#comments</comments>
		<pubDate>Sun, 27 Jun 2010 14:53:27 +0000</pubDate>
		<dc:creator>colyli</dc:creator>
				<category><![CDATA[File System Magic]]></category>

		<guid isPermaLink="false">http://blog.coly.li/?p=87</guid>
		<description><![CDATA[For some implementations of distributed file systems, like TFS [1], developers think storing data on raw device directly (e.g. /dev/sdb, /dev/sdc&#8230;) might be faster than on file systems. Their choice is reasonable, 1, Random I/O on large file cannot get any help from file system page cache. 2, &#60;logical offset, physical offset&#62; mapping introduces more [...]]]></description>
			<content:encoded><![CDATA[<p>For some implementations of distributed file systems, like TFS [1], developers think storing data on raw device directly (e.g. /dev/sdb, /dev/sdc&#8230;) might be faster than on file systems.</p>
<p>Their choice is reasonable,</p>
<blockquote><p>1, Random I/O on large file cannot get any help from file system page cache.</p>
<p>2, &lt;logical offset, physical offset&gt; mapping introduces more I/O on file systems than on raw disk</p>
<p>3, Managing metadata on other powerful servers avoid the necessary to use file systems for data nodes.</p></blockquote>
<p>The penalty for the &#8220;higher&#8221; performance is management cost, storing data on raw device introduces difficulties like,</p>
<blockquote><p>1, Harder to backup/restore the data.</p>
<p>2, Cannot do more flexible management without special management tools for the raw device.</p>
<p>3, No convenient method to access/management the data on raw device.</p></blockquote>
<p>The above penalties are hard to be ignored by system administrators. Further more, the store of &#8220;higher&#8221; performance is not exactly true today,</p>
<blockquote><p>1, For file systems using block pointers for &lt;logical offset, physical offset&gt; mapping, large file takes too many pointer blocks. For example, on Ext3, with 4KB block, a 2TB file needs around 520K+  pointer blocks. Most of the pointer blocks are cold in random I/O, which results lower random I/O performance number than on raw device.</p>
<p>2, For file systems using extent for &lt;logical offset, physical offset&gt; mapping, the extent blocks number depends on how many fragment a large file has. For example, on Ext4, with max block group size 128MB, a 2TB file has around 16384 fragment. To mapping these 16K fragment, 16K extent records are needed, which can be placed in 50+ extent blocks. It&#8217;s very easy to hit a hot extent in memory for random I/O on large file.</p>
<p>3, If the &lt;logical offset, physical offset&gt; mapping can be cached in memory as hot, random I/O performance on file system might not be worse than on raw device.</p></blockquote>
<p>In order to verify my guess, I did some performance testing.  I share part of the data here.</p>
<blockquote><p>Processor: AMD opteron 6174 (2.2 GHz) x 2</p>
<p>Memory: DDR3 1333MHz 4GB x 4</p>
<p>Hard disk: 5400RPM SATA 2TB x 3 [2]</p>
<p>File size: (create by dd, almost) 2TB</p>
<p>Random I/O access: 100K times read</p>
<p>IO size: 512 bytes</p>
<p>File systems: Ext3, Ext4 (with and without directio)</p>
<p>test tool: <a href="http://www.mlxos.org/misc/seekrw.c" target="_blank">seekrw</a> [3]</p></blockquote>
<p>* With page cache</p>
<blockquote><p>- Command</p>
<p>seekrw -f /mnt/ext3/img -a 100000 -l 512 -r</p>
<p>seekrw -f /mnt/ext4/img -a 100000 -l 512 -r</p>
<p>- Performance result</p>
<p><!--   		BODY,DIV,TABLE,THEAD,TBODY,TFOOT,TR,TH,TD,P { font-family:"Liberation Sans"; font-size:x-small } --></p>
<table border="0" cellspacing="0" frame="VOID" rules="NONE">
<colgroup>
<col width="64"></col>
<col width="75"></col>
<col width="72"></col>
<col width="86"></col>
<col width="86"></col>
<col width="86"></col>
<col width="86"></col>
</colgroup>
<tbody>
<tr>
<td width="64" height="17" align="LEFT"><span style="font-family: Liberation Serif;"><br />
</span></td>
<td width="75" align="RIGHT"><span style="font-family: Liberation Serif;">Device</span></td>
<td width="72" align="RIGHT"><span style="font-family: Liberation Serif;">tps</span></td>
<td width="86" align="RIGHT"><span style="font-family: Liberation Serif;">Blk_read/s</span></td>
<td width="86" align="RIGHT"><span style="font-family: Liberation Serif;">Blk_wrtn/s</span></td>
<td width="86" align="RIGHT"><span style="font-family: Liberation Serif;">Blk_read</span></td>
<td width="86" align="RIGHT"><span style="font-family: Liberation Serif;">Blk_wrtn</span></td>
</tr>
<tr>
<td height="17" align="LEFT"><span style="font-family: Liberation Serif;">Ext3</span></td>
<td align="RIGHT"><span style="font-family: Liberation Serif;">sdc</span></td>
<td align="RIGHT"><span style="font-family: Liberation Serif;">95.88</span></td>
<td align="RIGHT"><span style="font-family: Liberation Serif;">767.07</span></td>
<td align="RIGHT"><span style="font-family: Liberation Serif;">0</span></td>
<td align="RIGHT"><span style="font-family: Liberation Serif;">46024</span></td>
<td align="RIGHT"><span style="font-family: Liberation Serif;">0</span></td>
</tr>
<tr>
<td height="17" align="LEFT"><span style="font-family: Liberation Serif;">Ext4</span></td>
<td align="RIGHT"><span style="font-family: Liberation Serif;">sdd</span></td>
<td align="RIGHT"><span style="font-family: Liberation Serif;">60.72</span></td>
<td align="RIGHT"><span style="font-family: Liberation Serif;">485.6</span></td>
<td align="RIGHT"><span style="font-family: Liberation Serif;">0</span></td>
<td align="RIGHT"><span style="font-family: Liberation Serif;">29136</span></td>
<td align="RIGHT"><span style="font-family: Liberation Serif;">0</span></td>
</tr>
</tbody>
</table>
<p>- Wall clock time</p>
<p>Ext3: real time: 34 minutes 23 seconds 557537 usec</p>
<p>Ext4: real time: 24 minutes 44 seconds 10118 usec</p></blockquote>
<p>* directio (without pagecache)</p>
<blockquote><p>- Command</p>
<p>seekrw -f /mnt/ext3/img -a 100000 -l 512 -r -d</p>
<p>seekrw -f /mnt/ext4/img -a 100000 -l 512 -r -d</p>
<p>- Performance result</p>
<p><!--   		BODY,DIV,TABLE,THEAD,TBODY,TFOOT,TR,TH,TD,P { font-family:"Liberation Sans"; font-size:x-small } --></p>
<table border="0" cellspacing="0" frame="VOID" rules="NONE">
<colgroup>
<col width="64"></col>
<col width="75"></col>
<col width="72"></col>
<col width="86"></col>
<col width="86"></col>
<col width="86"></col>
<col width="86"></col>
</colgroup>
<tbody>
<tr>
<td width="64" height="17" align="LEFT"><span style="font-family: Liberation Serif;"><br />
</span></td>
<td width="75" align="RIGHT"><span style="font-family: Liberation Serif;">Device</span></td>
<td width="72" align="RIGHT"><span style="font-family: Liberation Serif;">tps</span></td>
<td width="86" align="RIGHT"><span style="font-family: Liberation Serif;">Blk_read/s</span></td>
<td width="86" align="RIGHT"><span style="font-family: Liberation Serif;">Blk_wrtn/s</span></td>
<td width="86" align="RIGHT"><span style="font-family: Liberation Serif;">Blk_read</span></td>
<td width="86" align="RIGHT"><span style="font-family: Liberation Serif;">Blk_wrtn</span></td>
</tr>
<tr>
<td height="17" align="LEFT"><span style="font-family: Liberation Serif;">Ext3</span></td>
<td align="RIGHT">sdc</td>
<td align="RIGHT"><span style="font-family: Liberation Serif;">94.93</span></td>
<td align="RIGHT"><span style="font-family: Liberation Serif;">415.77</span></td>
<td align="RIGHT"><span style="font-family: Liberation Serif;">0</span></td>
<td align="RIGHT"><span style="font-family: Liberation Serif;">12473</span></td>
<td align="RIGHT"><span style="font-family: Liberation Serif;">0</span></td>
</tr>
<tr>
<td height="17" align="LEFT"><span style="font-family: Liberation Serif;">Ext4</span></td>
<td align="RIGHT">sdd</td>
<td align="RIGHT"><span style="font-family: Liberation Serif;">67.9</span></td>
<td align="RIGHT"><span style="font-family: Liberation Serif;">67.9</span></td>
<td align="RIGHT"><span style="font-family: Liberation Serif;">0</span></td>
<td align="RIGHT"><span style="font-family: Liberation Serif;">2037</span></td>
<td align="RIGHT"><span style="font-family: Liberation Serif;">0</span></td>
</tr>
<tr>
<td height="17" align="LEFT">Raw</td>
<td align="RIGHT">sdf</td>
<td align="RIGHT"><span style="font-family: Liberation Serif;">67.27</span></td>
<td align="RIGHT"><span style="font-family: Liberation Serif;">538.13</span></td>
<td align="RIGHT">0</td>
<td align="RIGHT"><span style="font-family: Liberation Serif;">16144</span></td>
<td align="RIGHT">0</td>
</tr>
</tbody>
</table>
<p>- Wall clock time</p>
<p>Ext3: real time: 33 minutes 26 seconds 947875 usec</p>
<p>Ext4: real time: 24 minutes 25 seconds 545536 usec</p>
<p>sdf: real time: 24 minutes 38 seconds 523379 usec    (raw device)</p></blockquote>
<p>From the above performance numbers, Ext4 is 39% faster than Ext3 on random I/O with or without paegcache, this is expected.</p>
<p>The result of random I/O on Ext4 and raw device, is almost same. This is a result also as expected. For file systems mapping &lt;logical offset, physical offset&gt; by extent, it&#8217;s quite easy to make most of the mapping records hot in memory. Random I/O on raw device has *NO* obvious performance advance then Ext4.</p>
<p>Dear developers, how about considering extent based file systems now <img src='http://blog.coly.li/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>&#8212;</p>
<p>[1] TFS, TaobaoFS. A distributed file system deployed for http://www.taobao.com . It is developed by core system team of Taobao, will be open source very soon.</p>
<p>[2] The hard disk is connected to RocketRAID 644 card via eSATA connecter into system.</p>
<p>[3] seekrw source code can be download from http://www.mlxos.org/misc/seekrw.c</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.coly.li/?feed=rss2&amp;p=87</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>a conversation on DLM lock levels used in OCFS2</title>
		<link>http://blog.coly.li/?p=81</link>
		<comments>http://blog.coly.li/?p=81#comments</comments>
		<pubDate>Fri, 30 Apr 2010 15:56:23 +0000</pubDate>
		<dc:creator>colyli</dc:creator>
				<category><![CDATA[Basic Knowledge]]></category>
		<category><![CDATA[File System Magic]]></category>
		<category><![CDATA[ocfs2]]></category>

		<guid isPermaLink="false">http://blog.coly.li/?p=81</guid>
		<description><![CDATA[Recently, I had a conversation with Mark Fasheh, the topic was DLM (Distributed Lock Manager) levels used in OCFS2 (Oracle Cluster File System v2). IMHO, the talk is quite useful for a starter of OCFS2 or DLM, I list the conversation here, hope it could be informative. Thank you, Mark Mark gave a simplified explanation [...]]]></description>
			<content:encoded><![CDATA[<p>Recently, I had a conversation with Mark Fasheh, the topic was DLM (Distributed Lock Manager) levels used in OCFS2 (Oracle Cluster File System v2). IMHO, the talk is quite useful for a starter of OCFS2 or DLM, I list the conversation here, hope it could be informative. Thank you, Mark <img src='http://blog.coly.li/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>Mark gave a simplified explanation on NL, PR and EX dlm lock levels used in OCFS2.</p>
<blockquote><p>There are 3 lock levels Ocfs2 uses when protecting shared resources.</p>
<p>&#8220;NL&#8221; aka &#8220;No Lock&#8221; this is used as a placeholder. Either we get it so that we<br />
can convert the lock to something useful, or we already had some higher level<br />
lock and dropper to NL so another node can continue. This lock level does not<br />
block any other nodes from access to the resource.</p>
<p>&#8220;PR&#8221; aka &#8220;Protected Read&#8221;. This is used to that multiple nodes might read the<br />
resource at the same time without any mutual exclusion. This level blocks only<br />
those nodes which want to make changes to the resource (EX locks).</p>
<p>&#8220;EX&#8221; aka &#8220;Exclusive&#8221;. This is used to keep other nodes from reading or changing<br />
a resource while it is being changed by the current node. This level blocks PR<br />
locks and other EX locks.</p>
<p>When another node wants a level of access to a resource which the current node<br />
is blocking due to it&#8217;s lock level, that node &#8220;downconverts&#8221; the lock to a<br />
compatible level. Sometimes we might have multiple nodes trying to gain<br />
exclusive access to a resource at the same time (say two nodes want to go from<br />
PR -&gt; EX). When that happens, only one node can win and the others are sent<br />
signals to &#8216;cancel&#8217; their lock request and if need be, &#8216;downconvert&#8217; to a mode<br />
which is compatible with what&#8217;s being requested. In the previous example, that<br />
means one of the nodes would cancel it&#8217;s attempt to go from PR-&gt;EX and<br />
afterwards it would drop it&#8217;s PR to NL since the PR lock blocks the other node<br />
from an EX.</p></blockquote>
<p>After read the above text, I talked with Mark in IRC,  here is the edited (remove unnecessary part) conversation log,</p>
<blockquote><p>coly: it&#8217;is an excellent material for DLM lock levels of ocfs2!<br />
mark: specially if that helps folks understand what&#8217;s happening in dlmglue.c<br />
* mark knows that code can be&#8230;. hard to follow  <img src='http://blog.coly.li/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /><br />
mark: another thing you might want to take note of &#8211; this whole &#8220;cancel convert&#8221; business is there because the dlm allows a process to retain it&#8217;s current lock level while asking for an escalation<br />
coly: one thing I am not clear is, what&#8217;s the functionality of dlmglue.c ? like the name, glue ?<br />
mark: if you think about it &#8211; being forced to drop the lock and re-acquire would eliminate the possibility of deadlock, at the expense of performance<br />
mark: think of dlmglue.c as the layer of code which abstracts away the dlm interface for the fs<br />
mark: as part of that abstraction, file system lock management is wholly contained within dlmglue.c<br />
coly: only dlmglue.c acts as a abstract layer ?  and the real job is done by fsdlm or o2dlm ?<br />
mark: yes<br />
mark: dlmglue is never actually creating resources itself &#8211; it&#8217;s asking the dlm on behalf of the file system<br />
mark: aside from code cleanliness, dlmglue provides a number of features the fs needs that the dlm (rightfully) does not provide<br />
coly: which kind of ?<br />
mark: lock caching for example &#8211; you&#8217;ll notice that we keep counts on the locks in dlmglue<br />
mark: also, whatever fs specific actions might be needed as part of a lock transition are initiated from dlmglue. an example of that would be checkpointing inode changes before allowing other nodes access, etc<br />
coly: yeah, that&#8217;s one more thing confusing me.<br />
coly:  It&#8217;s not clear to me yet, for the conception of upconvert and downconvert<br />
coly: when it combined with ast and bast<br />
coly: have you checked out the &#8220;dlmbook&#8221; pdf? it explains the dlm api (which once you understand, makes dlmglue a lot easier to figure out)<br />
coly: yes, I read it. but because I didn&#8217;t know ast and bast before, I don&#8217;t have conception on what happens in ast and bast<br />
coly: is it something like the signal handler ?<br />
mark: ast and bast though are just callbacks we pass to the dlm. one (ast) is used to tell fs that a request is complete, the other (bast) is used to tell fs that a lock is blocking progress from another node<br />
coly: when an ast is triggered, what will happen ? the node received the ast can make sure the requested lock level is granted ?<br />
mark: generally yes. the procedure is: dlmglue fires off a request&#8230; some time later, the ast callback is run and the status it passes to dlmglue indicates whether the operation succeeded<br />
coly: if a node receives a bast, what will happen ? I mean, are there options (e.g. release its lock, or ignore the bast) ?<br />
mark: release the lock once possible<br />
mark: that&#8217;s the only action that doesn&#8217;t lockup the cluster  <img src='http://blog.coly.li/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /><br />
coly: I see, once a node receives a bast, it should try best to downconvert the coresponded lock to NL.<br />
coly: it&#8217;s a little bit clear to me <img src='http://blog.coly.li/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p></blockquote>
<p>I recite the log other than my own understanding, it can be helpful to get the basic conception of OCFS2&#8242;s dlm levels and what ast and bast do.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.coly.li/?feed=rss2&amp;p=81</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>2010 first snow in Beijing</title>
		<link>http://blog.coly.li/?p=60</link>
		<comments>http://blog.coly.li/?p=60#comments</comments>
		<pubDate>Mon, 04 Jan 2010 08:03:09 +0000</pubDate>
		<dc:creator>colyli</dc:creator>
				<category><![CDATA[Great Days]]></category>
		<category><![CDATA[nature]]></category>

		<guid isPermaLink="false">http://blog.coly.li/?p=60</guid>
		<description><![CDATA[Yesterday, the 2010 first snow visited Beijing. I stayed in home till midnight, then went out to take some photos. The air was so cold, I walked in the frozen wind for 1.5 hours.  It was fun to see the snow covered every where, especially the houses, cars, and plants. Several fat cats appeared on [...]]]></description>
			<content:encoded><![CDATA[<p>Yesterday, the 2010 first snow visited Beijing. I stayed in home till midnight, then went out to take some photos.</p>
<p><a href="http://blog.coly.li/wp-content/uploads/2010/01/2010firstsnow1.jpg"><img class="alignnone size-full wp-image-70" title="2010firstsnow1" src="http://blog.coly.li/wp-content/uploads/2010/01/2010firstsnow1.jpg" alt="" width="600" height="450" /></a></p>
<p><a href="http://blog.coly.li/wp-content/uploads/2010/01/2010firstsnow2.jpg"><img class="alignnone size-full wp-image-71" title="2010firstsnow2" src="http://blog.coly.li/wp-content/uploads/2010/01/2010firstsnow2.jpg" alt="" width="600" height="450" /></a></p>
<p><a href="http://blog.coly.li/wp-content/uploads/2010/01/2010firstsnow3.jpg"><img class="alignnone size-full wp-image-72" title="2010firstsnow3" src="http://blog.coly.li/wp-content/uploads/2010/01/2010firstsnow3.jpg" alt="" width="600" height="450" /></a></p>
<p><a href="http://blog.coly.li/wp-content/uploads/2010/01/2010firstsnow4.jpg"><img class="alignnone size-full wp-image-73" title="2010firstsnow4" src="http://blog.coly.li/wp-content/uploads/2010/01/2010firstsnow4.jpg" alt="" width="600" height="450" /></a></p>
<p><a href="http://blog.coly.li/wp-content/uploads/2010/01/2010firstsnow5.jpg"><img class="alignnone size-full wp-image-74" title="2010firstsnow5" src="http://blog.coly.li/wp-content/uploads/2010/01/2010firstsnow5.jpg" alt="" width="600" height="450" /></a></p>
<p>The air was so cold, I walked in the frozen wind for 1.5 hours.  It was fun to see the snow covered every where, especially the houses, cars, and plants. Several fat cats appeared on my way without glancing on me. I guesses they were looking for some warm place to stay, wish they felt comfortable last night and still be okey this morning. It&#8217;s probably that cats are stronger than me, after last night&#8217;s walk and even stayed in a warm room, I am afraid I&#8217;ve caught a chill <img src='http://blog.coly.li/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' /> </p>
<p>In China, it was a perfect sign for a big snow in beginning of year 2010.  Maybe this is another excited and impressive new year, if we are more diligent and optimistic, who knows ? <img src='http://blog.coly.li/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.coly.li/?feed=rss2&amp;p=60</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Please help a Linux programmer&#8217;s daughter, she is dying</title>
		<link>http://blog.coly.li/?p=44</link>
		<comments>http://blog.coly.li/?p=44#comments</comments>
		<pubDate>Fri, 01 Jan 2010 08:49:06 +0000</pubDate>
		<dc:creator>colyli</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.coly.li/?p=44</guid>
		<description><![CDATA[Junting Pan, an excellent Linux programmer in Beijing, a friend of mine, his daughter is dying. I am here asking more people to save the lovely life of a little girl. Yifan, the 5 years old daughter of Pan, has a badly lung disease in past years, she almost died on Nov 11 2009 (http://help-yifan.org/img/notice.jpg).  [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.help-yifan.org"><img class="alignnone size-full wp-image-46" title="help-yifan" src="http://blog.coly.li/wp-content/uploads/2010/01/help-yifan.jpg" alt="" width="500" height="496" /></a></p>
<p>Junting Pan, an excellent Linux programmer in Beijing, a friend of mine, his daughter is dying. I am here asking more people to save the lovely life of a little girl.</p>
<p>Yifan, the 5 years old daughter of Pan, has a badly lung disease in past years, she almost died on Nov 11 2009 (http://help-yifan.org/img/notice.jpg).  In order to save her life, her parents must send their little girl to see some of the best specialists in the world, which means  a big amount of money ($300K~$500K US dollar).  This is an impossible number for a software engineer (especially in a developing country).</p>
<p><a href="http://www.yifanfund.com"><img class="alignnone size-full wp-image-47" title="yifan" src="http://blog.coly.li/wp-content/uploads/2010/01/yifan.jpg" alt="" width="300" height="200" /></a></p>
<p>Yesterday, the last day of Year 2009, I visited Yifan&#8217;s family in Beijing. Her parents sold their only house to support the treatment expense, now the whole family stayed together in a small room.  Yifan&#8217;s mother and father were brave and strong-minded, we talked about Yifan&#8217;s physical situation and current donation amount. The great news was, by Dec 31, 2009, help-yifan.org got 314K RMB Yuan donation (most of it was from China mainland), which was almost 1/10 of the expected donation amount. Yifan said hello to me, and looked at me with sweet smile. She looked like a small flower, to wait for the beautiful sunshine of he life. What a great miracle if she can have a blissful tomorrow, while what a pity if she has to leave us due to the lung disease.</p>
<p>Last week, I got the remuneration of &#8220;Linkers and Loaders&#8221; Chinese translation, and donated it to little Yifan. I wish it&#8217;s helpful, but in order to save the life of Yifan, the family needs more help from more people in the world. If you read this blog, please do not hesitate to tell Yifan&#8217;s story to your friends.</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="450" height="363" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="align" value="middle" /><param name="allowScriptAccess" value="always" /><param name="allowFullScreen" value="true" /><param name="quality" value="high" /><param name="wmode" value="transparent" /><param name="src" value="http://www.tudou.com/player/outside/beta_player.swf?iid=43545918" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="450" height="363" src="http://www.tudou.com/player/outside/beta_player.swf?iid=43545918" wmode="transparent" quality="high" allowfullscreen="true" allowscriptaccess="always" align="middle"></embed></object></p>
<p>If you want to help Yifan, please visit <a href="http://www.help-yifan.org/" target="_blank">http://www.help-yifan.org</a> (Chinese) or <a href="http://www.yifanfund.com" target="_blank">http://www.yifanfund.com</a> (English)  , donation or volunteer are all helpful. Today is the first day of a brand new year. I wish Yifan to be able to have more new years in the future,  wish people from all of the world can help little Yifan, to make the life&#8217;s miracle happen.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.coly.li/?feed=rss2&amp;p=44</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>OCFS2 Truncate Log</title>
		<link>http://blog.coly.li/?p=40</link>
		<comments>http://blog.coly.li/?p=40#comments</comments>
		<pubDate>Fri, 11 Dec 2009 08:17:26 +0000</pubDate>
		<dc:creator>colyli</dc:creator>
				<category><![CDATA[File System Magic]]></category>

		<guid isPermaLink="false">http://blog.coly.li/?p=40</guid>
		<description><![CDATA[Here are some lines I copied from &#8220;OCFS2 Support Guide &#8211; On-Disk Format&#8221; Truncate Log Truncate logs help to improve the delete performance. This system file allows the fs to collect freed bits and flush it to the global bitmap in chunks. What that also means is that space could be temporarily &#8220;lost&#8221; from the [...]]]></description>
			<content:encoded><![CDATA[<p>Here are some lines I copied from &#8220;<a href=" http://oss.oracle.com/projects/ocfs2/dist/documentation/v1.2/03-disk_format.pdf" target="_blank">OCFS2 Support Guide &#8211; On-Disk Format</a>&#8221;</p>
<blockquote><p>Truncate Log</p>
<p>Truncate logs help to improve the delete performance. This system file allows the fs to collect freed bits and flush it to the global bitmap in chunks. What that also means is that space could be temporarily &#8220;lost&#8221; from the fs. As in, the space freed by deleting a large file may not show up immediately. One can view the orphan_dirs and the truncate_logs to account for such &#8220;lost&#8221; space.</p>
<p>To view a truncate log, do:</p>
<p><img class="alignnone size-large wp-image-42" title="truncate_log_output" src="http://blog.coly.li/wp-content/uploads/2009/12/truncate_log_output1-1024x589.jpg" alt="truncate_log_output" width="636" height="365" /></p>
<p>The truncate_log keeps records of start cluster# and number of clusters. The max number of such records &#8220;Total Records&#8221; depend on the block size. The above is for a 4K block size.</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://blog.coly.li/?feed=rss2&amp;p=40</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>BeijingLSF 2009</title>
		<link>http://blog.coly.li/?p=24</link>
		<comments>http://blog.coly.li/?p=24#comments</comments>
		<pubDate>Tue, 27 Oct 2009 18:31:21 +0000</pubDate>
		<dc:creator>colyli</dc:creator>
				<category><![CDATA[File System Magic]]></category>
		<category><![CDATA[Great Days]]></category>
		<category><![CDATA[kernel]]></category>

		<guid isPermaLink="false">http://blog.coly.li/?p=24</guid>
		<description><![CDATA[In the passed several months, I was helping to organize BeijingLSF(Beijing Linux Storage and File System Workshop) with other kernel developers in China. This great event happened on Oct 24, here is my report. Since early this year, budget control happens in almost all companies/organizations, many local kernel developers in China could not attend LSF [...]]]></description>
			<content:encoded><![CDATA[<p>In the passed several months, I was helping to organize BeijingLSF(Beijing Linux Storage and File System Workshop) with other kernel developers in China. This great event happened on Oct 24, here is my report.</p>
<p>Since early this year, budget control happens in almost all companies/organizations, many local kernel developers in China could not attend LSF in United States (it&#8217;s quite interesting that most of kernel developers in China are storage related, mm, cgroup, io controller, fs, device mapper &#8230;). In such condition, we found there were enough people inside China to sit together for discussion on storage and file system related topics. In 2009 April, a proposal was posted on <a href="mailto:linux-kernel@zh-kernel.org">linux-kernel@zh-kernel.org</a> for BeijingLSF. Many people provided positive feed back, then we started to organize this event.</p>
<p>A 7 persons&#8217; committee was set up firstly, people were from Novell, Intel, Oracle, Redhat, Freescale. The committee made a 20 persons&#8217; invitation list. The website was built on <a href="http://www.linuxevents.cn/beijinglsf">http://www.linuxevents.cn/beijinglsf</a> and all invitees registered. Fortunately we got sponsorship from Novell China for soft drink and snack.</p>
<p>There were 6 sessions for BeijingLSF 2009. There was no talk, people just sat together to discuss on specific topics.</p>
<p>The first session was distributed locker manager. I led the session, the discussion included,</p>
<blockquote><p>- introduced back ground of dlm, and current issues from fs/dlm (most of the issues were from my closed-or-opened and open-to-community BNCs).</p>
<p>- Oracle ocfs2 developers explained why ocfs2 using 64bytes lock value block.</p>
<p>- Jiaju Zhang (Novell) explained his patches for dlm performance improvement.</p>
<p>- Tao Ma (Oracle), Jiaju Zhang (Novell), Xinwei Hu (Novell) and I, discussed how dlm working with ocfs2&#8242;s user mode cluster stack.</p></blockquote>
<p>The second session was clustering file system, led by Tao Ma (Oracle). Tao suggested people to introduce each other before the session. During the introduction, discussion happened when people introduced their current projects. When the discussion finished, 40 minutes passed. The workshop had no introduction time planed, therefore most time of this session was used for people to know each other. IMHO it was worth. This was the first time almost all storage and file system developers in China sat together, people came to know the faces behind email addresses.</p>
<p>The last session in the morning was shared storage and snapshot, led by Xinwei Hu (Novell). Xinwei introduced how logical volume management working in clustering environment, then discussion happened on,</p>
<blockquote><p>- Considering snapshot start to happen on file system level, snapshot by device mapper might be less and less important in future.</p>
<p>- Is it possible to support snapshot by lvm in clustering environment and is it worth ? There was no conclusion from the discussion, and I&#8217;d like to hear from device mapper developers <span><span> <img src='http://blog.coly.li/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </span></span></p></blockquote>
<p>After the lunch, the first session in the afternoon was VFS readahead and writeback. The session was led by Fengguang Wu  (Intel), a 6 pages slide made people discuss for 90 minutes. Wu spent 20 minutes to introduce his patch, then people talked about,</p>
<blockquote><p>- Why anonymous pages and file pages should be treated differently.</p>
<p>- In order to improvement writeback performance, MM should be able to suspend (maybe there is some better term) a process who making too many dirty pages.</p>
<p>- On some kind of SSD, linear read/write was slower than discrete read/write. If the storage media was SSD, there might be little difference for the writeback policy.</p></blockquote>
<p>Second session in the afternoon was I/O controller and I/O bandwidth. The session was led by Jiangfeng Gui (Fujitsu). This talk was quite new to most of the attendees. Jianfeng explained the conception of io controller very well, at least I understood it was a software conception, not a haredware <span><span> <img src='http://blog.coly.li/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  </span></span> io controller was an interesting idea, but most of concern in the workshop was focused on its complexity.</p>
<p>The last session of the workshop was interaction with industry. We invited an engineer from Lenovo &#8211; Yilei Lu, who was working on a internet storage solution based on Linux operating system. Yilei introduced how they used Linux as base system in their storage solution, what problems or difficulties they encountered. Many people provided suggestions to the questions, and most of the developers were very happen to hear feed back from the development users.</p>
<p>After all the six sessions, there was light talks. Almost all attendees said this workshop was the first effort to make upstream active developers to sit together in China. Some people showed their willing to sponsor BeijingLSF next year (if there is), some people said they could help to organize similar events in their cities.  IMHO, BeijingLSF is a great and successful event. The most important thing is even not discussion, this is the <strong><span>*</span>first<span>*</span></strong> time for <strong><span>*</span>ALL<span>*</span></strong> (yes ALL) most active storage related developers within China to see each other, and have chance to talk face to face. Unlike LSF in United States, BeijingLSF has little effect to Linux storage and file system development, anyway it&#8217;s a great effort to make discussion and face-to-face communication happen.</p>
<p>Novell acts a very important role and contributes quite a lot to BeijingLSF. I was able to use the ITO (what a great idea!) to help organize BeijingLSF, and Novell China sponsored soft drink and snack to make all attendees more comfortable while talking whole day.</p>
<p>Finally please permit me to thank all attendees, they are,</p>
<blockquote><p>Bo Yang, Coly Li, Fengguang Wu, Herbert Xu, Jeff He, Jeff Liu, Jiaju Zhang, Jianfeng Gui, Michael Fu, Tao Ma, Tiger Yang, Xiao Luo, Xinwei Hu, Xu Wang, Yang Li, Yawei Niu, Yilei Lu, Yu Zhong, Zefan Li, Zheng Yan.</p></blockquote>
<p>Your coming and participating make BeijingLSF being a great and successful event.</p>
<div id="attachment_29" class="wp-caption alignnone" style="width: 922px"><a href="http://picasaweb.google.com/colyli/BeijingLSF2009"><img class="size-full wp-image-29" title="beijinglsf2009" src="http://blog.coly.li/wp-content/uploads/2009/10/beijinglsf2009.jpg" alt="Beijing Linux Storage and File System Workshop 2009" width="912" height="684" /></a><p class="wp-caption-text">Beijing Linux Storage and File System Workshop 2009</p></div>
<p>[If you are interested on how the attendees look alike, please check <a href="http://picasaweb.google.com/colyli/BeijingLSF2009">http://picasaweb.google.com/colyli/BeijingLSF2009</a>]</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.coly.li/?feed=rss2&amp;p=24</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>My first publish</title>
		<link>http://blog.coly.li/?p=17</link>
		<comments>http://blog.coly.li/?p=17#comments</comments>
		<pubDate>Fri, 16 Oct 2009 17:53:16 +0000</pubDate>
		<dc:creator>colyli</dc:creator>
				<category><![CDATA[Basic Knowledge]]></category>
		<category><![CDATA[Great Days]]></category>

		<guid isPermaLink="false">http://blog.coly.li/?p=17</guid>
		<description><![CDATA[After publish the Chinese translation of &#8220;Linkers and Loaders&#8221; on http://www.mlxos.org , this week the Chinese version of this great book is published. This is my first publish, though it&#8217;s a translation If anyone finds any mistake from the translation, please send the errata to publisher or to me directly. I do appreicate for your [...]]]></description>
			<content:encoded><![CDATA[<p>After publish the Chinese translation of &#8220;Linkers and Loaders&#8221; on http://www.mlxos.org , this week the Chinese version of this great book is published. This is my first publish, though it&#8217;s a translation <img src='http://blog.coly.li/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p><img class="alignnone size-full wp-image-18" title="linkers_and_loaders" src="http://blog.coly.li/wp-content/uploads/2009/10/zcover.jpg" alt="linkers_and_loaders" width="158" height="200" /></p>
<p>If anyone finds any mistake from the translation, please send the errata to publisher or to me directly. I do appreicate for your feed back <img src='http://blog.coly.li/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>[NOTE: the cover picture is copied from china-pub.com ]</p>
<p><img src="file:///tmp/moz-screenshot.jpg" alt="" /></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.coly.li/?feed=rss2&amp;p=17</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>The wonderful openSUSE Conference 2009</title>
		<link>http://blog.coly.li/?p=31</link>
		<comments>http://blog.coly.li/?p=31#comments</comments>
		<pubDate>Tue, 22 Sep 2009 19:07:28 +0000</pubDate>
		<dc:creator>colyli</dc:creator>
				<category><![CDATA[Great Days]]></category>

		<guid isPermaLink="false">http://blog.coly.li/?p=31</guid>
		<description><![CDATA[In September 16-20, I was in Nuremberg Germany for openSUSE Conference 2009. In previous years, Labs member attended SuSE Labs conference. This year, the Labs conference was cancelled and we were encouraged to attend openSUSE Conference. IMHO, more investment on openSUSE community is a great idea, we need more hands from community. I was invited [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://en.opensuse.org/OpenSUSE_Conf_2009"><img class="alignnone size-full wp-image-37" title="OS-Conf2009_Leaderboard" src="http://blog.coly.li/wp-content/uploads/2009/09/OS-Conf2009_Leaderboard.jpg" alt="OS-Conf2009_Leaderboard" width="728" height="90" /></a></p>
<p>In September 16-20, I was in Nuremberg Germany for openSUSE Conference 2009.</p>
<p>In previous years, Labs member attended SuSE Labs conference. This year, the Labs conference was cancelled and we were encouraged to attend openSUSE Conference. IMHO, more investment on openSUSE community is a great idea, we need more hands from community.</p>
<p>I was invited to give a talk, the topic was about the open source development activities among a group of Chinese university students in Beijing. In the past 4 years, a group of university students in Beijing University of Post and Telecommunication contribute quite a few to open source community. In my talk, I introduced how the people were grouped and how the technical seminars were organized, of cause including the Google Summer of Code projects in the past 2 years. The slide file and video of my talk can be found on the internet [1].</p>
<p>OSC09 was a great chance to meet other community members, especially some ones did excellent contributions but never met before. For example, I spend 4~5 happy hours every month to read the openSUSE Weekly News. The News content is well organized and prepared, especially the community news and people of openSUSE. During the conference. One day I took Tram to conference venue from SUSE office, on the Tram I met a very nice guy, wore a black openSUSE T-shirt. We talked about the openSUSE community and the Weekly News, I was supprised to know him as a Weekly News editor after his self introduction, I never though I had opportunity to meet these cool guys face to face! This was the wonderful side effect of this conference, and collaboration happened. I decided to send text to him when I had valuable News, therefore I remembered his name &#8212; Sascha Manns.</p>
<p>This year I acted as mentor of a Google Summer of Code project, to guide a student to port openSUSE to MIPS platform (I will mention the project detail in another blog). During the conference, I met another Google Summer of Code group (Jan-Simon Möller, Martin Mohring, Adrian Schröter) who ported openSUSE to ARM platform. The openSUSE ARM porting student gave a talk on the conference, to introduce their job. I got very helpful information from his talk, and from the discussion after the talk. When we ported openSUSE to MIPS, we used system mode QEMU as the target MIPS hardware for RPM package building, which was every slow. Building GCC even spent around 5 days! The ARM porting team used a very smart method, they used user mode QEMU. The user mode QEMU is able to run a normal program on x86 machine which compiled for ARM processor, without emulating the whole system, compiling GCC just spends 3~4 hours. Right now QEMU does not support 64bit user mode, before integrating MIPS support to OBS (OpenSUSE Build Service), enabling the 64bit MIPS user mode support for QEMU might be our next target.</p>
<p>Since 2008, I know there is a community board of openSUSE (the board definitely exists earlier). On the second day here was a session to meet openSUSE board. Before the session, the board members were only symbols/strings/names to me. This time I knew they were 6 people (IIRC, why not 5 or 7 seats?) and who they were. The difficulty for me was, I could remember their faces, but was not able to pronounce their names correctly. In the Q&amp;A time, I suggested to mark the pronunciation of board members on openSUSE website. This might not be a good idea, but really helpful for non native English (or other language) speakers to identify the community board members.</p>
<p>On the last day, there was an interesting session &#8212; &#8216;openSUSE Legal&#8217;. In this session, Jürgen Weigert and other people explained how to comp with software patent, different software release license. In the past years, I tried to assemble source code from MINIX (BSD like license), Linux Kernel (GPL2)), uClibc (GLGPL) into a hobby OS. I asked a question on how to do with this condition. The answer was quite clear, 1) If I could get announcement from the code authors to use a unified license, the unified license could be used. Otherwise 2) declare different license for different code. I need to find quite a lot time to declare different license to MLXOS [2].</p>
<p>Besides the above topics, I also attended some other very interesting sessions, e.g. Tackling a Buggy Kernel by Nikanth Karthikesan, Making Technology Previews Succeed by Suresh Jayaraman, openSUSE &amp; Moblin by Michael Meeks, Visualizing Package Dependencies by Klaus Kampf, Git in the Build Service by Andreas Gruenbacher, Samba by Lars Müller &#8230; The final light talk was also impressive to me, especially the awesome Baconn <img src='http://blog.coly.li/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>For openSUSE community, the OSC09 is a great event, we have chance to do face to face communication, which is very helpful to people work closer. Thanks to Novell for the conference sponsorship, wish all people continue to enjoy the community.</p>
<p>[1] Slide file and video of my talk:<br />
<a href="http://blog.coly.li/docs/OSC09.coly.pdf" target="_blank"> http://blog.coly.li/docs/OSC09.coly.pdf</a><br />
<a href="http://community.opensuse.org/conference/2009-09-18/Chinese_Students_Coly_Li_tape_IV_2009.09.18_12-11-31.dv" target="_blank"> http://community.opensuse.org/conference/2009-09-18/Chinese_Students_Coly_Li_tape_IV_2009.09.18_12-11-31.dv</a><br />
[2] MLXOS website:<br />
<a href="http://www.mlxos.org" target="_blank"> http://www.mlxos.org</a><br />
<a href="http://sourceforge.net/projects/mlxos/" target="_blank"> http://sourceforge.net/projects/mlxos/</a><br />
[3] Conference schedule<br />
<a href="http://en.opensuse.org/OpenSUSE_Conf_2009/Schedule" target="_blank"> http://en.opensuse.org/OpenSUSE_Conf_2009/Schedule</a><br />
[4] Pictures of OSC09<br />
<a href="http://lizards.opensuse.org/2009/09/19/opensuse-conference-photos/" target="_blank"> http://lizards.opensuse.org/2009/09/19/opensuse-conference-photos/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.coly.li/?feed=rss2&amp;p=31</wfw:commentRss>
		<slash:comments>1</slash:comments>
<enclosure url="http://community.opensuse.org/conference/2009-09-18/Chinese_Students_Coly_Li_tape_IV_2009.09.18_12-11-31.dv" length="7451280000" type="video/dv" />
		</item>
	</channel>
</rss>
