Blame test/memkind_dax_kmem_test.cpp

Packit 345191
/*
Packit 345191
 * Copyright (C) 2020 Intel Corporation.
Packit 345191
 * All rights reserved.
Packit 345191
 *
Packit 345191
 * Redistribution and use in source and binary forms, with or without
Packit 345191
 * modification, are permitted provided that the following conditions are met:
Packit 345191
 * 1. Redistributions of source code must retain the above copyright notice(s),
Packit 345191
 *    this list of conditions and the following disclaimer.
Packit 345191
 * 2. Redistributions in binary form must reproduce the above copyright notice(s),
Packit 345191
 *    this list of conditions and the following disclaimer in the documentation
Packit 345191
 *    and/or other materials provided with the distribution.
Packit 345191
 *
Packit 345191
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER(S) ``AS IS'' AND ANY EXPRESS
Packit 345191
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
Packit 345191
 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO
Packit 345191
 * EVENT SHALL THE COPYRIGHT HOLDER(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
Packit 345191
 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
Packit 345191
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
Packit 345191
 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
Packit 345191
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
Packit 345191
 * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
Packit 345191
 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Packit 345191
 */
Packit 345191
Packit 345191
#include <memkind.h>
Packit 345191
Packit 345191
#include <algorithm>
Packit 345191
#include <numaif.h>
Packit 345191
#include <string>
Packit 345191
#include <unistd.h>
Packit 345191
Packit 345191
#include "common.h"
Packit 345191
#include "dax_kmem_nodes.h"
Packit 345191
#include "proc_stat.h"
Packit 345191
#include "sys/types.h"
Packit 345191
#include "sys/sysinfo.h"
Packit 345191
#include "TestPolicy.hpp"
Packit 345191
Packit 345191
class MemkindDaxKmemFunctionalTests: public ::testing::Test
Packit 345191
{
Packit 345191
protected:
Packit 345191
    DaxKmem dax_kmem_nodes;
Packit 345191
Packit 345191
    void SetUp()
Packit 345191
    {
Packit 345191
        if (dax_kmem_nodes.size() < 1) {
Packit 345191
            GTEST_SKIP() << "Minimum 1 PMEM NUMA required." << std::endl;
Packit 345191
        }
Packit 345191
    }
Packit 345191
};
Packit 345191
Packit 345191
class MemkindDaxKmemTestsParam: public ::testing::Test,
Packit 345191
    public ::testing::WithParamInterface<memkind_t>
Packit 345191
{
Packit 345191
protected:
Packit 345191
    DaxKmem dax_kmem_nodes;
Packit 345191
    memkind_t kind;
Packit 345191
    void SetUp()
Packit 345191
    {
Packit 345191
        kind = GetParam();
Packit 345191
        if (kind == MEMKIND_DAX_KMEM_PREFERRED) {
Packit 345191
            std::set<int> regular_nodes = TestPolicy::get_regular_numa_nodes();
Packit 345191
            for (auto const &node: regular_nodes) {
Packit 345191
                auto closest_dax_kmem_nodes = dax_kmem_nodes.get_closest_numa_nodes(node);
Packit 345191
                if (closest_dax_kmem_nodes.size() > 1)
Packit 345191
                    GTEST_SKIP() << "Skip test for MEMKIND_DAX_KMEM_PREFFERED - "
Packit 345191
                                 "more than one PMEM NUMA node is closest to node: "
Packit 345191
                                 << node << std::endl;
Packit 345191
            }
Packit 345191
        }
Packit 345191
    }
Packit 345191
};
Packit 345191
Packit 345191
INSTANTIATE_TEST_CASE_P(
Packit 345191
    KindParam, MemkindDaxKmemTestsParam,
Packit 345191
    ::testing::Values(MEMKIND_DAX_KMEM, MEMKIND_DAX_KMEM_ALL,
Packit 345191
                      MEMKIND_DAX_KMEM_PREFERRED));
Packit 345191
Packit 345191
TEST_P(MemkindDaxKmemTestsParam,
Packit 345191
       test_TC_MEMKIND_MEMKIND_DAX_KMEM_free_with_NULL_kind_4096_bytes)
