[DRBD-cvs] r1895 - trunk

www-data www-data at linbit.com
Mon Jul 25 17:43:26 CEST 2005


Author: phil
Date: 2005-07-25 17:43:25 +0200 (Mon, 25 Jul 2005)
New Revision: 1895

Modified:
   trunk/ROADMAP
Log:
More thoughts on that toppic...


Modified: trunk/ROADMAP
===================================================================
--- trunk/ROADMAP	2005-07-21 08:41:14 UTC (rev 1894)
+++ trunk/ROADMAP	2005-07-25 15:43:25 UTC (rev 1895)
@@ -579,20 +579,39 @@
 
   How should we deal with our self generated barrier packets ?
 
-    It looks like that if our backing device's queue properties are set to
-    QUEUE_ORDERED_TAG I guess we might use the RIO_RW_BARRIER flag on BIOs
-    instead of waiting untill all of our pending local write requests are
-    done upon receiving a write barrier packet. This could give us a
-    performance boost.
-
-    In case our backing device only supports QUEUE_ORDERED_FLUSH it is
-    probabely better to use the current code. That means, when we receive
-    a write barrier packet we wait until all of our pending local write
-    requests are done.
-
     In case our backing device is of the QUEUE_ORDERED_NONE class, we
     have to stay with the current code.
 
+    In case our backing device only supports QUEUE_ORDERED_FLUSH we
+    will to use the current code. That means, when we receive a write 
+    barrier packet we wait until all of our pending local write
+    requests are done. (This potentially causes congestion on the TCP
+    socket...)
+
+    In cause our backing device's queue properties are set to 
+    QUEUE_ORDERED_TAG we offload the complete barrier logic to the
+    backing storage device:
+
+    * When we receive a barrier packet
+      - If we have no local pending requests, we send the barrier ACK 
+        immediately. (= current code)
+      - If the last_barrier_write member of mdev points to an epoch_entry
+        we set bit 31 of bnum.
+      - If we have local pending requests, we set a flag that the next
+        data packet has to be written with the BIO_RW_BARRIER flag.
+        (That flag should be called BARRIER_NEEDED)
+
+    * When receiving data packets we test_and_clear BARRIER_NEEDED,
+      and add set the BIO_RW_BARRIER on the write request. We also set
+      the last_barrier_write member of mdev.
+      [Normal writes clear the last_barrier_write member of mdev]
+
+    * When a write completes and it has the bnum set, send the barrier
+      ack before sending the ack for the write. In case the highest
+      bit of bnum is set as well, also send the barrier ack following
+      the write ack of the data packet.
+
+
 plus-banches:
 ----------------------
 



More information about the drbd-cvs mailing list