【QEMU系统分析之实例篇(二十二)】

系列文章目录

第二十二章 QEMU系统仿真的机器创建分析实例


文章目录

  • 系列文章目录
    • 第二十二章 QEMU系统仿真的机器创建分析实例
  • 前言
  • 一、QEMU是什么?
  • 二、QEMU系统仿真的机器创建分析实例
    • 1.系统仿真的命令行参数
    • 2. 解析机器的存储设备设置
      • parse_numa_opts()
        • parse_numa_node()
        • parse_numa_distance()
        • machine_set_cpu_numa_node()
        • parse_numa_hmat_lb()
        • parse_numa_hmat_cache()
    • 3.调试输出
  • 总结


前言

本文以 QEMU 8.2.2 为例,分析其作为系统仿真工具的工作过程,并为读者展示各种 QEMU 系统仿真的启动配置实例。
本文读者需要具备一定的 QEMU 系统仿真使用经验,并对 C 语言编程有一定了解。


一、QEMU是什么?

QEMU 是一个通用且开源的机器模拟器和虚拟机。
其官方主页是:https://www.qemu.org/


二、QEMU系统仿真的机器创建分析实例

1.系统仿真的命令行参数

QEMU 作为系统仿真工具,其入口代码在 system/main.c 文件中,初始化函数 qemu_init() 的实现在 system/vl.c 文件中。
前文完成创建目标机器的过程分析,本文将继续后续运行过程的分析,读者需要对 QEMU 系统启动过程的程序代码有所了解,相关内容可以参考《QEMU系统分析之启动篇》系列文章。

..\qemu\8.2.2-qkd\qemu-system-x86_64.exe -cpu "Penryn,vendor=GenuineIntel,+ssse3,+sse4.2" -M  "q35,accel=whpx,smm=off" -object "memory-backend-ram,id=ram0,size=4G,prealloc=on,share=on,merge=off,dump=off"  -object "memory-backend-ram,id=ram1,size=2G,prealloc=on,share=on,merge=off,dump=off" -numa "node,memdev=ram0,cpus=0,nodeid=0" -numa "node,memdev=ram1,cpus=1,nodeid=1" -smp "cpus=2" -m "6G" -audio "sdl,model=hda" -vga "std" -netdev "user,id=mynet0" -device "e1000,id=nic1,netdev=mynet0" -L "data" -qtest "unix:qtest-sock,server,nowait"

2. 解析机器的存储设备设置

这部分代码在 system/vl.c 文件中,实现如下:

int qemu_init(int argc, char **argv)
{
...
    parse_numa_opts(current_machine);
...
}

前文分析了解析机器的存储设备设置的过程,本文将分析解析 NUMA 结点配置项的过程。


parse_numa_opts()

函数 parse_numa_opts() 代码如下:

static int parse_numa(void *opaque, QemuOpts *opts, Error **errp)
{
    NumaOptions *object = NULL;
    MachineState *ms = MACHINE(opaque);
    Error *err = NULL;
    Visitor *v = opts_visitor_new(opts);

    visit_type_NumaOptions(v, NULL, &object, errp);
    visit_free(v);
    if (!object) {
        return -1;
    }

    /* Fix up legacy suffix-less format */
    if ((object->type == NUMA_OPTIONS_TYPE_NODE) && object->u.node.has_mem) {
        const char *mem_str = qemu_opt_get(opts, "mem");
        int ret = qemu_strtosz_MiB(mem_str, NULL, &object->u.node.mem);

        if (ret < 0) {
            error_setg_errno(&err, -ret, "could not parse memory size '%s'",
                             mem_str);
        }
    }

    if (!err) {
        set_numa_options(ms, object, &err);
    }

    qapi_free_NumaOptions(object);
    if (err) {
        error_propagate(errp, err);
        return -1;
    }

    return 0;
}

void parse_numa_opts(MachineState *ms)
{
    qemu_opts_foreach(qemu_find_opts("numa"), parse_numa, ms, &error_fatal);
}

首先,调用函数 object_resolve_path_type() 获取存储设备的后端驱动,代码如下:

        backend = object_resolve_path_type(ram_memdev_id,
                                           TYPE_MEMORY_BACKEND, NULL);```

---

####  set_numa_options()

代码如下:

```c
void set_numa_options(MachineState *ms, NumaOptions *object, Error **errp)
{
    if (!ms->numa_state) {
        error_setg(errp, "NUMA is not supported by this machine-type");
        return;
    }

    switch (object->type) {
    case NUMA_OPTIONS_TYPE_NODE:
        parse_numa_node(ms, &object->u.node, errp);
        break;
    case NUMA_OPTIONS_TYPE_DIST:
        parse_numa_distance(ms, &object->u.dist, errp);
        break;
    case NUMA_OPTIONS_TYPE_CPU:
        if (!object->u.cpu.has_node_id) {
            error_setg(errp, "Missing mandatory node-id property");
            return;
        }
        if (!ms->numa_state->nodes[object->u.cpu.node_id].present) {
            error_setg(errp, "Invalid node-id=%" PRId64 ", NUMA node must be "
                       "defined with -numa node,nodeid=ID before it's used with "
                       "-numa cpu,node-id=ID", object->u.cpu.node_id);
            return;
        }

        machine_set_cpu_numa_node(ms,
                                  qapi_NumaCpuOptions_base(&object->u.cpu),
                                  errp);
        break;
    case NUMA_OPTIONS_TYPE_HMAT_LB:
        if (!ms->numa_state->hmat_enabled) {
            error_setg(errp, "ACPI Heterogeneous Memory Attribute Table "
                       "(HMAT) is disabled, enable it with -machine hmat=on "
                       "before using any of hmat specific options");
            return;
        }

        parse_numa_hmat_lb(ms->numa_state, &object->u.hmat_lb, errp);
        break;
    case NUMA_OPTIONS_TYPE_HMAT_CACHE:
        if (!ms->numa_state->hmat_enabled) {
            error_setg(errp, "ACPI Heterogeneous Memory Attribute Table "
                       "(HMAT) is disabled, enable it with -machine hmat=on "
                       "before using any of hmat specific options");
            return;
        }

        parse_numa_hmat_cache(ms, &object->u.hmat_cache, errp);
        break;
    default:
        abort();
    }
}

在函数 set_numa_options() 中,根据 NUMA 配置的类型分别调用相应的处理函数,代码如下:


parse_numa_node()

代码如下:

static void parse_numa_node(MachineState *ms, NumaNodeOptions *node,
                            Error **errp)
{
    Error *err = NULL;
    uint16_t nodenr;
    uint16List *cpus = NULL;
    MachineClass *mc = MACHINE_GET_CLASS(ms);
    unsigned int max_cpus = ms->smp.max_cpus;
    NodeInfo *numa_info = ms->numa_state->nodes;

    if (node->has_nodeid) {
        nodenr = node->nodeid;
    } else {
        nodenr = ms->numa_state->num_nodes;
    }

    if (nodenr >= MAX_NODES) {
        error_setg(errp, "Max number of NUMA nodes reached: %"
                   PRIu16 "", nodenr);
        return;
    }

    if (numa_info[nodenr].present) {
        error_setg(errp, "Duplicate NUMA nodeid: %" PRIu16, nodenr);
        return;
    }

    /*
     * If not set the initiator, set it to MAX_NODES. And if
     * HMAT is enabled and this node has no cpus, QEMU will raise error.
     */
    numa_info[nodenr].initiator = MAX_NODES;
    if (node->has_initiator) {
        if (!ms->numa_state->hmat_enabled) {
            error_setg(errp, "ACPI Heterogeneous Memory Attribute Table "
                       "(HMAT) is disabled, enable it with -machine hmat=on "
                       "before using any of hmat specific options");
            return;
        }

        if (node->initiator >= MAX_NODES) {
            error_report("The initiator id %" PRIu16 " expects an integer "
                         "between 0 and %d", node->initiator,
                         MAX_NODES - 1);
            return;
        }

        numa_info[nodenr].initiator = node->initiator;
    }

    for (cpus = node->cpus; cpus; cpus = cpus->next) {
        CpuInstanceProperties props;
        if (cpus->value >= max_cpus) {
            error_setg(errp,
                       "CPU index (%" PRIu16 ")"
                       " should be smaller than maxcpus (%d)",
                       cpus->value, max_cpus);
            return;
        }
        props = mc->cpu_index_to_instance_props(ms, cpus->value);
        props.node_id = nodenr;
        props.has_node_id = true;
        machine_set_cpu_numa_node(ms, &props, &err);
        if (err) {
            error_propagate(errp, err);
            return;
        }
    }

    have_memdevs = have_memdevs || node->memdev;
    have_mem = have_mem || node->has_mem;
    if ((node->has_mem && have_memdevs) || (node->memdev && have_mem)) {
        error_setg(errp, "numa configuration should use either mem= or memdev=,"
                   "mixing both is not allowed");
        return;
    }

    if (node->has_mem) {
        if (!mc->numa_mem_supported) {
            error_setg(errp, "Parameter -numa node,mem is not supported by this"
                      " machine type");
            error_append_hint(errp, "Use -numa node,memdev instead\n");
            return;
        }

        numa_info[nodenr].node_mem = node->mem;
        if (!qtest_enabled()) {
            warn_report("Parameter -numa node,mem is deprecated,"
                        " use -numa node,memdev instead");
        }
    }
    if (node->memdev) {
        Object *o;
        o = object_resolve_path_type(node->memdev, TYPE_MEMORY_BACKEND, NULL);
        if (!o) {
            error_setg(errp, "memdev=%s is ambiguous", node->memdev);
            return;
        }

        object_ref(o);
        numa_info[nodenr].node_mem = object_property_get_uint(o, "size", NULL);
        numa_info[nodenr].node_memdev = MEMORY_BACKEND(o);
    }

    numa_info[nodenr].present = true;
    max_numa_nodeid = MAX(max_numa_nodeid, nodenr + 1);
    ms->numa_state->num_nodes++;
}