Packit 345191
{
Packit 345191
    void *ptr = memkind_malloc(kind, 4 * KB);
Packit 345191
    ASSERT_NE(nullptr, ptr);
Packit 345191
    memkind_free(nullptr, ptr);
Packit 345191
}
Packit 345191
Packit 345191
TEST_P(MemkindDaxKmemTestsParam, test_TC_MEMKIND_MEMKIND_DAX_KMEM_alloc_zero)
Packit 345191
{
Packit 345191
    void *test1 = memkind_malloc(kind, 0);
Packit 345191
    ASSERT_EQ(test1, nullptr);
Packit 345191
}
Packit 345191
Packit 345191
TEST_P(MemkindDaxKmemTestsParam,
Packit 345191
       test_TC_MEMKIND_MEMKIND_DAX_KMEM_alloc_size_max)
Packit 345191
{
Packit 345191
    errno = 0;
Packit 345191
    void *test1 = memkind_malloc(kind, SIZE_MAX);
Packit 345191
    ASSERT_EQ(test1, nullptr);
Packit 345191
    ASSERT_EQ(errno, ENOMEM);
Packit 345191
}
Packit 345191
Packit 345191
TEST_P(MemkindDaxKmemTestsParam, test_TC_MEMKIND_MEMKIND_DAX_KMEM_calloc_zero)
Packit 345191
{
Packit 345191
    void *test = memkind_calloc(kind, 0, 100);
Packit 345191
    ASSERT_EQ(test, nullptr);
Packit 345191
Packit 345191
    test = memkind_calloc(kind, 100, 0);
Packit 345191
    ASSERT_EQ(test, nullptr);
Packit 345191
}
Packit 345191
Packit 345191
TEST_P(MemkindDaxKmemTestsParam,
Packit 345191
       test_TC_MEMKIND_MEMKIND_DAX_KMEM_calloc_size_max)
Packit 345191
{
Packit 345191
    const size_t size = SIZE_MAX;
Packit 345191
    const size_t num = 1;
Packit 345191
    errno = 0;
Packit 345191
Packit 345191
    void *test = memkind_calloc(kind, size, num);
Packit 345191
    ASSERT_EQ(test, nullptr);
Packit 345191
    ASSERT_EQ(errno, ENOMEM);
Packit 345191
}
Packit 345191
Packit 345191
TEST_P(MemkindDaxKmemTestsParam,
Packit 345191
       test_TC_MEMKIND_MEMKIND_DAX_KMEM_calloc_num_max)
Packit 345191
{
Packit 345191
    const size_t size = 10;
Packit 345191
    const size_t num = SIZE_MAX;
Packit 345191
    errno = 0;
Packit 345191
Packit 345191
    void *test = memkind_calloc(kind, size, num);
Packit 345191
    ASSERT_EQ(test, nullptr);
Packit 345191
    ASSERT_EQ(errno, ENOMEM);
Packit 345191
}
Packit 345191
Packit 345191
TEST_P(MemkindDaxKmemTestsParam, test_TC_MEMKIND_MEMKIND_DAX_KMEM_realloc)
Packit 345191
{
Packit 345191
    const size_t size1 = 512;
Packit 345191
    const size_t size2 = 1 * KB;
Packit 345191
    char *default_str = nullptr;
Packit 345191
Packit 345191
    default_str = (char *)memkind_realloc(kind, default_str, size1);
Packit 345191
    ASSERT_NE(nullptr, default_str);
Packit 345191
Packit 345191
    sprintf(default_str, "memkind_realloc with size %zu\n", size1);
Packit 345191
    printf("%s", default_str);
Packit 345191
Packit 345191
    default_str = (char *)memkind_realloc(kind, default_str, size2);
Packit 345191
    ASSERT_NE(nullptr, default_str);
Packit 345191
Packit 345191
    sprintf(default_str, "memkind_realloc with size %zu\n", size2);
Packit 345191
    printf("%s", default_str);
Packit 345191
Packit 345191
    memkind_free(kind, default_str);
Packit 345191
}
Packit 345191
Packit 345191
TEST_P(MemkindDaxKmemTestsParam, test_TC_MEMKIND_MEMKIND_DAX_KMEM_realloc_zero)
Packit 345191
{
Packit 345191
    const size_t size = 1 * KB;
Packit 345191
Packit 345191
    void *test = memkind_malloc(kind, size);
Packit 345191
    ASSERT_NE(test, nullptr);
Packit 345191
Packit 345191
    void *new_test = memkind_realloc(kind, test, 0);
Packit 345191
    ASSERT_EQ(new_test, nullptr);
Packit 345191
}
Packit 345191
Packit 345191
TEST_P(MemkindDaxKmemTestsParam,
Packit 345191
       test_TC_MEMKIND_MEMKIND_DAX_KMEM_realloc_size_max)
