关于ramdisk
December 5th, 2011
ramdisk是Linux内核带的一个以内存为后备的虚拟设备,以块设备方式提供。 具体功能参见Documentation/ramdisk.txt,代码参见drivers/block/brd.c.
内核在启动的时候会预设几个ramdisk, 初始大小通常为128K的块设备,方便有需要的用户。
$ uname -r 2.6.32-131.0.15.el6.x86_64 $ ls /dev/ram0 -al brw-rw---- 1 root disk 1, 0 2011-12-02 11:41 /dev/ram0 $ sudo blockdev --getsize /dev/ram0 131072
在实践中ramdisk有如下几个用途:
1. ramdisk的代码写的非常简洁,很容易让你明白块设备如何编写。
2. ramdisk基于内存的设备,IO操作速度非常快,所以可以用来测试块设备IOPS的极限,对照现在出现的各种SSD设备,了解IO协议栈的瓶颈。比如我就会用fio工具来测量下操作系统IOPS的天花板。
$ cat ramdisk-test [global] bs=4k ioengine=libaio iodepth=32 direct=1 rw=randrw rwmixread=90 thread time_based runtime=180 [ram0] filename=/dev/ram0 $ sudo fio ramdisk-test ram0: (g=0): rw=randrw, bs=4K-4K/4K-4K, ioengine=libaio, iodepth=32 Starting 1 thread bs: 1 (f=1): [m] [3.9% done] [812M/88M /s] [203K/22K iops] [eta 02m:53s] fio: terminating on signal 2 fio: terminating on signal 2 ram0: (groupid=0, jobs=1): err= 0: pid=30172 read : io=4,852MB, bw=756MB/s, iops=193K, runt= 6420msec slat (usec): min=2, max=171, avg= 2.95, stdev= 0.84 clat (usec): min=3, max=371, avg=138.66, stdev=22.10 write: io=527MB, bw=83,986KB/s, iops=20,996, runt= 6420msec slat (usec): min=3, max=181, avg= 4.84, stdev= 1.18 clat (usec): min=24, max=353, avg=138.61, stdev=22.39 cpu : usr=28.48%, sys=71.54%, ctx=701, majf=0, minf=39 IO depths : 1=0.1%, 2=0.1%, 4=0.1%, 8=0.2%, 16=0.4%, 32=99.2%, >=64=0.0% submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.1%, 64=0.0%, >=64=0.0% issued r/w: total=1242005/134798, short=0/0 lat (usec): 4=0.01%, 10=0.03%, 20=0.07%, 50=0.14%, 100=0.26% lat (usec): 250=99.48%, 500=0.03% Run status group 0 (all jobs): READ: io=4,852MB, aggrb=756MB/s, minb=774MB/s, maxb=774MB/s, mint=6420msec, maxt=6420msec WRITE: io=527MB, aggrb=83,986KB/s, minb=86,001KB/s, maxb=86,001KB/s, mint=6420msec, maxt=6420msec Disk stats (read/write): ram1: ios=0/0, merge=0/0, ticks=0/0, in_queue=0, util=0.00%
3. ramdisk是个虚拟的块设备,可以任意操作,不用当心把盘写坏了。比如我就用它来了解Ext4文件系统是如果工作的。
$ sudo mkfs.ext4 /dev/ram0 mke2fs 1.41.12 (17-May-2010) Filesystem label= OS type: Linux Block size=1024 (log=0) Fragment size=1024 (log=0) Stride=0 blocks, Stripe width=0 blocks 4096 inodes, 16384 blocks 819 blocks (5.00%) reserved for the super user First data block=1 Maximum filesystem blocks=16777216 2 block groups 8192 blocks per group, 8192 fragments per group 2048 inodes per group Superblock backups stored on blocks: 8193 Writing inode tables: done Creating journal (1024 blocks): done Writing superblocks and filesystem accounting information: done This filesystem will be automatically checked every 27 mounts or 180 days, whichever comes first. Use tune2fs -c or -i to override. $ sudo mkdir /test $ sudo mount /dev/ram0 /test $ sudo perf stat -e 'ext4:*' -e 'jbd2:*' dd if=/dev/zero of=/test/data bs=4096 count=1024 1024+0 records in 1024+0 records out 4194304 bytes (4.2 MB) copied, 0.014986 s, 280 MB/s Performance counter stats for 'dd if=/dev/zero of=/test/data bs=4096 count=1024': 0 ext4:ext4_free_inode 0 ext4:ext4_request_inode 0 ext4:ext4_allocate_inode 0 ext4:ext4_write_begin 1,024 ext4:ext4_da_write_begin 0 ext4:ext4_ordered_write_end 0 ext4:ext4_writeback_write_end 0 ext4:ext4_journalled_write_end 1,024 ext4:ext4_da_write_end 1,536 ext4:ext4_writepage 1 ext4:ext4_da_writepages 3 ext4:ext4_da_write_pages 1 ext4:ext4_da_writepages_result 0 ext4:ext4_discard_blocks 0 ext4:ext4_mb_new_inode_pa 0 ext4:ext4_mb_new_group_pa 0 ext4:ext4_mb_release_inode_pa 0 ext4:ext4_mb_release_group_pa 2 ext4:ext4_discard_preallocations 0 ext4:ext4_mb_discard_preallocations 2 ext4:ext4_request_blocks 2 ext4:ext4_allocate_blocks 0 ext4:ext4_free_blocks 0 ext4:ext4_sync_file 0 ext4:ext4_sync_fs 1 ext4:ext4_alloc_da_blocks 2 ext4:ext4_mballoc_alloc 0 ext4:ext4_mballoc_prealloc 0 ext4:ext4_mballoc_discard 0 ext4:ext4_mballoc_free 0 jbd2:jbd2_checkpoint 0 jbd2:jbd2_start_commit 0 jbd2:jbd2_commit_locking 0 jbd2:jbd2_commit_flushing 0 jbd2:jbd2_commit_logging 0 jbd2:jbd2_end_commit 0 jbd2:jbd2_submit_inode_data 0 jbd2:jbd2_run_stats 0 jbd2:jbd2_checkpoint_stats 0.018253602 seconds time elapsed
有它的帮忙,做各种实验的时候很爽!
祝玩得开心!
Post Footer automatically generated by wp-posturl plugin for wordpress.
Recent Comments