08 Sep, 2017

1 commit

  • Pull SCSI updates from James Bottomley:
    "This is mostly updates of the usual suspects: lpfc, qla2xxx, hisi_sas,
    megaraid_sas, zfcp and a host of minor updates.

    The major driver change here is the elimination of the block based
    cciss driver in favour of the SCSI based hpsa driver (which now drives
    all the legacy cases cciss used to be required for). Plus a reset
    handler clean up and the redo of the SAS SMP handler to use bsg lib"

    * tag 'scsi-misc' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi: (279 commits)
    scsi: scsi-mq: Always unprepare before requeuing a request
    scsi: Show .retries and .jiffies_at_alloc in debugfs
    scsi: Improve requeuing behavior
    scsi: Call scsi_initialize_rq() for filesystem requests
    scsi: qla2xxx: Reset the logo flag, after target re-login.
    scsi: qla2xxx: Fix slow mem alloc behind lock
    scsi: qla2xxx: Clear fc4f_nvme flag
    scsi: qla2xxx: add missing includes for qla_isr
    scsi: qla2xxx: Fix an integer overflow in sysfs code
    scsi: aacraid: report -ENOMEM to upper layer from aac_convert_sgraw2()
    scsi: aacraid: get rid of one level of indentation
    scsi: aacraid: fix indentation errors
    scsi: storvsc: fix memory leak on ring buffer busy
    scsi: scsi_transport_sas: switch to bsg-lib for SMP passthrough
    scsi: smartpqi: remove the smp_handler stub
    scsi: hpsa: remove the smp_handler stub
    scsi: bsg-lib: pass the release callback through bsg_setup_queue
    scsi: Rework handling of scsi_device.vpd_pg8[03]
    scsi: Rework the code for caching Vital Product Data (VPD)
    scsi: rcu: Introduce rcu_swap_protected()
    ...

    Linus Torvalds
     

07 Sep, 2017

1 commit


25 Aug, 2017

1 commit

  • The hpsa driver now has support for all boards the cciss driver
    used to support, so this patch removes the cciss driver and
    make hpsa an alias to cciss.

    Signed-off-by: Hannes Reinecke
    Acked-by: Don Brace
    Signed-off-by: Martin K. Petersen

    Hannes Reinecke
     

15 Apr, 2017

1 commit

  • This drivers was added in 2008, but as far as a I can tell we never had a
    single platform that actually registered resources for the platform driver.

    It's also been unmaintained for a long time and apparently has a ATA mode
    that can be driven using the IDE/libata subsystem.

    Signed-off-by: Christoph Hellwig
    Reviewed-by: Hannes Reinecke
    Signed-off-by: Jens Axboe

    Christoph Hellwig
     

28 Feb, 2017

1 commit

  • Fix typos and add the following to the scripts/spelling.txt:

    followings||following

    While we are here, add a missing colon in the boilerplate in DT binding
    documents. The "you SoC" in allwinner,sunxi-pinctrl.txt was fixed as
    well.

    I reworded "as the followings:" to "as follows:" for
    drivers/usb/gadget/udc/renesas_usb3.c.

    Link: http://lkml.kernel.org/r/1481573103-11329-32-git-send-email-yamada.masahiro@socionext.com
    Signed-off-by: Masahiro Yamada
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Masahiro Yamada
     

25 Feb, 2017