Packit 345191
{
Packit 345191
    const size_t size = 1 * KB;
Packit 345191
Packit 345191
    void *test = memkind_malloc(kind, size);
Packit 345191
    ASSERT_NE(test, nullptr);
Packit 345191
Packit 345191
    errno = 0;
Packit 345191
    void *new_test = memkind_realloc(kind, test, SIZE_MAX);
Packit 345191
    ASSERT_EQ(new_test, nullptr);
Packit 345191
    ASSERT_EQ(errno, ENOMEM);
Packit 345191
Packit 345191
    memkind_free(kind, test);
Packit 345191
}
Packit 345191
Packit 345191
TEST_P(MemkindDaxKmemTestsParam,
Packit 345191
       test_TC_MEMKIND_MEMKIND_DAX_KMEM_realloc_size_zero)
Packit 345191
{
Packit 345191
    const size_t size = 1 * KB;
Packit 345191
    void *test = nullptr;
Packit 345191
    void *new_test = nullptr;
Packit 345191
    const size_t iteration = 100;
Packit 345191
Packit 345191
    for (unsigned i = 0; i < iteration; ++i) {
Packit 345191
        test = memkind_malloc(kind, size);
Packit 345191
        ASSERT_NE(test, nullptr);
Packit 345191
        errno = 0;
Packit 345191
        new_test = memkind_realloc(kind, test, 0);
Packit 345191
        ASSERT_EQ(new_test, nullptr);
Packit 345191
        ASSERT_EQ(errno, 0);
Packit 345191
    }
Packit 345191
}
Packit 345191
Packit 345191
TEST_P(MemkindDaxKmemTestsParam,
Packit 345191
       test_TC_MEMKIND_MEMKIND_DAX_KMEM_realloc_nullptr)
Packit 345191
{
Packit 345191
    const size_t size = 1 * KB;
Packit 345191
    void *test = nullptr;
Packit 345191
Packit 345191
    test = memkind_realloc(kind, test, size);
Packit 345191
    ASSERT_NE(test, nullptr);
Packit 345191
Packit 345191
    memkind_free(kind, test);
Packit 345191
}
Packit 345191
Packit 345191
TEST_P(MemkindDaxKmemTestsParam,
Packit 345191
       test_TC_MEMKIND_MEMKIND_DAX_KMEM_realloc_increase_decrease_size)
Packit 345191
{
Packit 345191
    size_t size = 1 * KB;
Packit 345191
    const char val[] = "test_TC_MEMKIND_PmemReallocIncreaseSizeNullKindVariant";
Packit 345191
    int status;
Packit 345191
Packit 345191
    char *test1 = (char *)memkind_malloc(kind, size);
Packit 345191
    ASSERT_NE(test1, nullptr);
Packit 345191
Packit 345191
    sprintf(test1, "%s", val);
Packit 345191
Packit 345191
    size = 2 * KB;
Packit 345191
    char *test2 = (char *)memkind_realloc(nullptr, test1, size);
Packit 345191
    ASSERT_NE(test2, nullptr);
Packit 345191
    status = memcmp(val, test2, sizeof(val));
Packit 345191
    ASSERT_EQ(status, 0);
Packit 345191
Packit 345191
    size = 512;
Packit 345191
    char *test3 = (char *)memkind_realloc(nullptr, test2, size);
Packit 345191
    ASSERT_NE(test3, nullptr);
Packit 345191
    status = memcmp(val, test3, sizeof(val));
Packit 345191
    ASSERT_EQ(status, 0);
Packit 345191
Packit 345191
    memkind_free(kind, test3);
Packit 345191
}
Packit 345191
Packit 345191
TEST_P(MemkindDaxKmemTestsParam, test_TC_MEMKIND_MEMKIND_DAX_KMEM_free_nullptr)
Packit 345191
{
Packit 345191
    const int n_iter = 5000;
Packit 345191
Packit 345191
    for (int i = 0; i < n_iter; ++i) {
Packit 345191
        memkind_free(kind, nullptr);
Packit 345191
    }
Packit 345191
}
Packit 345191
Packit 345191
TEST_P(MemkindDaxKmemTestsParam,
Packit 345191
       test_TC_MEMKIND_MEMKIND_DAX_KMEM_posix_memalign_alignment_less_than_void)
