void BackendManager::Sync(BackendType type, void *address, size_t length) { switch (type) { case BackendType::MM: { // Nothing to do here } break; case BackendType::NVM: { // flush writes to NVM Func_flush(address, length); Func_drain(); clflush_count++; } break; case BackendType::SSD: case BackendType::HDD: { // sync the mmap'ed file to SSD or HDD int status = msync(data_file_address, data_file_len, MS_SYNC); if (status != 0) { perror("msync"); exit(EXIT_FAILURE); } msync_count++; } break; case BackendType::INVALID: default: { // Nothing to do here } break; } }
/* * pmem_flush -- flush processor cache for the given range */ void pmem_flush(void *addr, size_t len) { LOG(10, "addr %p len %zu", addr, len); VALGRIND_DO_CHECK_MEM_IS_ADDRESSABLE(addr, len); Func_flush(addr, len); }