1 commit

  • The idea is that without doing more calculations we extend zero pages to
    same element pages for zram. zero page is special case of same element
    page with zero element.

    1. the test is done under android 7.0
    2. startup too many applications circularly
    3. sample the zero pages, same pages (none-zero element)
    and total pages in function page_zero_filled

    the result is listed as below:

    ZERO SAME TOTAL
    36214 17842 598196

    ZERO/TOTAL SAME/TOTAL (ZERO+SAME)/TOTAL ZERO/SAME
    AVERAGE 0.060631909 0.024990816 0.085622726 2.663825038
    STDEV 0.00674612 0.005887625 0.009707034 2.115881328
    MAX 0.069698422 0.030046087 0.094975336 7.56043956
    MIN 0.03959586 0.007332205 0.056055193 1.928985507

    from the above data, the benefit is about 2.5% and up to 3% of total
    swapout pages.

    The defect of the patch is that when we recovery a page from non-zero
    element the operations are low efficient for partial read.

    This patch extends zero_page to same_page so if there is any user to
    have monitored zero_pages, he will be surprised if the number is
    increased but it's not harmful, I believe.

    [minchan@kernel.org: do not free same element pages in zram_meta_free]
    Link: http://lkml.kernel.org/r/20170207065741.GA2567@bbox
    Link: http://lkml.kernel.org/r/1483692145-75357-1-git-send-email-zhouxianrong@huawei.com
    Link: http://lkml.kernel.org/r/1486307804-27903-1-git-send-email-minchan@kernel.org
    Signed-off-by: zhouxianrong
    Signed-off-by: Minchan Kim
    Cc: Sergey Senozhatsky
    Cc: Joonsoo Kim
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    zhouxianrong
     

23 Feb, 2017

1 commit

  • We had a deprecated_attr_warn() warning for 2 years and now the time has
    come and we finally can do the cleanup.

    The plan was as follows:

    : per-stat sysfs attributes are considered to be deprecated.
    : The basic strategy is:
    : -- the existing RW nodes will be downgraded to WO nodes (in linux 4.11)
    : -- deprecated RO sysfs nodes will eventually be removed (in linux 4.11)
    :
    : The list of deprecated attributes can be found here:
    : Documentation/ABI/obsolete/sysfs-block-zram
    :
    : Basically, every attribute that has its own read accessible sysfs
    : node (e.g. num_reads) *AND* is accessible via one of the stat files
    : (zram/stat or zram/io_stat or zram/mm_stat) is considered
    : to be deprecated.

    The patch also removes `obsolete/sysfs-block-zram', clean ups
    `testing/sysfs-block-zram' and tweaks zram.txt files.

    Link: http://lkml.kernel.org/r/20170118035838.11090-1-sergey.senozhatsky@gmail.com
    Signed-off-by: Sergey Senozhatsky
    Acked-by: Minchan Kim
    Cc: Jonathan Corbet
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Sergey Senozhatsky
     

24 Oct, 2016

1 commit


22 Oct, 2016

1 commit


27 Jul, 2016

