AIX

AIX

Connect with fellow AIX users and experts to gain knowledge, share insights, and solve problems.


#Power
#Power
 View Only

Why does disk read performance show nearly linear growth with increasing number of reading processes?

  • 1.  Why does disk read performance show nearly linear growth with increasing number of reading processes?

    Posted Wed February 20, 2019 04:36 AM

    Originally posted by: Stephan B.


    Dear all,

     

    background: I noticed rather slow disk-to-tape migration performance with TSM. To test if TSM itself is the source of the problem I tested disk read performance with ndisk64 of IBMs nstress toolset . I've noticed that the read throughput and IOPS roughly grow linearly with the amount of parallel processes and I don't understand why. I've tested this on different power machines with different storage systems in totally different environments but I always saw this behaviour. Though I mainly tested with 256k blocksize and random read this seems to be also true for other blocksizes and sequential read. Tests were done with a single large file on a  single filesystem on a single FC LUN with nearly no other I/O on the storage system in each environment. First I thought that maybe some buffers or queue depth may be the source of this behaviour but after re-thinking I came to the conclusion that this should have rather no correlation because if queues/buffer were sized too small this should impact performance regardless of the number of parallel IO threads. IMO they get filled regardless where the IO comes from. The storage system on the other hand also seems not to be the problematic component because as one can see with several parallel reading processes the storagesystem is capable of handling much higher IOPS and delivering data with much higher throughput than one can see with a single reading process. I find this quite puzzling... 

     

    Here are the measurements for illustration purpose:

    -------- 1 PROCESS: -------

    root@aix020:/opt/nstress# ./ndisk64 -f /mksysb/bigfile  -r100 -b 256K -t 10 -R
    Command: ./ndisk64 -f /mksysb/bigfile -r100 -b 256K -t 10 -R
            Synchronous Disk test (regular read/write)
            No. of processes = 1
            I/O type         = Random
            Block size       = 262144
            Read-Write       = Read Only
            Sync type: none  = just close the file
            Number of files  = 1
            File size to be determined from the file(s) (raw devices will fail)
            Run time         = 10 seconds
            Snooze %         = 0 percent
    ----> Running test with block Size=262144 (256KB) .
    Determining the size of file:/mksysb/bigfile
    File /mksysb/bigfile size 8594128896 bytes
    Proc - <-----Disk IO----> | <-----Throughput------> RunTime
     Num -     TOTAL   IO/sec |    MB/sec       KB/sec  Seconds
       1 -      1022    102.1 |     25.54     26149.94  10.01
     

    -------- 2 PROCESSES: -------

    root@aix020:/opt/nstress# ./ndisk64 -f /mksysb/bigfile  -r100 -b 256K -t 10 -R -M2
    Command: ./ndisk64 -f /mksysb/bigfile -r100 -b 256K -t 10 -R -M2
            Synchronous Disk test (regular read/write)
            No. of processes = 2
            I/O type         = Random
            Block size       = 262144
            Read-Write       = Read Only
            Sync type: none  = just close the file
            Number of files  = 1
            File size to be determined from the file(s) (raw devices will fail)
            Run time         = 10 seconds
            Snooze %         = 0 percent
    ----> Running test with block Size=262144 (256KB) ..
    Determining the size of file:/mksysb/bigfile
    File /mksysb/bigfile size 8594128896 bytes
    Determining the size of file:/mksysb/bigfile
    File /mksysb/bigfile size 8594128896 bytes
    Proc - <-----Disk IO----> | <-----Throughput------> RunTime
     Num -     TOTAL   IO/sec |    MB/sec       KB/sec  Seconds
       1 -       991     99.0 |     24.75     25344.83  10.01
       2 -       951     95.1 |     23.78     24347.79  10.00
    TOTALS      1942    194.1 |     48.53     49692.62
    - Random procs=  2 read=100% bs=256KB
     

    -------- 4 PROCESSES: -------

    root@aix020:/opt/nstress# ./ndisk64 -f /mksysb/bigfile  -r100 -b 256K -t 10 -R -M4
    Command: ./ndisk64 -f /mksysb/bigfile -r100 -b 256K -t 10 -R -M4
            Synchronous Disk test (regular read/write)
            No. of processes = 4
            I/O type         = Random
            Block size       = 262144
            Read-Write       = Read Only
            Sync type: none  = just close the file
            Number of files  = 1
            File size to be determined from the file(s) (raw devices will fail)
            Run time         = 10 seconds
            Snooze %         = 0 percent
    ----> Running test with block Size=262144 (256KB) ....
    Determining the size of file:/mksysb/bigfile
    File /mksysb/bigfile size 8594128896 bytes
    Determining the size of file:/mksysb/bigfile
    Determining the size of file:/mksysb/bigfile
    Determining the size of file:/mksysb/bigfile
    File /mksysb/bigfile size 8594128896 bytes
    File /mksysb/bigfile size 8594128896 bytes
    File /mksysb/bigfile size 8594128896 bytes
    Proc - <-----Disk IO----> | <-----Throughput------> RunTime
     Num -     TOTAL   IO/sec |    MB/sec       KB/sec  Seconds
       1 -       904     90.5 |     22.62     23167.49   9.99
       2 -       948     94.9 |     23.72     24286.37   9.99
       3 -       924     92.5 |     23.13     23681.59   9.99
       4 -       917     91.5 |     22.88     23429.26  10.02
    TOTALS      3693    369.4 |     92.35     94564.71
    - Random procs=  4 read=100% bs=256KB


    Can anyone explain why the beaviour is like that and how one can reach a higher performance on a single process? TSM always migrates with a single process (at least per tape drive) so high parallel reading speed does not help me at all in this case :-/

     

    Thanks in advance for all hints!

     

    regards,
    Stephan

     


    #AIX-Forum