parse_numa_distance()

代码如下:

static
void parse_numa_distance(MachineState *ms, NumaDistOptions *dist, Error **errp)
{
    uint16_t src = dist->src;
    uint16_t dst = dist->dst;
    uint8_t val = dist->val;
    NodeInfo *numa_info = ms->numa_state->nodes;

    if (src >= MAX_NODES || dst >= MAX_NODES) {
        error_setg(errp, "Parameter '%s' expects an integer between 0 and %d",
                   src >= MAX_NODES ? "src" : "dst", MAX_NODES - 1);
        return;
    }

    if (!numa_info[src].present || !numa_info[dst].present) {
        error_setg(errp, "Source/Destination NUMA node is missing. "
                   "Please use '-numa node' option to declare it first.");
        return;
    }

    if (val < NUMA_DISTANCE_MIN) {
        error_setg(errp, "NUMA distance (%" PRIu8 ") is invalid, "
                   "it shouldn't be less than %d.",
                   val, NUMA_DISTANCE_MIN);
        return;
    }

    if (src == dst && val != NUMA_DISTANCE_MIN) {
        error_setg(errp, "Local distance of node %d should be %d.",
                   src, NUMA_DISTANCE_MIN);
        return;
    }

    numa_info[src].distance[dst] = val;
    ms->numa_state->have_numa_distance = true;
}


machine_set_cpu_numa_node()

代码如下:

/**
 * machine_set_cpu_numa_node:
 * @machine: machine object to modify
 * @props: specifies which cpu objects to assign to
 *         numa node specified by @props.node_id
 * @errp: if an error occurs, a pointer to an area to store the error
 *
 * Associate NUMA node specified by @props.node_id with cpu slots that
 * match socket/core/thread-ids specified by @props. It's recommended to use
 * query-hotpluggable-cpus.props values to specify affected cpu slots,
 * which would lead to exact 1:1 mapping of cpu slots to NUMA node.
 *
 * However for CLI convenience it's possible to pass in subset of properties,
 * which would affect all cpu slots that match it.
 * Ex for pc machine:
 *    -smp 4,cores=2,sockets=2 -numa node,nodeid=0 -numa node,nodeid=1 \
 *    -numa cpu,node-id=0,socket_id=0 \
 *    -numa cpu,node-id=1,socket_id=1
 * will assign all child cores of socket 0 to node 0 and
 * of socket 1 to node 1.
 *
 * On attempt of reassigning (already assigned) cpu slot to another NUMA node,
 * return error.
 * Empty subset is disallowed and function will return with error in this case.
 */
void machine_set_cpu_numa_node(MachineState *machine,
                               const CpuInstanceProperties *props, Error **errp)
{
    MachineClass *mc = MACHINE_GET_CLASS(machine);
    NodeInfo *numa_info = machine->numa_state->nodes;
    bool match = false;
    int i;

    if (!mc->possible_cpu_arch_ids) {
        error_setg(errp, "mapping of CPUs to NUMA node is not supported");
        return;
    }

    /* disabling node mapping is not supported, forbid it */
    assert(props->has_node_id);

    /* force board to initialize possible_cpus if it hasn't been done yet */
    mc->possible_cpu_arch_ids(machine);

    for (i = 0; i < machine->possible_cpus->len; i++) {
        CPUArchId *slot = &machine->possible_cpus->cpus[i];

        /* reject unsupported by board properties */
        if (props->has_thread_id && !slot->props.has_thread_id) {
            error_setg(errp, "thread-id is not supported");
            return;
        }

        if (props->has_core_id && !slot->props.has_core_id) {
            error_setg(errp, "core-id is not supported");
            return;
        }

        if (props->has_cluster_id && !slot->props.has_cluster_id) {
            error_setg(errp, "cluster-id is not supported");
            return;
        }

        if (props->has_socket_id && !slot->props.has_socket_id) {
            error_setg(errp, "socket-id is not supported");
            return;
        }

        if (props->has_die_id && !slot->props.has_die_id) {
            error_setg(errp, "die-id is not supported");
            return;
        }

        /* skip slots with explicit mismatch */
        if (props->has_thread_id && props->thread_id != slot->props.thread_id) {
                continue;
        }

        if (props->has_core_id && props->core_id != slot->props.core_id) {
                continue;
        }

        if (props->has_cluster_id &&
            props->cluster_id != slot->props.cluster_id) {
                continue;
        }

        if (props->has_die_id && props->die_id != slot->props.die_id) {
                continue;
        }

        if (props->has_socket_id && props->socket_id != slot->props.socket_id) {
                continue;
        }

        /* reject assignment if slot is already assigned, for compatibility
         * of legacy cpu_index mapping with SPAPR core based mapping do not
         * error out if cpu thread and matched core have the same node-id */
        if (slot->props.has_node_id &&
            slot->props.node_id != props->node_id) {
            error_setg(errp, "CPU is already assigned to node-id: %" PRId64,
                       slot->props.node_id);
            return;
        }

        /* assign slot to node as it's matched '-numa cpu' key */
        match = true;
        slot->props.node_id = props->node_id;
        slot->props.has_node_id = props->has_node_id;

        if (machine->numa_state->hmat_enabled) {
            if ((numa_info[props->node_id].initiator < MAX_NODES) &&
                (props->node_id != numa_info[props->node_id].initiator)) {
                error_setg(errp, "The initiator of CPU NUMA node %" PRId64
                           " should be itself (got %" PRIu16 ")",
                           props->node_id, numa_info[props->node_id].initiator);
                return;
            }
            numa_info[props->node_id].has_cpu = true;
            numa_info[props->node_id].initiator = props->node_id;
        }
    }

    if (!match) {
        error_setg(errp, "no match found");
    }
}

static void machine_get_smp(Object *obj, Visitor *v, const char *name,
                            void *opaque, Error **errp)
{
    MachineState *ms = MACHINE(obj);
    SMPConfiguration *config = &(SMPConfiguration){
        .has_cpus = true, .cpus = ms->smp.cpus,
        .has_drawers = true, .drawers = ms->smp.drawers,
        .has_books = true, .books = ms->smp.books,
        .has_sockets = true, .sockets = ms->smp.sockets,
        .has_dies = true, .dies = ms->smp.dies,
        .has_clusters = true, .clusters = ms->smp.clusters,
        .has_cores = true, .cores = ms->smp.cores,
        .has_threads = true, .threads = ms->smp.threads,
        .has_maxcpus = true, .maxcpus = ms->smp.max_cpus,
    };

    if (!visit_type_SMPConfiguration(v, name, &config, &error_abort)) {
        return;
    }
}

parse_numa_hmat_lb()

代码如下:

