diff --git a/src/performance.py b/src/performance.py
new file mode 100644
index 0000000..ce3cf93
--- /dev/null
+++ b/src/performance.py
@@ -0,0 +1,75 @@
+#!/usr/bin/env
+
+import datetime, threading, thread
+
+class CheckPerf:
+    writelock = threading.Lock()
+    def __init__(self):
+        self.begintime = datetime.datetime.now()
+        self.endtime = None
+        self.mintime = 0.0
+        self.maxtime = 0.0
+        self.successcount = 0
+        self.failedcount = 0
+        self.totaltime = 0.0
+        self.reportmsg = ''
+        self.prechktime = None
+        
+    def startchk(self):
+        self.begintime = datetime.datetime.now()
+        self.endtime = None
+        self.mintime = 99999999.0
+        self.maxtime = 0.0
+        self.checkcount = 0
+        self.totaltime = 0.0
+        self.reportmsg = ''
+        self.prechktime = self.begintime
+    
+    def setchkpoint(self, success=True):
+        self.endtime = datetime.datetime.now()
+        delta = self.endtime - self.prechktime
+        t = delta.seconds + delta.microseconds / 1000000.0
+        if t < self.mintime: self.mintime = t
+        if t > self.maxtime: self.maxtime = t
+        if success:
+            self.successcount += 1
+        else:
+            self.failedcount += 1
+        self.totaltime += t
+        self.prechktime = self.endtime
+        
+    def _output_file(self, out_file):
+        handler = open(out_file, 'a+b')
+        handler.write("thrd[%d]" % thread.get_ident())
+        handler.write(' - ' + self.reportmsg + '\n')
+        handler.close()
+        
+    def _reportToFile(self, out_file):
+        CheckPerf.writelock.acquire()
+        try:
+            self._output_file(out_file)
+            print "generate report file " , out_file
+        except Exception, ex:
+            print "generator report file ", out_file , " Error ", ex
+        CheckPerf.writelock.release()
+        
+    def report_msg(self):
+        totalcheckcount = self.successcount + self.failedcount
+        if totalcheckcount > 2:
+            avg = (self.totaltime - self.mintime - self.maxtime) / (totalcheckcount - 2)
+        elif totalcheckcount == 0:
+            rpt = "No check point has been set"
+            return rpt
+        else:
+            avg = self.totaltime / totalcheckcount
+        rpt = 'execute[%d]count cost(s) [%.4f]max[%.4f]min[%.4f]avg[%.4f] success[%d] failed[%d]' \
+            % (totalcheckcount, self.totaltime, self.maxtime, self.mintime, avg, \
+            self.successcount, self.failedcount)
+        return rpt
+        
+    def report(self, out_file=None):
+        self.reportmsg = self.report_msg()
+        if out_file:
+            self._reportToFile(out_file)
+        return self.reportmsg
+        
