[Libguestfs] [PATCH libnbd 3/6] tests/synch-parallel: Remove unneeded memcpy

Nir Soffer nsoffer at redhat.com
Sun Nov 14 07:21:42 UTC 2021


The synch-parallel test was writing the thread buffer to the nbd server,
and then copying data from the ramdisk to the thread buffer. This looks
wrong for two reasons:

- The thread buffer is initialized to zeroes, and after every write, to
  the contents of the ramdisk, so we always write data which does not
  match the contents of the ramdisk. I guess this works since the patten
  filter drops the written data.

- For every write, we pay for unneeded memcpy() adding unwanted noise to
  the results.

Simplify the code to either copy a block from the ramdisk to the nbd
server or copy a block from nbd server to the thread buffer.

Testing show no significant difference with or without the unneeded
memcpy().

Signed-off-by: Nir Soffer <nsoffer at redhat.com>
---
 tests/synch-parallel.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/tests/synch-parallel.c b/tests/synch-parallel.c
index 72402d7..cecfeae 100644
--- a/tests/synch-parallel.c
+++ b/tests/synch-parallel.c
@@ -218,48 +218,49 @@ start_thread (void *arg)
   }
 
   assert (nbd_get_size (nbd) == EXPORTSIZE);
   assert (nbd_can_multi_conn (nbd) > 0);
   assert (nbd_is_read_only (nbd) == 0);
 
   start_usec = microtime ();
   stop_usec = start_usec + RUN_TIME * MICROSECONDS;
 
   /* Issue commands. */
   while (1) {
     /* Run until the timer expires. */
     now_usec = microtime ();
     if (now_usec >= stop_usec)
       break;
 
     /* Issue a synchronous read or write command. */
     offset = status->offset + (rand () % (status->length - BUFFER_SIZE));
     cmd = rand () & 1;
     if (cmd == 0) {
-      if (nbd_pwrite (nbd, buf, BUFFER_SIZE, offset, 0) == -1) {
+      /* Write block from ramdisk to nbd server. */
+      if (nbd_pwrite (nbd, &ramdisk[offset], BUFFER_SIZE, offset, 0) == -1) {
         fprintf (stderr, "%s\n", nbd_get_error ());
         goto error;
       }
       status->bytes_sent += BUFFER_SIZE;
-      memcpy (&ramdisk[offset], buf, BUFFER_SIZE);
     }
     else {
+      /* Read block from nbd server to buf. */
       if (nbd_pread (nbd, buf, BUFFER_SIZE, offset, 0) == -1) {
         fprintf (stderr, "%s\n", nbd_get_error ());
         goto error;
       }
       status->bytes_received += BUFFER_SIZE;
       if (memcmp (&ramdisk[offset], buf, BUFFER_SIZE) != 0) {
         fprintf (stderr, "thread %zu: DATA INTEGRITY ERROR!\n", status->i);
         goto error;
       }
     }
     status->requests++;
   }
 
   printf ("thread %zu: finished OK in %.6f seconds\n",
           status->i, (double) (now_usec - start_usec) / MICROSECONDS);
 
   if (nbd_shutdown (nbd, 0) == -1) {
     fprintf (stderr, "%s\n", nbd_get_error ());
     goto error;
   }
-- 
2.31.1




More information about the Libguestfs mailing list