Posts tagged ‘flashcache’

flashcache_load resource busy问题

使用fusion io和flashcache的时候遇到过两次
device-mapper: reload ioctl failed: Device or resource busy
Command failed
的异常。

第一次犯的错误是因为
flashcache_load mysql_data_cache /dev/fioa /dev/sdc1
前/dev/sdc1已经mount起来了。flashcache_load无法在已经mount的文件系统上再做cache。
解决的办法:
umount /dev/sdc1
然后按照正确的方法load起来。
正确的做法是对/dev/sdc分区,建立xfs(或者其他ext4,ext3)文件系统,然后利用flashcache_load将ssd设备和文件系统映射起来。
这样就会出现/dev/mapper/mysql_data_cache,将他用xfs(ext3,ext4)的方式mount起来。

第二次犯的错误是:
flashcache还在用,/dev/mapper/mysql_data_cache已经mount好了,把fusion-io的内核模块给卸载掉了。
这个时候flashcache_load会报错,/dev/mapper/mysql_data_cache也没有了,flashcache_create显示:
#flashcache_create mysql_data_cache /dev/fioa /dev/sdc1
cachedev mysql_data_cache, ssd_devname /dev/fioa, disk_devname /dev/sdc1
block_size 8, cache_size 0
flashcache_create: Valid Flashcache already exists on /dev/fioa
flashcache_create: Use flashcache_destroy first and then create again /dev/fioa
dmsetup显示:
#dmsetup table
mysql_data_cache:
解决方案:
dmsetup remove mysql_data_cache
flashcache_load mysql_data_cache /dev/fioa /dev/sdc1
mount -o defaults,rw,noatime,nodiratime,noikeep,nobarrier,allocsize=512M,attr2,largeio,inode64,swalloc /dev/mapper/mysql_data_cache /data2
使用最基本的dmsetup remove来清理mysql_data_cache,然后就可以flashcache_load了。
正常情况下,你最好先flashcache_destroy,然后再来操作fusion io,跟你建立的顺序相反

may your success

fusion io使用入门

fuison io使用PCI插槽,大大缩短了到CPU和内存的路径,使得io访问效率大大提高。
这篇文档简单介绍
1、fusion io文档工具的下载
2、fusion io内核模块(驱动)的载入
3、fusion io工具的简介

一、fusion io文档工具的下载
fusion io的文档可以直接在 http://support.fusionio.com/ 注册用户并下载。
登录以后选择产品名称,产品版本,使用的操作系统。这里我们选择的是iodrive,r2.3.1,linux_rhel-5。
选择完成以后,可以有6种下载类:
1、文档:专门下载fusion io的相关文档。里面有fusion io卡的硬件安装手册,User guide等等。
2、驱动:你可以在这里下载fusion io的驱动程序。包括各个不同内核的驱动版本。
如果你的内核是定制过的,请自行下载源码包并重新编译
3、工具:这里包含了 fusion io的各个相关工具集。
4、iomanager:这个是针对fusion io的单机图形化管理界面。
如果你的机器不允许运行图形界面,这个你就不用关注了。
5、firmware:这里是fusion io最新的firmware。
fusion io号称升级firmware不仅能够修复bug还能够提升性能。所以尽量升级到最新的firmware吧。
6、SDK:这个是fuison io的开发包。
如果你不对fusion io做一些开发工作,这个你也无需关注。

二、fusion io内核模块(驱动)的载入
fusion io的内核模块下载以后,直接安装增加/lib/modules/2.6.18-164.el5/extra/fio/iomemory-vsl.ko文件。
直接用
modprobe -v iomemory-vsl
就可以载入对应的fusion io模块。
万一你的内核版本是定制过的,或者从网站上无法下载。请参考 http://hatemysql.com/2011/06/20/%E6%90%AD%E5%BB%BAxfs%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F/ 中的模块编译。
iomemory-vsl默认是利用udevd开机自动加载的,具体的配置请参考user guide.