Packit 345191
{
Packit 345191
    void *test = nullptr;
Packit 345191
    const size_t size = 32;
Packit 345191
    const size_t wrong_alignment = 4;
Packit 345191
Packit 345191
    errno = 0;
Packit 345191
    int ret = memkind_posix_memalign(kind, &test, wrong_alignment, size);
Packit 345191
    ASSERT_EQ(errno, 0);
Packit 345191
    ASSERT_EQ(ret, EINVAL);
Packit 345191
    ASSERT_EQ(test, nullptr);
Packit 345191
}
Packit 345191
Packit 345191
TEST_P(MemkindDaxKmemTestsParam,
Packit 345191
       test_TC_MEMKIND_MEMKIND_DAX_KMEM_posix_memalign_alignment_not_pow2)
Packit 345191
{
Packit 345191
    void *test = nullptr;
Packit 345191
    const size_t size = 32;
Packit 345191
    const size_t wrong_alignment = sizeof(void *)+1;
Packit 345191
Packit 345191
    errno = 0;
Packit 345191
    int ret = memkind_posix_memalign(kind, &test, wrong_alignment, size);
Packit 345191
    ASSERT_EQ(errno, 0);
Packit 345191
    ASSERT_EQ(ret, EINVAL);
Packit 345191
    ASSERT_EQ(test, nullptr);
Packit 345191
}
Packit 345191
Packit 345191
TEST_P(MemkindDaxKmemTestsParam,
Packit 345191
       test_TC_MEMKIND_MEMKIND_DAX_KMEM_posix_memalign_correct_alignment)
Packit 345191
{
Packit 345191
    void *test = nullptr;
Packit 345191
    const size_t size = 32;
Packit 345191
    const size_t alignment = sizeof(void *);
Packit 345191
Packit 345191
    errno = 0;
Packit 345191
    int ret = memkind_posix_memalign(kind, &test, alignment, size);
Packit 345191
    ASSERT_EQ(errno, 0);
Packit 345191
    ASSERT_EQ(ret, 0);
Packit 345191
    ASSERT_NE(test, nullptr);
Packit 345191
Packit 345191
    memkind_free(nullptr, test);
Packit 345191
}
Packit 345191
Packit 345191
TEST_F(MemkindDaxKmemFunctionalTests,
Packit 345191
       test_TC_MEMKIND_MEMKIND_DAX_KMEM_alloc_until_full_numa)
