• Minchan Kim's avatar
    zram: use atomic operation for stat · deb0bdeb
    Minchan Kim authored
    Some of fields in zram->stats are protected by zram->lock which is
    rather coarse-grained so let's use atomic operation without explict
    locking.
    
    This patch is ready for removing dependency of zram->lock in read path
    which is very coarse-grained rw_semaphore.  Of course, this patch adds
    new atomic operation so it might make slow but my 12CPU test couldn't
    spot any regression.  All gain/lose is marginal within stddev.
    
      iozone -t -T -l 12 -u 12 -r 16K -s 60M -I +Z -V 0
    
      ==Initial write                ==Initial write
      records: 50                    records: 50
      avg:  412875.17                avg:  415638.23
      std:   38543.12 (9.34%)        std:   36601.11 (8.81%)
      max:  521262.03                max:  502976.72
      min:  343263.13                min:  351389.12
      ==Rewrite                      ==Rewrite
      records: 50                    records: 50
      avg:  416640.34                avg:  397914.33
      std:   60798.92 (14.59%)       std:   46150.42 (11.60%)
      max:  543057.07                max:  522669.17
      min:  304071.67                min:  316588.77
      ==Read                         ==Read
      records: 50                    records: 50
      avg: 4147338.63                avg: 4070736.51
      std:  179333.25 (4.32%)        std:  223499.89 (5.49%)
      max: 4459295.28                max: 4539514.44
      min: 3753057.53                min: 3444686.31
      ==Re-read                      ==Re-read
      records: 50                    records: 50
      avg: 4096706.71                avg: 4117218.57
      std:  229735.04 (5.61%)        std:  171676.25 (4.17%)
      max: 4430012.09                max: 4459263.94
      min: 2987217.80                min: 3666904.28
      ==Reverse Read                 ==Reverse Read
      records: 50                    records: 50
      avg: 4062763.83                avg: 4078508.32
      std:  186208.46 (4.58%)        std:  172684.34 (4.23%)
      max: 4401358.78                max: 4424757.22
      min: 3381625.00                min: 3679359.94
      ==Stride read                  ==Stride read
      records: 50                    records: 50
      avg: 4094933.49                avg: 4082170.22
      std:  185710.52 (4.54%)        std:  196346.68 (4.81%)
      max: 4478241.25                max: 4460060.97
      min: 3732593.23                min: 3584125.78
      ==Random read                  ==Random read
      records: 50                    records: 50
      avg: 4031070.04                avg: 4074847.49
      std:  192065.51 (4.76%)        std:  206911.33 (5.08%)
      max: 4356931.16                max: 4399442.56
      min: 3481619.62                min: 3548372.44
      ==Mixed workload               ==Mixed workload
      records: 50                    records: 50
      avg:  149925.73                avg:  149675.54
      std:    7701.26 (5.14%)        std:    6902.09 (4.61%)
      max:  191301.56                max:  175162.05
      min:  133566.28                min:  137762.87
      ==Random write                 ==Random write
      records: 50                    records: 50
      avg:  404050.11                avg:  393021.47
      std:   58887.57 (14.57%)       std:   42813.70 (10.89%)
      max:  601798.09                max:  524533.43
      min:  325176.99                min:  313255.34
      ==Pwrite                       ==Pwrite
      records: 50                    records: 50
      avg:  411217.70                avg:  411237.96
      std:   43114.99 (10.48%)       std:   33136.29 (8.06%)
      max:  530766.79                max:  471899.76
      min:  320786.84                min:  317906.94
      ==Pread                        ==Pread
      records: 50                    records: 50
      avg: 4154908.65                avg: 4087121.92
      std:  151272.08 (3.64%)        std:  219505.04 (5.37%)
      max: 4459478.12                max: 4435857.38
      min: 3730512.41                min: 3101101.67
    Signed-off-by: default avatarMinchan Kim <minchan@kernel.org>
    Cc: Nitin Gupta <ngupta@vflare.org>
    Tested-by: default avatarSergey Senozhatsky <sergey.senozhatsky@gmail.com>
    Cc: Jerome Marchand <jmarchan@redhat.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    deb0bdeb
zram_drv.c 22.2 KB