三、fusion io工具的简介。
fusion io的工具包括:
fio-attach fio-beacon.py fio-detach.py fio-format.py fio-ioctl-lock fio-snmp-agentx fio-su-to-root
fio-attach.py fio-bugreport fio-dump-mid fio-get-erase-count fio-pci-check fio-status fio-update-iodrive
fio-beacon fio-detach fio-format fio-govcfg fio-read-lebmap fio-status.py fio-write-lebmap

1、fio-attach 。
fusion io因为直接插在PCI插槽上的,是PCI设备(/dev/fct0),而我们使用它的时候希望是作为块设备(当作磁盘一样来使用),那么我们就需要把它attach为磁盘设备/dev/fioa。
这个工具就是这个用途的。
fio-attach /dev/fct0 可以直接把第一个fusion io设备挂载为 /dev/fioa磁盘设备。这样我们就可以很方便的使用/dev/fioa作为裸盘或者flashcache的缓存了。

2、fio-detach
和fio-attach相反。将块设备detach下来。、
fio-detach /dev/fct0
fusion io卡默认会自动attach。如果需要修改这个行为可以参考user guide,修改/etc/modprobe.d/iomemory-vsl.conf文件中的options iomemory-vsl auto_attach=0

3、fio-beacon
这个工具用于点亮fusion io上的三个LED灯。用于定位fusion io卡。这个工具需要先detach fusion io卡

4、fio-read-lebmap
用于读取fusion io的event log。它会导出一个xml文件,硬件坏块等相关信息都会记录到这个日志中。

5、fio-write-lebmap
清除或者写fusion io的event log

6、fio-bugreport
收集fusion io和机器的相关信息,用于提交bug。可以参考它收集的信息做一些报警和性能监控。

7、fio-dump-mid
dump fusion io卡的一些硬件信息
#fio-dump-mid /dev/fct0
[board]
date = 20110406
manufacturer = 004
name = Low-Profile ioDIMM Adapter
part_number = 00119200008
fpga_id = 0
id = 36406
#serial_number = 000000008e360132dc46001c6b642000
factory_firmware_version = 0

[product]
name = Fusion-io ioDrive 320GB
part_number = FS1-004-320-CS

8、fio-format
低格fusion io卡,会丢失掉fusion io卡上的信息。fusion io默认会保留20%的空间以备存储介质损坏,你如果想把保留的空间也用上,可以用这个。
低格fio-format你也可以用来指定fusion io的块大小。

9、 fio-get-erase-count
该工具用于获得fusion block刷写的量。因为SLC或者MLC设备寿命跟刷写的次数有关,这个可以用于观察fusion io的健康程度。
fio-get-erase-count -b /dev/fioa
可以获得fusion的坏块个数和坏块号。
fio-get-erase-count /dev/fioa
可以获得没坏的所有fusion io block的刷写数。
fio-get-erase-count -s /dev/fioa
可以获得所有fusion io block的统计信息。
这里fusion io block跟具体的fio-format的块大小无关。我们320G的 fusion io分了4093个块,每个块大概100M左右。具体这个block代表什么还真不知道。

10、fio-govcfg
#fio-govcfg /dev/fct0
Opening device ‘/dev/fct0’
Lifespan extender functionality is NOT supported on this device.
用于Lifespan extender functionality。我们的卡不支持。

11、fio-ioctl-lock
查询,锁住或者解锁 /etc/fct0 的ioctl锁。

12、fio-pci-check
检查pci bus tree的状态,特别是fusion io的。它会重设状态值,如果上次报错,那么第二次就不会报错了。
fio-pci-check -vvf
可以生成详细的bus tree信息。
目前还不知道怎么把它用于报警监控

13、fio-snmp-agentx
实现了fusion io SNMP的sub-agent。它通过agentx协议连接SNMP的master agent。

14、fio-su-to-root
su到root或者其他用户,来执行命令。