2 commits

  • zram documentation is a mix of different styles: spaces, tabs, tabs +
    spaces, etc. Clean it up.

    Link: http://lkml.kernel.org/r/20160531122017.2878-6-sergey.senozhatsky@gmail.com
    Signed-off-by: Sergey Senozhatsky
    Acked-by: Minchan Kim
    Cc: Joonsoo Kim
    Cc: Jonathan Corbet
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Sergey Senozhatsky
     
  • There is no way to get a string with all the crypto comp algorithms
    supported by the crypto comp engine, so we need to maintain our own
    backends list. At the same time we additionally need to use
    crypto_has_comp() to make sure that the user has requested a compression
    algorithm that is recognized by the crypto comp engine. Relying on
    /proc/crypto is not an options here, because it does not show
    not-yet-inserted compression modules.

    Example:

    modprobe zram
    cat /proc/crypto | grep -i lz4
    modprobe lz4
    cat /proc/crypto | grep -i lz4
    name : lz4
    driver : lz4-generic
    module : lz4

    So the user can't tell exactly if the lz4 is really supported from
    /proc/crypto output, unless someone or something has loaded it.

    This patch also adds crypto_has_comp() to zcomp_available_show(). We
    store all the compression algorithms names in zcomp's `backends' array,
    regardless the CONFIG_CRYPTO_FOO configuration, but show only those that
    are also supported by crypto engine. This helps user to know the exact
    list of compression algorithms that can be used.

    Example:
    module lz4 is not loaded yet, but is supported by the crypto
    engine. /proc/crypto has no information on this module, while
    zram's `comp_algorithm' lists it:

    cat /proc/crypto | grep -i lz4

    cat /sys/block/zram0/comp_algorithm
    [lzo] lz4 deflate lz4hc 842

    We still use the `backends' array to determine if the requested
    compression backend is known to crypto api. This array, however, may not
    contain some entries, therefore as the last step we call crypto_has_comp()
    function which attempts to insmod the requested compression algorithm to
    determine if crypto api supports it. The advantage of this method is that
    now we permit the usage of out-of-tree crypto compression modules
    (implementing S/W or H/W compression).

    [sergey.senozhatsky@gmail.com: zram-use-crypto-api-to-check-alg-availability-v3]
    Link: http://lkml.kernel.org/r/20160604024902.11778-4-sergey.senozhatsky@gmail.com
    Link: http://lkml.kernel.org/r/20160531122017.2878-5-sergey.senozhatsky@gmail.com
    Signed-off-by: Sergey Senozhatsky
    Acked-by: Minchan Kim
    Cc: Joonsoo Kim
    Signed-off-by: Sergey Senozhatsky
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Sergey Senozhatsky
     

21 May, 2016

2 commits

  • debug_stat sysfs is read-only and represents various debugging data that
    zram developers may need. This file is not meant to be used by anyone
    else: its content is not documented and will change any time w/o any
    notice. Therefore, the output of debug_stat file contains a version
    string. To avoid any confusion, we will increase the version number
    every time we modify the output.

    At the moment this file exports only one value -- the number of
    re-compressions, IOW, the number of times compression fast path has
    failed. This stat is temporary any will be useful in case if any
    per-cpu compression streams regressions will be reported.

    Link: http://lkml.kernel.org/r/20160513230834.GB26763@bbox
    Link: http://lkml.kernel.org/r/20160511134553.12655-1-sergey.senozhatsky@gmail.com
    Signed-off-by: Sergey Senozhatsky
    Signed-off-by: Minchan Kim
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Sergey Senozhatsky
     
  • Remove the internal part of max_comp_streams interface, since we
    switched to per-cpu streams. We will keep RW max_comp_streams attr
    around, because:

    a) we may (silently) switch back to idle compression streams list and
    don't want to disturb user space

    b) max_comp_streams attr must wait for the next 'lay off cycle'; we
    give user space 2 years to adjust before we remove/downgrade the attr,
    and there are already several attrs scheduled for removal in 4.11, so
    it's too late for max_comp_streams.

    This slightly change a user visible behaviour:

    - First, reading from max_comp_stream file now will always return the
    number of online CPUs.

    - Second, writing to max_comp_stream will not take any effect.

    Link: http://lkml.kernel.org/r/20160503165546.25201-1-sergey.senozhatsky@gmail.com
    Signed-off-by: Sergey Senozhatsky
    Cc: Minchan Kim
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Sergey Senozhatsky
     

14 Mar, 2016

1 commit


25 Sep, 2015

1 commit

  • Several documentation changes.

    First, we never mentioned any errors and never required any
    error checks in documentation.

    Second, mention that there is another way to configure and
    manage zram devices -- zramctl, provided by util-linux.

    Third, add a bit of clarification on why `mem_used_max' attr
    is RW and correct some typos.

    Signed-off-by: Sergey Senozhatsky
    Signed-off-by: Jonathan Corbet

    Sergey SENOZHATSKY
     

09 Sep, 2015

