Liang Xie created HDFS-6766:
-------------------------------

             Summary: optimize ack notify mechanism to avoid thundering herd 
issue
                 Key: HDFS-6766
                 URL: https://issues.apache.org/jira/browse/HDFS-6766
             Project: Hadoop HDFS
          Issue Type: Improvement
          Components: hdfs-client
    Affects Versions: 3.0.0
            Reporter: Liang Xie
            Assignee: Liang Xie


Currently, DFSOutputStream uses wait/notifyAll to coordinate ack receiving and 
ack waiting, etc..
say there're 5 threads(t1,t2,t3,t4,t5) wait for ack seq no: 1,2,3,4,5, once the 
no. 1 ack arrived, the "notifyAll" be called, so t2/t3/t4/t5 could do nothing 
except wait again.
we can rewrite it with Condition class, with a fair policy(fifo), we can just 
make t1 be notified, so a number of context switch be saved.
It's possible more than one thread waiting on the same ack seq no(e.g. no more 
data be written between two flush operations), so once it happened, we need to 
notify those threads, so i introduced a set to remember this seq no.
In a simple HBase ycsb testing, the context switch number per second was 
reduced about 15%, and reduced sys cpu% about 6%(My HBase has new write model 
patch, i think the benefit will be higher if w/o it)



--
This message was sent by Atlassian JIRA
(v6.2#6252)

Reply via email to