[ 
https://issues.apache.org/jira/browse/HDFS-8900?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14709301#comment-14709301
 ] 

Yi Liu commented on HDFS-8900:
------------------------------

{quote}
The max size of the packed byte[] is 32KB * 32 = 1MB...
But such big sequential memory allocation could cause full GC when heap is 
fragmented.
{quote}
We can say this would never happen in real case. Typical the xattr value size 
is very small (several bytes to tens of bytes, much smaller than 32KB, this is 
also the design goal of xattr, for system/security namespace xattr used by HDFS 
core, the size are very small today; if applications use user/trusted xattr to 
store large size value, the memory of NN itself will have serious problem, for 
1MB size xattrs of an INode as in your example, 1TB memory is required if there 
is only 1MB number Inodes). In real case, even for HDFS transparent encryption 
which uses xattr to store lots of information (see FileEncryptionInfo), the 
xattr value size is only 48bytes.

Of course the applications may use the xattr wrongly and use it to store large 
size (several KB to tens of KB) value, to prevent this, I will add a threshold 
not to pack those large size xattrs and still store them separately in a list 
as original.  For small size xattr, we will pack them.  The threshold can be 
1KB, in a common situation, the list storing large size xattr is null, so only 
4 bytes. 


> Compact XAttrs to optimize memory footprint.
> --------------------------------------------
>
>                 Key: HDFS-8900
>                 URL: https://issues.apache.org/jira/browse/HDFS-8900
>             Project: Hadoop HDFS
>          Issue Type: Improvement
>          Components: namenode
>            Reporter: Yi Liu
>            Assignee: Yi Liu
>         Attachments: HDFS-8900.001.patch, HDFS-8900.002.patch, 
> HDFS-8900.003.patch
>
>
> {code}
> private final ImmutableList<XAttr> xAttrs;
> {code}
> Currently we use above in XAttrFeature, it's not efficient from memory point 
> of view, since {{ImmutableList}} and {{XAttr}} have object memory overhead, 
> and each object has memory alignment. 
> We can use a {{byte[]}} in XAttrFeature and do some compact in {{XAttr}}.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to