[ 
https://issues.apache.org/jira/browse/HADOOP-1702?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12575553#action_12575553
 ] 

Raghu Angadi commented on HADOOP-1702:
--------------------------------------


Test results show *30%* improvement in DataNode CPU with the patch. I think it 
makes sense. Based on the picture above before this patch, with replication of 
3, the data is copied 6 + 6 + 4 times and with this patch it is 3 + 3 + 2. Each 
of these datanodes verify CRC. Approximating cost of checksumming to be twice 
that of a memory copy, we get (8+6)/(14+6) == 70%. If we increase the size of 
checksum chunk, cost of CRC will go down. It will be 68% with a factor of 1.5 
for CRC.

Test Setup : three instances of 'dd if=/dev/zero 4Gb | hadoop -put - 4Gb'. More 
importantly, DataNode was modified to write the deta to '/dev/null' instead of 
the block file. Otherwise I could not isolate the test from disk activity. The 
cluster has 3 datanodes. The clients, Namenode, and datanodes are all running 
on the same node. The test was CPU bound.

CPU measurement : Linux reports a process' cpu in /proc/pid/stat : 14th entry 
is user cpu and 15th is kernel cpu. I think these are specified in  jiffies. 
Like most things with Linux kernel, these are approximations but reasonably 
dependable in large numbers.

below: 'u' and 'k' are user and kernel cpu in thousands of jiffies.

|| Test || Run 1 || Run 2 || Run 3 || Avg Total Cpu || Avg Time ||
| Trunk* | 8.60u 2.52k 372s | 8.36u 2.48k 368s |  8.39u 2.40k 368s | *10.95*  | 
369s |
| Trunk + patch* | 5.61u 2.22k 289s | 5.38u 2.16k 296s | 5.57u 2.25k 289s | 
*7.73 (70%)*| 291s (79%) |
{{*}} : datanodes write data to /dev/null.

Currently, DFSIO benchmark shows dip in write b/w. I am still looking into it.



> Reduce buffer copies when data is written to DFS
> ------------------------------------------------
>
>                 Key: HADOOP-1702
>                 URL: https://issues.apache.org/jira/browse/HADOOP-1702
>             Project: Hadoop Core
>          Issue Type: Bug
>          Components: dfs
>    Affects Versions: 0.14.0
>            Reporter: Raghu Angadi
>            Assignee: Raghu Angadi
>             Fix For: 0.17.0
>
>         Attachments: HADOOP-1702.patch
>
>
> HADOOP-1649 adds extra buffering to improve write performance.  The following 
> diagram shows buffers as pointed by (numbers). Each eatra buffer adds an 
> extra copy since most of our read()/write()s match the io.bytes.per.checksum, 
> which is much smaller than buffer size.
> {noformat}
>        (1)                 (2)          (3)                 (5)
>    +---||----[ CLIENT ]---||----<>-----||---[ DATANODE ]---||--<>-> to Mirror 
>  
>    | (buffer)                  (socket)           |  (4)
>    |                                              +--||--+
>  =====                                                    |
>  =====                                                  =====
>  (disk)                                                 =====
> {noformat}
> Currently loops that read and write block data, handle one checksum chunk at 
> a time. By reading multiple chunks at a time, we can remove buffers (1), (2), 
> (3), and (5). 
> Similarly some copies can be reduced when clients read data from the DFS.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to