From nobody Mon Feb 9 18:44:06 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=intel.com ARC-Seal: i=1; a=rsa-sha256; t=1572249749; cv=none; d=zoho.com; s=zohoarc; b=k9RGAVqcfgf1zaHay7v2rYLtOVhxCRw4ecTG6/nlR3xP6X1S6lyEpf16eYA4hIZE9/V5hGzk3OjL1+BwurT3J4T8yvE6lVwOjIg823j64cjbRh/TPGt3yisek3Ho+LrLa0TeS2tdjks3ZpWCNKwGqa72HDfiMv51GbyDC5Vg2ec= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1572249749; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=77O2vGa9Ag5F1z7w9FgomHz/ZLzVPWpA/Oy0SATOubk=; b=mByiizYn6sMIMWk1taqR+F5iSPmToRBLdVLj+nvk+sgfm9bhry0cw4wuYw9u5qT1AmY6/vIP/A4Kx0z7qcGosLf21l+od5OpZTAcrZC3eoOAIBOkxz/IQL6IxogM06FzbK+6fuoX3Fn81pfIaVjMNW2Y9CrfRu/nouitf66IimY= ARC-Authentication-Results: i=1; mx.zoho.com; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 15722497495541021.271385396138; Mon, 28 Oct 2019 01:02:29 -0700 (PDT) Received: from localhost ([::1]:51638 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iOzyt-0001vQ-HW for importer@patchew.org; Mon, 28 Oct 2019 04:02:27 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:48742) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iOzpU-0000tj-Ha for qemu-devel@nongnu.org; Mon, 28 Oct 2019 03:52:45 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iOzpT-0002vQ-8x for qemu-devel@nongnu.org; Mon, 28 Oct 2019 03:52:44 -0400 Received: from mga04.intel.com ([192.55.52.120]:47960) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1iOzpT-0002p5-1Y for qemu-devel@nongnu.org; Mon, 28 Oct 2019 03:52:43 -0400 Received: from fmsmga004.fm.intel.com ([10.253.24.48]) by fmsmga104.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 28 Oct 2019 00:52:42 -0700 Received: from tao-optiplex-7060.sh.intel.com ([10.239.159.36]) by fmsmga004.fm.intel.com with ESMTP; 28 Oct 2019 00:52:40 -0700 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.68,239,1569308400"; d="scan'208";a="224558775" From: Tao Xu To: mst@redhat.com, imammedo@redhat.com, eblake@redhat.com, ehabkost@redhat.com, marcel.apfelbaum@gmail.com, armbru@redhat.com, mdroth@linux.vnet.ibm.com, thuth@redhat.com, lvivier@redhat.com Subject: [PATCH v14 06/11] numa: Calculate hmat latency and bandwidth entry list Date: Mon, 28 Oct 2019 15:52:15 +0800 Message-Id: <20191028075220.25673-7-tao3.xu@intel.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20191028075220.25673-1-tao3.xu@intel.com> References: <20191028075220.25673-1-tao3.xu@intel.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 192.55.52.120 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: jingqi.liu@intel.com, tao3.xu@intel.com, fan.du@intel.com, qemu-devel@nongnu.org, jonathan.cameron@huawei.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Type: text/plain; charset="utf-8" Compress HMAT latency and bandwidth raw data into uint16_t data, which can be stored in HMAT table. Suggested-by: Igor Mammedov Signed-off-by: Tao Xu --- Changes in v14: - Convert latency from ns to ps, because ACPI 6.3 HMAT table use ps as minimum unit --- hw/core/numa.c | 59 +++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 58 insertions(+), 1 deletion(-) diff --git a/hw/core/numa.c b/hw/core/numa.c index f391760c20..523dd80822 100644 --- a/hw/core/numa.c +++ b/hw/core/numa.c @@ -483,6 +483,47 @@ static void complete_init_numa_distance(MachineState *= ms) } } =20 +static void calculate_hmat_entry_list(HMAT_LB_Info *hmat_lb, int num_nodes) +{ + int i, index; + uint16_t *entry_list; + uint64_t base; + GArray *lb_data_list; + HMAT_LB_Data *lb_data; + + if (hmat_lb->data_type <=3D HMAT_LB_DATA_WRITE_LATENCY) { + base =3D hmat_lb->base_latency; + lb_data_list =3D hmat_lb->latency; + } else { + base =3D hmat_lb->base_bandwidth; + lb_data_list =3D hmat_lb->bandwidth; + } + + entry_list =3D g_malloc0(lb_data_list->len * sizeof(uint16_t)); + for (i =3D 0; i < lb_data_list->len; i++) { + lb_data =3D &g_array_index(lb_data_list, HMAT_LB_Data, i); + index =3D lb_data->initiator * num_nodes + lb_data->target; + if (entry_list[index]) { + error_report("Duplicate configuration of the latency for " + "initiator=3D%d and target=3D%d.", lb_data->initiator, + lb_data->target); + exit(1); + } + + entry_list[index] =3D (uint16_t)(lb_data->rawdata / base); + } + + if (hmat_lb->data_type <=3D HMAT_LB_DATA_WRITE_LATENCY) { + /* Convert latency base from nanoseconds to picosecond */ + hmat_lb->base_latency =3D base * 1000; + hmat_lb->entry_latency =3D entry_list; + } else { + /* Convert bandwidth base from Byte to Megabyte */ + hmat_lb->base_bandwidth =3D base / MiB; + hmat_lb->entry_bandwidth =3D entry_list; + } +} + void numa_legacy_auto_assign_ram(MachineClass *mc, NodeInfo *nodes, int nb_nodes, ram_addr_t size) { @@ -521,9 +562,10 @@ void numa_default_auto_assign_ram(MachineClass *mc, No= deInfo *nodes, =20 void numa_complete_configuration(MachineState *ms) { - int i; + int i, hierarchy, type; MachineClass *mc =3D MACHINE_GET_CLASS(ms); NodeInfo *numa_info =3D ms->numa_state->nodes; + HMAT_LB_Info *numa_hmat_lb; =20 /* * If memory hotplug is enabled (slots > 0) but without '-numa' @@ -620,6 +662,21 @@ void numa_complete_configuration(MachineState *ms) /* Validation succeeded, now fill in any missing distances. */ complete_init_numa_distance(ms); } + + if (ms->numa_state->hmat_enabled) { + for (hierarchy =3D HMAT_LB_MEM_MEMORY; + hierarchy <=3D HMAT_LB_MEM_CACHE_3RD_LEVEL; hierarchy++) { + for (type =3D HMAT_LB_DATA_ACCESS_LATENCY; + type <=3D HMAT_LB_DATA_WRITE_BANDWIDTH; type++) { + numa_hmat_lb =3D ms->numa_state->hmat_lb[hierarchy][ty= pe]; + + if (numa_hmat_lb) { + calculate_hmat_entry_list(numa_hmat_lb, + ms->numa_state->num_node= s); + } + } + } + } } } =20 --=20 2.20.1