Coder Social home page Coder Social logo

jsyeon92 / rflush Goto Github PK

View Code? Open in Web Editor NEW
4.0 2.0 3.0 160.89 MB

RFLUSH: Rethink the Flush

Home Page: https://www.usenix.org/conference/fast18/presentation/yeon

Makefile 0.29% C 95.49% Assembly 1.74% C++ 1.38% Objective-C 0.60% Shell 0.07% Perl 6 0.01% Awk 0.01% Python 0.06% GDB 0.01% Perl 0.13% Yacc 0.02% Lex 0.01% UnrealScript 0.01% Gherkin 0.01% XS 0.01% Roff 0.01% Clojure 0.01% M4 0.01% Batchfile 0.18%

rflush's Introduction

RFLUSH: Rethink the Flush

A FLUSH command has been used for decades to enforce persistence and ordering of updates in a storage device. The command forces all the data in the volatile buffer to non-volatile media to achieve persistency. This lumpsum approach to flushing has two performance consequences. First, it slows down non-volatile materialization of the writes that actually need to be flushed. Second, it deprives the writes that need not to be flushed of an opportunity for absorbing future writes and coalescing. We attempt to characterize the problems of this semantic gap of flushing in storage devices and propose RFLUSH that allows a fine-grained control over flushing in them. The RFLUSH command delivers a range of LBAs that need to be flushed and thus enables the storage device to force only a subset of data in its buffer. We implemented this fine-grained flush command in a storage device using an open-source flash development platform and modified the F2FS file system to make use of the command in processing fsync requests as a case study. Performance evaluation using the prototype implementation shows that the inclusion of RFLUSH improves the throughput by up to 5.6x; reduces the write traffic by up to 43%; and eliminates the long tail in the response time.

config setting

  • ubuntu 16.04
  • DRAM 64GB
  • f2fs-tools
  • bluedbm capacity 38G

install

  • make install kernel 4.7.2
cd linux-4.7.2
make-kpkg --initrd --revision=1.1 kernel_image -j4
cd ..
dpkg -i linux-image-4.7.2_1.1_amd64.deb
reboot
  • make bluedbm
cd devices/ramdrive
make
cd -
cd devices/ramdrive_timing
make 
cd -
cd frontend/kerenl
make
cd -

run bludbm

  • run bludbm
cd frontend/kernel
./mount_f2fs_ram.sh

rflush's People

Contributors

jsyeon92 avatar

Stargazers

 avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

rflush's Issues

Cannot mount /dev/robusta

I executed it in accordance with your process and run mount_ext4_ram.sh. The result is that mkfs can be mounted but cannot be mounted. An error occurs when mounting.
I install the 4.7.2 kernel that you provide, I cd ramdrive to make, and into ramdrive_timing to make, then to frontend/kernel/ to make. then run mount_ext4_ram.sh. Is there something wrong with my steps?Thank you~

