<?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/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Kaiwan's Tech Blog</title>
	<atom:link href="http://kaiwantech.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://kaiwantech.wordpress.com</link>
	<description>YALIN! Yet Another LINux blog</description>
	<lastBuildDate>Tue, 06 Oct 2009 04:00:27 +0000</lastBuildDate>
	<generator>http://wordpress.com/</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<cloud domain='kaiwantech.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://www.gravatar.com/blavatar/7a3c8bba9b64ed95514887c6c4c9ec40?s=96&#038;d=http://s.wordpress.com/i/buttonw-com.png</url>
		<title>Kaiwan's Tech Blog</title>
		<link>http://kaiwantech.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://kaiwantech.wordpress.com/osd.xml" title="Kaiwan&#8217;s Tech Blog" />
		<item>
		<title>Inside the MSDOS / FAT Linux VFS Implementation</title>
		<link>http://kaiwantech.wordpress.com/2009/08/17/inside-the-msdos-fat-linux-vfs-implementation/</link>
		<comments>http://kaiwantech.wordpress.com/2009/08/17/inside-the-msdos-fat-linux-vfs-implementation/#comments</comments>
		<pubDate>Mon, 17 Aug 2009 12:51:28 +0000</pubDate>
		<dc:creator>Kaiwan</dc:creator>
				<category><![CDATA[Linux Kernel]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[fat]]></category>
		<category><![CDATA[filesystem]]></category>
		<category><![CDATA[inode]]></category>
		<category><![CDATA[kernel]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[msdos]]></category>
		<category><![CDATA[superblock]]></category>
		<category><![CDATA[vfat]]></category>
		<category><![CDATA[vfs]]></category>

		<guid isPermaLink="false">http://kaiwantech.wordpress.com/?p=102</guid>
		<description><![CDATA[
A (small) part of the Linux VFS module of the Designer Graphix Linux Internals training programme.
Referenced kernel ver: 2.6.30
Once extracted, see the
 fs/fat
folder.
_Tip:_
For ease of code browsing, do &#8216;make tags&#8217; (or &#8216;ctags -R&#8217;) in the root folder of the kernel soure tree.
cd fs/fat
Note: Here the focus is on part of the MSDOS &#8211; Linux VFS [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kaiwantech.wordpress.com&blog=6153622&post=102&subd=kaiwantech&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p><!-- 		@page { margin: 2cm } 		P { margin-bottom: 0.21cm } 		H2 { margin-bottom: 0.21cm } 		A:link { so-language: zxx } --></p>
<h2>A (small) part of the <em>Linux VFS</em> module of the <a href="http://www.designergraphix.com/">Designer Graphix</a> Linux Internals training programme.</h2>
<p>Referenced kernel ver: 2.6.30</p>
<p>Once extracted, see the</p>
<pre> fs/fat</pre>
<p>folder.</p>
<p><em>_Tip:_</em><br />
For ease of code browsing, do &#8216;make tags&#8217; (or &#8216;ctags -R&#8217;) in the root folder of the kernel soure tree.</p>
<pre style="margin-bottom:.5cm;">cd fs/fat</pre>
<p><span style="text-decoration:underline;">Note:</span> Here the focus is on part of the MSDOS &#8211; Linux VFS kernel implementation, mainly the disk-related part, i.e., the superblock and inode objects. We don&#8217;t attempt to cover the Dcache/dentry, page cache (address operations) and just touch upon the process&lt;&#8211;&gt;filesystem relationship stuff (at least for now).</p>
<p><em>_Tip:_</em><br />
To gain some insight into the physical structure / arch of the MSDOS (and [v]fat) filesystem, <a href="http://en.wikipedia.org/wiki/File_Allocation_Table#Design">see this page</a>.<br />
The <em>&lt;linux/msdos_fs.h&gt;</em> header mirrors much of this.</p>
<p>For example, the FAT16 boot record (boot sector) structure is nicely <a href="http://home.teleport.com/~brainy/fat16.htm">seen here</a>; it&#8217;s Linux layout is here:<br />
<em>include/linux/msdos_fs.h:struct fat_boot_sector</em><br />
(can browse it via the superb <a href="http://lxr.linux.no/#linux+v2.6.30.5/include/linux/msdos_fs.h#L104">LXR tool here</a>).</p>
<p><strong>Superblock Setup</strong></p>
<p>In <em>namei_msdos.c</em>:</p>
<pre>...
static struct <span style="color:#008000;">file_system_type</span> msdos_fs_type = {
	.owner          = THIS_MODULE,
	.name           = "msdos",
	.get_sb         = msdos_get_sb,
	.kill_sb        = kill_block_super,
	.fs_flags       = FS_REQUIRES_DEV,
};

static int __init init_msdos_fs(void)
{
	return <span style="color:#008000;">register_filesystem</span>(&amp;msdos_fs_type);
}
...</pre>
<p>So, the routine invoked upon mounting is <em>msdos_get_sb </em>:</p>
<p style="margin-bottom:0;">Following the call chain in <span style="color:#0000ff;"><em>msdos_get_sb</em></span><em> </em>(see the flow diagram), control hits VFS <span style="color:#008000;"><em>fill_super</em></span> routine, which implicitly invokes the <span style="color:#0000ff;"><em>msdos_fill_super</em></span> routine (function pointer passed via a parameter). This is the MSDOS-filesystem-specific routine to initialize the superblock.</p>
<p style="margin-bottom:0;">
<p><a href="http://kaiwantech.files.wordpress.com/2009/08/vfs_msdos_31.png"><img class="alignnone size-full wp-image-128" title="vfs msdos " src="http://kaiwantech.files.wordpress.com/2009/08/vfs_msdos_31.png?w=500&#038;h=580" alt="vfs msdos " width="500" height="580" /></a></p>
<p style="margin-bottom:0;">
<p style="margin-bottom:0;">This invokes the <span style="color:#0000ff;"><em>fat_fill_super</em></span> routine which actually allocates memory for and initializes the MSDOS superblock structure – <span style="color:#800000;">struct msdos_sb_info</span> ; this is the data structure that MSDOS FS uses to map it&#8217;s filesystem superblock into the kernel&#8217;s VFS <span style="color:#800000;">struct super_block </span>structure. This routine reads from disk the MSDOS superblock, parses mount options, makes validity checks on the filesystem superblock, and finally intializes the structure.</p>
<pre>...
        sb-&gt;s_magic = MSDOS_SUPER_MAGIC;
        sb-&gt;s_op = &amp;fat_sops;
        sb-&gt;s_export_op = &amp;fat_export_ops;
        <span style="color:#993300;">sbi</span>-&gt;dir_ops = fs_dir_inode_ops;
<em>					&lt;&lt; sbi is the  </em><span style="color:#800000;"><em>msdos_sb_info </em></span><span style="color:#000000;"><em>structure &gt;&gt;</em></span>
...
        bh = <span style="color:#008000;">sb_bread</span>(sb, 0);           <em>&lt;&lt; Block read off disk, sector 0 - boot sector &gt;&gt;</em>
        if (bh == NULL) {
                printk(KERN_ERR "FAT: unable to read boot sector\n");
                goto out_fail;
        }

        b = (struct fat_boot_sector *) bh-&gt;b_data;
...

        sbi-&gt;cluster_size = sb-&gt;s_blocksize * sbi-&gt;sec_per_clus;       <em>&lt;&lt; Init msdos superblock &gt;&gt;</em>
        sbi-&gt;cluster_bits = ffs(sbi-&gt;cluster_size) - 1;
        sbi-&gt;fats = b-&gt;fats;
        sbi-&gt;fat_bits = 0;              /* Don't know yet */
        sbi-&gt;fat_start = le16_to_cpu(b-&gt;reserved);
        sbi-&gt;fat_length = le16_to_cpu(b-&gt;fat_length);
        sbi-&gt;root_cluster = 0;
        sbi-&gt;free_clusters = -1;        /* Don't know yet */
        sbi-&gt;free_clus_valid = 0;
        sbi-&gt;prev_free = FAT_START_ENT;

        if (!sbi-&gt;fat_length &amp;&amp; b-&gt;fat32_length) {
                struct fat_boot_fsinfo *fsinfo;
                struct buffer_head *fsinfo_bh;

                /* Must be FAT32 */
                sbi-&gt;fat_bits = 32;
                sbi-&gt;fat_length = le32_to_cpu(b-&gt;fat32_length);
                sbi-&gt;root_cluster = le32_to_cpu(b-&gt;root_cluster);
...</pre>
<p style="margin-bottom:0;">
<p style="margin-bottom:0;">It then sets up the root inode as well (including getting the superblock&#8217;s <em>s_root</em> field to point to the root inode.</p>
<pre>...
        root_inode = <span style="color:#008000;">new_inode</span>(sb);
        if (!root_inode)
                goto out_fail;
        root_inode-&gt;i_ino = MSDOS_ROOT_INO;
        root_inode-&gt;i_version = 1;
        error = fat_read_root(root_inode);
        if (error &lt; 0)
                goto out_fail;
        error = -ENOMEM;
        insert_inode_hash(root_inode);
        sb-&gt;s_root = <span style="color:#008000;">d_alloc_root</span>(root_inode);
...</pre>
<h2><span style="font-size:small;"><strong>Inodes Setup</strong></span></h2>
<p style="margin-bottom:0;">The inode represents any kind of file object. However, the VFS distinguishes between inode operations to be enacted on a directory object versus those to be enacted on a regular file (I/O) object.</p>
<p style="margin-bottom:0;">So we have two &#8216;inode_operations&#8217; structures that the filesystem implements – one for directory operations – creation, deletion, lookup, rename, etc – anything that operates directly on a “directory” (think “.” file) object, and one &#8216;inode_operations&#8217; structure for actual file IO.</p>
<p style="margin-bottom:0;">
<p style="margin-bottom:0;"><strong>Inode Create and Init<br />
</strong></p>
<p style="margin-bottom:0;">
<p style="margin-bottom:0;">Whenever a new file is created, the filesystem has to allocate an inode. The &#8216;alloc_inode&#8217; method of the superblock&#8217;s super_operations does this.<br />
For MSDOS, we have (infs/fat/inode.c):</p>
<pre style="margin-bottom:0;">static const struct super_operations fat_sops = {
 .<span style="color:#ff0000;">alloc_inode</span>    = fat_alloc_inode,
 .destroy_inode  = fat_destroy_inode,
 .write_inode    = fat_write_inode,
 .delete_inode   = fat_delete_inode,
 .put_super      = fat_put_super,
 .write_super    = fat_write_super,
 .statfs         = fat_statfs,
 .clear_inode    = fat_clear_inode,
 .remount_fs     = fat_remount,
.show_options   = fat_show_options,
};</pre>
<pre style="margin-bottom:0;">...</pre>
<p>The <em>fs/inode.c:new_inode()</em> routine is invoked to obtain a new inode.<br />
It in turn, invokes the <em>alloc_inode()</em> routine.</p>
<pre style="margin-bottom:0;">static struct inode *alloc_inode(struct super_block *sb)
{
 struct inode *inode;

 if (sb-&gt;s_op-&gt;alloc_inode)
    inode = sb-&gt;s_op-&gt;alloc_inode(sb);
 else
    inode = kmem_cache_alloc(inode_cachep, GFP_KERNEL);

 if (inode)
 return inode_init_always(sb, inode);
 return NULL;
}</pre>
<p>So, we can see that <em>alloc_inode</em> invokes the filesystem-specific method from the filesystem&#8217;s superblock operations.<br />
This is the &#8216;<em>fat_alloc_inode</em>&#8216; method (see the fat_sops structure above):</p>
<p>In <em>fs/fat/inode.c</em> :</p>
<pre style="margin-bottom:0;">...
static struct kmem_cache *fat_inode_cachep;

static struct inode *fat_alloc_inode(struct super_block *sb)
{
 struct msdos_inode_info *ei;
 ei = kmem_cache_alloc(fat_inode_cachep, GFP_NOFS);
 if (!ei)
    return NULL;
 return &amp;ei-&gt;vfs_inode;
}
...</pre>
<p><span style="font-style:normal;">Notice how a<em> custom slab cache</em> (to hold MSDOS inode objects) is used to rapidly perform the allocation (&amp; subsequent free back into the cache).</span></p>
<p><strong><br />
The MSDOS/FAT Directory Inode Operations</strong></p>
<p style="margin-bottom:0;">Initialize an inode:<br />
The &#8216;create&#8217; method of the file_operations structure, therefore, is setup to point to a method to do this for the particular filesystem implementation.</p>
<p style="margin-bottom:0;">So, we see in <em>fs/fat/namei_msdos.c </em><span style="font-style:normal;">:</span></p>
<pre><span style="font-style:normal;">static const struct </span><span style="color:#800000;"><span style="font-style:normal;">inode_operations msdos_dir_inode_operations </span></span><span style="font-style:normal;">= {</span>
        <span style="font-style:normal;">.</span><span style="color:#ff0000;"><span style="font-style:normal;">create         = msdos_create</span></span><span style="font-style:normal;">,</span>
        <span style="font-style:normal;">.lookup         = msdos_lookup,</span>
        <span style="font-style:normal;">.unlink         = msdos_unlink,</span>
        <span style="font-style:normal;">.mkdir          = msdos_mkdir,</span>
        <span style="font-style:normal;">.rmdir          = msdos_rmdir,</span>
        <span style="font-style:normal;">.rename         = msdos_rename,</span>
        <span style="font-style:normal;">.setattr        = fat_setattr,</span>
        <span style="font-style:normal;">.getattr        = fat_getattr,</span>
<span style="font-style:normal;">};</span>

<span style="font-style:normal;">static int msdos_fill_super(struct super_block *sb, void *data, int silent)</span>
<span style="font-style:normal;">{</span>
        <span style="font-style:normal;">int res;</span><span style="font-style:normal;"> </span>
        <span style="font-style:normal;">res = fat_fill_super(sb, data, silent, </span><span style="color:#800000;"><span style="font-style:normal;">&amp;msdos_dir_inode_operations</span></span><span style="font-style:normal;">, 0);</span>
<span style="font-style:normal;">...</span></pre>
<p style="margin-bottom:0;"><em>fs/fat/inode.c:</em></p>
<p style="margin-bottom:0;">&#8230;</p>
<pre style="font-style:normal;">/*
 * Read the super block of an MS-DOS FS.
 */
int fat_fill_super(struct super_block *sb, void *data, int silent,
                   const struct inode_operations *<span style="color:#800000;">fs_dir_inode_ops</span>, int isvfat)
{
...
	<span style="color:#ff0000;">sbi-&gt;dir_ops </span>= fs_dir_inode_ops;
...</pre>
<p style="margin-bottom:0;">
<p style="margin-bottom:0;">If a userspace process attempts to create a new file on an MSDOS filesystem, the kernel VFS ultimately switches the request to the fs_dir_inode_ops function, in this case, the create method which is <em>msdos_create</em>.</p>
<p style="margin-bottom:0;">
<p style="margin-bottom:0;"><strong>The MSDOS/FAT File Inode Operations</strong></p>
<p style="margin-bottom:0;">In <em>fs/fat/inode.</em>c :</p>
<p style="margin-bottom:0;">The <em>fat_fill_inode</em><span style="font-style:normal;"> routine [1] is the one responsible for initializing the inode, for both a directory object  as well as a non-directory object.</span></p>
<pre>...
/* doesn't deal with root inode */
static int fat_fill_inode(struct inode *inode, struct <span style="color:#993300;">msdos_dir_entry</span> *de)
{
        struct msdos_sb_info *sbi = MSDOS_SB(inode-&gt;i_sb);
...
        if ((de-&gt;attr &amp; <span style="color:#ff0000;">ATTR_DIR</span>) &amp;&amp; !IS_FREE(de-&gt;name)) {
                inode-&gt;i_generation &amp;= ~1;
                inode-&gt;i_mode = <span style="color:#993300;">fat_make_mode</span>(sbi, de-&gt;attr, S_IRWXUGO);
                <span style="color:#ff0000;">inode-&gt;i_op = sbi-&gt;dir_ops;
    </span><span style="color:#ff0000;"><em>				</em></span><span style="color:#000000;"><em>&lt;&lt; sbi-&gt;dir_ops is the same structure we saw above, viz,
                              the msdos_dir_inode_operations structure. &gt;&gt;</em></span>
<span style="color:#ff0000;">                inode-&gt;i_fop = &amp;fat_dir_operations;
</span>
...
       } else { /* not a directory */
                inode-&gt;i_generation |= 1;
                inode-&gt;i_mode = fat_make_mode(sbi, de-&gt;attr,
                        ((sbi-&gt;options.showexec &amp;&amp; !is_exec(de-&gt;name + 8))
                         ? S_IRUGO|S_IWUGO : S_IRWXUGO));
                MSDOS_I(inode)-&gt;i_start = le16_to_cpu(de-&gt;start);
                if (sbi-&gt;fat_bits == 32)
                    MSDOS_I(inode)-&gt;i_start |= (le16_to_cpu(de-&gt;starthi) &lt;&lt; 16);

                MSDOS_I(inode)-&gt;i_logstart = MSDOS_I(inode)-&gt;i_start;
                inode-&gt;i_size = le32_to_cpu(de-&gt;size);
<span style="color:#ff0000;">                inode-&gt;i_op = &amp;fat_file_inode_operations;</span>
<span style="color:#ff0000;">                inode-&gt;i_fop = &amp;fat_file_operations;</span>
                inode-&gt;i_mapping-&gt;a_ops = &amp;fat_aops;
...</pre>
<p style="margin-bottom:0;">It first switches on whether the &#8216;file object&#8217; to be created is a directory or not.<br />
Furthermore, as we can see above, the inode has two operation pointers:</p>
<p style="margin-bottom:0;">i_op: for the inode methods operating <span style="color:#ff0000;">on the inode object itself</span>, and</p>
<p style="margin-bottom:0;">i_fop: for the methods that operate <span style="color:#ff0000;">on the open file object </span>that the inode represents.</p>
<p style="margin-bottom:0;">In <em>fs/fat/file.c </em>:</p>
<pre><span style="font-style:normal;">...</span>
const struct inode_operations <span style="font-style:normal;">fat_file_inode_operations</span> = {
        .truncate       = fat_truncate,
        .setattr        = fat_setattr,
        .getattr        = fat_getattr,
};</pre>
<p style="margin-bottom:0;">In <em>fs/fat/file.c </em><span style="font-style:normal;">:</span></p>
<pre><span style="font-style:normal;">...</span>
const struct <span style="color:#ff0000;">file_operations fat_file_operations </span>= {
        .llseek         = generic_file_llseek,
        .read           = do_sync_read,
        .write          = do_sync_write,
        .aio_read       = generic_file_aio_read,
        .aio_write      = generic_file_aio_write,
        .mmap           = generic_file_mmap,
        .release        = fat_file_release,
        .ioctl          = fat_generic_ioctl,
        .fsync          = file_fsync,
        .splice_read    = generic_file_splice_read,
};              

...</pre>
<p style="margin-bottom:0;">These will be invoked via the usual VFS route (filp-&gt;f_op-&gt;<em>foo</em><span style="font-style:normal;">), where </span><em>foo</em><span style="font-style:normal;"> is the method – system call &#8211; invoked from the userspace process (or thread).</span></p>
<p style="margin-bottom:0;"><span style="font-style:normal;">In fact, we can see from the above implementation, that the MSDOS filesystem (and indeed all the FAT variants – MSDOS (FAT12), FAT16, FAT32 (VFAT)), </span><span style="color:#ff0000;"><span style="font-style:normal;">invoke the generic VFS methods </span></span><span style="font-style:normal;">for read, write, lseek, mmap and aio_[read|write].<br />
Which, of course, is in a large sense, the whole point: once the underlying filesystem &#8220;driver&#8221; (such as MSDOS or FAT) maps it&#8217;s physical structure to the kernel VFS expectations &#8211; to it&#8217;s (VFS&#8217;s) data structures, the kernel goes ahead and treats it as a (virtual) filesystem; I/O proceeds using the mechanisms built-in.<br />
</span></p>
<p style="margin-bottom:0;"><span style="font-style:normal;"><br />
</span></p>
<table border="1" cellspacing="0" cellpadding="4" width="100%">
<col width="85"></col>
<col width="85"></col>
<col width="85"></col>
<tbody>
<tr valign="top">
<td width="33%">
<pre style="text-align:center;"><span style="font-family:DejaVu Sans Mono,monospace;"><span style="font-size:x-small;"><em>VFS component</em></span></span></pre>
</td>
<td width="33%">
<pre style="text-align:center;"><span style="font-family:DejaVu Sans Mono,monospace;"><span style="font-size:x-small;"><em>Corr. MSDOS/FAT component</em></span></span></pre>
</td>
<td width="33%">
<pre style="text-align:center;"><span style="font-family:DejaVu Sans Mono,monospace;"><span style="font-size:x-small;"><em>Macro to access it</em></span></span></pre>
</td>
</tr>
<tr valign="top">
<td width="33%">
<pre><span style="font-family:DejaVu Sans Mono,monospace;"><span style="font-size:x-small;">struct super_block</span></span></pre>
</td>
<td width="33%">
<pre><span style="font-family:DejaVu Sans Mono,monospace;"><span style="font-size:x-small;">struct msdos_sb_info</span></span></pre>
</td>
<td width="33%">
<pre><span style="font-family:DejaVu Sans Mono,monospace;"><span style="font-size:x-small;">MSDOS_SB</span></span></pre>
</td>
</tr>
<tr valign="top">
<td width="33%">
<pre><span style="font-family:DejaVu Sans Mono,monospace;"><span style="font-size:x-small;">struct inode</span></span></pre>
</td>
<td width="33%">
<pre><span style="font-family:DejaVu Sans Mono,monospace;"><span style="font-size:x-small;">struct msdos_inode_info</span></span></pre>
</td>
<td width="33%">
<pre><span style="font-family:DejaVu Sans Mono,monospace;"><span style="font-size:x-small;">MSDOS_I</span></span></pre>
</td>
</tr>
</tbody>
</table>
<p><strong>[1] When does the <em>fat_fill_inode </em>routine get invoked?</strong></p>
<p>The <em>fat_build_inode</em><span style="font-style:normal;"> function invokes it. So what invokes </span><em>fat_build_inode</em><span style="font-style:normal;"> ?</span></p>
<p><span style="font-style:normal;">cscope can provide us with an answer (output below, on the 2.6.30 kernel):</span></p>
<p><span style="font-size:x-small;"><span style="font-style:normal;">Functions calling this function: fat_build_inode </span></span></p>
<p><span style="font-style:normal;"> </span></p>
<pre style="margin-bottom:.5cm;">  <em>File          Function       Line</em>
<span style="font-style:normal;">0 inode.c       fat_get_parent 752 inode = fat_build_inode(sb, de, i_pos);</span>
<span style="font-style:normal;">1 namei_msdos.c msdos_lookup   220 inode = fat_build_inode(sb, sinfo.de, sinfo.i_pos);</span>
<span style="font-style:normal;">2 namei_msdos.c msdos_create   306 inode = fat_build_inode(sb, sinfo.de, sinfo.i_pos);</span>
<span style="font-style:normal;">3 namei_msdos.c msdos_mkdir    394 inode = fat_build_inode(sb, sinfo.de, sinfo.i_pos);</span>
<span style="font-style:normal;">4 namei_vfat.c  vfat_lookup    732 inode = fat_build_inode(sb, sinfo.de, sinfo.i_pos);</span>
<span style="font-style:normal;">5 namei_vfat.c  vfat_create    788 inode = fat_build_inode(sb, sinfo.de, sinfo.i_pos);</span>
<span style="font-style:normal;">6 namei_vfat.c  vfat_mkdir     882 inode = fat_build_inode(sb, sinfo.de, sinfo.i_pos);</span></pre>
<p style="margin-bottom:0;">
<p style="margin-bottom:0;border-color:0 0 #000000;border-style:none none solid;border-width:medium medium 1px;padding:0 0 .07cm;">
<p style="margin-bottom:0;">
<p><em>(c) 2009 Kaiwan N Billimoria, Designer Graphix.<br />
</em></p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/kaiwantech.wordpress.com/102/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/kaiwantech.wordpress.com/102/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/kaiwantech.wordpress.com/102/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/kaiwantech.wordpress.com/102/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/kaiwantech.wordpress.com/102/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/kaiwantech.wordpress.com/102/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/kaiwantech.wordpress.com/102/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/kaiwantech.wordpress.com/102/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/kaiwantech.wordpress.com/102/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/kaiwantech.wordpress.com/102/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kaiwantech.wordpress.com&blog=6153622&post=102&subd=kaiwantech&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://kaiwantech.wordpress.com/2009/08/17/inside-the-msdos-fat-linux-vfs-implementation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e5216008e0b231a760d20d22b01c4328?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">kaiwan</media:title>
		</media:content>

		<media:content url="http://kaiwantech.files.wordpress.com/2009/08/vfs_msdos_31.png" medium="image">
			<media:title type="html">vfs msdos </media:title>
		</media:content>
	</item>
		<item>
		<title>Android&#8217;s already looking successful; but &#8230;</title>
		<link>http://kaiwantech.wordpress.com/2009/05/28/androids-already-looking-successful-but/</link>
		<comments>http://kaiwantech.wordpress.com/2009/05/28/androids-already-looking-successful-but/#comments</comments>
		<pubDate>Thu, 28 May 2009 12:03:17 +0000</pubDate>
		<dc:creator>Kaiwan</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[strategy]]></category>

		<guid isPermaLink="false">http://kaiwantech.wordpress.com/?p=98</guid>
		<description><![CDATA[Android&#8217;s steaming ahead.
Yup. Pretty much a given..
Google says we&#8217;ll easily have around 18 Android &#8216;phones by year end.
So?
Please read this excellent NY Times article first (opens in a new window), and then continue here, if it so pleases you&#8230;
Well, I don&#8217;t know about you but am a bit taken aback by (Google&#8217;s) Andy Rubin&#8217;s statement [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kaiwantech.wordpress.com&blog=6153622&post=98&subd=kaiwantech&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Android&#8217;s steaming ahead.</p>
<p>Yup. Pretty much a given..</p>
<p>Google says we&#8217;ll easily have around 18 Android &#8216;phones by year end.<br />
So?</p>
<p>Please read <a href="http://bits.blogs.nytimes.com/2009/05/27/google-expect-18-android-phones-by-years-end/" target="_blank">this excellent NY Times article</a> first (opens in a new window), and then continue here, if it so pleases you&#8230;</p>
<p>Well, I don&#8217;t know about you but am a bit taken aback by (Google&#8217;s) Andy Rubin&#8217;s statement regarding the three options that handset OEMs and wireless carriers have.</p>
<p>In effect, the first options says (and I&#8217;d love someone to correct me if i&#8217;m reading it wrong here)- take it completely free but don&#8217;t touch (preload) our (Google) apps; the second &#8220;small strings&#8221; option says- sign a distribution agreement with us and all&#8217;s cool. Hmm, can we see this agreement? Third option &#8220;no-censorship&#8221; aka “The Google Experience” phones- so, looks like there <em>is</em> after all, a Google Phone <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  . Right? I mean, Google logo on the device and all.</p>
<p>Initially my impression was that Google is indeed trying to &#8220;distance&#8221; itself from the platform. &#8220;Hey, it&#8217;s open- we built it, now do what you like okay&#8221;. Now that, apparently, looks to be not-so-true.</p>
<p>Still, this is not necessarily &#8220;a bad thing&#8221;. Okay Google is (starting to) leveraging it&#8217;s considerable strength with Android. It&#8217;s still an open platform. Yes. But&#8230; one just wonders..</p>
<p>Well, we&#8217;ll wait and see&#8230;<br />
hope to keep you posted!</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/kaiwantech.wordpress.com/98/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/kaiwantech.wordpress.com/98/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/kaiwantech.wordpress.com/98/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/kaiwantech.wordpress.com/98/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/kaiwantech.wordpress.com/98/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/kaiwantech.wordpress.com/98/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/kaiwantech.wordpress.com/98/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/kaiwantech.wordpress.com/98/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/kaiwantech.wordpress.com/98/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/kaiwantech.wordpress.com/98/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kaiwantech.wordpress.com&blog=6153622&post=98&subd=kaiwantech&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://kaiwantech.wordpress.com/2009/05/28/androids-already-looking-successful-but/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e5216008e0b231a760d20d22b01c4328?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">kaiwan</media:title>
		</media:content>
	</item>
		<item>
		<title>Motorola and Android Newly Weds</title>
		<link>http://kaiwantech.wordpress.com/2009/05/27/motorola-and-android-newly-wed/</link>
		<comments>http://kaiwantech.wordpress.com/2009/05/27/motorola-and-android-newly-wed/#comments</comments>
		<pubDate>Wed, 27 May 2009 02:59:42 +0000</pubDate>
		<dc:creator>Kaiwan</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://kaiwantech.wordpress.com/?p=94</guid>
		<description><![CDATA[Well, it was bound to happen, everyone knows that.
Now it&#8217;s &#8220;official&#8221;.
Motorola is newly wed to the Android platform.
They&#8217;ve put up a nice aggregate (tutorials, etc) site.
So far, I have not (personally) seen/used a really great Android phone (or device). In the hardware sense of course (the software platform simply rocks!). I mean, the camera on [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kaiwantech.wordpress.com&blog=6153622&post=94&subd=kaiwantech&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Well, it was bound to happen, everyone knows that.</p>
<p>Now it&#8217;s &#8220;official&#8221;.</p>
<p>Motorola is newly wed to the Android platform.</p>
<p>They&#8217;ve put up a nice aggregate (tutorials, etc) <a href="http://tinyurl.com/qo8ykl">site</a>.</p>
<p>So far, I have not (personally) seen/used a really great Android phone (or device). In the hardware sense of course (the software platform simply rocks!). I mean, the camera on the G1 (I use the ADP1, completely equivalent) is terrible when I compare it with a Nokia N-series phone, for example&#8230;</p>
<p>I think this limitation will now be addressed: Samsung already has an Android smartphone out, now Motorola looks set to release one this year; interestingly, Motorola definitely seems to be looking to leverage the vast open-source community already around the Android platform via their developer site. Good going! -much much nicer than what they did at first with their (early) Motorola-Linux platform(s).</p>
<p>We wish them luck. The more the merrier. The better it gets- for Android, the OEMs, and of course, us.</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/kaiwantech.wordpress.com/94/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/kaiwantech.wordpress.com/94/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/kaiwantech.wordpress.com/94/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/kaiwantech.wordpress.com/94/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/kaiwantech.wordpress.com/94/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/kaiwantech.wordpress.com/94/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/kaiwantech.wordpress.com/94/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/kaiwantech.wordpress.com/94/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/kaiwantech.wordpress.com/94/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/kaiwantech.wordpress.com/94/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kaiwantech.wordpress.com&blog=6153622&post=94&subd=kaiwantech&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://kaiwantech.wordpress.com/2009/05/27/motorola-and-android-newly-wed/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e5216008e0b231a760d20d22b01c4328?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">kaiwan</media:title>
		</media:content>
	</item>
		<item>
		<title>My Android Presentations&#8230;</title>
		<link>http://kaiwantech.wordpress.com/2009/05/27/my-android-presentations/</link>
		<comments>http://kaiwantech.wordpress.com/2009/05/27/my-android-presentations/#comments</comments>
		<pubDate>Wed, 27 May 2009 02:51:37 +0000</pubDate>
		<dc:creator>Kaiwan</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[android presentation kaiwan designergraphix]]></category>

		<guid isPermaLink="false">http://kaiwantech.wordpress.com/?p=92</guid>
		<description><![CDATA[I&#8217;ve had the privilege of presenting my &#8220;Android &#8211; Get With It!&#8221; talk twice in the last week; once at ARM Embedded Systems and once at CISCO, Bangalore.
Was appreciated in general&#8230;
 Some details.
       <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kaiwantech.wordpress.com&blog=6153622&post=92&subd=kaiwantech&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>I&#8217;ve had the privilege of presenting my &#8220;Android &#8211; Get With It!&#8221; talk twice in the last week; once at ARM Embedded Systems and once at CISCO, Bangalore.</p>
<p>Was appreciated in general&#8230;<br />
<a href="http://www.designergraphix.com/android-platform/"> Some details</a>.</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/kaiwantech.wordpress.com/92/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/kaiwantech.wordpress.com/92/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/kaiwantech.wordpress.com/92/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/kaiwantech.wordpress.com/92/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/kaiwantech.wordpress.com/92/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/kaiwantech.wordpress.com/92/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/kaiwantech.wordpress.com/92/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/kaiwantech.wordpress.com/92/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/kaiwantech.wordpress.com/92/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/kaiwantech.wordpress.com/92/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kaiwantech.wordpress.com&blog=6153622&post=92&subd=kaiwantech&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://kaiwantech.wordpress.com/2009/05/27/my-android-presentations/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e5216008e0b231a760d20d22b01c4328?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">kaiwan</media:title>
		</media:content>
	</item>
		<item>
		<title>Most Useful Android Apps</title>
		<link>http://kaiwantech.wordpress.com/2009/05/04/most-useful-android-apps/</link>
		<comments>http://kaiwantech.wordpress.com/2009/05/04/most-useful-android-apps/#comments</comments>
		<pubDate>Mon, 04 May 2009 11:50:19 +0000</pubDate>
		<dc:creator>Kaiwan</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[apps]]></category>
		<category><![CDATA[best]]></category>

		<guid isPermaLink="false">http://kaiwantech.wordpress.com/?p=89</guid>
		<description><![CDATA[Very useful app- ASTRO File Manager &#8211; as one can backup all existing installed apps onto the SD card and (re)install them from there..
Also realize that apps that sync data online are the way to go..
So, among my Best Android Apps are:
Built-in: Contacts (w/ gmail), gmail, (google) calendar,
Sync: 3Banana, twitdroid.
LBS: GPS Status, MyTracks, Compass, SnapPhoto,
Misc: [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kaiwantech.wordpress.com&blog=6153622&post=89&subd=kaiwantech&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Very useful app- ASTRO File Manager &#8211; as one can backup all existing installed apps onto the SD card and (re)install them from there..<br />
Also realize that apps that sync data online are the way to go..</p>
<p><em>So, among my Best Android Apps are:</em><br />
Built-in: Contacts (w/ gmail), gmail, (google) calendar,<br />
Sync: 3Banana, twitdroid.<br />
LBS: GPS Status, MyTracks, Compass, SnapPhoto,<br />
Misc: ASTRO, Useful Switchers, ToggleBlu</p>
<p>More to follow&#8230;</p>
<p>Ok, an update (6 Oct &#8216;09):</p>
<p>Widgets:</p>
<p>Internal Memory Widget : useful to see how much space remains on internal flash (as all apps get installed there).</p>
<p>MoonPhase : as it says, and really done nicely.</p>
<p>Retro Clock &amp; Date : &#8230;neat.</p>
<p>PowerManager : wow. Just what the doc ordered; really helps when your batt is low&#8230; of course you can create/edit power profiles. A must!</p>
<p>LastPass : the final word on &#8220;not having to remember those damned username/password pairs ever again&#8221;! Love it! Make sure you use it in Firefox/IE as well&#8230;</p>
<p>MyBackup : looks good, have yet to test restore&#8230;</p>
<p>Proxoid: I use this to tether my phone to the PC so I can browse via the phone&#8217;s GPRS conection&#8230;<br />
works well on Linux!</p>
<p>ContactSender : Very unfortunately, Android (&amp; it seems Linux-based phones in general) can&#8217;t seem to understand the Vcard protocol for sharing contacts (hope I&#8217;m wrong here, pl tell me if so!). So this guy at least lets you conveniently send an SMS to someone w/ the contact info you pick.</p>
<p>Quick Uninstall</p>
<p>SkyMap : wow. Trust google.</p>
<p>Wapedia : really fast wikipedia browser, good no-nonsense UI too.</p>
<p>ToddlerLock : awesome for small kids who can&#8217;t keep their paws off!</p>
<p>ShopSavvy :</p>
<p>Wikitude : both Wows! A little over the top but hey it&#8217;s the future dude!</p>
<p>Know of other awesome apps? Pl comment now!</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/kaiwantech.wordpress.com/89/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/kaiwantech.wordpress.com/89/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/kaiwantech.wordpress.com/89/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/kaiwantech.wordpress.com/89/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/kaiwantech.wordpress.com/89/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/kaiwantech.wordpress.com/89/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/kaiwantech.wordpress.com/89/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/kaiwantech.wordpress.com/89/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/kaiwantech.wordpress.com/89/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/kaiwantech.wordpress.com/89/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kaiwantech.wordpress.com&blog=6153622&post=89&subd=kaiwantech&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://kaiwantech.wordpress.com/2009/05/04/most-useful-android-apps/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e5216008e0b231a760d20d22b01c4328?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">kaiwan</media:title>
		</media:content>
	</item>
		<item>
		<title>LINUX CHEATSHEET &#8211; vmstat, ps, top</title>
		<link>http://kaiwantech.wordpress.com/2009/04/29/linux-cheatsheet-vmstat-ps-top/</link>
		<comments>http://kaiwantech.wordpress.com/2009/04/29/linux-cheatsheet-vmstat-ps-top/#comments</comments>
		<pubDate>Wed, 29 Apr 2009 01:48:59 +0000</pubDate>
		<dc:creator>Kaiwan</dc:creator>
				<category><![CDATA[Misc]]></category>
		<category><![CDATA[SysAd]]></category>
		<category><![CDATA[cheatsheet]]></category>
		<category><![CDATA[commands]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[proc]]></category>
		<category><![CDATA[ps]]></category>
		<category><![CDATA[top]]></category>
		<category><![CDATA[vmstat]]></category>

		<guid isPermaLink="false">http://kaiwantech.wordpress.com/?p=80</guid>
		<description><![CDATA[
LINUX Quick Reference Cheat Sheet
vmstat, ps, top

v 0.1 : Last Updated: March 2009 : &#60;kaiwan at designergraphix dot com&#62;
(c) kaiwan billimoria.
Much of the information below gleaned from various Linux man pages.

&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-
vmstat

vmstat fields quick reference
The -a switch displays active/inactive memory, given a 2.5.41 kernel or better.
The -f switch displays the number of forks since boot. This [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kaiwantech.wordpress.com&blog=6153622&post=80&subd=kaiwantech&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p><!-- 	 	 --></p>
<h1 style="text-align:center;"><strong>LINUX Quick Reference Cheat Sheet</strong></h1>
<h2 style="text-align:center;"><strong>vmstat, ps, top</strong></h2>
<p align="center"><strong><br />
</strong><strong>v 0.1 </strong>: Last Updated: March 2009<strong> : &lt;</strong>kaiwan at designergraphix dot com<strong>&gt;<br />
</strong>(c) kaiwan billimoria.</p>
<p style="text-align:left;">Much of the information below gleaned from various Linux man pages.</p>
<p style="text-align:left;">
<h2 style="text-align:left;">&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-</h2>
<h2 style="text-align:left;">vmstat</h2>
<p><!-- 	 	 --></p>
<p><strong><em>vmstat </em>fields quick reference</strong></p>
<p>The <strong>-a</strong> switch displays active/inactive memory, given a 2.5.41 kernel or better.<br />
The <strong>-f</strong> switch displays the number of forks since boot. This includes the fork, vfork, and clone system calls, and is equivalent to the total number of tasks created. Each process is represented by one or more tasks, depending on thread usage. This display does not repeat.<br />
The <strong>-m</strong> displays slabinfo.<br />
The <strong>-n</strong> switch causes the header to be displayed only once rather than periodically.<br />
The <strong>-s</strong> switch displays a table of various event counters and memory statistics. This display does not repeat.</p>
<p><em>delay</em> is the delay between updates in seconds. If no delay is specified, only one report is printed with<br />
the average values since boot.<br />
<em>count</em> is the number of updates. If no count is specified and delay is defined, <em>count</em> defaults to infinity.</p>
<p>The <strong>-d</strong> reports disk statistics (2.5.70 or above required)<br />
The <strong>-p</strong> followed by some partition name for detailed statistics (2.5.70 or above required)<br />
The <strong>-S</strong> followed by k or K or m or M switches outputs between 1000, 1024, 1000000, or 1048576 bytes<br />
The <strong>-V</strong> switch results in displaying version information.</p>
<h2>FIELD DESCRIPTION FOR VM MODE</h2>
<h2><strong>Procs</strong></h2>
<pre>r: The number of processes waiting for run time &lt;&lt; ready-to-run &gt;&gt;.
b: The number of processes in uninterruptible sleep &lt;&lt; blocked &gt;&gt;.</pre>
<h3><strong>Memory</strong> &lt;&lt; (default) in kilobytes &gt;&gt;<br />
swpd: the amount of virtual memory used.</h3>
<pre>free: the amount of idle memory.
buff: the amount of memory used as buffers.
cache: the amount of memory used as cache &lt;&lt; page cache, not incl. swap cache&gt;&gt; .
inact: the amount of inactive memory. (-a option)
active: the amount of active memory. (-a option)</pre>
<h3><strong>Swap</strong> &lt;&lt; in kilobytes/second &gt;&gt;</h3>
<pre>si: Amount of memory swapped in from disk (/s).
so: Amount of memory swapped to disk (/s).</pre>
<p><!-- 	 	 --></p>
<h3><strong>IO</strong> &lt;&lt; in blocks/second &gt;&gt;</h3>
<pre>bi: Blocks received from a block device (blocks/s).
bo: Blocks sent to a block device (blocks/s).</pre>
<h3><strong>System</strong> &lt;&lt; &#8216;in&#8217; and &#8216;cs&#8217; are per second &gt;&gt;<br />
in: The number of interrupts per second, including the clock.</h3>
<pre>cs: The number of context switches per second.

<strong>CPU</strong> These are percentages of total CPU time.
us: Time spent running non-kernel code. (user time, including nice time)
sy: Time spent running kernel code. (system time)
id: Time spent idle. Prior to Linux 2.5.41, this includes IO-wait time.
wa: Time spent waiting for IO. Prior to Linux 2.5.41, shown as zero.

<strong>FIELD DESCRIPTION FOR DISK MODE </strong>
   <strong>Reads </strong>
       total: Total reads completed successfully
       merged: grouped reads (resulting in one I/O)
       sectors: Sectors read successfully
       ms: milliseconds spent reading 

   <strong>Writes </strong>
       total: Total writes completed successfully
       merged: grouped writes (resulting in one I/O)
       sectors: Sectors written successfully
       ms: milliseconds spent writing 

   <strong>IO </strong>
       cur: I/O in progress
       s: seconds spent for I/O 

<strong>FIELD DESCRIPTION FOR DISK PARTITION MODE </strong>
       reads: Total number of reads issued to this partition
       read sectors: Total read sectors for partition
       writes : Total number of writes issued to this partition
       requested writes: Total number of write requests made for partition 

<strong>FIELD DESCRIPTION FOR SLAB MODE </strong>
       cache: Cache name
       num: Number of currently active objects
       total: Total number of available objects
       size: Size of each object
       pages: Number of pages with at least one active object
       totpages: Total number of allocated pages
       pslab: Number of pages per slab</pre>
<h2 style="text-align:left;">&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-</h2>
<p><!-- 	 	 --></p>
<h2><span id="more-80"></span></h2>
<h2>ps</h2>
<p><em><strong>ps</strong></em><strong> fields quick reference</strong></p>
<p>The &#8216;usual&#8217;:</p>
<p>ps -Aef[ww]</p>
<p>ps aux[ww][f]<br />
To print a process tree:</p>
<p>ps -ejH</p>
<p>ps axjf</p>
<p>Signal information:</p>
<p>ps s<br />
To get info about threads:</p>
<p>ps -eLf<br />
ps axH<br />
ps axms</p>
<p>THREAD DISPLAY</p>
<p>H               Show threads as if they were processes</p>
<p>-L              Show threads, possibly with LWP and NLWP columns</p>
<p>-T              Show threads, possibly with SPID column</p>
<p>m               Show threads after processes</p>
<p>-m              Show threads after processes<br />
OTHER INFORMATION</p>
<p>L               List all format specifiers.</p>
<p>-V              Print the procps version.<br />
The output from the ps au option is displayed in the following columns:</p>
<p>USER is the username for the running process.</p>
<p>PID is the process ID.</p>
<p>%CPU is the CPU utilization.</p>
<p>%MEM is the memory utilization.</p>
<p>VSZ is the virtual memory size.</p>
<p>RSS is the resident set sizethe number of kilobytes of program in memory.</p>
<p>TTY specifies which terminal the process was started from.</p>
<p>STAT is the process state.</p>
<p>START is the start time.</p>
<p>TIME is the execution time.</p>
<p>COMMAND is the command name.<br />
PROCESS STATE CODES</p>
<p>Here are the different values that the s, stat and state output</p>
<p>specifiers (header &#8220;STAT&#8221; or &#8220;S&#8221;) will display to describe the state of</p>
<p>a process.</p>
<p>D    Uninterruptible sleep (usually IO)</p>
<p>R    Running or runnable (on run queue)</p>
<p>S    Interruptible sleep (waiting for an event to complete)</p>
<p>T    Stopped, either by a job control signal or because it is being</p>
<p>traced.</p>
<p>W    paging (not valid since the 2.6.xx kernel)</p>
<p>X    dead (should never be seen)</p>
<p>Z    Defunct (&#8220;zombie&#8221;) process, terminated but not reaped by its</p>
<p>parent.<br />
For BSD formats and when the stat keyword is used, additional</p>
<p>characters may be displayed:</p>
<p>&lt;    high-priority (not nice to other users)</p>
<p>N    low-priority (nice to other users)</p>
<p>L    has pages locked into memory (for real-time and custom IO)</p>
<p>s    is a session leader</p>
<p>l    is multi-threaded (using CLONE_THREAD, like NPTL pthreads do)</p>
<p>+    is in the foreground process group</p>
<p>wchan     WCHAN  name of the kernel function in which the process is sleeping, a &#8220;-&#8221; if the process is running, or a &#8220;*&#8221; if the process is multi-threaded and ps is not displaying threads.</p>
<h2 style="text-align:left;">&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-</h2>
<p><strong><em>/proc/meminfo</em> fields quick reference</strong></p>
<p>MemTotal  		Total usable RAM.</p>
<p>MemFree  		The sum of LowFree + HighFree.</p>
<p>Buffers  		Memory in the buffer cache.</p>
<p>Cached  		Memory in the page cache (doesn&#8217;t SwapCache).</p>
<p>SwapCached  		Memory that once was swapped out.</p>
<p>Active  			Memory that has been used more recently and usually is not 			reclaimed unless absolutely necessary.</p>
<p>Inactive  		Memory that has been less recently used.<br />
HighTotal  		The total amount of memory in the high region. Highmem is 			all memory above (approximately) 860 MB of physical RAM.</p>
<p>HighFree  		High region free memory.</p>
<p>LowTotal  		The total amount of non-highmem memory.</p>
<p>LowFree  		The amount of free memory in the low memory region.</p>
<p>SwapTotal  		The total amount of swap memory.</p>
<p>SwapFree  		The total amount of free swap memory.</p>
<p>Dirty  			Memory waiting to get written back to the disk.</p>
<p>Writeback  		Memory that is actively being written back to the disk.</p>
<p>Mapped  		Files that have been mmapped.</p>
<p>Slab  			In-kernel data structures cache.</p>
<p>Committed_AS  	An estimate of how much RAM is needed to make a 99.99%  guarantee that there is never an OOM (out of memory) for this workload. Normally the kernel overcommits memory. So if you do a 1 GB malloc, for example, nothing happens, really. Only when you start using that malloc memory do you get real memory on demand, and just as much as needed. Other cases might include when a file is mmapped that&#8217;s shared only when a write to the file occurs and a private copy of that data is created. Normally it is shared between processes. The Committed_AS is a guesstimate of how much RAM/swap is needed in the worst case.<br />
PageTables  		The amount of memory dedicated to the lowest level of page tables.</p>
<p>VmallocTotal  		The total size of the vmalloc memory area.</p>
<p>VmallocUsed  		The amount of vmalloc area that is used.</p>
<p>VmallocChunk  		The largest contiguous block of vmalloc area that is free.<br />
/proc/&lt;pid&gt;/tasks : threads of process &lt;pid&gt;</p>
<p><em><strong><br />
Hardware information</strong></em></p>
<p>/proc/bus/*/devices</p>
<p>lspci</p>
<p>lsusb</p>
<p>lshw         (Ubuntu specific?)</p>
<p>lshal         (Ubuntu specific?)</p>
<p>lspcmcia</p>
<p>/sys</p>
<h2 style="text-align:left;">&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-</h2>
<p><!-- 	 	 --></p>
<h2>top</h2>
<p><strong><em>top </em>fields quick reference</strong></p>
<p>A : toggles multiple windows display</p>
<p>Z : colour changes</p>
<p><strong>1. COMMAND-LINE Options </strong></p>
<p>The command-line syntax for top consists of:</p>
<p>-hv | -bcHisS -d delay -n iterations -p pid [,pid...]</p>
<p>The typically mandatory switches (&#8216;-&#8217;) and even whitespace are completely optional.</p>
<p>-b : Batch mode operation</p>
<p>Starts top  in  &#8216;Batch mode&#8217;, which could be useful for sending output from top to other programs or to a file. In this</p>
<p>mode, top will not accept input and runs until the iterations limit you&#8217;ve set with the &#8216;-n&#8217; command-line option or until killed.</p>
<p>-c : Command line/Program name toggle</p>
<p>Starts  top  with the last remembered &#8216;c&#8217; state reversed.  Thus, if top was displaying command lines, now that field will show program names, and visa versa.  See the &#8216;c&#8217; interactive command for additional information.</p>
<p>-d : Delay time interval as:  -d ss.tt (seconds.tenths)</p>
<p>Specifies the delay between screen updates, and overrides the corresponding value in one&#8217;s personal configuration file or the startup default.  Later this can be changed with the &#8216;d&#8217; or &#8217;s&#8217; interactive commands.</p>
<p>Fractional seconds are honored, but a negative number is not allowed.  In all cases, however, such changes are prohibited if top is running in &#8216;Secure mode&#8217;, except for root (unless the &#8217;s&#8217; command-line option was used).  For additional information on &#8216;Secure mode&#8217; see topic 5a. SYSTEM Configuration File.</p>
<p>-h : Help</p>
<p>Show library version and the usage prompt, then quit.</p>
<p>-H : Threads toggle</p>
<p>Starts  top  with  the  last  remembered &#8216;H&#8217; state reversed.  When this toggle is On, all individual threads will be displayed.  Otherwise, top displays a summation of all threads in a process.</p>
<p>-i : Idle Processes toggle</p>
<p>Starts top with the last remembered &#8216;i&#8217; state reversed.  When this toggle is Off, tasks that are idled  or  zombied  will not be displayed.</p>
<p>-n : Number of iterations limit as:  -n number</p>
<p>Specifies the maximum number of iterations, or frames, top should produce before ending.</p>
<p>-u : Monitor by user as:  -u somebody</p>
<p>Monitor only processes with an effective UID or user name matching that given.<br />
-U : Monitor by user as:  -U somebody</p>
<p>Monitor  only processes with a UID or user name matching that given.  This matches real, effective, saved, and filesystem UIDs.</p>
<p>-p : Monitor PIDs as:  -pN1 -pN2 &#8230;  or  -pN1, N2 [,...]</p>
<p>Monitor only processes with specified process IDs.  This option can be given up to 20 times, or you can provide  a  comma delimited list with up to 20 pids.  Co-mingling both approaches is permitted.</p>
<p>This  is  a command-line option only.  And should you wish to return to normal operation, it is not necessary to quit and and restart top  &#8212;  just issue the &#8216;=&#8217; interactive command.</p>
<p>-s : Secure mode operation</p>
<p>Starts top with secure mode forced, even for root.  This mode is far better controlled through the  system  configuration file (see topic 5. FILES).</p>
<p>-S : Cumulative time mode toggle</p>
<p>Starts  top  with  the last remembered &#8216;S&#8217; state reversed.  When &#8216;Cumulative mode&#8217; is On, each process is listed with the cpu time that it and its dead children have used.  See the &#8216;S&#8217; interactive command for additional  information  regarding this mode.<br />
-v : Version</p>
<p>Show library version and the usage prompt, then quit.</p>
<p><strong>2. FIELDS / Columns</strong></p>
<p><strong>2a. DESCRIPTIONS of Fields </strong></p>
<p>Listed below are top&#8217;s available fields.  They are always associated with the letter shown, regardless of the position you may have established for them with the &#8216;o&#8217; (Order fields) interactive command.</p>
<p>Any field is selectable as the sort field, and you control whether they are sorted high-to-low or low-to-high.  For additional information on sort provisions see topic 3c. TASK Area Commands.</p>
<p>a: PID  &#8212;  Process Id</p>
<p>The task&#8217;s unique process ID, which periodically wraps, though never restarting at zero.</p>
<p>b: PPID  &#8212;  Parent Process Pid</p>
<p>The process ID of a task&#8217;s parent.</p>
<p>c: RUSER  &#8212;  Real User Name</p>
<p>The real user name of the task&#8217;s owner.</p>
<p>d: UID  &#8212;  User Id</p>
<p>The effective user ID of the task&#8217;s owner.</p>
<p>e: USER  &#8212;  User Name</p>
<p>The effective user name of the task&#8217;s owner.</p>
<p>f: GROUP  &#8212;  Group Name</p>
<p>The effective group name of the task&#8217;s owner.</p>
<p>g: TTY  &#8212;  Controlling Tty</p>
<p>The  name  of  the  controlling  terminal.   This is usually the device (serial port, pty, etc.) from which the process was started, and which it uses for input or output.  However, a task need not be associated with  a  terminal,  in  which  case you&#8217;ll see &#8216;?&#8217; displayed.</p>
<p>h: PR  &#8212;  Priority</p>
<p>The priority of the task.</p>
<p>i: NI  &#8212;  Nice value</p>
<p>The  nice value of the task.  A negative nice value means higher priority, whereas a positive nice value means lower priority.  Zero in this field simply means priority will not be adjusted in determining a task&#8217;s dispatchability.</p>
<p>j: P  &#8212;  Last used CPU (SMP)</p>
<p>A number representing the last used processor.  In a true SMP environment this will likely change frequently since the kernel  intentionally  uses weak affinity.  Also, the very act of running top may break this weak affinity and cause more processes to change CPUs more often (because of the extra demand for cpu time).</p>
<p>k: %CPU  &#8212;  CPU usage</p>
<p>The task&#8217;s share of the elapsed CPU time since the last screen update, expressed as a percentage of total CPU time.  In a true SMP environment, if &#8216;Irix mode&#8217; is Off, top will operate in &#8216;Solaris mode&#8217; where a task&#8217;s cpu usage will be divided by the total number of CPUs.  You toggle &#8216;Irix/Solaris&#8217; modes with the &#8216;I&#8217; interactive command.</p>
<p>l: TIME  &#8212;  CPU Time</p>
<p>Total CPU time the task has used since it started.  When &#8216;Cumulative mode&#8217; is On, each process is listed with the cpu  time that  it  and  its  dead  children  has used.  You toggle &#8216;Cumulative mode&#8217; with &#8216;S&#8217;, which is a command-line option and an interactive command.  See the &#8216;S&#8217; interactive command for additional information regarding this mode.</p>
<p>m: TIME+  &#8212;  CPU Time, hundredths</p>
<p>The same as &#8216;TIME&#8217;, but reflecting more granularity through hundredths of a second.</p>
<p>n: %MEM  &#8212;  Memory usage (RES)</p>
<p>A task&#8217;s currently used share of available physical memory.</p>
<p>o: VIRT  &#8212;  Virtual Image (kb)</p>
<p>The total amount of virtual memory used by the task.  It includes all code, data and shared libraries plus pages that  have been swapped out.</p>
<p>VIRT = SWAP + RES.</p>
<p>p: SWAP  &#8212;  Swapped size (kb)</p>
<p>The swapped out portion of a task&#8217;s total virtual memory image.</p>
<p>q: RES  &#8212;  Resident size (kb)</p>
<p>The non-swapped physical memory a task has used.</p>
<p>RES = CODE + DATA.</p>
<p>r: CODE  &#8212;  Code size (kb)</p>
<p>The amount of physical memory devoted to executable code, also known as the &#8216;text resident set&#8217; size or TRS.</p>
<p>s: DATA  &#8212;  Data+Stack size (kb)</p>
<p>The amount of physical memory devoted to other than executable code, also known as the &#8216;data resident set&#8217; size or DRS.</p>
<p>t: SHR  &#8212;  Shared Mem size (kb)</p>
<p>The  amount  of  shared  memory used by a task.  It simply reflects memory that could be potentially shared with other processes.</p>
<p>u: nFLT  &#8212;  Page Fault count</p>
<p>The number of major page faults that have occurred for a task.  A page fault occurs when a process attempts to read from or write  to  a  virtual  page that is not currently present in its address space.  A major page fault is when backing storage access (such as a disk) is involved in making that page available.</p>
<p>v: nDRT  &#8212;  Dirty Pages count</p>
<p>The number of pages that have been modified since they were last written to disk.  Dirty pages  must  be  written  to  disk before the corresponding physical memory location can be used for some other virtual page.</p>
<p>w: S  &#8212;  Process Status</p>
<p>The status of the task which can be one of:</p>
<p>&#8216;D&#8217; = uninterruptible sleep</p>
<p>&#8216;R&#8217; = running</p>
<p>&#8216;S&#8217; = sleeping</p>
<p>&#8216;T&#8217; = traced or stopped</p>
<p>&#8216;Z&#8217; = zombie</p>
<p>Tasks shown as running should be more properly thought of as &#8216;ready to run&#8217;  &#8212;  their task_struct is simply represented on the Linux run-queue.  Even without a true SMP machine, you may see numerous tasks in this state depending  on  top&#8217;s  delay interval and nice value.</p>
<p>x: Command  &#8212;  Command line or Program name</p>
<p>Display  the  command line used to start a task or the name of the associated program.  You toggle between command line and name with &#8216;c&#8217;, which is both a command-line option and an interactive command.</p>
<p>When you&#8217;ve chosen to display command lines, processes without a command line (like kernel threads) will be shown with only the program name in parentheses, as in this example:                ( mdrecoveryd )</p>
<p><!-- 	 	 --></p>
<p>Either  form  of  display  is  subject to potential truncation if it&#8217;s too long to fit in this field&#8217;s current width.  That width depends upon other fields selected, their order and the current screen width.</p>
<p>Note: The &#8216;Command&#8217; field/column is unique, in that it is not fixed-width.  When displayed, this column will  be  allocated all  remaining  screen  width  (up to the maximum 512 characters) to provide for the potential growth of program names into command lines.</p>
<p>y: WCHAN  &#8212;  Sleeping in Function</p>
<p>Depending on the availability of the kernel link map (&#8216;System.map&#8217;), this field will show the name or the  address  of  the kernel function in which the task is currently sleeping.  Running tasks will display a dash (&#8216;-&#8217;) in this column.</p>
<p>Note:  By  displaying  this field, top&#8217;s own working set will be increased by over 700Kb.  Your only means of reducing that overhead will be to stop and restart top.</p>
<p>z: Flags  &#8212;  Task Flags</p>
<p>This column represents the task&#8217;s current scheduling flags which are expressed in hexadecimal notation and with zeros  suppressed.   These  flags  are  officially documented in &lt;linux/sched.h&gt;.  Less formal documentation can also be found on the &#8216;Fields select&#8217; and &#8216;Order fields&#8217; screens.</p>
<p><strong>2b. SELECTING and ORDERING Columns </strong></p>
<p>After pressing the interactive commands &#8216;f&#8217; (Fields select) or &#8216;o&#8217; (Order fields) you will be shown a  screen  containing  the current fields string followed by names and descriptions for all fields.</p>
<p>Here is a sample fields string from one of top&#8217;s four windows/field groups and an explanation of the conventions used:</p>
<p>-  Sample fields string:</p>
<p>ANOPQRSTUVXbcdefgjlmyzWHIK</p>
<p>-  The order of displayed fields corresponds to the order of the letters in that string.</p>
<p>-  If  the  letter  is  upper case the corresponding field itself will then be shown as part of the task display (screen width permitting).  This will also be indicated by a leading asterisk (&#8216;*&#8217;), as in this excerpt:</p>
<p>&#8230;</p>
<p>* K: %CPU       = CPU usage</p>
<p>l: TIME       = CPU Time</p>
<p>m: TIME+      = CPU Time, hundredths</p>
<p>* N: %MEM       = Memory usage (RES)</p>
<p>* O: VIRT       = Virtual Image (kb)</p>
<p>&#8230;</p>
<p>Fields select screen  &#8212;  the &#8216;f&#8217; interactive command</p>
<p>You toggle the display of a field by simply pressing the corresponding letter.</p>
<p>Order fields screen  &#8212;  the &#8216;o&#8217; interactive command</p>
<p>You move a field to the left by pressing the corresponding upper case letter and to the right with the lower case letter.</p>
<p><strong>2c. CPU States </strong></p>
<p>The CPU states are shown in the Summary Area. They are always shown as a percentage and are for the time between now and the last refresh.</p>
<p>us  &#8212;  User CPU time</p>
<p>The time the CPU has spent running users&#8217; processes that are not niced.</p>
<p>sy  &#8212;  System CPU time</p>
<p>The time the CPU has spent running the kernel and its processes.</p>
<p>ni  &#8212;  Nice CPU time</p>
<p>The time the CPU has spent running users&#8217; proccess that have been niced.</p>
<p>wa  &#8212;  iowait</p>
<p>Amount of time the CPU has been waiting for I/O to complete.</p>
<p>hi  &#8212;  Hardware IRQ</p>
<p>The amount of time the CPU has been servicing hardware interrupts.</p>
<p>si  &#8212;  Software Interrupts</p>
<p>The amount of time the CPU has been servicing software interrupts.</p>
<p><strong>3. INTERACTIVE Commands </strong></p>
<p>Listed  below is a brief index of commands within categories.  Some commands appear more than once  &#8212;  their meaning or scope may vary depending on the context in which they are issued.</p>
<p>3a. GLOBAL_Commands</p>
<p>&lt;Ret/Sp&gt; ?, =, A, B, d, G, h, I, k, q, r, s, W, Z</p>
<p>3b. SUMMARY_Area_Commands</p>
<p>l, m, t, 1</p>
<p>3c. TASK_Area_Commands</p>
<p>Appearance:  b, x, y, z</p>
<p>Content:     c, f, H, o, S, u</p>
<p>Size:        #, i, n</p>
<p>Sorting:     &lt;, &gt;, F, O, R</p>
<p>3d. COLOR_Mapping</p>
<p>&lt;Ret&gt;, a, B, b, H, M, q, S, T, w, z, 0 &#8211; 7</p>
<p>4b. COMMANDS_for_Windows</p>
<p>-, _, =, +, A, a, G, g, w</p>
<p><strong>3a. GLOBAL Commands </strong></p>
<p>The global interactive commands are always available in both full-screen mode and alternate-display mode.   However,  some  of these interactive commands are not available when running in &#8216;Secure mode&#8217;.</p>
<p>If  you  wish  to know in advance whether or not your top has been secured, simply ask for help and view the system summary on the second line.</p>
<p>&lt;Enter&gt; or &lt;Space&gt; :Refresh_Display</p>
<p>These commands do nothing, they are simply ignored.  However, they will awaken top and following receipt of  any  input the entire display will be repainted.</p>
<p>Use either of these keys if you have a large delay interval and wish to see current status,</p>
<p>&lt;?&gt; or &lt;h&gt; :Help</p>
<p>There  are two help levels available.  The first will provide a reminder of all the basic interactive commands.  If top is secured, that screen will be abbreviated.</p>
<p>Typing &#8216;h&#8217; or &#8216;?&#8217; on that help screen will take you to help for those interactive commands applicable to alternate-display mode.</p>
<p>&lt;=&gt; :Exit_Task_Limits<br />
Removes restrictions on which tasks are shown.  This command will reverse any &#8216;i&#8217; (idle tasks) and &#8216;n&#8217; (max tasks) commands that might be active.  It also provides for an &#8216;exit&#8217; from PID monitoring.  See the &#8216;-p&#8217; command-line option  for a discussion of PID monitoring.<br />
When operating in alternate-display mode this command has a slightly broader meaning.</p>
<p>&lt;A&gt; :Alternate_Display_Mode_toggle<br />
This  command will switch between full-screen mode and alternate-display mode.  See topic<br />
4 ALTERNATE-DISPLAY Mode and the &#8216;G&#8217; interactive command for insight into &#8216;current&#8217; windows and field groups.</p>
<p>&lt;B&gt; :Bold_Disable/Enable_toggle<br />
This command will influence use of the &#8216;bold&#8217; terminfo capability and alters both the summary area and  task  area  for the current&#8217; window.  While it is intended primarily for use with dumb terminals, it can be applied anytime.<br />
Note:  When  this  toggle is On and top is operating in monochrome mode, the entire display will appear as normal text.<br />
Thus, unless the &#8216;x&#8217; and/or &#8216;y&#8217; toggles are using reverse for emphasis, there will be no visual confirmation that  they are even on.</p>
<p>* &lt;d&gt; or &lt;s&gt; :Change_Delay_Time_interval<br />
You will be prompted to enter the delay time, in seconds, between display updates.<br />
Fractional  seconds  are honored, but a negative number is not allowed.  Entering 0 causes (nearly) continuous updates, with an unsatisfactory display as the system and tty driver try to keep up with top&#8217;s  demands.   The  delay  value  is inversely proportional to system loading, so set it with care.<br />
If  at  any time you wish to know the current delay time, simply ask for help and view the system summary on the second line.</p>
<p>&lt;G&gt; :Choose_Another_Window/Field_Group<br />
You will be prompted to enter a number between 1 and 4 designating the window/field group  which  should  be  made  the current&#8217;  window.   You  will  soon  grow comfortable with these 4 windows, especially after experimenting with alternate-display mode.</p>
<p>&lt;I&gt; :Irix/Solaris_Mode_toggle<br />
When operating in &#8216;Solaris mode&#8217; (&#8216;I&#8217; toggled Off), a task&#8217;s cpu usage will be divided by the  total  number  of  CPUs. After issuing this command, you&#8217;ll be informed of the new state of this toggle.</p>
<p>&lt;u&gt; :select a user<br />
You  will  be  prompted  for  a  UID or username. Only processes belonging to the selected user will be displayed. This option matches on the effective UID.</p>
<p>&lt;U&gt; :select a user<br />
You will be prompted for a UID or username. Only processes belonging to the  selected  user  will  be  displayed.  This option matches on the real, effective, saved, and filesystem UID.</p>
<p>* &lt;k&gt; :Kill_a_task<br />
You  will  be  prompted  for  a  PID  and  then the signal to send.  The default signal, as reflected in the prompt, is SIGTERM.  However, you can send any signal, via number or name.<br />
If you wish to abort the kill process, do one of the following depending on your progress:<br />
1) at the pid prompt, just press &lt;Enter&gt;<br />
2) at the signal prompt, type 0</p>
<p>&lt;q&gt; :Quit</p>
<p>* &lt;r&gt; :Renice_a_Task<br />
You will be prompted for a PID and then the value to nice it to.  Entering a positive value will  cause  a  process  to lose priority.  Conversely, a negative value will cause a process to be viewed more favorably by the kernel.</p>
<p>&lt;W&gt; :Write_the_Configuration_File<br />
This  will  save all of your options and toggles plus the current display mode and delay time.  By issuing this command just before quitting top, you will be able restart later in exactly that same state.</p>
<p>&lt;Z&gt; :Change_Color_Mapping<br />
This key will take you to a separate screen where you can change the colors for the &#8216;current&#8217; window, or for  all  windows.  For details regarding this interactive command see topic 3d. COLOR Mapping.<br />
*  The  commands  shown  with an asterisk (&#8216;*&#8217;) are not available in &#8216;Secure mode&#8217;, nor will they be shown on the level-1 help screen.</p>
<p>3b. SUMMARY Area Commands<br />
The summary area interactive commands are always available in both full-screen mode and alternate-display mode.   They  affect the beginning lines of your display and will determine the position of messages and prompts.</p>
<p>These  commands always impact just the &#8216;current&#8217; window/field group.  See topic 4. ALTERNATE-DISPLAY Mode and the &#8216;G&#8217; interactive command for insight into &#8216;current&#8217; windows and field groups.<br />
&lt;l&gt; :Toggle_Load_Average/Uptime  &#8211;  On/Off<br />
This is also the line containing the program name (possibly an alias) when operating in full-screen mode or  the   current&#8217; window name when operating in alternate-display mode.</p>
<p>&lt;m&gt; :Toggle_Memory/Swap_Usage  &#8211;  On/Off<br />
This command affects two summary area lines.</p>
<p>&lt;t&gt; :Toggle_Task/Cpu_States  &#8211;  On/Off<br />
This command affects from 2 to many summary area lines, depending on the state of the &#8216;1&#8242; toggle and whether or not top is running under true SMP.</p>
<p>&lt;1&gt; :Toggle_Single/Separate_Cpu_States  &#8211;  On/Off<br />
This command affects how the &#8216;t&#8217; command&#8217;s Cpu States portion is shown.  Although this toggle exists primarily to serve massively-parallel SMP machines, it is not restricted to solely SMP environments.</p>
<p>When  you see &#8216;Cpu(s):&#8217; in the summary area, the &#8216;1&#8242; toggle is On and all cpu information is gathered in a single line. Otherwise, each cpu is displayed separately as: &#8216;Cpu0, Cpu1, &#8230;&#8217;</p>
<p>Note: If the entire summary area has been toggled Off for any window, you would be left with just the message line.   In  that way,  you  will  have  maximized  available task rows but (temporarily) sacrificed the program name in full-screen mode or the current&#8217; window name when in alternate-display mode.</p>
<p>3c. TASK Area Commands<br />
The task area interactive commands are always available in full-screen mode.</p>
<p>The task area interactive commands are never available in alternate-display mode if the &#8216;current&#8217; window&#8217;s  task  display  has been toggled Off (see topic 4. ALTERNATE-DISPLAY Mode).</p>
<p>APPEARANCE of task window<br />
The following commands will also be influenced by the state of the global &#8216;B&#8217; (bold disable) toggle.</p>
<p>&lt;b&gt; :Bold/Reverse_toggle<br />
This  command  will impact how the &#8216;x&#8217; and &#8216;y&#8217; toggles are displayed.  Further, it will only be available when at least one of those toggles is On.</p>
<p>&lt;x&gt; :Column_Highlight_toggle<br />
Changes highlighting for the current sort field.  You probably don&#8217;t need a constant visual reminder of the sort  field and top hopes that you always run with &#8216;column highlight&#8217; Off, due to the cost in path-length.<br />
If you forget which field is being sorted this command can serve as a quick visual reminder.</p>
<p>&lt;y&gt; :Row_Highlight_toggle<br />
Changes  highlighting  for &#8220;running&#8221; tasks.  For additional insight into this task state, see topic 2a DESCRIPTIONS of Fields, Process Status.</p>
<p>Use of this provision provides important insight into your system&#8217;s health.  The only costs will be  a  few  additional tty escape sequences.</p>
<p>&lt;z&gt; :Color/Monochrome_toggle<br />
Switches  the  &#8216;current&#8217;  window  between your last used color scheme and the older form of black-on-white or white-on-black.  This command will alter both the summary area and task area but does not affect the state of the  &#8216;x&#8217;,  &#8216;y&#8217;  or &#8216;b&#8217; toggles.</p>
<p>CONTENT of task window<br />
&lt;c&gt; :Command_Line/Program_Name_toggle<br />
This  command  will be honored whether or not the &#8216;Command&#8217; column is currently visible.  Later, should that field come into view, the change you applied will be seen.</p>
<p>&lt;f&gt; and &lt;o&gt; :Fields_select or Order_fields<br />
These keys display separate screens where you can change which fields are displayed and their  order.   For  additional information on these interactive commands see topic 2b. SELECTING and ORDERING Columns.</p>
<p>&lt;S&gt; :Cumulative_Time_Mode_toggle<br />
When  this  toggle is On, all individual threads will be displayed.  Otherwise, top displays a summation of all threads in a process.</p>
<p>&#8216;S&#8217; :Cumulative_Time_Mode_toggle<br />
When &#8216;Cumulative mode&#8217; is On, each process is listed with the cpu time that it and its dead children have used.</p>
<p>When Off, programs that fork into many separate tasks will appear less demanding.  For programs like &#8216;init&#8217; or a  shell this  is  appropriate  but  for others, like compilers, perhaps not.  Experiment with two task windows sharing the same sort field but with different &#8216;S&#8217; states and see which representation you prefer.</p>
<p>After issuing this command, you&#8217;ll be informed of the new state of this toggle.  If you wish to know in advance whether or not &#8216;Cumulative mode&#8217; is in effect, simply ask for help and view the window summary on the second line.</p>
<p>&lt;u&gt; :Show_Specific_User_Only<br />
You will be prompted to enter the name of the user to display.  Thereafter, in that task window only matching User ID&#8217;s will be shown, or possibly no tasks will be shown. Later, if you wish to monitor all tasks again, re-issue this command but just press &lt;Enter&gt; at the prompt, without providing a name.</p>
<p>SIZE of task window<br />
&lt;i&gt; :Idle_Processes_toggle<br />
Displays all tasks or just active tasks.  When this toggle is Off, idled or zombied processes will not be displayed.</p>
<p>If  this  command  is applied to the last task display when in alternate-display mode, then it will not affect the window&#8217;s size, as all prior task displays will have already been painted.</p>
<p>&lt;n&gt; or &lt;#&gt; :Set_Maximum_Tasks<br />
You will be prompted to enter the number of tasks to display.  The lessor of your number and available screen rows will be used.</p>
<p>When used in alternate-display mode, this is the command that gives you precise control over the size of each currently visible task display, except for the very last.  It will not affect the last  window&#8217;s size, as all prior task  displays will have already been painted.</p>
<p>Note: If you wish to increase the size of the last visible task display when in alternate-display mode, simply decrease the size of the task display(s) above it.</p>
<p>SORTING of task window<br />
For compatibility, this top supports most of the former top sort keys.  Since this is primarily  a  service  to  former  top users, these commands do not appear on any help screen.<br />
command   sorted field                  supported<br />
A         start time (non-display)      No<br />
M         %MEM                             Yes<br />
N         PID                                    Yes<br />
P         %CPU                                Yes<br />
T         TIME+                               Yes</p>
<p>Before  using  any of the following sort provisions, top suggests that you temporarily turn on column highlighting using the &#8216;x&#8217; interactive command.  That will help ensure that the actual sort environment matches your intent.</p>
<p>The following interactive commands will only be honored when the current sort field is visible.  The sort field might not be visible because:<br />
1) there is insufficient Screen Width<br />
2) the &#8216;f&#8217; interactive command turned it Off</p>
<p>&lt;&lt;&gt; :Move_Sort_Field_Left<br />
Moves the sort column to the left unless the current sort field is the first field being displayed.</p>
<p>&lt;&gt;&gt; :Move_Sort_Field_Right<br />
Moves the sort column to the right unless the current sort field is the last field being displayed.</p>
<p>The following interactive commands will always be honored whether or not the current sort field is visible.</p>
<p>&lt;F&gt; or &lt;O&gt; :Select_Sort_Field<br />
These keys display a separate screen where you can change which field is used as the sort column.</p>
<p>If  a  field is selected which was not previously being displayed, it will be forced On when you return to the top display.  However, depending upon your screen width and the order of your fields, this sort field may not be  displayable.</p>
<p>This  interactive command can be a convenient way to simply verify the current sort field, when running top with column highlighting turned Off.</p>
<p>&lt;R&gt; :Reverse/Normal_Sort_Field_toggle<br />
Using this interactive command you can alternate between high-to-low and low-to-high sorts.</p>
<p>Note: Field sorting uses internal values, not those in column display.  Thus, the TTY and WCHAN fields will  violate  strict ASCII collating sequence.</p>
<p>3d. COLOR Mapping<br />
When  you  issue the &#8216;Z&#8217; interactive command, you will be presented with a separate screen.  That screen can be used to change the colors in just the current&#8217; window or in all four windows before returning to the top display.</p>
<p>Available interactive commands<br />
4 upper case letters to select a target<br />
8 numbers to select a color<br />
normal toggles available<br />
&#8216;B&#8217;       :bold disable/enable<br />
&#8216;b&#8217;       :running tasks &#8220;bold&#8221;/reverse<br />
&#8216;z&#8217;       :color/mono<br />
other commands available<br />
&#8216;a&#8217;/'w&#8217;   :apply, then go to next/prior<br />
&lt;Enter&gt;   :apply and exit<br />
&#8216;q&#8217;       :abandon current changes and exit</p>
<p>If your use &#8216;a&#8217; or &#8216;w&#8217; to cycle the targeted window, you will have applied the color scheme that was displayed when  you  left that  window.  You can, of course, easily return to any window and reapply different colors or turn colors Off completely with the &#8216;z&#8217; toggle.</p>
<p>The Color Mapping screen can also be used to change the &#8216;current&#8217; window/field group in  either  full-screen  mode  or  alternate-display  mode.   Whatever was targeted when &#8216;q&#8217; or &lt;Enter&gt; was pressed will be made current as you return to the top display.</p>
<p>4. ALTERNATE-DISPLAY Mode<br />
4a. WINDOWS Overview<br />
Field Groups/Windows:<br />
In full-screen mode there is a single window represented by the entire screen.  That single window can still be changed to display 1 of 4 different field groups (see the &#8216;G&#8217; interactive command, repeated below).  Each of the 4 field groups has a unique separately configurable summary area and its own configurable task area.</p>
<p>In alternate-display mode, those 4 underlying field groups can now be made visible simultaneously, or can be turned Off individually at your command.</p>
<p>The summary area will always exist, even if it&#8217;s only the message line.  At any given time only one summary area can be displayed.  However, depending on your commands, there could be from zero to  four  separate  task  displays  currently showing on the screen.</p>
<p>Current Window:<br />
The  current&#8217;  window is the window associated with the summary area and the window to which task related commands are always directed.  Since in alternate-display mode you  can  toggle  the  task  display  Off,  some  commands  might  be restricted for the current&#8217; window.</p>
<p>A  further complication arises when you have toggled the first summary area line Off.  With the loss of the window name (the &#8216;l&#8217; toggled line), you&#8217;ll not easily know what window is the &#8216;current&#8217; window.</p>
<p>4b. COMMANDS for Windows<br />
&lt;-&gt; and &lt;_&gt; :Show/Hide_Window(s)_toggles<br />
The &#8216;-&#8217; key turns the &#8216;current&#8217; window&#8217;s task display On and Off.  When On, that task area will show a minimum  of  the columns  header  you&#8217;ve  established  with  the  &#8216;f&#8217;  and  &#8216;o&#8217;  commands.   It  will  also  reflect any other task area options/toggles you&#8217;ve applied yielding zero or more tasks.</p>
<p>The &#8216;_&#8217; key does the same for all task displays.  In other words, it switches between the currently visible  task  display(s)  and  any  task display(s) you had toggled Off.  If all 4 task displays are currently visible, this interactive       command will leave the summary area as the only display element.</p>
<p>* &lt;=&gt; and &lt;+&gt; :Equalize_(re-balance)_Window(s)<br />
The &#8216;=&#8217; key forces the &#8216;current&#8217; window&#8217;s task display to be visible.  It also reverses any &#8216;i&#8217; (idle  tasks)  and  &#8216;n&#8217; (max tasks) commands that might be active.</p>
<p>The &#8216;+&#8217; key does the same for all windows.  The four task displays will reappear, evenly balanced.  They will also have retained any customizations you had previously applied, except for the &#8216;i&#8217; (idle tasks) and &#8216;n&#8217; (max tasks) commands.</p>
<p>* &lt;A&gt; :Alternate_Display_Mode_toggle<br />
This command will switch between full-screen mode and alternate-display mode.</p>
<p>The first time you issue this command, all four task displays will be shown.  Thereafter when  you  switch  modes,  you will see only the task display(s) you&#8217;ve chosen to make visible.</p>
<p>* &lt;a&gt; and &lt;w&gt; :Next_Window_Forward/Backward<br />
This will change the &#8216;current&#8217; window, which in turn changes the window to which commands are directed.  These keys act in a circular fashion so you can reach any desired &#8216;current&#8217; window using either key.</p>
<p>Assuming the window name is visible (you have not toggled &#8216;l&#8217; Off), whenever the &#8216;current&#8217; window name loses its emphasis/color, that&#8217;s a reminder the task display is Off and many commands will be restricted.</p>
<p>* &lt;G&gt; :Choose_Another_Window/Field_Group<br />
You  will  be  prompted  to  enter a number between 1 and 4 designating the window/field group which should be made the current&#8217; window.</p>
<p>In full-screen mode, this command is necessary to alter the &#8216;current&#8217; window.  In alternate-display mode, it is  simply a less convenient alternative to the &#8216;a&#8217; and &#8216;w&#8217; commands.</p>
<p>&lt;g&gt; :Change_Window/Field_Group_Name<br />
You will be prompted for a new name to be applied to the &#8216;current&#8217; window.  It does not require that the window name be visible (the &#8216;l&#8217; toggle to be On).</p>
<p>*  The interactive commands shown with an asterisk (&#8216;*&#8217;) have use beyond alternate-display mode.<br />
&#8216;=&#8217;, &#8216;A&#8217;, &#8216;G&#8217;  are always available<br />
&#8216;a&#8217;, &#8216;w&#8217;       act the same when color mapping</p>
<p>5. FILES<br />
5a. SYSTEM Configuration File<br />
The presence of this file will influence which version of the &#8216;help&#8217; screen is shown to an ordinary user.   More  importantly, it  will  limit  what ordinary users are allowed to do when top is running.  They will not be able to issue the following commands.<br />
k         Kill a task<br />
r         Renice a task<br />
d or s    Change delay/sleep interval</p>
<p>The system configuration file is not created by top.  Rather, you create this file manually and place it in  the  /etc  directory.  Its name must be &#8216;toprc&#8217; and must have no leading &#8216;.&#8217; (period).  It must have only two lines.</p>
<p>Here is an example of the contents of /etc/toprc:<br />
s         # line 1: &#8217;secure&#8217; mode switch<br />
5.0       # line 2: &#8216;delay&#8217;  interval in seconds</p>
<p>5b. PERSONAL Configuration File<br />
This file is written as &#8216;$HOME/.your-name-4-top&#8217; + &#8216;rc&#8217;.  Use the &#8216;W&#8217; interactive command to create it or update it.</p>
<p>Here is the general layout:<br />
global    # line 1: the program name/alias notation<br />
&#8220;       # line 2: id,altscr,irixps,delay,curwin<br />
per ea    # line a: winname,fieldscur<br />
window    # line b: winflags,sortindx,maxtasks<br />
&#8220;       # line c: summclr,msgsclr,headclr,taskclr</p>
<p>If  the $HOME variable is not present, top will try to write the personal configuration file to the current directory, subject to permissions.</p>
<p>6. STUPID TRICKS Sampler<br />
Many of these &#8216;tricks&#8217; work best when you give top a scheduling boost.  So plan on starting him with  a  nice  value  of  -10, assuming you&#8217;ve got the authority.</p>
<p>6a. Kernel Magic<br />
For these stupid tricks, top needs full-screen mode.</p>
<p>-*-  The  user  interface,  through  prompts and help, intentionally implies that the delay interval is limited to tenths of a second.  However, you&#8217;re free to set any desired delay.  If you want to see Linux at his scheduling best, try a delay  of  .09 seconds or less.</p>
<p>For this experiment, under x-windows open an xterm and maximize it.  Then do the following:<br />
. provide a scheduling boost and tiny delay via:<br />
nice -n -10 top -d.09<br />
. keep sorted column highlighting Off to minimize path length<br />
. turn On reverse row highlighting for emphasis<br />
. try various sort columns (TIME/MEM work well), and normal or reverse sorts to bring the<br />
most active processes into view</p>
<p>What  you&#8217;ll  see  is a very busy Linux doing what he&#8217;s always done for you, but there was no program available to illustrate this.</p>
<p>-*-  Under an xterm using &#8216;white-on-black&#8217; colors, try setting top&#8217;s task color to black and be sure that task highlighting is set to bold, not reverse.  Then set the delay interval to around .3 seconds.</p>
<p>After  bringing the most active processes into view, what you&#8217;ll see are the ghostly images of just the currently running tasks.</p>
<p>-*-  Delete the existing rcfile, or create a new symlink.  Start this new version then type &#8216;T&#8217; (a secret key, see  topic  3c.<br />
TASK Area Commands, Sorting) followed by &#8216;W&#8217; and &#8216;q&#8217;.  Finally, restart the program with -d0 (zero delay).</p>
<p>Your display will be refreshed at three times the rate of the former top, a 300% speed advantage.  As top climbs the TIME ladder, be as patient as you can while speculating on whether or not top will ever reach the top.</p>
<p>6b. Bouncing Windows<br />
For these stupid tricks, top needs alternate-display mode.</p>
<p>-*-  With 3 or 4 task displays visible, pick any window other than the last and turn idle processes Off.  Depending  on  where you applied &#8216;i&#8217;, sometimes several task displays are bouncing and sometimes it&#8217;s like an accordion, as top tries his best allocate space.</p>
<p>-*-  Set each window&#8217;s summary lines differently: one with no memory; another with no states; maybe one with nothing  at  all, just the message line.  Then hold down &#8216;a&#8217; or &#8216;w&#8217; and watch a variation on bouncing windows  &#8211;  hopping windows.</p>
<p>-*-  Display all 4 windows and for each, in turn, set idle processes to Off.  You&#8217;ve just entered the &#8220;extreme bounce&#8221; zone.</p>
<p>6c. The Big Bird Window<br />
This stupid trick also requires alternate-display mode.</p>
<p>-*-  Display  all 4 windows and make sure that 1:Def is the &#8216;current&#8217; window.  Then, keep increasing window size until the all the other task displays are &#8220;pushed out of the nest&#8221;.</p>
<p>When they&#8217;ve all been displaced, toggle between all visible/invisible windows.  Then ponder this:<br />
is top fibbing or telling honestly your imposed truth?</p>
<h2>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</h2>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/kaiwantech.wordpress.com/80/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/kaiwantech.wordpress.com/80/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/kaiwantech.wordpress.com/80/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/kaiwantech.wordpress.com/80/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/kaiwantech.wordpress.com/80/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/kaiwantech.wordpress.com/80/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/kaiwantech.wordpress.com/80/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/kaiwantech.wordpress.com/80/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/kaiwantech.wordpress.com/80/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/kaiwantech.wordpress.com/80/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kaiwantech.wordpress.com&blog=6153622&post=80&subd=kaiwantech&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://kaiwantech.wordpress.com/2009/04/29/linux-cheatsheet-vmstat-ps-top/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e5216008e0b231a760d20d22b01c4328?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">kaiwan</media:title>
		</media:content>
	</item>
		<item>
		<title>Linux and Stale? Never!</title>
		<link>http://kaiwantech.wordpress.com/2009/04/16/linux-and-stale-never/</link>
		<comments>http://kaiwantech.wordpress.com/2009/04/16/linux-and-stale-never/#comments</comments>
		<pubDate>Thu, 16 Apr 2009 05:47:53 +0000</pubDate>
		<dc:creator>Kaiwan</dc:creator>
				<category><![CDATA[Linux Kernel]]></category>
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://kaiwantech.wordpress.com/?p=67</guid>
		<description><![CDATA[The words Linux (and all that it implies), stale/boring never go together.
Take a look at LinuxDevice&#8217;s excellent report on the LF&#8217;s (Linux Foundation) Collabaration Summit held last week in SF, USA.
A quick sampling to whet your appetite:

Intel hands over the Moblin project to the LF
KVM&#8217;s being pushed as the way to go within Linux virtualization
The [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kaiwantech.wordpress.com&blog=6153622&post=67&subd=kaiwantech&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>The words Linux (and all that it implies), stale/boring <em>never</em> go together.</p>
<p>Take a look at<a href="http://www.linuxdevices.com/news/NS2721874402.html?kc=LXDEMNL041509" target="_blank"> LinuxDevice&#8217;s excellent report</a> on the LF&#8217;s (Linux Foundation) Collabaration Summit held last week in SF, USA.</p>
<p>A quick sampling to whet your appetite:</p>
<ul>
<li>Intel hands over the Moblin project to the LF</li>
<li>KVM&#8217;s being pushed as the way to go within Linux virtualization</li>
<li>The Kernel Summit / Panel discussion was energetic, techy and interesting-
<ul>
<li>2.6.29 kernel released two weeks back by LF</li>
<li>Andrew Morton bags the first-ever &#8220;Unsung Hero&#8221; award!</li>
<li>Intel and ATI will work towards greatly modernizing the kernel graphics stack</li>
<li>Ted Ts&#8217;o talks about moving to Oracle&#8217;s Btrfs filesystem</li>
</ul>
</li>
<li>LF announces the winning entries to the &#8220;We&#8217;re Linux&#8221; 1-minute video contest.</li>
</ul>
<p>Read about all this (and more!)  <a href="http://www.linuxdevices.com/news/NS2721874402.html?kc=LXDEMNL041509">here</a>.</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/kaiwantech.wordpress.com/67/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/kaiwantech.wordpress.com/67/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/kaiwantech.wordpress.com/67/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/kaiwantech.wordpress.com/67/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/kaiwantech.wordpress.com/67/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/kaiwantech.wordpress.com/67/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/kaiwantech.wordpress.com/67/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/kaiwantech.wordpress.com/67/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/kaiwantech.wordpress.com/67/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/kaiwantech.wordpress.com/67/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kaiwantech.wordpress.com&blog=6153622&post=67&subd=kaiwantech&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://kaiwantech.wordpress.com/2009/04/16/linux-and-stale-never/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e5216008e0b231a760d20d22b01c4328?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">kaiwan</media:title>
		</media:content>
	</item>
		<item>
		<title>Google-Android (ABO) Executive Conference, 5 Mar 2009, Bangalore, India</title>
		<link>http://kaiwantech.wordpress.com/2009/04/02/google-android-abo-executive-conference-5-mar-2009-bangalore-india/</link>
		<comments>http://kaiwantech.wordpress.com/2009/04/02/google-android-abo-executive-conference-5-mar-2009-bangalore-india/#comments</comments>
		<pubDate>Thu, 02 Apr 2009 07:35:41 +0000</pubDate>
		<dc:creator>Kaiwan</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[ADP1]]></category>
		<category><![CDATA[android google ABO conference seminar]]></category>
		<category><![CDATA[conference]]></category>
		<category><![CDATA[kernel]]></category>
		<category><![CDATA[presentation]]></category>
		<category><![CDATA[speaker]]></category>

		<guid isPermaLink="false">http://kaiwantech.wordpress.com/?p=49</guid>
		<description><![CDATA[
Was happy to be a speaker at the &#8216;Google-Android for Executives Conference &#8216;09&#8242; organized by ABO Ventures, held in Bangalore on 5 Mar &#8216;09.
I made a brief presentation entitled &#8220;Android &#8211; A Look Under the Hood&#8221;, which was pretty well received. It included a couple of demos on the Android Developer Phone (ADP1):
- changing brightness [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kaiwantech.wordpress.com&blog=6153622&post=49&subd=kaiwantech&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p><a href="http://www.aboventures.com/android/" target="_blank"><img class="alignnone size-medium wp-image-58" title="google-android-conf" src="http://kaiwantech.files.wordpress.com/2009/03/img_google-android.gif?w=300&#038;h=147" alt="google-android-conf" width="300" height="147" /></a></p>
<p>Was happy to be a <a href="http://www.aboventures.com/android/speakers.html#kaiwan" target="_blank">speaker</a> at the &#8216;Google-Android for Executives Conference &#8216;09&#8242; organized by <a href="http://www.aboventures.com/" target="_blank">ABO Ventures</a>, held in Bangalore on 5 Mar &#8216;09.</p>
<p>I made a brief presentation entitled &#8220;Android &#8211; A Look Under the Hood&#8221;, which was pretty well received. It included a couple of demos on the Android Developer Phone (ADP1):<br />
- changing brightness of the LCD screen (using a shell script, low-level hardware access via /sys &#8211; not the recommended way to do it!)<br />
- flashing the device: saving and restoring the bootloader, kernel and system/app images.</p>
<p>Some pics taken during the flashing process below:</p>
<p><img class="alignleft size-medium wp-image-61" title="ADP1 hooked up to the laptop via the USB cable" src="http://kaiwantech.files.wordpress.com/2009/04/0213_180836.jpg?w=225&#038;h=300" alt="ADP1 hooked up to the laptop via the USB cable" width="225" height="300" /></p>
<p>ADP1 (Android Developer Phone v1) hooked up to the laptop via the USB cable.</p>
<p><img class="size-medium wp-image-59 alignleft" title="ADP1 showing the bootloader-loaded recovery util (JF v1.3)" src="http://kaiwantech.files.wordpress.com/2009/04/dsc03370.jpg?w=225&#038;h=300" alt="ADP1 showing the bootloader-loaded recovery util (JF v1.3)" width="225" height="300" /></p>
<p>ADP1 showing the bootloader-loaded recovery util (JF v1.3).</p>
<p><img class="alignnone size-medium wp-image-63" title="ADP1 'Settings/About phone' screenshot after upgrade (flash)." src="http://kaiwantech.files.wordpress.com/2009/04/dsc03378.jpg?w=300&#038;h=225" alt="ADP1 " width="300" height="225" /></p>
<p>ADP1 &#8216;Settings/About phone&#8217; screenshot after upgrade (flash).</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/kaiwantech.wordpress.com/49/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/kaiwantech.wordpress.com/49/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/kaiwantech.wordpress.com/49/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/kaiwantech.wordpress.com/49/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/kaiwantech.wordpress.com/49/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/kaiwantech.wordpress.com/49/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/kaiwantech.wordpress.com/49/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/kaiwantech.wordpress.com/49/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/kaiwantech.wordpress.com/49/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/kaiwantech.wordpress.com/49/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kaiwantech.wordpress.com&blog=6153622&post=49&subd=kaiwantech&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://kaiwantech.wordpress.com/2009/04/02/google-android-abo-executive-conference-5-mar-2009-bangalore-india/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e5216008e0b231a760d20d22b01c4328?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">kaiwan</media:title>
		</media:content>

		<media:content url="http://kaiwantech.files.wordpress.com/2009/03/img_google-android.gif?w=300" medium="image">
			<media:title type="html">google-android-conf</media:title>
		</media:content>

		<media:content url="http://kaiwantech.files.wordpress.com/2009/04/0213_180836.jpg?w=225" medium="image">
			<media:title type="html">ADP1 hooked up to the laptop via the USB cable</media:title>
		</media:content>

		<media:content url="http://kaiwantech.files.wordpress.com/2009/04/dsc03370.jpg?w=225" medium="image">
			<media:title type="html">ADP1 showing the bootloader-loaded recovery util (JF v1.3)</media:title>
		</media:content>

		<media:content url="http://kaiwantech.files.wordpress.com/2009/04/dsc03378.jpg?w=300" medium="image">
			<media:title type="html">ADP1 'Settings/About phone' screenshot after upgrade (flash).</media:title>
		</media:content>
	</item>
		<item>
		<title>My open source contributions, listed on ohloh.net</title>
		<link>http://kaiwantech.wordpress.com/2009/03/24/my-open-source-contributions-listed-on-ohlohnet/</link>
		<comments>http://kaiwantech.wordpress.com/2009/03/24/my-open-source-contributions-listed-on-ohlohnet/#comments</comments>
		<pubDate>Tue, 24 Mar 2009 18:08:37 +0000</pubDate>
		<dc:creator>Kaiwan</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[contributor]]></category>
		<category><![CDATA[kaiwan]]></category>
		<category><![CDATA[kernel]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[ohloh]]></category>
		<category><![CDATA[open-source]]></category>

		<guid isPermaLink="false">http://kaiwantech.wordpress.com/?p=50</guid>
		<description><![CDATA[ohloh.net does a really neat job tracking open-source projects / efforts. It tracks by person, project, language.
Really cool!
My personal (&#38; very small!) contributions to open source can be seen here:
See https://www.ohloh.net/people?sort=kudo_position&#38;q=kaiwan+billimoria 
(Note that my actual commits are to the project &#8216;Linux Kernel 2.6&#8242; and the &#8216;OpenMoko VisualGPS&#8217; project; their being used in other open source [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kaiwantech.wordpress.com&blog=6153622&post=50&subd=kaiwantech&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p><a href="http://www.ohloh.net">ohloh.net</a> does a really neat job tracking open-source projects / efforts. It tracks by person, project, language.</p>
<p>Really cool!</p>
<p>My personal (&amp; very small!) contributions to open source can be seen here:</p>
<p>See <a href="https://www.ohloh.net/people?sort=kudo_position&amp;q=kaiwan+billimoria">https://www.ohloh.net/people?sort=kudo_position&amp;q=kaiwan+billimoria </a></p>
<p>(Note that my actual commits are to the project &#8216;Linux Kernel 2.6&#8242; and the &#8216;OpenMoko VisualGPS&#8217; project; their being used in other open source projects makes it show up elsewhere as well&#8230;).</p>
<p><a href="https://www.ohloh.net/accounts/38064?ref=Detailed"><br />
<img src="https://www.ohloh.net/accounts/38064/widgets/account_detailed.gif" alt="Ohloh profile for Kaiwan N Billimoria" width="191" height="35" /><br />
</a></p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/kaiwantech.wordpress.com/50/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/kaiwantech.wordpress.com/50/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/kaiwantech.wordpress.com/50/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/kaiwantech.wordpress.com/50/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/kaiwantech.wordpress.com/50/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/kaiwantech.wordpress.com/50/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/kaiwantech.wordpress.com/50/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/kaiwantech.wordpress.com/50/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/kaiwantech.wordpress.com/50/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/kaiwantech.wordpress.com/50/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kaiwantech.wordpress.com&blog=6153622&post=50&subd=kaiwantech&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://kaiwantech.wordpress.com/2009/03/24/my-open-source-contributions-listed-on-ohlohnet/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e5216008e0b231a760d20d22b01c4328?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">kaiwan</media:title>
		</media:content>

		<media:content url="//www.ohloh.net/accounts/38064/widgets/account_detailed.gif" medium="image">
			<media:title type="html">Ohloh profile for Kaiwan N Billimoria</media:title>
		</media:content>
	</item>
		<item>
		<title>A few &#8220;Android FAQs for Beginners&#8221; Answered</title>
		<link>http://kaiwantech.wordpress.com/2009/03/23/a-few-android-faqs-for-beginners-answered/</link>
		<comments>http://kaiwantech.wordpress.com/2009/03/23/a-few-android-faqs-for-beginners-answered/#comments</comments>
		<pubDate>Mon, 23 Mar 2009 08:02:09 +0000</pubDate>
		<dc:creator>Kaiwan</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[faq]]></category>
		<category><![CDATA[FAQs]]></category>
		<category><![CDATA[G1]]></category>
		<category><![CDATA[G2]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[HTC]]></category>
		<category><![CDATA[OHA]]></category>

		<guid isPermaLink="false">http://kaiwantech.wordpress.com/?p=27</guid>
		<description><![CDATA[Begin


Q. Where do I even begin to really 	understand what Android really is about???
A. Attend our trainings / workshops / presentations 
A. See the Google 	I/O Video tutorials listed here&#8230;
A. Work on it.



Q. Are there actual physical 	Android devices?
A. Yes, as of this writing, the HTC 	“Dream” T-Mobile G1 and 	the unlocked Google Android 	Developer [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kaiwantech.wordpress.com&blog=6153622&post=27&subd=kaiwantech&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p style="margin-bottom:0;"><em>Begin</em></p>
<ul>
<li>
<p style="margin-bottom:0;">Q. Where do I even begin to really 	understand what Android really is about???</p>
<p style="margin-bottom:0;">A. Attend <a href="http://www.designergraphix.com">our</a> trainings / workshops / presentations <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /><br />
A. See the <a href="http://source.android.com/documentation">Google 	I/O Video tutorials listed here</a>&#8230;<br />
A. Work on it.</li>
</ul>
<ul>
<li>
<p style="margin-bottom:0;">Q. Are there actual physical 	Android devices?</p>
<p style="margin-bottom:0;">A. Yes, as of this writing, the HTC 	“Dream” <a href="http://www.t-mobileg1.com/">T-Mobile G1</a> and 	the unlocked Google <a href="http://developer.android.com/guide/developing/device.html#dev-phone-1">Android 	Developer Phone 1</a> (ADP1). Also, very recently (24 Feb 2009) the 	HTC “Magic” <a href="http://www.vodafone.com/start/media_relations/news/group_press_releases/2009/vodafone_and_htc_unveil.html">Vodafone 	G2</a> has been released. All handsets have been built by OHA-member 	<a href="http://www.htc.com/www/product/magic/overview.html">HTC</a>.</p>
<p><em>Update [2 May '09]:</em><br />
Samsung has just released the <a href="http://www.engadget.com/2009/04/27/samsung-i7500-oled-handset-powered-by-android-dreams/">Samsung I7500 Android</a> mobile smartphone; the <a href="http://press.samsungmobile.com/press.view.do?messageId=741">announcement</a> was made on 27 April 2009.</li>
</ul>
<p style="margin-bottom:0;">
<p style="margin-bottom:0;"><em>Application Development</em></p>
<ul>
<li>
<p style="margin-left:1.25cm;margin-bottom:0;">Q. Prerequisites?<br />
A. You should 	know (at least the basics of) Java programming.</li>
<li>
<p style="margin-left:1.25cm;margin-bottom:0;">Q. How does one develop 	applications for Android?<br />
A. First, download and install the SDK. Read the Developer Guides, tutorials, books (etc). Write applications (using Java, and probably, the Eclipse IDE with the Android ADT plugin). <a href="http://developer.android.com/">Start here</a>.</li>
</ul>
<ul>
<li>
<p style="margin-bottom:0;">Q. Is there a basic “Hello, 	World” for Android tutorial I can follow?<br />
A. <a href="http://developer.android.com/guide/tutorials/hello-world.html">Yup</a>.</li>
<li>
<p style="margin-bottom:0;">Q. What about Mailing Lists / Support Groups?<br />
A. Indeed there are; see <a href="http://developer.android.com/community/index.html#ApplicationDeveloperLists">this 	page</a>.</li>
<li>
<p style="margin-bottom:0;">Q. Besides the on-line 	tutorials/groups, is there a good book(s) on Android application 	development available?<br />
<span id="more-27"></span>A. Yes of course. I personally have <a href="http://www.amazon.com/Professional-Android-Application-Development-Programmer/dp/0470344717/ref=pd_bbs_sr_1?ie=UTF8&amp;s=books&amp;qid=1237791584&amp;sr=8-1">“Professional 	Android Application Development” by Reto Meier, Wrox Press</a>. It&#8217;s pretty comprehensive.<br />
There are <a href="http://www.amazon.com/s/ref=nb_ss_gw?url=search-alias=stripbooks&amp;field-keywords=android&amp;x=0&amp;y=0">several 	books</a>, in fact (and certainly more to come).<br />
As a quick start, <a href="http://www.amazon.com/Busy-Coders-Guide-Android-Development/dp/0981678009/ref=wl_it_dp?ie=UTF8&amp;coliid=I3M6ZF3NE0I7PN&amp;colid=2ADHEGL0D005P">&#8220;</a><span><a href="http://www.amazon.com/Busy-Coders-Guide-Android-Development/dp/0981678009/ref=wl_it_dp?ie=UTF8&amp;coliid=I3M6ZF3NE0I7PN&amp;colid=2ADHEGL0D005P">The Busy Coder&#8217;s Guide to Android Development&#8221;</a> by Mark L Murphy, Commonsware, LLC, looks to be a very good book.</span></li>
</ul>
<p style="margin-bottom:0;font-style:normal;"><em>Internals</em></p>
<ul>
<li>Q. Is there a 	“global” place I can get started on Android Internals?<br />
A. <a href="http://www.google.com/search?hl=en&amp;site=%26ie%3DISO-8859-1%26q%3Dandroid%2Binternals&amp;q=android+internals&amp;btnG=Search"> Google</a> is your friend <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /><br />
A. Well, try the <a href="http://www.android-internals.org/index.php?title=Main_Page">Android 	Internals Wiki</a> site, a good jump-off point.<br />
A. There are 	(too?) many (specifically targeted) <a href="http://groups.google.com/groups/dir?q=android&amp;">Android-related 	groups/mailing lists</a> also of course.<br />
A. Also, one can search 	within all Android-related mailing lists from <a href="http://android-search.blogspot.com/">here</a>.</li>
</ul>
<p style="margin-bottom:0;font-style:normal;"><em>Direction, Contribution</em></p>
<ul>
<li>Q. Is there a formal road map for 	Android?<br />
A. <a href="http://source.android.com/roadmap">Yes</a>.</li>
<li>Q. Can I contribute toward the 	effort?</li>
<li> A. Yes. Details <a href="http://source.android.com/">here</a> and <a href="http://source.android.com/submit-patches">here</a>.<em></em></li>
</ul>
<p><em>Other</em></p>
<ul>
<li>Q. What if I need to glue-in some 	C (or C++) code (perhaps for speed-sensitive code paths)?<br />
A. One can do that, using JNI. A <a href="http://davanum.wordpress.com/2007/12/09/android-invoke-jni-based-methods-bridging-cc-and-java/">blog post</a> on this topic.</li>
</ul>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/kaiwantech.wordpress.com/27/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/kaiwantech.wordpress.com/27/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/kaiwantech.wordpress.com/27/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/kaiwantech.wordpress.com/27/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/kaiwantech.wordpress.com/27/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/kaiwantech.wordpress.com/27/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/kaiwantech.wordpress.com/27/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/kaiwantech.wordpress.com/27/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/kaiwantech.wordpress.com/27/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/kaiwantech.wordpress.com/27/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kaiwantech.wordpress.com&blog=6153622&post=27&subd=kaiwantech&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://kaiwantech.wordpress.com/2009/03/23/a-few-android-faqs-for-beginners-answered/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e5216008e0b231a760d20d22b01c4328?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">kaiwan</media:title>
		</media:content>
	</item>
	</channel>
</rss>