1 commit

  • Compaction returns back to zram the number of migrated objects, which is
    quite uninformative -- we have objects of different sizes so user space
    cannot obtain any valuable data from that number. Change compaction to
    operate in terms of pages and return back to compaction issuer the
    number of pages that were freed during compaction. So from now on we
    will export more meaningful value in zram/mm_stat -- the number of
    freed (compacted) pages.

    This requires:
    (a) a rename of `num_migrated' to 'pages_compacted'
    (b) a internal API change -- return first_page's fullness_group from
    putback_zspage(), so we know when putback_zspage() did
    free_zspage(). It helps us to account compaction stats correctly.

    Signed-off-by: Sergey Senozhatsky
    Acked-by: Minchan Kim
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Sergey Senozhatsky
     

26 Jun, 2015

3 commits

  • We currently don't support on-demand device creation. The one and only
    way to have N zram devices is to specify num_devices module parameter
    (default value: 1). IOW if, for some reason, at some point, user wants
    to have N + 1 devies he/she must umount all the existing devices, unload
    the module, load the module passing num_devices equals to N + 1. And do
    this again, if needed.

    This patch introduces zram control sysfs class, which has two sysfs
    attrs:
    - hot_add -- add a new zram device
    - hot_remove -- remove a specific (device_id) zram device

    hot_add sysfs attr is read-only and has only automatic device id
    assignment mode (as requested by Minchan Kim). read operation performed
    on this attr creates a new zram device and returns back its device_id or
    error status.

    Usage example:
    # add a new specific zram device
    cat /sys/class/zram-control/hot_add
    2

    # remove a specific zram device
    echo 4 > /sys/class/zram-control/hot_remove

    Returning zram_add() error code back to user (-ENOMEM in this case)

    cat /sys/class/zram-control/hot_add
    cat: /sys/class/zram-control/hot_add: Cannot allocate memory

    NOTE, there might be users who already depend on the fact that at least
    zram0 device gets always created by zram_init(). Preserve this behavior.

    [minchan@kernel.org: use zram->claim to avoid lockdep splat]
    Signed-off-by: Sergey Senozhatsky
    Cc: Minchan Kim
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Sergey Senozhatsky
     
  • Limiting the number of zram devices to 32 (default max_num_devices value)
    is confusing, let's drop it. A user with 2TB or 4TB of RAM, for example,
    can request as many devices as he can handle.

    Signed-off-by: Sergey Senozhatsky
    Acked-by: Minchan Kim
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Sergey Senozhatsky
     
  • We currently don't support zram on-demand device creation. The only way
    to have N zram devices is to specify num_devices module parameter (default
    value 1). That means that if, for some reason, at some point, user wants
    to have N + 1 devies he/she must umount all the existing devices, unload
    the module, load the module passing num_devices equals to N + 1.

    This patchset introduces zram-control sysfs class, which has two sysfs
    attrs:

    - hot_add -- add a new zram device
    - hot_remove -- remove a specific (device_id) zram device

    Usage example:
    # add a new specific zram device
    cat /sys/class/zram-control/hot_add
    1

    # remove a specific zram device
    echo 4 > /sys/class/zram-control/hot_remove

    This patch (of 10):

    Briefly describe missing `compact` sysfs entry.

    Signed-off-by: Sergey Senozhatsky
    Acked-by: Minchan Kim
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Sergey Senozhatsky
     

17 Apr, 2015

1 commit

  • Pull block driver updates from Jens Axboe:
    "This is the block driver pull request for 4.1. As with the core bits,
    this is a relatively slow round. This pull request contains:

    - Various fixes and cleanups for NVMe, from Alexey Khoroshilov, Chong
    Yuan, myself, Keith Busch, and Murali Iyer.

    - Documentation and code cleanups for nbd from Markus Pargmann.

    - Change of brd maintainer to me, from Ross Zwisler. At least the
    email doesn't bounce anymore then.

    - Two xen-blkback fixes from Tao Chen"

    * 'for-4.1/drivers' of git://git.kernel.dk/linux-block: (23 commits)
    NVMe: Meta data handling through submit io ioctl
    NVMe: Add translation for block limits
    NVMe: Remove check for null
    NVMe: Fix error handling of class_create("nvme")
    xen-blkback: define pr_fmt macro to avoid the duplication of DRV_PFX
    xen-blkback: enlarge the array size of blkback name
    nbd: Return error pointer directly
    nbd: Return error code directly
    nbd: Remove fixme that was already fixed
    nbd: Restructure debugging prints
    nbd: Fix device bytesize type
    nbd: Replace kthread_create with kthread_run
    nbd: Remove kernel internal header
    Documentation: nbd: Add list of module parameters
    Documentation: nbd: Reformat to allow more documentation
    NVMe: increase depth of admin queue
    nvme: Fix PRP list calculation for non-4k system page size
    NVMe: Fix blk-mq hot cpu notification
    NVMe: embedded iod mask cleanup
    NVMe: Freeze admin queue on device failure
    ...

    Linus Torvalds
     

16 Apr, 2015

4 commits

  • Add Documentation/ABI/obsolete/sysfs-block-zram file and list obsolete and
    deprecated attributes there. The patch also adds additional information
    to zram documentation and describes the basic strategy:

    - the existing RW nodes will be downgraded to WO nodes (in 4.11)
    - deprecated RO sysfs nodes will eventually be removed (in 4.11)

    Users will be additionally notified about deprecated attr usage by
    pr_warn_once() (added to every deprecated attr _show()), as suggested by
    Minchan Kim.

    User space is advised to use zram/stat, zram/io_stat and
    zram/mm_stat files.

    Signed-off-by: Sergey Senozhatsky
    Reported-by: Minchan Kim
    Cc: Nitin Gupta
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Sergey Senozhatsky
     
  • Per-device `zram/mm_stat' file provides mm statistics of a particular
    zram device in a format similar to block layer statistics. The file
    consists of a single line and represents the following stats (separated by
    whitespace):

    orig_data_size
    compr_data_size
    mem_used_total
    mem_limit
    mem_used_max
    zero_pages
    num_migrated

    Signed-off-by: Sergey Senozhatsky
    Acked-by: Minchan Kim
    Cc: Nitin Gupta
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Sergey Senozhatsky
     
  • Per-device `zram/io_stat' file provides accumulated I/O statistics of
    particular zram device in a format similar to block layer statistics. The
    file consists of a single line and represents the following stats
    (separated by whitespace):

    failed_reads
    failed_writes
    invalid_io
    notify_free

    Signed-off-by: Sergey Senozhatsky
    Acked-by: Minchan Kim
    Cc: Nitin Gupta
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Sergey Senozhatsky
     
  • Briefly describe exported device stat attrs in zram documentation. We
    will eventually get rid of per-stat sysfs nodes and, thus, clean up
    Documentation/ABI/testing/sysfs-block-zram file, which is the only source
    of information about device sysfs nodes.

    Add `num_migrated' description, since there is no independent
    `num_migrated' sysfs node (and no corresponding sysfs-block-zram entry),
    it will be exported via zram/mm_stat file.

    At this point we can provide minimal description, because sysfs-block-zram
    still contains detailed information.

    Signed-off-by: Sergey Senozhatsky
    Acked-by: Minchan Kim
    Cc: Nitin Gupta
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Sergey Senozhatsky
     

03 Apr, 2015

2 commits


10 Oct, 2014

2 commits

  • Normally, zram user could get maximum memory usage zram consumed via
    polling mem_used_total with sysfs in userspace.

    But it has a critical problem because user can miss peak memory usage
    during update inverval of polling. For avoiding that, user should poll it
    with shorter interval(ie, 0.0000000001s) with mlocking to avoid page fault
    delay when memory pressure is heavy. It would be troublesome.

    This patch adds new knob "mem_used_max" so user could see the maximum
    memory usage easily via reading the knob and reset it via "echo 0 >
    /sys/block/zram0/mem_used_max".

    Signed-off-by: Minchan Kim
    Reviewed-by: Dan Streetman
    Cc: Sergey Senozhatsky
    Cc: Jerome Marchand
    Cc:
    Cc:
    Cc: Luigi Semenzato
    Cc: Nitin Gupta
    Cc: Seth Jennings
    Reviewed-by: David Horner
    Cc: Joonsoo Kim
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Minchan Kim
     
  • Since zram has no control feature to limit memory usage, it makes hard to
    manage system memrory.

    This patch adds new knob "mem_limit" via sysfs to set up the a limit so
    that zram could fail allocation once it reaches the limit.

    In addition, user could change the limit in runtime so that he could
    manage the memory more dynamically.

    Initial state is no limit so it doesn't break old behavior.

    [akpm@linux-foundation.org: fix typo, per Sergey]
    Signed-off-by: Minchan Kim
    Cc: Dan Streetman
    Cc: Sergey Senozhatsky
    Cc: Jerome Marchand
    Cc:
    Cc:
    Cc: Luigi Semenzato
    Cc: Nitin Gupta
    Cc: Seth Jennings
    Cc: David Horner
    Cc: Joonsoo Kim
    Cc: Minchan Kim
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Minchan Kim
     

08 Apr, 2014

5 commits

  • When we initialized zcomp with single, we couldn't change
    max_comp_streams without zram reset but current interface doesn't show
    any error to user and even it changes max_comp_streams's value without
    any effect so it would make user very confusing.

    This patch prevents max_comp_streams's change when zcomp was initialized
    as single zcomp and emit the error to user(ex, echo).

    [akpm@linux-foundation.org: don't return with the lock held, per Sergey]
    [fengguang.wu@intel.com: fix coccinelle warnings]
    Signed-off-by: Minchan Kim
    Cc: Nitin Gupta
    Cc: Jerome Marchand
    Acked-by: Sergey Senozhatsky
    Signed-off-by: Fengguang Wu
    Cc: Stephen Rothwell
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Minchan Kim
     
  • Add and document `comp_algorithm' device attribute. This attribute allows
    to show supported compression and currently selected compression
    algorithms:

    cat /sys/block/zram0/comp_algorithm
    [lzo] lz4

    and change selected compression algorithm:
    echo lzo > /sys/block/zram0/comp_algorithm

    Signed-off-by: Sergey Senozhatsky
    Acked-by: Minchan Kim
    Cc: Jerome Marchand
    Cc: Nitin Gupta
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Sergey Senozhatsky
     
  • Existing zram (zcomp) implementation has only one compression stream
    (buffer and algorithm private part), so in order to prevent data
    corruption only one write (compress operation) can use this compression
    stream, forcing all concurrent write operations to wait for stream lock
    to be released. This patch changes zcomp to keep a compression streams
    list of user-defined size (via sysfs device attr). Each write operation
    still exclusively holds compression stream, the difference is that we
    can have N write operations (depending on size of streams list)
    executing in parallel. See TEST section later in commit message for
    performance data.

    Introduce struct zcomp_strm_multi and a set of functions to manage
    zcomp_strm stream access. zcomp_strm_multi has a list of idle
    zcomp_strm structs, spinlock to protect idle list and wait queue, making
    it possible to perform parallel compressions.

    The following set of functions added:
    - zcomp_strm_multi_find()/zcomp_strm_multi_release()
    find and release a compression stream, implement required locking
    - zcomp_strm_multi_create()/zcomp_strm_multi_destroy()
    create and destroy zcomp_strm_multi

    zcomp ->strm_find() and ->strm_release() callbacks are set during
    initialisation to zcomp_strm_multi_find()/zcomp_strm_multi_release()
    correspondingly.

    Each time zcomp issues a zcomp_strm_multi_find() call, the following set
    of operations performed:

    - spin lock strm_lock
    - if idle list is not empty, remove zcomp_strm from idle list, spin
    unlock and return zcomp stream pointer to caller
    - if idle list is empty, current adds itself to wait queue. it will be
    awaken by zcomp_strm_multi_release() caller.

    zcomp_strm_multi_release():
    - spin lock strm_lock
    - add zcomp stream to idle list
    - spin unlock, wake up sleeper

    Minchan Kim reported that spinlock-based locking scheme has demonstrated
    a severe perfomance regression for single compression stream case,
    comparing to mutex-based (see https://lkml.org/lkml/2014/2/18/16)

    base spinlock mutex

    ==Initial write ==Initial write ==Initial write
    records: 5 records: 5 records: 5
    avg: 1642424.35 avg: 699610.40 avg: 1655583.71
    std: 39890.95(2.43%) std: 232014.19(33.16%) std: 52293.96
    max: 1690170.94 max: 1163473.45 max: 1697164.75
    min: 1568669.52 min: 573429.88 min: 1553410.23
    ==Rewrite ==Rewrite ==Rewrite
    records: 5 records: 5 records: 5
    avg: 1611775.39 avg: 501406.64 avg: 1684419.11
    std: 17144.58(1.06%) std: 15354.41(3.06%) std: 18367.42
    max: 1641800.95 max: 531356.78 max: 1706445.84
    min: 1593515.27 min: 488817.78 min: 1655335.73

    When only one compression stream available, mutex with spin on owner
    tends to perform much better than frequent wait_event()/wake_up(). This
    is why single stream implemented as a special case with mutex locking.

    Introduce and document zram device attribute max_comp_streams. This
    attr shows and stores current zcomp's max number of zcomp streams
    (max_strm). Extend zcomp's zcomp_create() with `max_strm' parameter.
    `max_strm' limits the number of zcomp_strm structs in compression
    backend's idle list (max_comp_streams).

    max_comp_streams used during initialisation as follows:
    -- passing to zcomp_create() max_strm equals to 1 will initialise zcomp
    using single compression stream zcomp_strm_single (mutex-based locking).
    -- passing to zcomp_create() max_strm greater than 1 will initialise zcomp
    using multi compression stream zcomp_strm_multi (spinlock-based locking).

    default max_comp_streams value is 1, meaning that zram with single stream
    will be initialised.

    Later patch will introduce configuration knob to change max_comp_streams
    on already initialised and used zcomp.

    TEST
    iozone -t 3 -R -r 16K -s 60M -I +Z

    test base 1 strm (mutex) 3 strm (spinlock)
    -----------------------------------------------------------------------
    Initial write 589286.78 583518.39 718011.05
    Rewrite 604837.97 596776.38 1515125.72
    Random write 584120.11 595714.58 1388850.25
    Pwrite 535731.17 541117.38 739295.27
    Fwrite 1418083.88 1478612.72 1484927.06

    Usage example:
    set max_comp_streams to 4
    echo 4 > /sys/block/zram0/max_comp_streams

    show current max_comp_streams (default value is 1).
    cat /sys/block/zram0/max_comp_streams

    Signed-off-by: Sergey Senozhatsky
    Acked-by: Minchan Kim
    Cc: Jerome Marchand
    Cc: Nitin Gupta
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Sergey Senozhatsky
     
  • Document `failed_reads' and `failed_writes' device attributes.
    Remove info about `discard' - there is no such zram attr.

    Signed-off-by: Sergey Senozhatsky
    Cc: Minchan Kim
    Cc: Jerome Marchand
    Cc: Nitin Gupta
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Sergey Senozhatsky
     
  • Move zram warning about disksize and size of memory correlation to zram
    documentation.

    Signed-off-by: Sergey Senozhatsky
    Acked-by: Minchan Kim
    Cc: Jerome Marchand
    Cc: Nitin Gupta
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Sergey Senozhatsky
     

17 Feb, 2014

1 commit


31 Jan, 2014

2 commits

  • Remove the old private compcache project address so upcoming patches
    should be sent to LKML because we Linux kernel community will take care.

    Signed-off-by: Minchan Kim
    Cc: Nitin Gupta
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Minchan Kim
     
  • Zram has lived in staging for a LONG LONG time and have been
    fixed/improved by many contributors so code is clean and stable now. Of
    course, there are lots of product using zram in real practice.

    The major TV companys have used zram as swap since two years ago and
    recently our production team released android smart phone with zram
    which is used as swap, too and recently Android Kitkat start to use zram
    for small memory smart phone. And there was a report Google released
    their ChromeOS with zram, too and cyanogenmod have been used zram long
    time ago. And I heard some disto have used zram block device for tmpfs.
    In addition, I saw many report from many other peoples. For example,
    Lubuntu start to use it.

    The benefit of zram is very clear. With my experience, one of the
    benefit was to remove jitter of video application with backgroud memory
    pressure. It would be effect of efficient memory usage by compression
    but more issue is whether swap is there or not in the system. Recent
    mobile platforms have used JAVA so there are many anonymous pages. But
    embedded system normally are reluctant to use eMMC or SDCard as swap
    because there is wear-leveling and latency issues so if we do not use
    swap, it means we can't reclaim anoymous pages and at last, we could
    encounter OOM kill. :(

    Although we have real storage as swap, it was a problem, too. Because
    it sometime ends up making system very unresponsible caused by slow swap
    storage performance.

    Quote from Luigi on Google
    "Since Chrome OS was mentioned: the main reason why we don't use swap
    to a disk (rotating or SSD) is because it doesn't degrade gracefully
    and leads to a bad interactive experience. Generally we prefer to
    manage RAM at a higher level, by transparently killing and restarting
    processes. But we noticed that zram is fast enough to be competitive
    with the latter, and it lets us make more efficient use of the
    available RAM. " and he announced.
    http://www.spinics.net/lists/linux-mm/msg57717.html

    Other uses case is to use zram for block device. Zram is block device
    so anyone can format the block device and mount on it so some guys on
    the internet start zram as /var/tmp.
    http://forums.gentoo.org/viewtopic-t-838198-start-0.html

    Let's promote zram and enhance/maintain it instead of removing.

    Signed-off-by: Minchan Kim
    Reviewed-by: Konrad Rzeszutek Wilk
    Acked-by: Nitin Gupta
    Acked-by: Pekka Enberg
    Cc: Bob Liu
    Cc: Greg Kroah-Hartman
    Cc: Hugh Dickins
    Cc: Jens Axboe
    Cc: Luigi Semenzato
    Cc: Mel Gorman
    Cc: Rik van Riel
    Cc: Seth Jennings
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Minchan Kim
     

24 Jan, 2014

1 commit


09 Nov, 2013

1 commit


28 Feb, 2013

1 commit

  • Documentation/blockdev/nbd.txt contained some documentation which was
    horribly outdated and probably still dates from the original patch that
    added NBD support to the kernel.

    This patch removes the useless and outdated bits. The tools on nbd.sf.net
    are fully documented in manpages, which is where documentation for the
    non-kernel bits should live.

    Additionally, add a reference to the MAINTAINERS file for the nbd-general
    mailinglist that is used for discussion of the userland tools and the
    kernel module already.

    Signed-off-by: Wouter Verhelst
    Cc: Paul Clements
    Cc: Paolo Bonzini
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Wouter Verhelst
     

31 Mar, 2012

1 commit

  • Usage of /etc/modprobe.conf file was deprecated by module-init-tools and
    is no longer parsed by new kmod tool. References to this file are
    replaced in Documentation, comments and Kconfig according to the
    context.

    There are also some references to the old /etc/modules.conf from 2.4
    kernels that are being removed.

    Signed-off-by: Lucas De Marchi
    Acked-by: Takashi Iwai
    Acked-by: Mauro Carvalho Chehab
    Signed-off-by: Randy Dunlap
    Signed-off-by: Linus Torvalds

    Lucas De Marchi