Packit 345191
{
Packit 345191
    ProcStat stat;
Packit 345191
    const size_t alloc_size = 100 * MB;
Packit 345191
    std::set<void *> allocations;
Packit 345191
    size_t numa_size;
Packit 345191
    int numa_id = -1;
Packit 345191
    const int n_swap_alloc = 20;
Packit 345191
Packit 345191
    void *ptr = memkind_malloc(MEMKIND_DAX_KMEM, alloc_size);
Packit 345191
    ASSERT_NE(nullptr, ptr);
Packit 345191
    memset(ptr, 'a', alloc_size);
Packit 345191
    allocations.insert(ptr);
Packit 345191
Packit 345191
    get_mempolicy(&numa_id, nullptr, 0, ptr, MPOL_F_NODE | MPOL_F_ADDR);
Packit 345191
    numa_size = numa_node_size64(numa_id, nullptr);
Packit 345191
Packit 345191
    while (numa_size > alloc_size * allocations.size()) {
Packit 345191
        ptr = memkind_malloc(MEMKIND_DAX_KMEM, alloc_size);
Packit 345191
        ASSERT_NE(nullptr, ptr);
Packit 345191
        memset(ptr, 'a', alloc_size);
Packit 345191
        allocations.insert(ptr);
Packit 345191
    }
Packit 345191
Packit 345191
    size_t init_swap = stat.get_used_swap_space_size_bytes();
Packit 345191
    for(int i = 0; i < n_swap_alloc; ++i) {
Packit 345191
        ptr = memkind_malloc(MEMKIND_DAX_KMEM, alloc_size);
Packit 345191
        ASSERT_NE(nullptr, ptr);
Packit 345191
        memset(ptr, 'a', alloc_size);
Packit 345191
        allocations.insert(ptr);
Packit 345191
    }
Packit 345191
Packit 345191
    ASSERT_GE(stat.get_used_swap_space_size_bytes(), init_swap);
Packit 345191
Packit 345191
    for (auto const &ptr: allocations) {
Packit 345191
        memkind_free(MEMKIND_DAX_KMEM, ptr);
Packit 345191
    }
Packit 345191
}
Packit 345191
Packit 345191
TEST_F(MemkindDaxKmemFunctionalTests,
Packit 345191
       test_TC_MEMKIND_MEMKIND_DAX_KMEM_ALL_alloc_until_full_numa)
Packit 345191
{
Packit 345191
    if (dax_kmem_nodes.size() < 2)
Packit 345191
        GTEST_SKIP() << "This test requires minimum 2 kmem dax nodes";
Packit 345191
Packit 345191
    ProcStat stat;
Packit 345191
    void *ptr;
Packit 345191
    const size_t alloc_size = 100 * MB;
Packit 345191
    std::set<void *> allocations;
Packit 345191
    size_t sum_of_dax_kmem_free_space = dax_kmem_nodes.get_free_space();
Packit 345191
    int numa_id = -1;
Packit 345191
    const int n_swap_alloc = 20;
Packit 345191
Packit 345191
    while (sum_of_dax_kmem_free_space > alloc_size * allocations.size()) {
Packit 345191
        ptr = memkind_malloc(MEMKIND_DAX_KMEM_ALL, alloc_size);
Packit 345191
        ASSERT_NE(nullptr, ptr);
Packit 345191
        memset(ptr, 'a', alloc_size);
Packit 345191
        allocations.insert(ptr);
Packit 345191
Packit 345191
        get_mempolicy(&numa_id, nullptr, 0, ptr, MPOL_F_NODE | MPOL_F_ADDR);
Packit 345191
        ASSERT_TRUE(dax_kmem_nodes.contains(numa_id));
Packit 345191
    }
Packit 345191
Packit 345191
    size_t init_swap = stat.get_used_swap_space_size_bytes();
Packit 345191
    for(int i = 0; i < n_swap_alloc; ++i) {
Packit 345191
        ptr = memkind_malloc(MEMKIND_DAX_KMEM_ALL, alloc_size);
Packit 345191
        ASSERT_NE(nullptr, ptr);
Packit 345191
        memset(ptr, 'a', alloc_size);
Packit 345191
        allocations.insert(ptr);
Packit 345191
    }
Packit 345191
Packit 345191
    ASSERT_GE(stat.get_used_swap_space_size_bytes(), init_swap);
Packit 345191
Packit 345191
    for (auto const &ptr: allocations) {
Packit 345191
        memkind_free(MEMKIND_DAX_KMEM_ALL, ptr);
Packit 345191
    }
Packit 345191
}
Packit 345191
Packit 345191
TEST_F(MemkindDaxKmemFunctionalTests,
Packit 345191
       test_TC_MEMKIND_MEMKIND_DAX_KMEM_PREFFERED_alloc_until_full_numa)
