dlm: reduce cond_resched during send
Bob Peterson [Fri, 12 Nov 2010 17:15:20 +0000 (11:15 -0600)]
Calling cond_resched() after every send can unnecessarily
degrade performance.  Go back to an old method of scheduling
after 25 messages.

Signed-off-by: Bob Peterson <rpeterso@redhat.com>
Signed-off-by: David Teigland <teigland@redhat.com>

fs/dlm/lowcomms.c

index 2bedb0a..0e75f15 100644 (file)
@@ -63,6 +63,9 @@
 #define NEEDED_RMEM (4*1024*1024)
 #define CONN_HASH_SIZE 32
 
+/* Number of messages to send before rescheduling */
+#define MAX_SEND_MSG_COUNT 25
+
 struct cbuf {
        unsigned int base;
        unsigned int len;
@@ -1318,6 +1321,7 @@ static void send_to_sock(struct connection *con)
        const int msg_flags = MSG_DONTWAIT | MSG_NOSIGNAL;
        struct writequeue_entry *e;
        int len, offset;
+       int count = 0;
 
        mutex_lock(&con->sock_mutex);
        if (con->sock == NULL)
@@ -1355,8 +1359,12 @@ static void send_to_sock(struct connection *con)
                        if (ret <= 0)
                                goto send_error;
                }
-                       /* Don't starve people filling buffers */
+
+               /* Don't starve people filling buffers */
+               if (++count >= MAX_SEND_MSG_COUNT) {
                        cond_resched();
+                       count = 0;
+               }
 
                spin_lock(&con->writequeue_lock);
                e->offset += ret;