15、fio-update-iodrive
更新fusion io的固件版本(firmware)。
下载好fusion io的最新firmware以后,rpm安装会在/usr/share/fio/firmware/下产生iodrive_#.fff的firmware文件。
利用
fio-update-iodrive /usr/share/fio/firmware/iodrive_#.fff
就可以更新固件版本了

16、fio-status
这个命令比较重要,用于生成fusion io的状态信息。
fio-status -an
用于生成fusion io的详细信息
fio-status -fk -an
生成的fio-status -an format成了
physical_written_bytes=27684857382680
的形式。
fio-status的输出很多,比较重要的有
Media status: Healthy; Reserves: 100.00%, warn at 10.00%
Media status状态可能值为healthy, nearing wearout, write-reduced or read-only。其实只要不是healthy就可以报警了。
Logical bytes written : 2,665,512,646,144
Logical bytes read : 171,877,631,506,944
Physical bytes written: 30,415,610,387,704
Physical bytes read : 226,129,092,711,168
显示了fusion io逻辑上和物理上实际读写的量。

附fio-status的输出:
#fio-status -an

Found 1 ioDrive in this system
Fusion-io driver version: 2.3.1 build 123

Adapter: ioDrive
Fusion-io ioDrive 320GB, Product Number:FS1-004-320-CS SN:36406
Low-Profile ioDIMM Adapter, PN:00119200008, Mfr:004, Date:20110406
External Power: NOT connected
Powerloss protection: available
PCIE Bus voltage: avg 12.15V, min 12.11V, max 12.17V
PCIE Bus current: avg 0.39A, max 1.31A
PCIE Bus power: avg 4.77W, max 15.85W
PCIE Power limit threshold: 24.75W
PCIE slot available power: 25.00W
Sufficient power available: Unknown
PCIE negotiated link: 4 lanes at 2.50 Gbits/sec each, 1000 MBytes/sec total
Connected ioDimm module:
fct0: Fusion-io ioDrive 320GB, Product Number:FS1-004-320-CS SN:28212

fct0 Attached as ‘fioa’ (block device)
Fusion-io ioDrive 320GB, Product Number:FS1-004-320-CS SN:28212
ioDIMM3 320GB MLC, PN:00279200404, Mfr:004, Date:20110406
Powerloss protection: protected
PCI:04:00.0, Slot Number:2
Vendor:1aed, Device:1005, Sub vendor:1aed, Sub device:1010
Firmware v5.0.7, rev 101971
320.00 GBytes block device size, 396 GBytes physical device size
Format: block, v300, 625,001,920 sectors, 512 bytes per sector
4096 blocks, 512 pages, 189056 bytes/page (25 pads, 2 planes, 4 banks)
Error correction: 11 bits per 240 bytes, expect 4 bits
NAND Mfr: Samsung
NAND Cell Type: MLC
Device ID: 0xd7
Page Size (bytes): 4096
Block Size (bytes): 524,288
Plane Size (bytes): 8,589,934,592
Spare bytes per page: 128
FPGA ID:0 Format UID:000000006e340132dc460042910a5000
PCIE slot available power: 25.00W
Sufficient power available: Unknown
PCIE negotiated link: 4 lanes at 2.50 Gbits/sec each, 1000 MBytes/sec total
Internal temperature: 46.8 degC, max 48.7 degC
Board temperature: 40 degC
Internal voltage: avg 1.008V, max 1.008V
Aux voltage: avg 2.476V, max 2.476V
Media status: Healthy; Reserves: 100.00%, warn at 10.00%
Thresholds: write-reduced: 96.00%, read-only: 94.00%
Lifetime data volumes:
Logical bytes written : 2,665,512,646,144
Logical bytes read : 171,877,631,506,944
Physical bytes written: 30,415,610,387,704
Physical bytes read : 226,129,092,711,168
RAM usage:
Current: 406,177,792 bytes
Peak : 406,665,216 bytes
Persistent Driver Settings:
dual_plane = 1