void parse_numa_hmat_lb(NumaState *numa_state, NumaHmatLBOptions *node,
                        Error **errp)
{
    int i, first_bit, last_bit;
    uint64_t max_entry, temp_base, bitmap_copy;
    NodeInfo *numa_info = numa_state->nodes;
    HMAT_LB_Info *hmat_lb =
        numa_state->hmat_lb[node->hierarchy][node->data_type];
    HMAT_LB_Data lb_data = {};
    HMAT_LB_Data *lb_temp;

    /* Error checking */
    if (node->initiator > numa_state->num_nodes) {
        error_setg(errp, "Invalid initiator=%d, it should be less than %d",
                   node->initiator, numa_state->num_nodes);
        return;
    }
    if (node->target > numa_state->num_nodes) {
        error_setg(errp, "Invalid target=%d, it should be less than %d",
                   node->target, numa_state->num_nodes);
        return;
    }
    if (!numa_info[node->initiator].has_cpu) {
        error_setg(errp, "Invalid initiator=%d, it isn't an "
                   "initiator proximity domain", node->initiator);
        return;
    }
    if (!numa_info[node->target].present) {
        error_setg(errp, "The target=%d should point to an existing node",
                   node->target);
        return;
    }

    if (!hmat_lb) {
        hmat_lb = g_malloc0(sizeof(*hmat_lb));
        numa_state->hmat_lb[node->hierarchy][node->data_type] = hmat_lb;
        hmat_lb->list = g_array_new(false, true, sizeof(HMAT_LB_Data));
    }
    hmat_lb->hierarchy = node->hierarchy;
    hmat_lb->data_type = node->data_type;
    lb_data.initiator = node->initiator;
    lb_data.target = node->target;

    if (node->data_type <= HMATLB_DATA_TYPE_WRITE_LATENCY) {
        /* Input latency data */

        if (!node->has_latency) {
            error_setg(errp, "Missing 'latency' option");
            return;
        }
        if (node->has_bandwidth) {
            error_setg(errp, "Invalid option 'bandwidth' since "
                       "the data type is latency");
            return;
        }

        /* Detect duplicate configuration */
        for (i = 0; i < hmat_lb->list->len; i++) {
            lb_temp = &g_array_index(hmat_lb->list, HMAT_LB_Data, i);

            if (node->initiator == lb_temp->initiator &&
                node->target == lb_temp->target) {
                error_setg(errp, "Duplicate configuration of the latency for "
                    "initiator=%d and target=%d", node->initiator,
                    node->target);
                return;
            }
        }

        hmat_lb->base = hmat_lb->base ? hmat_lb->base : UINT64_MAX;

        if (node->latency) {
            /* Calculate the temporary base and compressed latency */
            max_entry = node->latency;
            temp_base = 1;
            while (QEMU_IS_ALIGNED(max_entry, 10)) {
                max_entry /= 10;
                temp_base *= 10;
            }

            /* Calculate the max compressed latency */
            temp_base = MIN(hmat_lb->base, temp_base);
            max_entry = node->latency / hmat_lb->base;
            max_entry = MAX(hmat_lb->range_bitmap, max_entry);

            /*
             * For latency hmat_lb->range_bitmap record the max compressed
             * latency which should be less than 0xFFFF (UINT16_MAX)
             */
            if (max_entry >= UINT16_MAX) {
                error_setg(errp, "Latency %" PRIu64 " between initiator=%d and "
                        "target=%d should not differ from previously entered "
                        "min or max values on more than %d", node->latency,
                        node->initiator, node->target, UINT16_MAX - 1);
                return;
            } else {
                hmat_lb->base = temp_base;
                hmat_lb->range_bitmap = max_entry;
            }

            /*
             * Set lb_info_provided bit 0 as 1,
             * latency information is provided
             */
            numa_info[node->target].lb_info_provided |= BIT(0);
        }
        lb_data.data = node->latency;
    } else if (node->data_type >= HMATLB_DATA_TYPE_ACCESS_BANDWIDTH) {
        /* Input bandwidth data */
        if (!node->has_bandwidth) {
            error_setg(errp, "Missing 'bandwidth' option");
            return;
        }
        if (node->has_latency) {
            error_setg(errp, "Invalid option 'latency' since "
                       "the data type is bandwidth");
            return;
        }
        if (!QEMU_IS_ALIGNED(node->bandwidth, MiB)) {
            error_setg(errp, "Bandwidth %" PRIu64 " between initiator=%d and "
                       "target=%d should be 1MB aligned", node->bandwidth,
                       node->initiator, node->target);
            return;
        }

        /* Detect duplicate configuration */
        for (i = 0; i < hmat_lb->list->len; i++) {
            lb_temp = &g_array_index(hmat_lb->list, HMAT_LB_Data, i);

            if (node->initiator == lb_temp->initiator &&
                node->target == lb_temp->target) {
                error_setg(errp, "Duplicate configuration of the bandwidth for "
                    "initiator=%d and target=%d", node->initiator,
                    node->target);
                return;
            }
        }

        hmat_lb->base = hmat_lb->base ? hmat_lb->base : 1;

        if (node->bandwidth) {
            /* Keep bitmap unchanged when bandwidth out of range */
            bitmap_copy = hmat_lb->range_bitmap;
            bitmap_copy |= node->bandwidth;
            first_bit = ctz64(bitmap_copy);
            temp_base = UINT64_C(1) << first_bit;
            max_entry = node->bandwidth / temp_base;
            last_bit = 64 - clz64(bitmap_copy);

            /*
             * For bandwidth, first_bit record the base unit of bandwidth bits,
             * last_bit record the last bit of the max bandwidth. The max
             * compressed bandwidth should be less than 0xFFFF (UINT16_MAX)
             */
            if ((last_bit - first_bit) > UINT16_BITS ||
                max_entry >= UINT16_MAX) {
                error_setg(errp, "Bandwidth %" PRIu64 " between initiator=%d "
                        "and target=%d should not differ from previously "
                        "entered values on more than %d", node->bandwidth,
                        node->initiator, node->target, UINT16_MAX - 1);
                return;
            } else {
                hmat_lb->base = temp_base;
                hmat_lb->range_bitmap = bitmap_copy;
            }

            /*
             * Set lb_info_provided bit 1 as 1,
             * bandwidth information is provided
             */
            numa_info[node->target].lb_info_provided |= BIT(1);
        }
        lb_data.data = node->bandwidth;
    } else {
        assert(0);
    }

    g_array_append_val(hmat_lb->list, lb_data);
}


parse_numa_hmat_cache()

代码如下:

void parse_numa_hmat_cache(MachineState *ms, NumaHmatCacheOptions *node,
                           Error **errp)
{
    int nb_numa_nodes = ms->numa_state->num_nodes;
    NodeInfo *numa_info = ms->numa_state->nodes;
    NumaHmatCacheOptions *hmat_cache = NULL;

    if (node->node_id >= nb_numa_nodes) {
        error_setg(errp, "Invalid node-id=%" PRIu32 ", it should be less "
                   "than %d", node->node_id, nb_numa_nodes);
        return;
    }

    if (numa_info[node->node_id].lb_info_provided != (BIT(0) | BIT(1))) {
        error_setg(errp, "The latency and bandwidth information of "
                   "node-id=%" PRIu32 " should be provided before memory side "
                   "cache attributes", node->node_id);
        return;
    }

    if (node->level < 1 || node->level >= HMAT_LB_LEVELS) {
        error_setg(errp, "Invalid level=%" PRIu8 ", it should be larger than 0 "
                   "and less than or equal to %d", node->level,
                   HMAT_LB_LEVELS - 1);
        return;
    }

    assert(node->associativity < HMAT_CACHE_ASSOCIATIVITY__MAX);
    assert(node->policy < HMAT_CACHE_WRITE_POLICY__MAX);
    if (ms->numa_state->hmat_cache[node->node_id][node->level]) {
        error_setg(errp, "Duplicate configuration of the side cache for "
                   "node-id=%" PRIu32 " and level=%" PRIu8,
                   node->node_id, node->level);
        return;
    }

    if ((node->level > 1) &&
        ms->numa_state->hmat_cache[node->node_id][node->level - 1] == NULL) {
        error_setg(errp, "Cache level=%u shall be defined first",
                   node->level - 1);
        return;
    }

    if ((node->level > 1) &&
        (node->size <=
            ms->numa_state->hmat_cache[node->node_id][node->level - 1]->size)) {
        error_setg(errp, "Invalid size=%" PRIu64 ", the size of level=%" PRIu8
                   " should be larger than the size(%" PRIu64 ") of "
                   "level=%u", node->size, node->level,
                   ms->numa_state->hmat_cache[node->node_id]
                                             [node->level - 1]->size,
                   node->level - 1);
        return;
    }

    if ((node->level < HMAT_LB_LEVELS - 1) &&
        ms->numa_state->hmat_cache[node->node_id][node->level + 1] &&
        (node->size >=
            ms->numa_state->hmat_cache[node->node_id][node->level + 1]->size)) {
        error_setg(errp, "Invalid size=%" PRIu64 ", the size of level=%" PRIu8
                   " should be less than the size(%" PRIu64 ") of "
                   "level=%u", node->size, node->level,
                   ms->numa_state->hmat_cache[node->node_id]
                                             [node->level + 1]->size,
                   node->level + 1);
        return;
    }

    hmat_cache = g_malloc0(sizeof(*hmat_cache));
    memcpy(hmat_cache, node, sizeof(*hmat_cache));
    ms->numa_state->hmat_cache[node->node_id][node->level] = hmat_cache;
}

3.调试输出

首先,添加跟踪调试信息,修改后的代码如下:

int qemu_init(int argc, char **argv)
{
...
    huedbg_flag = 1;
    HUEDBG("\n");
    parse_numa_opts(current_machine);
    HUEDBG("\n");
    huedbg_flag = 0;
...
}



运行后,输出信息如下:

