[PATCH v1 0/7] Add a mtd raid layer

Dongsheng Yang yangds.fnst at cn.fujitsu.com
Tue Dec 1 02:52:30 PST 2015


Hi guys,
	I am here to release v1 of the mtd raid layer. It's a layer
shown as below:

---------      -------------
|  ubi  |      |  mtdchar  |
---------      -------------
   |                |
   v                v
----------------------------
|        MTD RAID          |    <----- a new layer here (drivers/mtd/mtd_raid/*)
----------------------------
           |
           v
   ----------------
   |   mtd driver |
   ---------------- 

Of course, that's optional.

There are two ways to use mtd raid.
(1). For multi-chips driver:

	   /dev/mtd0
|--------------------------------|
|  ----------------------------  |
|  |        MTD RAID          |  |
|  ----------------------------  |
|      |             |           |
|      v             v           |
|  -----------   -----------     |
|  | mtd_info|   | mtd_info|     |
|  -----------   -----------     |
|--------------------------------|

When a driver have multiple chips, we can use mtd raid framework to build
them into a raid array and expose a mtd device. There are some drivers
are using mtd_concat, we can do the same thing with mtd_single. At the same
time, mtd raid provides more choices to them, such as raid0 or raid1.

(2). For user:

           /dev/mtd2
|--------------------------------|
|  ----------------------------  |
|  |        MTD RAID          |  |
|  ----------------------------  |
|      |             |           |
|      v             v           |
|  -----------   -----------     |
|  |/dev/mtd0|   |/dev/mtd1|     |
|  -----------   -----------     |
|--------------------------------|

we have a user tool for mtd raid, and user can use it to build raid array.

Example:
	# mtd_raid create --level=0 /dev/mtd0 /dev/mtd1 /dev/mtd2 /dev/mtd3
	# mtdinfo /dev/mtd4
	mtd4
	Name:                           mtdraid0-1
	Type:                           nand
	Eraseblock size:                65536 bytes, 64.0 KiB
	Amount of eraseblocks:          8192 (536870912 bytes, 512.0 MiB)
	Minimum input/output unit size: 512 bytes
	Sub-page size:                  256 bytes
	OOB size:                       16 bytes
	Character device major/minor:   90:8
	Bad blocks are allowed:         true
	Device is writable:             true

There are 4 mtd devices simulated by nandsim, then we create a raid0 with
them.
---------------------------------------------------------------------------
| device| size |  throughput (dd if=/dev/mtdX of=/dev/null bs=1M count=10)|
|--------------------------------------------------------------------------
| mtd0  | 128M |  14.0 MB/s						  |
|--------------------------------------------------------------------------
| mtd1  | 128M |  14.0 MB/s						  |
|--------------------------------------------------------------------------
| mtd2  | 128M |  14.0 MB/s						  |
|--------------------------------------------------------------------------
| mtd3  | 128M |  14.0 MB/s						  |
|--------------------------------------------------------------------------
| mtd4  | 512M |  51.1 MB/s						  |
---------------------------------------------------------------------------

Also we can use raid1 to get a mirror for robustness.

TODO:
	In this framework, we can implement more raid levels. The most useful
one I think is raid5/6, which would do a parity and fixup work in reading. That's
important for MLC or TLC. Raid-level is refered to:

https://en.wikipedia.org/wiki/Standard_RAID_levels 


Code:
	kernel:  https://github.com/yangdongsheng/linux  mtd_raid_v1 
	user  :  https://github.com/yangdongsheng/mtd-utils mtd_raid_v1

Thanx
Yang

Dongsheng Yang (7):
  mtd: nandsim: remove the abuse of reference to globle variable.
  mtd: nansim: add support of multi devices.
  mtd: mtd_raid: Init a new layer of MTD RAID
  mtd: mtd_raid: introduce raid single implementation
  mtd: mtd_raid: introduce raid0 implementation
  mtd: mtd_raid: introduce raid1 implementation
  mtd: mtd_raid: implement ioctl for mtd raid

 Documentation/ioctl/ioctl-number.txt |    1 +
 drivers/mtd/Kconfig                  |    2 +
 drivers/mtd/Makefile                 |    1 +
 drivers/mtd/mtd_raid/Kconfig         |   12 +
 drivers/mtd/mtd_raid/Makefile        |    3 +
 drivers/mtd/mtd_raid/core.c          | 1000 ++++++++++++++++++++++++++++++++++
 drivers/mtd/mtd_raid/ioctl.c         |  137 +++++
 drivers/mtd/mtd_raid/mtd_raid.h      |  264 +++++++++
 drivers/mtd/mtd_raid/raid0.c         |  136 +++++
 drivers/mtd/mtd_raid/raid1.c         |  156 ++++++
 drivers/mtd/mtd_raid/raid_io.c       |  449 +++++++++++++++
 drivers/mtd/mtd_raid/raid_single.c   |  156 ++++++
 drivers/mtd/nand/nandsim.c           |  312 ++++++-----
 include/uapi/mtd/mtd-raid-user.h     |   33 ++
 14 files changed, 2518 insertions(+), 144 deletions(-)
 create mode 100644 drivers/mtd/mtd_raid/Kconfig
 create mode 100644 drivers/mtd/mtd_raid/Makefile
 create mode 100644 drivers/mtd/mtd_raid/core.c
 create mode 100644 drivers/mtd/mtd_raid/ioctl.c
 create mode 100644 drivers/mtd/mtd_raid/mtd_raid.h
 create mode 100644 drivers/mtd/mtd_raid/raid0.c
 create mode 100644 drivers/mtd/mtd_raid/raid1.c
 create mode 100644 drivers/mtd/mtd_raid/raid_io.c
 create mode 100644 drivers/mtd/mtd_raid/raid_single.c
 create mode 100644 include/uapi/mtd/mtd-raid-user.h

-- 
1.8.4.2






More information about the linux-mtd mailing list