Esempio n. 1
0
/*
 * persist_thread -- persist worker thread function
 */
static void *
persist_thread(void *arg)
{
	struct thread_arg *args = arg;
	size_t persist_size = args->size / args->nops;
	UT_ASSERTeq(args->size % args->nops, 0);
	for (int i = 0; i < args->nops; i++) {
		size_t off = args->off + i * persist_size;
		size_t left = args->size - i * persist_size;
		size_t size = left < persist_size ?
				left : persist_size;

		int ret = rpmem_persist(args->rpp, off, size, args->lane);
		UT_ASSERTeq(ret, 0);
	}

	return NULL;
}
Esempio n. 2
0
int
main(int argc, char *argv[])
{
	int ret;
	unsigned nlanes = NLANES;

	/* fill pool_attributes */
	struct rpmem_pool_attr pool_attr;
	memset(&pool_attr, 0, sizeof(pool_attr));

	/* create a remote pool */
	RPMEMpool *rpp = rpmem_create("localhost", "pool.set",
		pool, POOL_SIZE, &nlanes, &pool_attr);
	if (!rpp) {
		fprintf(stderr, "rpmem_create: %s\n", rpmem_errormsg());
		return 1;
	}

	/* store data on local pool */
	memset(pool, 0, POOL_SIZE);

	/* make local data persistent on remote node */
	ret = rpmem_persist(rpp, 0, POOL_SIZE, 0);
	if (ret) {
		fprintf(stderr, "rpmem_persist: %s\n", rpmem_errormsg());
		return 1;
	}

	/* close the remote pool */
	ret = rpmem_close(rpp);
	if (ret) {
		fprintf(stderr, "rpmem_close: %s\n", rpmem_errormsg());
		return 1;
	}

	return 0;
}
Esempio n. 3
0
int
main(int argc, char *argv[])
{
	int ret = 0;

	if (argc < 4) {
		fprintf(stderr, "usage: %s [create|open|remove]"
			" <target> <pool_set> [options]\n", argv[0]);
		return 1;
	}

	char *op = argv[1];
	char *target = argv[2];
	char *pool_set = argv[3];
	unsigned nlanes = NLANES;
	void *pool;
	size_t align = sysconf(_SC_PAGESIZE);
	errno = posix_memalign(&pool, align, POOL_SIZE);
	if (errno) {
		perror("posix_memalign");
		return -1;
	}

	if (strcmp(op, "create") == 0) {
		struct rpmem_pool_attr pool_attr;
		default_attr(&pool_attr);

		RPMEMpool *rpp = rpmem_create(target, pool_set,
			pool, POOL_SIZE, &nlanes, &pool_attr);

		if (!rpp) {
			fprintf(stderr, "rpmem_create: %s\n",
					rpmem_errormsg());
			ret = 1;
			goto end;
		}

		ret = rpmem_persist(rpp, 0, POOL_SIZE, 0);
		if (ret)
			fprintf(stderr, "rpmem_persist: %s\n",
					rpmem_errormsg());

		ret = rpmem_close(rpp);
		if (ret)
			fprintf(stderr, "rpmem_close: %s\n",
					rpmem_errormsg());

	} else if (strcmp(op, "open") == 0) {
		struct rpmem_pool_attr def_attr;
		default_attr(&def_attr);

		struct rpmem_pool_attr pool_attr;
		RPMEMpool *rpp = rpmem_open(target, pool_set,
			pool, POOL_SIZE, &nlanes, &pool_attr);
		if (!rpp) {
			fprintf(stderr, "rpmem_open: %s\n",
					rpmem_errormsg());
			ret = 1;
			goto end;
		}

		if (memcmp(&def_attr, &pool_attr, sizeof(def_attr))) {
			fprintf(stderr, "remote pool not consistent\n");
		}

		ret = rpmem_persist(rpp, 0, POOL_SIZE, 0);
		if (ret)
			fprintf(stderr, "rpmem_persist: %s\n",
					rpmem_errormsg());

		ret = rpmem_close(rpp);
		if (ret)
			fprintf(stderr, "rpmem_close: %s\n",
					rpmem_errormsg());
	} else if (strcmp(op, "remove") == 0) {
		ret = rpmem_remove(target, pool_set, 0);
		if (ret)
			fprintf(stderr, "removing pool failed: %s\n",
					rpmem_errormsg());
	} else {
		fprintf(stderr, "unsupported operation -- '%s'\n", op);
		ret = 1;
	}

end:
	free(pool);
	return ret;
}