[3364]../system/vl.c/qemu_init(3870):
[3364]../qom/object.c/type_table_lookup(103):lookup type(machine) in hash table
[3364]../qom/object.c/type_get_parent(194):parent_type(object)
[3364]../qom/object.c/type_get_parent(196):no parent_type
[3364]../qom/object.c/type_get_parent(194):parent_type(generic-pc-machine)
[3364]../qom/object.c/type_get_parent(194):parent_type(x86-machine)
[3364]../qom/object.c/type_get_parent(194):parent_type(machine)
[3364]../qom/object.c/type_table_lookup(103):lookup type(machine) in hash table
[3364]../qom/object.c/type_get_parent(194):parent_type(object)
[3364]../qom/object.c/type_get_parent(196):no parent_type
[3364]../qom/object.c/type_get_parent(194):parent_type(generic-pc-machine)
[3364]../qom/object.c/type_get_parent(194):parent_type(x86-machine)
[3364]../qom/object.c/type_get_parent(194):parent_type(machine)
[3364]../qom/object.c/type_table_lookup(103):lookup type(machine) in hash table
[3364]../qom/object.c/type_get_parent(194):parent_type(object)
[3364]../qom/object.c/type_get_parent(196):no parent_type
[3364]../qom/object.c/type_get_parent(194):parent_type(generic-pc-machine)
[3364]../qom/object.c/type_get_parent(194):parent_type(x86-machine)
[3364]../qom/object.c/type_get_parent(194):parent_type(machine)
[3364]../qom/object.c/type_table_lookup(103):lookup type(x86-machine) in hash table
[3364]../qom/object.c/type_get_parent(194):parent_type(machine)
[3364]../qom/object.c/type_get_parent(194):parent_type(object)
[3364]../qom/object.c/type_get_parent(196):no parent_type
[3364]../qom/object.c/type_get_parent(194):parent_type(generic-pc-machine)
[3364]../qom/object.c/type_get_parent(194):parent_type(x86-machine)
[3364]../qom/object.c/type_table_lookup(103):lookup type(machine) in hash table
[3364]../qom/object.c/type_get_parent(194):parent_type(object)
[3364]../qom/object.c/type_get_parent(196):no parent_type
[3364]../qom/object.c/type_get_parent(194):parent_type(generic-pc-machine)
[3364]../qom/object.c/type_get_parent(194):parent_type(x86-machine)
[3364]../qom/object.c/type_get_parent(194):parent_type(machine)
[3364]../qom/object.c/object_class_get_parent(1130):enter
[3364]../qom/object.c/type_get_parent(194):parent_type(object)
[3364]../qom/object.c/object_class_get_parent(1138):objclass(container) has parent(object)
[3364]../qom/object.c/object_class_get_parent(1141):objclass(container) return
[3364]../qom/object.c/object_class_get_parent(1130):enter
[3364]../qom/object.c/type_get_parent(196):no parent_type
[3364]../qom/object.c/object_class_get_parent(1134):objclass(object) has no parent return
[3364]../qom/object.c/object_class_get_parent(1130):enter
[3364]../qom/object.c/type_get_parent(194):parent_type(object)
[3364]../qom/object.c/object_class_get_parent(1138):objclass(container) has parent(object)
[3364]../qom/object.c/object_class_get_parent(1141):objclass(container) return
[3364]../qom/object.c/object_class_get_parent(1130):enter
[3364]../qom/object.c/type_get_parent(196):no parent_type
[3364]../qom/object.c/object_class_get_parent(1134):objclass(object) has no parent return
[3364]../qom/object.c/object_class_get_parent(1130):enter
[3364]../qom/object.c/type_get_parent(194):parent_type(chardev)
[3364]../qom/object.c/object_class_get_parent(1138):objclass(chardev-vc) has parent(chardev)
[3364]../qom/object.c/object_class_get_parent(1141):objclass(chardev-vc) return
[3364]../qom/object.c/object_class_get_parent(1130):enter
[3364]../qom/object.c/type_get_parent(194):parent_type(object)
[3364]../qom/object.c/object_class_get_parent(1138):objclass(chardev) has parent(object)
[3364]../qom/object.c/object_class_get_parent(1141):objclass(chardev) return
[3364]../qom/object.c/object_class_get_parent(1130):enter
[3364]../qom/object.c/type_get_parent(196):no parent_type
[3364]../qom/object.c/object_class_get_parent(1134):objclass(object) has no parent return
[3364]../qom/object.c/object_class_get_parent(1130):enter
[3364]../qom/object.c/type_get_parent(194):parent_type(chardev)
[3364]../qom/object.c/object_class_get_parent(1138):objclass(chardev-vc) has parent(chardev)
[3364]../qom/object.c/object_class_get_parent(1141):objclass(chardev-vc) return
[3364]../qom/object.c/object_class_get_parent(1130):enter
[3364]../qom/object.c/type_get_parent(194):parent_type(object)
[3364]../qom/object.c/object_class_get_parent(1138):objclass(chardev) has parent(object)
[3364]../qom/object.c/object_class_get_parent(1141):objclass(chardev) return
[3364]../qom/object.c/object_class_get_parent(1130):enter
[3364]../qom/object.c/type_get_parent(196):no parent_type
[3364]../qom/object.c/object_class_get_parent(1134):objclass(object) has no parent return
[3364]../qom/object.c/object_class_get_parent(1130):enter
[3364]../qom/object.c/type_get_parent(194):parent_type(chardev)
[3364]../qom/object.c/object_class_get_parent(1138):objclass(chardev-socket) has parent(chardev)
[3364]../qom/object.c/object_class_get_parent(1141):objclass(chardev-socket) return
[3364]../qom/object.c/object_class_get_parent(1130):enter
[3364]../qom/object.c/type_get_parent(194):parent_type(object)
[3364]../qom/object.c/object_class_get_parent(1138):objclass(chardev) has parent(object)
[3364]../qom/object.c/object_class_get_parent(1141):objclass(chardev) return
[3364]../qom/object.c/object_class_get_parent(1130):enter
[3364]../qom/object.c/type_get_parent(196):no parent_type
[3364]../qom/object.c/object_class_get_parent(1134):objclass(object) has no parent return
[3364]../qom/object.c/object_class_get_parent(1130):enter
[3364]../qom/object.c/type_get_parent(194):parent_type(chardev)
[3364]../qom/object.c/object_class_get_parent(1138):objclass(chardev-vc) has parent(chardev)
[3364]../qom/object.c/object_class_get_parent(1141):objclass(chardev-vc) return
[3364]../qom/object.c/object_class_get_parent(1130):enter
[3364]../qom/object.c/type_get_parent(194):parent_type(object)
[3364]../qom/object.c/object_class_get_parent(1138):objclass(chardev) has parent(object)
[3364]../qom/object.c/object_class_get_parent(1141):objclass(chardev) return
[3364]../qom/object.c/object_class_get_parent(1130):enter
[3364]../qom/object.c/type_get_parent(196):no parent_type
[3364]../qom/object.c/object_class_get_parent(1134):objclass(object) has no parent return
[3364]../qom/object.c/object_class_get_parent(1130):enter
[3364]../qom/object.c/type_get_parent(194):parent_type(generic-pc-machine)
[3364]../qom/object.c/object_class_get_parent(1138):objclass(pc-q35-8.2-machine) has parent(generic-pc-machine)
[3364]../qom/object.c/object_class_get_parent(1141):objclass(pc-q35-8.2-machine) return
[3364]../qom/object.c/object_class_get_parent(1130):enter
[3364]../qom/object.c/type_get_parent(194):parent_type(x86-machine)
[3364]../qom/object.c/object_class_get_parent(1138):objclass(generic-pc-machine) has parent(x86-machine)
[3364]../qom/object.c/object_class_get_parent(1141):objclass(generic-pc-machine) return
[3364]../qom/object.c/object_class_get_parent(1130):enter
[3364]../qom/object.c/type_get_parent(194):parent_type(machine)
[3364]../qom/object.c/object_class_get_parent(1138):objclass(x86-machine) has parent(machine)
[3364]../qom/object.c/object_class_get_parent(1141):objclass(x86-machine) return
[3364]../qom/object.c/object_class_get_parent(1130):enter
[3364]../qom/object.c/type_get_parent(194):parent_type(object)
[3364]../qom/object.c/object_class_get_parent(1138):objclass(machine) has parent(object)
[3364]../qom/object.c/object_class_get_parent(1141):objclass(machine) return
[3364]../qom/object.c/object_class_get_parent(1130):enter
[3364]../qom/object.c/type_get_parent(196):no parent_type
[3364]../qom/object.c/object_class_get_parent(1134):objclass(object) has no parent return
[3364]../qom/object.c/object_class_get_parent(1130):enter
[3364]../qom/object.c/type_get_parent(194):parent_type(sys-bus-device)
[3364]../qom/object.c/object_class_get_parent(1138):objclass(cfi.pflash01) has parent(sys-bus-device)
[3364]../qom/object.c/object_class_get_parent(1141):objclass(cfi.pflash01) return
[3364]../qom/object.c/object_class_get_parent(1130):enter
[3364]../qom/object.c/type_get_parent(194):parent_type(device)
[3364]../qom/object.c/object_class_get_parent(1138):objclass(sys-bus-device) has parent(device)
[3364]../qom/object.c/object_class_get_parent(1141):objclass(sys-bus-device) return
[3364]../qom/object.c/object_class_get_parent(1130):enter
[3364]../qom/object.c/type_get_parent(194):parent_type(object)
[3364]../qom/object.c/object_class_get_parent(1138):objclass(device) has parent(object)
[3364]../qom/object.c/object_class_get_parent(1141):objclass(device) return
[3364]../qom/object.c/object_class_get_parent(1130):enter
[3364]../qom/object.c/type_get_parent(196):no parent_type
[3364]../qom/object.c/object_class_get_parent(1134):objclass(object) has no parent return
[3364]../qom/object.c/object_class_get_parent(1130):enter
[3364]../qom/object.c/type_get_parent(194):parent_type(sys-bus-device)
[3364]../qom/object.c/object_class_get_parent(1138):objclass(cfi.pflash01) has parent(sys-bus-device)
[3364]../qom/object.c/object_class_get_parent(1141):objclass(cfi.pflash01) return
[3364]../qom/object.c/object_class_get_parent(1130):enter
[3364]../qom/object.c/type_get_parent(194):parent_type(device)
[3364]../qom/object.c/object_class_get_parent(1138):objclass(sys-bus-device) has parent(device)
[3364]../qom/object.c/object_class_get_parent(1141):objclass(sys-bus-device) return
[3364]../qom/object.c/object_class_get_parent(1130):enter
[3364]../qom/object.c/type_get_parent(194):parent_type(object)
[3364]../qom/object.c/object_class_get_parent(1138):objclass(device) has parent(object)
[3364]../qom/object.c/object_class_get_parent(1141):objclass(device) return
[3364]../qom/object.c/object_class_get_parent(1130):enter
[3364]../qom/object.c/type_get_parent(196):no parent_type
[3364]../qom/object.c/object_class_get_parent(1134):objclass(object) has no parent return
[3364]../qom/object.c/object_class_get_parent(1130):enter
[3364]../qom/object.c/type_get_parent(194):parent_type(object)
[3364]../qom/object.c/object_class_get_parent(1138):objclass(container) has parent(object)
[3364]../qom/object.c/object_class_get_parent(1141):objclass(container) return
[3364]../qom/object.c/object_class_get_parent(1130):enter
[3364]../qom/object.c/type_get_parent(196):no parent_type
[3364]../qom/object.c/object_class_get_parent(1134):objclass(object) has no parent return
[3364]../qom/object.c/object_class_get_parent(1130):enter
[3364]../qom/object.c/type_get_parent(194):parent_type(object)
[3364]../qom/object.c/object_class_get_parent(1138):objclass(container) has parent(object)
[3364]../qom/object.c/object_class_get_parent(1141):objclass(container) return
[3364]../qom/object.c/object_class_get_parent(1130):enter
[3364]../qom/object.c/type_get_parent(196):no parent_type
[3364]../qom/object.c/object_class_get_parent(1134):objclass(object) has no parent return
[3364]../qom/object.c/object_class_get_parent(1130):enter
[3364]../qom/object.c/type_get_parent(194):parent_type(object)
[3364]../qom/object.c/object_class_get_parent(1138):objclass(container) has parent(object)
[3364]../qom/object.c/object_class_get_parent(1141):objclass(container) return
[3364]../qom/object.c/object_class_get_parent(1130):enter
[3364]../qom/object.c/type_get_parent(196):no parent_type
[3364]../qom/object.c/object_class_get_parent(1134):objclass(object) has no parent return
[3364]../qom/object.c/object_class_get_parent(1130):enter
[3364]../qom/object.c/type_get_parent(194):parent_type(bus)
[3364]../qom/object.c/object_class_get_parent(1138):objclass(System) has parent(bus)
[3364]../qom/object.c/object_class_get_parent(1141):objclass(System) return
[3364]../qom/object.c/object_class_get_parent(1130):enter
[3364]../qom/object.c/type_get_parent(194):parent_type(object)
[3364]../qom/object.c/object_class_get_parent(1138):objclass(bus) has parent(object)
[3364]../qom/object.c/object_class_get_parent(1141):objclass(bus) return
[3364]../qom/object.c/object_class_get_parent(1130):enter
[3364]../qom/object.c/type_get_parent(196):no parent_type
[3364]../qom/object.c/object_class_get_parent(1134):objclass(object) has no parent return
[3364]../qom/object.c/object_class_get_parent(1130):enter
[3364]../qom/object.c/type_get_parent(194):parent_type(object)
[3364]../qom/object.c/object_class_get_parent(1138):objclass(memory-region) has parent(object)
[3364]../qom/object.c/object_class_get_parent(1141):objclass(memory-region) return
[3364]../qom/object.c/object_class_get_parent(1130):enter
[3364]../qom/object.c/type_get_parent(196):no parent_type
[3364]../qom/object.c/object_class_get_parent(1134):objclass(object) has no parent return
[3364]../qom/object.c/object_class_get_parent(1130):enter
[3364]../qom/object.c/type_get_parent(194):parent_type(object)
[3364]../qom/object.c/object_class_get_parent(1138):objclass(memory-region) has parent(object)
[3364]../qom/object.c/object_class_get_parent(1141):objclass(memory-region) return
[3364]../qom/object.c/object_class_get_parent(1130):enter
[3364]../qom/object.c/type_get_parent(196):no parent_type
[3364]../qom/object.c/object_class_get_parent(1134):objclass(object) has no parent return
[3364]../qom/object.c/object_class_get_parent(1130):enter
[3364]../qom/object.c/type_get_parent(194):parent_type(object)
[3364]../qom/object.c/object_class_get_parent(1138):objclass(qtest) has parent(object)
[3364]../qom/object.c/object_class_get_parent(1141):objclass(qtest) return
[3364]../qom/object.c/object_class_get_parent(1130):enter
[3364]../qom/object.c/type_get_parent(196):no parent_type
[3364]../qom/object.c/object_class_get_parent(1134):objclass(object) has no parent return
[3364]../qom/object.c/object_class_get_parent(1130):enter
[3364]../qom/object.c/type_get_parent(194):parent_type(object)
[3364]../qom/object.c/object_class_get_parent(1138):objclass(container) has parent(object)
[3364]../qom/object.c/object_class_get_parent(1141):objclass(container) return
[3364]../qom/object.c/object_class_get_parent(1130):enter
[3364]../qom/object.c/type_get_parent(196):no parent_type
[3364]../qom/object.c/object_class_get_parent(1134):objclass(object) has no parent return
[3364]../qom/object.c/type_table_lookup(103):lookup type(memory-backend) in hash table
[3364]../qom/object.c/type_get_parent(194):parent_type(object)
[3364]../qom/object.c/type_get_parent(196):no parent_type
[3364]../qom/object.c/type_get_parent(194):parent_type(memory-backend)
[3364]../qom/object.c/object_class_get_parent(1130):enter
[3364]../qom/object.c/type_get_parent(194):parent_type(memory-backend)
[3364]../qom/object.c/object_class_get_parent(1138):objclass(memory-backend-ram) has parent(memory-backend)
[3364]../qom/object.c/object_class_get_parent(1141):objclass(memory-backend-ram) return
[3364]../qom/object.c/object_class_get_parent(1130):enter
[3364]../qom/object.c/type_get_parent(194):parent_type(object)
[3364]../qom/object.c/object_class_get_parent(1138):objclass(memory-backend) has parent(object)
[3364]../qom/object.c/object_class_get_parent(1141):objclass(memory-backend) return
[3364]../qom/object.c/object_class_get_parent(1130):enter
[3364]../qom/object.c/type_get_parent(196):no parent_type
[3364]../qom/object.c/object_class_get_parent(1134):objclass(object) has no parent return
[3364]../qom/object.c/object_class_get_parent(1130):enter
[3364]../qom/object.c/type_get_parent(194):parent_type(object)
[3364]../qom/object.c/object_class_get_parent(1138):objclass(memory-region) has parent(object)
[3364]../qom/object.c/object_class_get_parent(1141):objclass(memory-region) return
[3364]../qom/object.c/object_class_get_parent(1130):enter
[3364]../qom/object.c/type_get_parent(196):no parent_type
[3364]../qom/object.c/object_class_get_parent(1134):objclass(object) has no parent return
[3364]../qom/object.c/object_class_get_parent(1130):enter
[3364]../qom/object.c/type_get_parent(194):parent_type(memory-backend)
[3364]../qom/object.c/object_class_get_parent(1138):objclass(memory-backend-ram) has parent(memory-backend)
[3364]../qom/object.c/object_class_get_parent(1141):objclass(memory-backend-ram) return
[3364]../qom/object.c/object_class_get_parent(1130):enter
[3364]../qom/object.c/type_get_parent(194):parent_type(object)
[3364]../qom/object.c/object_class_get_parent(1138):objclass(memory-backend) has parent(object)
[3364]../qom/object.c/object_class_get_parent(1141):objclass(memory-backend) return
[3364]../qom/object.c/object_class_get_parent(1130):enter
[3364]../qom/object.c/type_get_parent(196):no parent_type
[3364]../qom/object.c/object_class_get_parent(1134):objclass(object) has no parent return
[3364]../qom/object.c/object_class_get_parent(1130):enter
[3364]../qom/object.c/type_get_parent(194):parent_type(object)
[3364]../qom/object.c/object_class_get_parent(1138):objclass(memory-region) has parent(object)
[3364]../qom/object.c/object_class_get_parent(1141):objclass(memory-region) return
[3364]../qom/object.c/object_class_get_parent(1130):enter
[3364]../qom/object.c/type_get_parent(196):no parent_type
[3364]../qom/object.c/object_class_get_parent(1134):objclass(object) has no parent return
[3364]../qom/object.c/object_class_get_parent(1130):enter
[3364]../qom/object.c/type_get_parent(194):parent_type(memory-backend)
[3364]../qom/object.c/object_class_get_parent(1138):objclass(memory-backend-ram) has parent(memory-backend)
[3364]../qom/object.c/object_class_get_parent(1141):objclass(memory-backend-ram) return
[3364]../qom/object.c/object_class_get_parent(1130):enter
[3364]../qom/object.c/type_get_parent(194):parent_type(object)
[3364]../qom/object.c/object_class_get_parent(1138):objclass(memory-backend) has parent(object)
[3364]../qom/object.c/object_class_get_parent(1141):objclass(memory-backend) return
[3364]../qom/object.c/object_class_get_parent(1130):enter
[3364]../qom/object.c/type_get_parent(196):no parent_type
[3364]../qom/object.c/object_class_get_parent(1134):objclass(object) has no parent return
[3364]../qom/object.c/type_table_lookup(103):lookup type(memory-backend) in hash table
[3364]../qom/object.c/type_get_parent(194):parent_type(object)
[3364]../qom/object.c/type_get_parent(196):no parent_type
[3364]../qom/object.c/type_get_parent(194):parent_type(memory-backend)
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(28):<<<deep>>>=[9]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(30):node_mem=[0000000100000000]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(31):node_memdev=[00000218aeb1cfd0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(32):present=[1]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(33):has_cpu=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(34):lb_info_provided=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(35):initiator=[128]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(36):distance=[00000218aeb45a3e]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[000]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[001]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[002]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[003]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[004]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[005]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[006]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[007]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[008]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[009]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[010]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[011]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[012]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[013]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[014]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[015]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[016]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[017]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[018]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[019]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[020]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[021]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[022]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[023]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[024]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[025]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[026]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[027]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[028]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[029]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[030]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[031]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[032]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[033]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[034]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[035]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[036]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[037]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[038]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[039]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[040]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[041]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[042]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[043]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[044]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[045]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[046]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[047]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[048]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[049]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[050]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[051]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[052]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[053]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[054]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[055]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[056]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[057]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[058]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[059]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[060]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[061]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[062]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[063]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[064]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[065]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[066]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[067]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[068]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[069]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[070]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[071]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[072]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[073]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[074]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[075]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[076]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[077]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[078]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[079]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[080]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[081]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[082]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[083]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[084]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[085]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[086]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[087]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[088]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[089]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[090]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[091]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[092]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[093]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[094]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[095]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[096]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[097]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[098]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[099]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[100]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[101]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[102]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[103]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[104]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[105]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[106]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[107]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[108]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[109]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[110]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[111]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[112]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[113]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[114]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[115]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[116]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[117]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[118]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[119]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[120]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[121]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[122]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[123]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[124]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[125]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[126]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[127]=[0]
[3364]../qom/object.c/object_class_get_parent(1130):enter
[3364]../qom/object.c/type_get_parent(194):parent_type(object)
[3364]../qom/object.c/object_class_get_parent(1138):objclass(container) has parent(object)
[3364]../qom/object.c/object_class_get_parent(1141):objclass(container) return
[3364]../qom/object.c/object_class_get_parent(1130):enter
[3364]../qom/object.c/type_get_parent(196):no parent_type
[3364]../qom/object.c/object_class_get_parent(1134):objclass(object) has no parent return
[3364]../qom/object.c/object_class_get_parent(1130):enter
[3364]../qom/object.c/type_get_parent(194):parent_type(object)
[3364]../qom/object.c/object_class_get_parent(1138):objclass(container) has parent(object)
[3364]../qom/object.c/object_class_get_parent(1141):objclass(container) return
[3364]../qom/object.c/object_class_get_parent(1130):enter
[3364]../qom/object.c/type_get_parent(196):no parent_type
[3364]../qom/object.c/object_class_get_parent(1134):objclass(object) has no parent return
[3364]../qom/object.c/object_class_get_parent(1130):enter
[3364]../qom/object.c/type_get_parent(194):parent_type(chardev)
[3364]../qom/object.c/object_class_get_parent(1138):objclass(chardev-vc) has parent(chardev)
[3364]../qom/object.c/object_class_get_parent(1141):objclass(chardev-vc) return
[3364]../qom/object.c/object_class_get_parent(1130):enter
[3364]../qom/object.c/type_get_parent(194):parent_type(object)
[3364]../qom/object.c/object_class_get_parent(1138):objclass(chardev) has parent(object)
[3364]../qom/object.c/object_class_get_parent(1141):objclass(chardev) return
[3364]../qom/object.c/object_class_get_parent(1130):enter
[3364]../qom/object.c/type_get_parent(196):no parent_type
[3364]../qom/object.c/object_class_get_parent(1134):objclass(object) has no parent return
[3364]../qom/object.c/object_class_get_parent(1130):enter
[3364]../qom/object.c/type_get_parent(194):parent_type(chardev)
[3364]../qom/object.c/object_class_get_parent(1138):objclass(chardev-vc) has parent(chardev)
[3364]../qom/object.c/object_class_get_parent(1141):objclass(chardev-vc) return
[3364]../qom/object.c/object_class_get_parent(1130):enter
[3364]../qom/object.c/type_get_parent(194):parent_type(object)
[3364]../qom/object.c/object_class_get_parent(1138):objclass(chardev) has parent(object)
[3364]../qom/object.c/object_class_get_parent(1141):objclass(chardev) return
[3364]../qom/object.c/object_class_get_parent(1130):enter
[3364]../qom/object.c/type_get_parent(196):no parent_type
[3364]../qom/object.c/object_class_get_parent(1134):objclass(object) has no parent return
[3364]../qom/object.c/object_class_get_parent(1130):enter
[3364]../qom/object.c/type_get_parent(194):parent_type(chardev)
[3364]../qom/object.c/object_class_get_parent(1138):objclass(chardev-socket) has parent(chardev)
[3364]../qom/object.c/object_class_get_parent(1141):objclass(chardev-socket) return
[3364]../qom/object.c/object_class_get_parent(1130):enter
[3364]../qom/object.c/type_get_parent(194):parent_type(object)
[3364]../qom/object.c/object_class_get_parent(1138):objclass(chardev) has parent(object)
[3364]../qom/object.c/object_class_get_parent(1141):objclass(chardev) return
[3364]../qom/object.c/object_class_get_parent(1130):enter
[3364]../qom/object.c/type_get_parent(196):no parent_type
[3364]../qom/object.c/object_class_get_parent(1134):objclass(object) has no parent return
[3364]../qom/object.c/object_class_get_parent(1130):enter
[3364]../qom/object.c/type_get_parent(194):parent_type(chardev)
[3364]../qom/object.c/object_class_get_parent(1138):objclass(chardev-vc) has parent(chardev)
[3364]../qom/object.c/object_class_get_parent(1141):objclass(chardev-vc) return
[3364]../qom/object.c/object_class_get_parent(1130):enter
[3364]../qom/object.c/type_get_parent(194):parent_type(object)
[3364]../qom/object.c/object_class_get_parent(1138):objclass(chardev) has parent(object)
[3364]../qom/object.c/object_class_get_parent(1141):objclass(chardev) return
[3364]../qom/object.c/object_class_get_parent(1130):enter
[3364]../qom/object.c/type_get_parent(196):no parent_type
[3364]../qom/object.c/object_class_get_parent(1134):objclass(object) has no parent return
[3364]../qom/object.c/object_class_get_parent(1130):enter
[3364]../qom/object.c/type_get_parent(194):parent_type(generic-pc-machine)
[3364]../qom/object.c/object_class_get_parent(1138):objclass(pc-q35-8.2-machine) has parent(generic-pc-machine)
[3364]../qom/object.c/object_class_get_parent(1141):objclass(pc-q35-8.2-machine) return
[3364]../qom/object.c/object_class_get_parent(1130):enter
[3364]../qom/object.c/type_get_parent(194):parent_type(x86-machine)
[3364]../qom/object.c/object_class_get_parent(1138):objclass(generic-pc-machine) has parent(x86-machine)
[3364]../qom/object.c/object_class_get_parent(1141):objclass(generic-pc-machine) return
[3364]../qom/object.c/object_class_get_parent(1130):enter
[3364]../qom/object.c/type_get_parent(194):parent_type(machine)
[3364]../qom/object.c/object_class_get_parent(1138):objclass(x86-machine) has parent(machine)
[3364]../qom/object.c/object_class_get_parent(1141):objclass(x86-machine) return
[3364]../qom/object.c/object_class_get_parent(1130):enter
[3364]../qom/object.c/type_get_parent(194):parent_type(object)
[3364]../qom/object.c/object_class_get_parent(1138):objclass(machine) has parent(object)
[3364]../qom/object.c/object_class_get_parent(1141):objclass(machine) return
[3364]../qom/object.c/object_class_get_parent(1130):enter
[3364]../qom/object.c/type_get_parent(196):no parent_type
[3364]../qom/object.c/object_class_get_parent(1134):objclass(object) has no parent return
[3364]../qom/object.c/object_class_get_parent(1130):enter
[3364]../qom/object.c/type_get_parent(194):parent_type(sys-bus-device)
[3364]../qom/object.c/object_class_get_parent(1138):objclass(cfi.pflash01) has parent(sys-bus-device)
[3364]../qom/object.c/object_class_get_parent(1141):objclass(cfi.pflash01) return
[3364]../qom/object.c/object_class_get_parent(1130):enter
[3364]../qom/object.c/type_get_parent(194):parent_type(device)
[3364]../qom/object.c/object_class_get_parent(1138):objclass(sys-bus-device) has parent(device)
[3364]../qom/object.c/object_class_get_parent(1141):objclass(sys-bus-device) return
[3364]../qom/object.c/object_class_get_parent(1130):enter
[3364]../qom/object.c/type_get_parent(194):parent_type(object)
[3364]../qom/object.c/object_class_get_parent(1138):objclass(device) has parent(object)
[3364]../qom/object.c/object_class_get_parent(1141):objclass(device) return
[3364]../qom/object.c/object_class_get_parent(1130):enter
[3364]../qom/object.c/type_get_parent(196):no parent_type
[3364]../qom/object.c/object_class_get_parent(1134):objclass(object) has no parent return
[3364]../qom/object.c/object_class_get_parent(1130):enter
[3364]../qom/object.c/type_get_parent(194):parent_type(sys-bus-device)
[3364]../qom/object.c/object_class_get_parent(1138):objclass(cfi.pflash01) has parent(sys-bus-device)
[3364]../qom/object.c/object_class_get_parent(1141):objclass(cfi.pflash01) return
[3364]../qom/object.c/object_class_get_parent(1130):enter
[3364]../qom/object.c/type_get_parent(194):parent_type(device)
[3364]../qom/object.c/object_class_get_parent(1138):objclass(sys-bus-device) has parent(device)
[3364]../qom/object.c/object_class_get_parent(1141):objclass(sys-bus-device) return
[3364]../qom/object.c/object_class_get_parent(1130):enter
[3364]../qom/object.c/type_get_parent(194):parent_type(object)
[3364]../qom/object.c/object_class_get_parent(1138):objclass(device) has parent(object)
[3364]../qom/object.c/object_class_get_parent(1141):objclass(device) return
[3364]../qom/object.c/object_class_get_parent(1130):enter
[3364]../qom/object.c/type_get_parent(196):no parent_type
[3364]../qom/object.c/object_class_get_parent(1134):objclass(object) has no parent return
[3364]../qom/object.c/object_class_get_parent(1130):enter
[3364]../qom/object.c/type_get_parent(194):parent_type(object)
[3364]../qom/object.c/object_class_get_parent(1138):objclass(container) has parent(object)
[3364]../qom/object.c/object_class_get_parent(1141):objclass(container) return
[3364]../qom/object.c/object_class_get_parent(1130):enter
[3364]../qom/object.c/type_get_parent(196):no parent_type
[3364]../qom/object.c/object_class_get_parent(1134):objclass(object) has no parent return
[3364]../qom/object.c/object_class_get_parent(1130):enter
[3364]../qom/object.c/type_get_parent(194):parent_type(object)
[3364]../qom/object.c/object_class_get_parent(1138):objclass(container) has parent(object)
[3364]../qom/object.c/object_class_get_parent(1141):objclass(container) return
[3364]../qom/object.c/object_class_get_parent(1130):enter
[3364]../qom/object.c/type_get_parent(196):no parent_type
[3364]../qom/object.c/object_class_get_parent(1134):objclass(object) has no parent return
[3364]../qom/object.c/object_class_get_parent(1130):enter
[3364]../qom/object.c/type_get_parent(194):parent_type(object)
[3364]../qom/object.c/object_class_get_parent(1138):objclass(container) has parent(object)
[3364]../qom/object.c/object_class_get_parent(1141):objclass(container) return
[3364]../qom/object.c/object_class_get_parent(1130):enter
[3364]../qom/object.c/type_get_parent(196):no parent_type
[3364]../qom/object.c/object_class_get_parent(1134):objclass(object) has no parent return
[3364]../qom/object.c/object_class_get_parent(1130):enter
[3364]../qom/object.c/type_get_parent(194):parent_type(bus)
[3364]../qom/object.c/object_class_get_parent(1138):objclass(System) has parent(bus)
[3364]../qom/object.c/object_class_get_parent(1141):objclass(System) return
[3364]../qom/object.c/object_class_get_parent(1130):enter
[3364]../qom/object.c/type_get_parent(194):parent_type(object)
[3364]../qom/object.c/object_class_get_parent(1138):objclass(bus) has parent(object)
[3364]../qom/object.c/object_class_get_parent(1141):objclass(bus) return
[3364]../qom/object.c/object_class_get_parent(1130):enter
[3364]../qom/object.c/type_get_parent(196):no parent_type
[3364]../qom/object.c/object_class_get_parent(1134):objclass(object) has no parent return
[3364]../qom/object.c/object_class_get_parent(1130):enter
[3364]../qom/object.c/type_get_parent(194):parent_type(object)
[3364]../qom/object.c/object_class_get_parent(1138):objclass(memory-region) has parent(object)
[3364]../qom/object.c/object_class_get_parent(1141):objclass(memory-region) return
[3364]../qom/object.c/object_class_get_parent(1130):enter
[3364]../qom/object.c/type_get_parent(196):no parent_type
[3364]../qom/object.c/object_class_get_parent(1134):objclass(object) has no parent return
[3364]../qom/object.c/object_class_get_parent(1130):enter
[3364]../qom/object.c/type_get_parent(194):parent_type(object)
[3364]../qom/object.c/object_class_get_parent(1138):objclass(memory-region) has parent(object)
[3364]../qom/object.c/object_class_get_parent(1141):objclass(memory-region) return
[3364]../qom/object.c/object_class_get_parent(1130):enter
[3364]../qom/object.c/type_get_parent(196):no parent_type
[3364]../qom/object.c/object_class_get_parent(1134):objclass(object) has no parent return
[3364]../qom/object.c/object_class_get_parent(1130):enter
[3364]../qom/object.c/type_get_parent(194):parent_type(object)
[3364]../qom/object.c/object_class_get_parent(1138):objclass(qtest) has parent(object)
[3364]../qom/object.c/object_class_get_parent(1141):objclass(qtest) return
[3364]../qom/object.c/object_class_get_parent(1130):enter
[3364]../qom/object.c/type_get_parent(196):no parent_type
[3364]../qom/object.c/object_class_get_parent(1134):objclass(object) has no parent return
[3364]../qom/object.c/object_class_get_parent(1130):enter
[3364]../qom/object.c/type_get_parent(194):parent_type(object)
[3364]../qom/object.c/object_class_get_parent(1138):objclass(container) has parent(object)
[3364]../qom/object.c/object_class_get_parent(1141):objclass(container) return
[3364]../qom/object.c/object_class_get_parent(1130):enter
[3364]../qom/object.c/type_get_parent(196):no parent_type
[3364]../qom/object.c/object_class_get_parent(1134):objclass(object) has no parent return
[3364]../qom/object.c/type_table_lookup(103):lookup type(memory-backend) in hash table
[3364]../qom/object.c/type_get_parent(194):parent_type(object)
[3364]../qom/object.c/type_get_parent(196):no parent_type
[3364]../qom/object.c/type_get_parent(194):parent_type(memory-backend)
[3364]../qom/object.c/object_class_get_parent(1130):enter
[3364]../qom/object.c/type_get_parent(194):parent_type(memory-backend)
[3364]../qom/object.c/object_class_get_parent(1138):objclass(memory-backend-ram) has parent(memory-backend)
[3364]../qom/object.c/object_class_get_parent(1141):objclass(memory-backend-ram) return
[3364]../qom/object.c/object_class_get_parent(1130):enter
[3364]../qom/object.c/type_get_parent(194):parent_type(object)
[3364]../qom/object.c/object_class_get_parent(1138):objclass(memory-backend) has parent(object)
[3364]../qom/object.c/object_class_get_parent(1141):objclass(memory-backend) return
[3364]../qom/object.c/object_class_get_parent(1130):enter
[3364]../qom/object.c/type_get_parent(196):no parent_type
[3364]../qom/object.c/object_class_get_parent(1134):objclass(object) has no parent return
[3364]../qom/object.c/object_class_get_parent(1130):enter
[3364]../qom/object.c/type_get_parent(194):parent_type(object)
[3364]../qom/object.c/object_class_get_parent(1138):objclass(memory-region) has parent(object)
[3364]../qom/object.c/object_class_get_parent(1141):objclass(memory-region) return
[3364]../qom/object.c/object_class_get_parent(1130):enter
[3364]../qom/object.c/type_get_parent(196):no parent_type
[3364]../qom/object.c/object_class_get_parent(1134):objclass(object) has no parent return
[3364]../qom/object.c/object_class_get_parent(1130):enter
[3364]../qom/object.c/type_get_parent(194):parent_type(memory-backend)
[3364]../qom/object.c/object_class_get_parent(1138):objclass(memory-backend-ram) has parent(memory-backend)
[3364]../qom/object.c/object_class_get_parent(1141):objclass(memory-backend-ram) return
[3364]../qom/object.c/object_class_get_parent(1130):enter
[3364]../qom/object.c/type_get_parent(194):parent_type(object)
[3364]../qom/object.c/object_class_get_parent(1138):objclass(memory-backend) has parent(object)
[3364]../qom/object.c/object_class_get_parent(1141):objclass(memory-backend) return
[3364]../qom/object.c/object_class_get_parent(1130):enter
[3364]../qom/object.c/type_get_parent(196):no parent_type
[3364]../qom/object.c/object_class_get_parent(1134):objclass(object) has no parent return
[3364]../qom/object.c/object_class_get_parent(1130):enter
[3364]../qom/object.c/type_get_parent(194):parent_type(object)
[3364]../qom/object.c/object_class_get_parent(1138):objclass(memory-region) has parent(object)
[3364]../qom/object.c/object_class_get_parent(1141):objclass(memory-region) return
[3364]../qom/object.c/object_class_get_parent(1130):enter
[3364]../qom/object.c/type_get_parent(196):no parent_type
[3364]../qom/object.c/object_class_get_parent(1134):objclass(object) has no parent return
[3364]../qom/object.c/object_class_get_parent(1130):enter
[3364]../qom/object.c/type_get_parent(194):parent_type(memory-backend)
[3364]../qom/object.c/object_class_get_parent(1138):objclass(memory-backend-ram) has parent(memory-backend)
[3364]../qom/object.c/object_class_get_parent(1141):objclass(memory-backend-ram) return
[3364]../qom/object.c/object_class_get_parent(1130):enter
[3364]../qom/object.c/type_get_parent(194):parent_type(object)
[3364]../qom/object.c/object_class_get_parent(1138):objclass(memory-backend) has parent(object)
[3364]../qom/object.c/object_class_get_parent(1141):objclass(memory-backend) return
[3364]../qom/object.c/object_class_get_parent(1130):enter
[3364]../qom/object.c/type_get_parent(196):no parent_type
[3364]../qom/object.c/object_class_get_parent(1134):objclass(object) has no parent return
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(28):<<<deep>>>=[9]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(30):node_mem=[0000000080000000]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(31):node_memdev=[00000218aeb1a5d0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(32):present=[1]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(33):has_cpu=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(34):lb_info_provided=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(35):initiator=[128]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(36):distance=[00000218aeb45ad6]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[000]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[001]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[002]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[003]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[004]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[005]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[006]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[007]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[008]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[009]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[010]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[011]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[012]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[013]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[014]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[015]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[016]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[017]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[018]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[019]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[020]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[021]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[022]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[023]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[024]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[025]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[026]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[027]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[028]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[029]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[030]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[031]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[032]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[033]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[034]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[035]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[036]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[037]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[038]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[039]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[040]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[041]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[042]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[043]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[044]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[045]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[046]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[047]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[048]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[049]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[050]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[051]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[052]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[053]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[054]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[055]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[056]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[057]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[058]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[059]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[060]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[061]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[062]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[063]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[064]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[065]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[066]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[067]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[068]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[069]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[070]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[071]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[072]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[073]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[074]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[075]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[076]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[077]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[078]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[079]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[080]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[081]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[082]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[083]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[084]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[085]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[086]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[087]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[088]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[089]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[090]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[091]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[092]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[093]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[094]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[095]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[096]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[097]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[098]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[099]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[100]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[101]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[102]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[103]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[104]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[105]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[106]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[107]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[108]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[109]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[110]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[111]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[112]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[113]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[114]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[115]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[116]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[117]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[118]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[119]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[120]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[121]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[122]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[123]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[124]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[125]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[126]=[0]
[3364]../util/huedbg-numa.c/huedbg_dump_NodeInfo(38):distance[127]=[0]
[3364]../system/vl.c/qemu_init(3872):

几个需要关注的地方:

[22148]../util/huedbg-numa.c/huedbg_dump_NodeInfo(31):node_mem=[0000000100000000]
...
[22148]../util/huedbg-numa.c/huedbg_dump_NodeInfo(31):node_mem=[0000000100000000]

分别对应命令行参数中 -numa 中 memdev 对应的 ram0 和 ram1 的存储尺寸。


总结

以上分析了系统初始化过程中解析 NUMA 结点配置项的过程。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/601714.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

压力测试-JMeter常用插件、服务器硬件监控

1.写在前面 在前一篇文章中&#xff0c;我们已经对jmeter有了一个入门的学习。 掌握了JMeter安装、入门、结果分析等内容&#xff0c;详情可查看这里&#xff1a;压力测试-JMeter安装、入门、结果分析 对于jmeter默认的插件&#xff0c;往往不太够&#xff0c;例如&#xff…

Python检查代码质量库之flake8使用详解

概要 Flake8是一个流行的Python库,用于检查代码质量和风格一致性,它集成了PyFlakes、pep8、Ned Batchelder的McCabe script等工具。Flake8可以帮助开发者发现代码中的错误,保持代码风格的一致性,是每个Python开发者工具箱中的重要组成部分。 安装 安装Flake8非常简单,可…

手把手教数据结构与算法:有序线性表设计(表合并)

个人主页&#xff1a; 想转码的电筒人 专栏&#xff1a; 手把手教数据结构与算法 文章目录 有序线性表 概念 结构 问题描述 输入 输出 样例 解题步骤 结点类 链表类 insert函数 printAll函数 merge函数 test函数 完整代码 有序线性表 概念 单链表是一种物…

《构建高效的财务管理系统:设计与实现》

在当今数字化时代&#xff0c;企业财务管理系统的设计与实现至关重要。一个高效的财务管理系统不仅能够提高企业的运营效率&#xff0c;还能够增强企业的竞争力&#xff0c;为企业的发展提供有力支持。本文将探讨财务管理系统的设计与实现&#xff0c;为企业打造一套符合自身需…

WEB应用防火墙:构建稳固的网络防线

随着互联网的飞速发展&#xff0c;WEB应用已成为企业对外展示形象、提供服务的重要窗口。然而&#xff0c;随之而来的是日益严峻的网络安全威胁&#xff0c;如跨站脚本攻击&#xff08;XSS&#xff09;、SQL注入、恶意文件上传等。为了保障WEB应用的安全&#xff0c;构建一套高…

AI智能分析赋能EasyCVR视频汇聚平台,为安全生产监管提供保障

一、背景需求 为提升公共及生产安全监管&#xff0c;深入贯彻落实中央关于智慧城市、数字乡村的部署要求&#xff0c;视频设备融合管理已成为视频治理的必然趋势。针对当前部分地区在视频监控系统建设中存在的问题&#xff0c;如重点地区视频监控系统建设零散、视频监控数据孤…

普通人适合做大模型吗?过程中会发生什么潜在的挑战?

对于普通人来说&#xff0c;直接进行大模型的研发和训练可能存在一定的挑战&#xff0c;因为这通常需要以下资源和知识&#xff1a; 专业知识&#xff1a; 大模型的开发需要深入理解机器学习、深度学习、神经网络等领域的知识。 计算资源&#xff1a; 大模型的训练需要高性能的…

数组元素翻倍C++

编写一个 C 程序&#xff0c;实现一个功能&#xff0c;即将数组中的每个元素值翻倍。程序应定义一个函数 doubleArray&#xff0c;该函数接收一个整数数组的指针和数组的大小&#xff0c;然后将数组中的每个元素都翻倍。 代码 #include <iostream>void doubleArray(int…

JSON++介绍

1.简介 JSON 是一个轻量级的 JSON 解析库&#xff0c;它是 JSON&#xff08;JavaScript Object Notation&#xff09;的一个超集。整个代码由一个单独的头文件json.hpp组成&#xff0c;没有库&#xff0c;没有子项目&#xff0c;没有依赖项&#xff0c;没有复杂的构建系统&…

安防视频/视频汇聚系统EasyCVR视频融合云平台助力智能化酒店安防体系的搭建

一、背景需求 2024年“五一”假期&#xff0c;全国文化和旅游市场总体平稳有序。文化和旅游部6日发布数据显示&#xff0c;据文化和旅游部数据中心测算&#xff0c;全国国内旅游出游合计2.95亿人次。“五一”假期县域市场酒店预订订单同比增长68%&#xff0c;而酒店作为一个高…

js原生手写一个拖拽小功能

先上效果图 附上代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta http-equiv"X-UA-Compatible" content"IEedge" /><meta name"viewport" content"widthd…

check startup检查各种资源文件

check startup 命令功能 check startup命令用来检查各种资源文件&#xff08;paf文件、补丁包、启动软件、配置文件&#xff09;是否正确。 命令格式 check startup [ crc ] [ next ] 参数说明 参数参数说明取值 crc 对资源文件进行CRC校验。 - next 检查下一次启动的各…

Git系列:Git Switch 高效使用技巧

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

用标准的GNU/Linux命令替换Alpine上的精简版命令

Alpine Linux 是一个基于 musl libc 和 busybox 的轻量级Linux发行版&#xff0c;busybox 实现了很多常用类Unix命令的精简版&#xff0c;特点是体积很小&#xff0c;舍弃了很多不常用参数&#xff0c;我们简单对比一下标准Linux自带的 date 命令 和 Alpine下默认的 date 命令便…

Golang | Leetcode Golang题解之第76题最小覆盖子串

题目&#xff1a; 题解&#xff1a; func minWindow(s string, t string) string {ori, cnt : map[byte]int{}, map[byte]int{}for i : 0; i < len(t); i {ori[t[i]]}sLen : len(s)len : math.MaxInt32ansL, ansR : -1, -1check : func() bool {for k, v : range ori {if c…

每日两题 / 138. 随机链表的复制 148. 排序链表(LeetCode热题100)

138. 随机链表的复制 - 力扣&#xff08;LeetCode&#xff09; 用哈希表记录原链表中的节点是否被复制过 遍历原链表并通过哈希表维护新链表 /* // Definition for a Node. class Node { public:int val;Node* next;Node* random;Node(int _val) {val _val;next NULL;rand…

Glowroot:Java应用的性能守护神,让监控变得既轻松又有趣!

Glowroot&#xff1a;Java应用的性能守护神&#xff0c;让监控变得既轻松又有趣&#xff01; 在这个快节奏的数字化时代&#xff0c;作为一名开发者&#xff0c;你是否曾因应用性能问题而夜不能寐&#xff1f;是不是常幻想有个超级英雄能在关键时刻挺身而出&#xff0c;帮你揪…

淘宝优惠券领取软件草柴返利APP想从淘宝粘贴提示怎么关闭?想从天猫粘贴、想从京东粘贴弹窗提示关闭

使用iPhone苹果手机想从淘宝点击分享复制链接&#xff0c;到草柴APP查询该商品内部大额隐藏优惠券和返利。可是&#xff0c;苹果iPhone手机每次将复制的商品链接&#xff0c;粘贴到草柴APP时都是提示&#xff1a;“草柴”想从“淘宝”粘贴&#xff0c;每次都需要点击允许粘贴后…

docker搭建代码审计平台sonarqube

docker搭建代码审计平台sonarqube 一、代码审计关注的质量指标二、静态分析技术分类三、sonarqube流程四、快速搭建sonarqube五、sonarqube scanner的安装和使用 一、代码审计关注的质量指标 代码坏味道 代码规范技术债评估 bug和漏洞代码重复度单测与集成 测试用例数量覆盖率…

管易云与金蝶K3-WISE对接集成发货单查询2.0打通新增销售出库(红蓝字)

管易云与金蝶K3-WISE对接集成发货单查询2.0打通新增销售出库&#xff08;红蓝字&#xff09; 源系统:管易云 金蝶管易云是金蝶集团旗下以电商和新零售为核心业务的子公司&#xff0c;公司于2008年成立&#xff0c;拥有从事电商及新零售业务相关专业知识工作者超过1000人。为伊利…