[ 1316.087481] risa_dev_ramdrive_timing: module verification failed: signature and/or required key missing - tainting kernel
[ 1316.090750] bdbm: bdbm_dm_stub is installed: /dev/bdbm_dm_stub (major:247 minor:0)
root@ubuntu16:/RFLUSH-master/bdbm_drv_new_version/frontend/kernel# insmod robusta_drv.ko
root@ubuntu16:
/RFLUSH-master/bdbm_drv_new_version/frontend/kernel# dmesg
[ 1316.087481] risa_dev_ramdrive_timing: module verification failed: signature and/or required key missing - tainting kernel
[ 1316.090750] bdbm: bdbm_dm_stub is installed: /dev/bdbm_dm_stub (major:247 minor:0)
[ 1327.163524] bdbm: =====================================================================
[ 1327.163529] bdbm: DEVICE PARAMETERS
[ 1327.163531] bdbm: =====================================================================
[ 1327.163533] bdbm: # of channels = 4
[ 1327.163535] bdbm: # of chips per channel = 8
[ 1327.163536] bdbm: # of blocks per chip = 256
[ 1327.163538] bdbm: # of pages per block = 128
[ 1327.163540] bdbm: # of subpages per page = 1
[ 1327.163541] bdbm: page main size = 4096 bytes
[ 1327.163543] bdbm: page oob size = 64 bytes
[ 1327.163545] bdbm: device type = 3 (1: ramdrv, 2: ramdrive (intr), 3: ramdrive (timing), 4: BlueDBM, 5: libdummy, 6: libramdrive)
[ 1327.163547] bdbm:
[ 1327.163549] bdbm: =====================================================================
[ 1327.163551] bdbm: RAM DISK INFO
[ 1327.163552] bdbm: =====================================================================
[ 1327.163554] bdbm: the SSD capacity: 4294967296 (B), 4194304 (KB), 4096 (MB)
[ 1328.966226] bdbm: ramssd addr = ffffc90003c93000
[ 1328.966230] bdbm:
[ 1328.966682] bdbm: [dm_ramdrive_probe] probe done!
[ 1328.966688] bdbm: [dm_ramdrive_open] open done!
[ 1329.496998] bdbm: nvm cache addr = ffffc901084b5000
[ 1329.516329] bdbm: ==========================================================
[ 1329.516334] bdbm: NVM CONFIGURATION
[ 1329.516334] bdbm: ==========================================================
[ 1329.516336] bdbm: total size = 1073741824, nr_nvm_pages = 262144, nvm_page_size = 4096
[ 1329.780337] bdbm: TRIM is disabled
[ 1329.780658] bdbm: =====================================================================
[ 1329.780659] bdbm: DEVICE PARAMETERS
[ 1329.780660] bdbm: =====================================================================
[ 1329.780660] bdbm: # of channels = 4
[ 1329.780661] bdbm: # of chips per channel = 8
[ 1329.780662] bdbm: # of blocks per chip = 256
[ 1329.780663] bdbm: # of pages per block = 128
[ 1329.780664] bdbm: # of subpages per page = 1
[ 1329.780664] bdbm: page main size = 4096 bytes
[ 1329.780665] bdbm: page oob size = 64 bytes
[ 1329.780666] bdbm: device type = 3 (1: ramdrv, 2: ramdrive (intr), 3: ramdrive (timing), 4: BlueDBM, 5: libdummy, 6: libramdrive)
[ 1329.780667] bdbm:
[ 1329.780668] bdbm: =====================================================================
[ 1329.780669] bdbm: FTL CONFIGURATION
[ 1329.780669] bdbm: =====================================================================
[ 1329.780670] bdbm: mapping type = 4 (1: no ftl, 2: block-mapping, 3: RSD, 4: page-mapping, 5: dftl)
[ 1329.780671] bdbm: gc policy = 3 (1: merge 2: random, 3: greedy, 4: cost-benefit)
[ 1329.780672] bdbm: wl policy = 1 (1: none, 2: swap)
[ 1329.780672] bdbm: trim mode = 2 (1: enable, 2: disable)
[ 1329.780673] bdbm: kernel sector = 512 bytes
[ 1329.780674] bdbm:
[ 1329.780676] bdbm: [bdbm_drv_main] bdbm_drv is registered!
[ 1329.784613] bdbm: llm_make_req: 0, 1
[ 1402.491750] hrtimer: interrupt took 58138 ns
[ 1444.552333] bdbm: nvm: total access = 200000, total read = 83, read hit = 50, read no hit = 0, total_write = 199916, write hit = 183252, write no hit = 16664, evict = 0
[ 1453.282843] EXT4-fs (robusta): mounting with "discard" option, but the device does not support discard
[ 1453.282849] EXT4-fs (robusta): mounted filesystem with ordered data mode. Opts: discard
[ 1458.123300] BUG: unable to handle kernel NULL pointer dereference at (null)
[ 1458.123518] IP: [] blkio_make_req+0x134/0x4c0 [robusta_drv]
[ 1458.123666] PGD 0
[ 1458.123726] Oops: 0000 [#1] SMP
[ 1458.123808] Modules linked in: robusta_drv(OE) risa_dev_ramdrive_timing(OE) sb_edac edac_core ppdev parport_pc joydev kvm_intel parport input_leds i2c_piix4 kvm serio_raw mac_hid irqbypass ib_iser rdma_cm iw_cm ib_cm ib_core configfs iscsi_tcp libiscsi_tcp libiscsi scsi_transport_iscsi autofs4 btrfs raid10 raid456 async_raid6_recov async_memcpy async_pq async_xor async_tx xor raid6_pq libcrc32c raid1 raid0 multipath linear crct10dif_pclmul crc32_pclmul ghash_clmulni_intel aesni_intel aes_x86_64 lrw gf128mul glue_helper ablk_helper psmouse cryptd e1000 pata_acpi floppy jitterentropy_rng drbg ansi_cprng
[ 1458.124774] CPU: 3 PID: 10796 Comm: ext4lazyinit Tainted: G OE 4.7.2 #1
[ 1458.124888] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.10.2-1ubuntu1 04/01/2014
[ 1458.125047] task: ffff8808139a6580 ti: ffff88068b370000 task.ti: ffff88068b370000
[ 1458.125158] RIP: 0010:[] [] blkio_make_req+0x134/0x4c0 [robusta_drv]
[ 1458.125335] RSP: 0018:ffff88068b373c50 EFLAGS: 00010246
[ 1458.125428] RAX: 0000000000000000 RBX: 0000000000001000 RCX: 0000000000000000
[ 1458.125538] RDX: 0000000000000000 RSI: 0000000000000000 RDI: ffff88068b8ac000
[ 1458.125673] RBP: ffff88068b373cb0 R08: ffff8808126fa100 R09: ffff88068b8ac000
[ 1458.125780] R10: ffff880000000000 R11: 0000160000000000 R12: 0000000000100000
[ 1458.125941] R13: 0000000000000000 R14: ffffea0000083340 R15: ffffc900036a2000
[ 1458.126111] FS: 0000000000000000(0000) GS:ffff88081eec0000(0000) knlGS:0000000000000000
[ 1458.126233] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[ 1458.126319] CR2: 0000000000000000 CR3: 0000000816c9f000 CR4: 00000000003406e0
[ 1458.126437] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
[ 1458.126543] DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
[ 1458.126640] Stack:
[ 1458.126691] ffff88068b373cc0 ffffffff813c3fe2 ffff88068b373cc0 ffffffff8115aa8c
[ 1458.126807] ffff880600000018 ffff8808126fa100 ffffc9015acb8000 ffff8808126fa100
[ 1458.126930] 00000000ffffffff ffff88081124c800 ffff8808139a6580 ffff8808139a6580
[ 1458.127044] Call Trace:
[ 1458.127160] [] ? generic_make_request_checks+0x212/0x5c0
[ 1458.129349] [] ? __trace_bprintk+0x5c/0x80
[ 1458.131324] [] __host_blkio_make_request_fn+0x15/0x20 [robusta_drv]
[ 1458.133467] [] generic_make_request+0x14f/0x230
[ 1458.134837] [] submit_bio+0xf4/0x200
[ 1458.135972] [] ? bio_alloc_bioset+0x184/0x260
[ 1458.137098] [] next_bio+0x42/0x50
[ 1458.138477] [] blkdev_issue_zeroout+0xe0/0x1e0
[ 1458.139792] [] ext4_init_inode_table+0x18d/0x3a0
[ 1458.140890] [] ext4_lazyinit_thread+0x136/0x330
[ 1458.141978] [] ? init_once+0x80/0x80
[ 1458.143029] [] kthread+0xd8/0xf0
[ 1458.144043] [] ret_from_fork+0x1f/0x40
[ 1458.145015] [] ? kthread_create_on_node+0x1a0/0x1a0
[ 1458.146000] Code: 48 c1 fa 06 48 c1 e2 0c 4c 01 d2 48 89 57 20 41 89 9c b1 20 20 00 00 49 8b 50 40 48 85 d2 74 07 49 83 78 38 00 74 10 49 8b 56 08 <48> 8b 12 48 85 d2 74 0b 48 8b 52 40 48 89 97 20 10 00 00 48 83
[ 1458.148972] RIP [] blkio_make_req+0x134/0x4c0 [robusta_drv]

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.