Packit 345191
{
Packit 345191
    std::set<int> regular_nodes = TestPolicy::get_regular_numa_nodes();
Packit 345191
    for (auto const &node: regular_nodes) {
Packit 345191
        auto closest_dax_kmem_nodes = dax_kmem_nodes.get_closest_numa_nodes(node);
Packit 345191
        if (closest_dax_kmem_nodes.size() > 1)
Packit 345191
            GTEST_SKIP() << "Skip test for MEMKIND_DAX_KMEM_PREFFERED - "
Packit 345191
                         "more than one PMEM NUMA node is closest to node: "
Packit 345191
                         << node << std::endl;
Packit 345191
    }
Packit 345191
Packit 345191
    ProcStat stat;
Packit 345191
    const size_t alloc_size = 100 * MB;
Packit 345191
    std::set<void *> allocations;
Packit 345191
    size_t numa_size;
Packit 345191
    int numa_id = -1;
Packit 345191
    const int n_swap_alloc = 20;
Packit 345191
Packit 345191
    void *ptr = memkind_malloc(MEMKIND_DAX_KMEM_PREFERRED, alloc_size);
Packit 345191
    ASSERT_NE(nullptr, ptr);
Packit 345191
    memset(ptr, 'a', alloc_size);
Packit 345191
    allocations.insert(ptr);
Packit 345191
Packit 345191
    get_mempolicy(&numa_id, nullptr, 0, ptr, MPOL_F_NODE | MPOL_F_ADDR);
Packit 345191
    int process_cpu = sched_getcpu();
Packit 345191
    int process_node = numa_node_of_cpu(process_cpu);
Packit 345191
    std::set<int> closest_numa_ids = dax_kmem_nodes.get_closest_numa_nodes(
Packit 345191
                                         process_node);
Packit 345191
    numa_size = numa_node_size64(numa_id, nullptr);
Packit 345191
Packit 345191
    while (0.99 * numa_size > alloc_size * allocations.size()) {
Packit 345191
        ptr = memkind_malloc(MEMKIND_DAX_KMEM_PREFERRED, alloc_size);
Packit 345191
        ASSERT_NE(nullptr, ptr);
Packit 345191
        memset(ptr, 'a', alloc_size);
Packit 345191
        allocations.insert(ptr);
Packit 345191
Packit 345191
        get_mempolicy(&numa_id, nullptr, 0, ptr, MPOL_F_NODE | MPOL_F_ADDR);
Packit 345191
        ASSERT_TRUE(closest_numa_ids.find(numa_id) != closest_numa_ids.end());
Packit 345191
    }
Packit 345191
Packit 345191
    for (int i = 0; i < n_swap_alloc; ++i) {
Packit 345191
        ptr = memkind_malloc(MEMKIND_DAX_KMEM_PREFERRED, alloc_size);
Packit 345191
        ASSERT_NE(nullptr, ptr);
Packit 345191
        memset(ptr, 'a', alloc_size);
Packit 345191
        allocations.insert(ptr);
Packit 345191
    }
Packit 345191
Packit 345191
    ASSERT_EQ(stat.get_used_swap_space_size_bytes(), 0U);
Packit 345191
Packit 345191
    for (auto const &ptr: allocations) {
Packit 345191
        memkind_free(MEMKIND_DAX_KMEM_ALL, ptr);
Packit 345191
    }
Packit 345191
}
Packit 345191
Packit 345191
TEST_F(MemkindDaxKmemFunctionalTests,
Packit 345191
       test_TC_MEMKIND_MEMKIND_DAX_KMEM_PREFFERED_check_prerequisities)
Packit 345191
{
Packit 345191
    bool can_run = false;
Packit 345191
    std::set<int> regular_nodes = TestPolicy::get_regular_numa_nodes();
Packit 345191
Packit 345191
    for (auto const &node: regular_nodes) {
Packit 345191
        auto closest_dax_kmem_nodes = dax_kmem_nodes.get_closest_numa_nodes(node);
Packit 345191
        if (closest_dax_kmem_nodes.size() > 1)
Packit 345191
            can_run = true;
Packit 345191
    }
Packit 345191
Packit 345191
    if (!can_run)
Packit 345191
        GTEST_SKIP() <<
Packit 345191
                     "Skip test for MEMKIND_DAX_KMEM_PREFFERED checking prerequisities - "
Packit 345191
                     "none of the nodes have more than one closest PMEM NUMA nodes";
Packit 345191
Packit 345191
    const size_t alloc_size = 100 * MB;
Packit 345191
    void *ptr = memkind_malloc(MEMKIND_DAX_KMEM_PREFERRED, alloc_size);
Packit 345191
    ASSERT_EQ(nullptr, ptr);
Packit 345191
}