在btrfs和zfs文件系统中ceph 并行写日志和数据

38人阅读 评论(0) 收藏 举报
分类:
在filestore中中有针对btrfs或者zfs这样的文件系统提供parallel的功能,让日志和数据并行写入,这两个
文件系统提供最多两个checkpoint 来保证数据的rollback而xfs这样的文件系统只能先写日志再写数据。
具体可以从日志的的同步函数sync_entry 中可以明显看到
void FileStore::sync_entry()
{

	#这个if条件成立的话,说明当前文件系统是支持checkpoint的,这样可以并行写入日志和数据,而不用等日志写完再写数据
      if (backend->can_checkpoint()) {
	int err = write_op_seq(op_fd, cp);
	if (err < 0) {
	  derr << "Error during write_op_seq: " << cpp_strerror(err) << dendl;
	  assert(0 == "error during write_op_seq");
	}

	char s[NAME_MAX];
	snprintf(s, sizeof(s), COMMIT_SNAP_ITEM, (long long unsigned)cp);
	uint64_t cid = 0;
	#新建checkpoint来,当数据错误是执行rollback操作
	err = backend->create_checkpoint(s, &cid);
	if (err < 0) {
	    int err = errno;
	    derr << "snap create '" << s << "' got error " << err << dendl;
	    assert(err == 0);
	}

	snaps.push_back(cp);
	#开始以实物的方式提供数据和日志
	apply_manager.commit_started();
	op_tp.unpause();

	if (cid > 0) {
	  dout(20) << " waiting for checkpoint " << cid << " to complete" << dendl;
	  #等待checkpoint的数据写完
	  err = backend->sync_checkpoint(cid);
	  if (err < 0) {
	    derr << "ioctl WAIT_SYNC got " << cpp_strerror(err) << dendl;
	    assert(0 == "wait_sync got error");
	  }
	  dout(20) << " done waiting for checkpoint " << cid << " to complete" << dendl;
	}
      } else {
	  #这个case就是日志和数据要按先后顺序写,针对xfs之类的文件系统,要执行很多日志的sync操作,很明显支持checkpoint的
	  #文件系统不用执行下面一堆的sync操作
	apply_manager.commit_started();
	op_tp.unpause();

	int err = object_map->sync();
	if (err < 0) {
	  derr << "object_map sync got " << cpp_strerror(err) << dendl;
	  assert(0 == "object_map sync returned error");
	}

	err = backend->syncfs();
	if (err < 0) {
	  derr << "syncfs got " << cpp_strerror(err) << dendl;
	  assert(0 == "syncfs returned error");
	}

	err = write_op_seq(op_fd, cp);
	if (err < 0) {
	  derr << "Error during write_op_seq: " << cpp_strerror(err) << dendl;
	  assert(0 == "error during write_op_seq");
	}
	err = ::fsync(op_fd);
	if (err < 0) {
	  derr << "Error during fsync of op_seq: " << cpp_strerror(err) << dendl;
	  assert(0 == "error during fsync of op_seq");
	}
      }

      // remove old snaps?
	  #从这里知道最多支持两个checkpoint,多余的checkpoint 会被删除.
      if (backend->can_checkpoint()) {
	char s[NAME_MAX];
	while (snaps.size() > 2) {
	  snprintf(s, sizeof(s), COMMIT_SNAP_ITEM, (long long unsigned)snaps.front());
	  snaps.pop_front();
	  dout(10) << "removing snap '" << s << "'" << dendl;
	  int r = backend->destroy_checkpoint(s);
	  if (r) {
	    int err = errno;
	    derr << "unable to destroy snap '" << s << "' got " << cpp_strerror(err) << dendl;
	  }
	}
      }

}

查看评论

跟我一起写 Makefile(五)

六、多目标Makefile的规则中的目标可以不止一个,其支持多目标,有可能我们的多个目标同时依赖于一个文件,并且其生成的命令大体类似。于是我们就能把其合并起来。当然,多个目标的生成规则的执行命令是同一...
  • haoel
  • haoel
  • 2004-02-24 16:50:00
  • 56611

ceph存储 新一代Linux 文件系统btrfs简介

btrfs 的特性和使用 Btrfs 被称为是下一代 Linux 文件系统。近年来 ext2/3 遇到越来越多的扩展性问题,在期待 ext4 的同时,人们发现了 btrfs,据说它采用了很多先进...
  • skdkjxy
  • skdkjxy
  • 2015-04-09 14:09:33
  • 1134

ceph os zfs 单机版搭建流程

[root@centos72 current]# lsb_release -a  LSB Version:    :core-4.1-amd64:core-4.1-noarch Distribut...
  • firetaker
  • firetaker
  • 2016-05-04 18:05:16
  • 1082

译文 Ceph:一个可扩展,高性能分布式文件系统

译者注:本文是出于作者对于ceph的兴趣,在开源中国上关注ceph翻译,没有看到ceph论文的相关翻译, 索性在阅读过程中把它翻译了出来,花费了几个周末时间,翻译过程中收获颇多,现把译文分享出来,如对...
  • iamonlyme
  • iamonlyme
  • 2016-08-10 18:24:30
  • 2060

汉澳sinox的先进文件系统zfs轻松击败微软ReFS和linux的btrfs

汉澳 sinox2014引入的zfs先进文件系统轻松击败微软的ReFS 说明汉澳sinox借助开源的力量已经在文件系统获得领先优势,适合打造高性能存储服务器。 这个事实告诉人们,windows并非...
  • sinox2010p1
  • sinox2010p1
  • 2014-09-21 13:53:27
  • 1671

btrfs文件系统使用

btrfs文件系统简介 Btrfs(又名:B-tree, Butter FS, Better FS),GPL授权, Oracle从2007研发,是一个为linux设计的写实复制的文件系统,主要关注与文...
  • weijinhua_123
  • weijinhua_123
  • 2016-10-15 21:37:17
  • 1212

一个ZFS开发者眼中的苹果最新文件存储系统APFS

前言:本文翻译自曾参与ZFS文件系统开发、现Delphix公司CTO,阿达姆 莱文索(Adam Leventhal),的一片博客文章:APFS详解(APFS in Detail)。APFS文件系统是苹...
  • afatgoat
  • afatgoat
  • 2016-06-23 03:08:41
  • 12585

ZFS文件系统的特点和调优

网上收集:http://www.ixpub.net/thread-766068-1-1.htmlZFS文件系统在设计上与传统的文件系统有很大的不同。我们需要对ZFS的几个基本概念有所了解:Record...
  • opendba
  • opendba
  • 2010-12-30 23:08:00
  • 2598

Linux日志文件系统(EXT4、XFS、JFS)及性能分析

注:查看自己系统的文件格式 df -T Ext4 ReiserFS Btrfs 等七种文件系统性能比拼 自上一篇《Ext2 v.s. Ext3 v.s. Ext4 性能比拼》 发布以来...
  • lzqinfen
  • lzqinfen
  • 2015-04-02 18:17:24
  • 3609

存储那些事儿(五):BTRFS文件系统之Btree结构详解

Btree数据结构可以说是BTRFS文件系统的基础。它提供了一个通用的方式去存储不同的数据类型。它仅仅存储3个数据类型:key, item和block header。   btrfs_header的定...
  • anzhsoft2008
  • anzhsoft2008
  • 2014-03-13 20:06:02
  • 8646
    个人资料
    持之以恒
    等级:
    访问量: 37万+
    积分: 1万+
    排名: 863
    最新评论