Message ID | 20210910001726.811497-1-jarkko@kernel.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [v4,1/3] x86/sgx: Report SGX memory in /sys/devices/system/node/node*/meminfo | expand |
On Fri, Sep 10, 2021 at 03:17:24AM +0300, Jarkko Sakkinen wrote: > The amount of SGX memory on the system is determined by the BIOS and it > varies wildly between systems. It can be from dozens of MB's on desktops > or VM's, up to many GB's on servers. Just like for regular memory, it is > sometimes useful to know the amount of usable SGX memory in the system. > > Add SGX_MemTotal field to /sys/devices/system/node/node*/meminfo, > showing the total SGX memory in each NUMA node. The total memory for > each NUMA node is calculated by adding the sizes of contained EPC > sections together. > > Introduce arch_node_read_meminfo(), which can optionally be rewritten by > the arch code, and rewrite it for x86 so it prints SGX_MemTotal. > > Signed-off-by: Jarkko Sakkinen <jarkko@kernel.org> > --- > v4: > * A new patch. > arch/x86/kernel/cpu/sgx/main.c | 14 ++++++++++++++ > arch/x86/kernel/cpu/sgx/sgx.h | 6 ++++++ > drivers/base/node.c | 10 +++++++++- > 3 files changed, 29 insertions(+), 1 deletion(-) Where is the Documentation/ABI/ update for this new sysfs file? > > diff --git a/arch/x86/kernel/cpu/sgx/main.c b/arch/x86/kernel/cpu/sgx/main.c > index 63d3de02bbcc..4c6da5f4a9d4 100644 > --- a/arch/x86/kernel/cpu/sgx/main.c > +++ b/arch/x86/kernel/cpu/sgx/main.c > @@ -717,6 +717,7 @@ static bool __init sgx_page_cache_init(void) > } > > sgx_epc_sections[i].node = &sgx_numa_nodes[nid]; > + sgx_numa_nodes[nid].size += size; > > sgx_nr_epc_sections++; > } > @@ -790,6 +791,19 @@ int sgx_set_attribute(unsigned long *allowed_attributes, > } > EXPORT_SYMBOL_GPL(sgx_set_attribute); > > +ssize_t arch_node_read_meminfo(struct device *dev, > + struct device_attribute *attr, > + char *buf, int len) > +{ > + struct sgx_numa_node *node = &sgx_numa_nodes[dev->id]; > + > + len += sysfs_emit_at(buf, len, > + "Node %d SGX_MemTotal: %8lu kB\n", > + dev->id, node->size); Wait, that is not how sysfs files work. they are "one value per file" Please do not have multiple values in a single sysfs file, that is not acceptable at all. thanks, greg k-h
On Fri, 2021-09-10 at 08:51 +0200, Greg Kroah-Hartman wrote: > On Fri, Sep 10, 2021 at 03:17:24AM +0300, Jarkko Sakkinen wrote: > > The amount of SGX memory on the system is determined by the BIOS and it > > varies wildly between systems. It can be from dozens of MB's on desktops > > or VM's, up to many GB's on servers. Just like for regular memory, it is > > sometimes useful to know the amount of usable SGX memory in the system. > > > > Add SGX_MemTotal field to /sys/devices/system/node/node*/meminfo, > > showing the total SGX memory in each NUMA node. The total memory for > > each NUMA node is calculated by adding the sizes of contained EPC > > sections together. > > > > Introduce arch_node_read_meminfo(), which can optionally be rewritten by > > the arch code, and rewrite it for x86 so it prints SGX_MemTotal. > > > > Signed-off-by: Jarkko Sakkinen <jarkko@kernel.org> > > --- > > v4: > > * A new patch. > > arch/x86/kernel/cpu/sgx/main.c | 14 ++++++++++++++ > > arch/x86/kernel/cpu/sgx/sgx.h | 6 ++++++ > > drivers/base/node.c | 10 +++++++++- > > 3 files changed, 29 insertions(+), 1 deletion(-) > > Where is the Documentation/ABI/ update for this new sysfs file? It's has been existed for a long time, e.g. cat /sys/devices/system/node/node0/meminfo Node 0 MemTotal: 32706792 kB Node 0 MemFree: 5382988 kB Node 0 MemUsed: 27323804 kB Node 0 SwapCached: 8 kB Node 0 Active: 3640612 kB Node 0 Inactive: 21757684 kB Node 0 Active(anon): 2833772 kB Node 0 Inactive(anon): 14392 kB Node 0 Active(file): 806840 kB Node 0 Inactive(file): 21743292 kB Node 0 Unevictable: 80640 kB Node 0 Mlocked: 80640 kB Node 0 Dirty: 36 kB Node 0 Writeback: 0 kB Node 0 FilePages: 22833124 kB Node 0 Mapped: 1112832 kB Node 0 AnonPages: 2645812 kB Node 0 Shmem: 282984 kB Node 0 KernelStack: 18544 kB Node 0 PageTables: 46704 kB Node 0 NFS_Unstable: 0 kB Node 0 Bounce: 0 kB Node 0 WritebackTmp: 0 kB Node 0 KReclaimable: 1311812 kB Node 0 Slab: 1542220 kB Node 0 SReclaimable: 1311812 kB Node 0 SUnreclaim: 230408 kB Node 0 AnonHugePages: 0 kB Node 0 ShmemHugePages: 0 kB Node 0 ShmemPmdMapped: 0 kB Node 0 FileHugePages: 0 kB Node 0 FilePmdMapped: 0 kB Node 0 HugePages_Total: 0 Node 0 HugePages_Free: 0 Node 0 HugePages_Surp: 0 This file is undocumented but the fields seem to reflect what is in /proc/meminfo, so I added additional patch for documentation: https://lore.kernel.org/linux-sgx/20210910001726.811497-3-jarkko@kernel.org/ I have no idea why things are how they are. I'm just merely trying to follow the existing patterns. I'm also fully aware of the defacto sysfs pattern, i.e. one value per file. I figured, since the situation is how it is, that I end up doing this wrong in a way or another, so this the anti-pattern I picked for my wrong doings :-) I'm sorry about it. > > diff --git a/arch/x86/kernel/cpu/sgx/main.c b/arch/x86/kernel/cpu/sgx/main.c > > index 63d3de02bbcc..4c6da5f4a9d4 100644 > > --- a/arch/x86/kernel/cpu/sgx/main.c > > +++ b/arch/x86/kernel/cpu/sgx/main.c > > @@ -717,6 +717,7 @@ static bool __init sgx_page_cache_init(void) > > } > > > > sgx_epc_sections[i].node = &sgx_numa_nodes[nid]; > > + sgx_numa_nodes[nid].size += size; > > > > sgx_nr_epc_sections++; > > } > > @@ -790,6 +791,19 @@ int sgx_set_attribute(unsigned long *allowed_attributes, > > } > > EXPORT_SYMBOL_GPL(sgx_set_attribute); > > > > +ssize_t arch_node_read_meminfo(struct device *dev, > > + struct device_attribute *attr, > > + char *buf, int len) > > +{ > > + struct sgx_numa_node *node = &sgx_numa_nodes[dev->id]; > > + > > + len += sysfs_emit_at(buf, len, > > + "Node %d SGX_MemTotal: %8lu kB\n", > > + dev->id, node->size); > > Wait, that is not how sysfs files work. they are "one value per file" > Please do not have multiple values in a single sysfs file, that is not > acceptable at all. Yeah, I'm wondering what would be the right corrective steps, given the "established science". > thanks, > > greg k-h /Jarkko
On Fri, Sep 10, 2021 at 04:17:44PM +0300, Jarkko Sakkinen wrote: > On Fri, 2021-09-10 at 08:51 +0200, Greg Kroah-Hartman wrote: > > On Fri, Sep 10, 2021 at 03:17:24AM +0300, Jarkko Sakkinen wrote: > > > The amount of SGX memory on the system is determined by the BIOS and it > > > varies wildly between systems. It can be from dozens of MB's on desktops > > > or VM's, up to many GB's on servers. Just like for regular memory, it is > > > sometimes useful to know the amount of usable SGX memory in the system. > > > > > > Add SGX_MemTotal field to /sys/devices/system/node/node*/meminfo, > > > showing the total SGX memory in each NUMA node. The total memory for > > > each NUMA node is calculated by adding the sizes of contained EPC > > > sections together. > > > > > > Introduce arch_node_read_meminfo(), which can optionally be rewritten by > > > the arch code, and rewrite it for x86 so it prints SGX_MemTotal. > > > > > > Signed-off-by: Jarkko Sakkinen <jarkko@kernel.org> > > > --- > > > v4: > > > * A new patch. > > > arch/x86/kernel/cpu/sgx/main.c | 14 ++++++++++++++ > > > arch/x86/kernel/cpu/sgx/sgx.h | 6 ++++++ > > > drivers/base/node.c | 10 +++++++++- > > > 3 files changed, 29 insertions(+), 1 deletion(-) > > > > Where is the Documentation/ABI/ update for this new sysfs file? > > It's has been existed for a long time, e.g. > > cat /sys/devices/system/node/node0/meminfo > Node 0 MemTotal: 32706792 kB > Node 0 MemFree: 5382988 kB > Node 0 MemUsed: 27323804 kB > Node 0 SwapCached: 8 kB > Node 0 Active: 3640612 kB > Node 0 Inactive: 21757684 kB > Node 0 Active(anon): 2833772 kB > Node 0 Inactive(anon): 14392 kB > Node 0 Active(file): 806840 kB > Node 0 Inactive(file): 21743292 kB > Node 0 Unevictable: 80640 kB > Node 0 Mlocked: 80640 kB > Node 0 Dirty: 36 kB > Node 0 Writeback: 0 kB > Node 0 FilePages: 22833124 kB > Node 0 Mapped: 1112832 kB > Node 0 AnonPages: 2645812 kB > Node 0 Shmem: 282984 kB > Node 0 KernelStack: 18544 kB > Node 0 PageTables: 46704 kB > Node 0 NFS_Unstable: 0 kB > Node 0 Bounce: 0 kB > Node 0 WritebackTmp: 0 kB > Node 0 KReclaimable: 1311812 kB > Node 0 Slab: 1542220 kB > Node 0 SReclaimable: 1311812 kB > Node 0 SUnreclaim: 230408 kB > Node 0 AnonHugePages: 0 kB > Node 0 ShmemHugePages: 0 kB > Node 0 ShmemPmdMapped: 0 kB > Node 0 FileHugePages: 0 kB > Node 0 FilePmdMapped: 0 kB > Node 0 HugePages_Total: 0 > Node 0 HugePages_Free: 0 > Node 0 HugePages_Surp: 0 > > This file is undocumented but the fields seem to reflect what is in > /proc/meminfo, so I added additional patch for documentation: > > https://lore.kernel.org/linux-sgx/20210910001726.811497-3-jarkko@kernel.org/ > > I have no idea why things are how they are. I'm just merely trying to follow > the existing patterns. I'm also fully aware of the defacto sysfs pattern, i.e. > one value per file. Then please do not add anything else to this nightmare of a mess. thanks, greg k-h
On Fri, 2021-09-10 at 16:05 +0200, Greg Kroah-Hartman wrote: > On Fri, Sep 10, 2021 at 04:17:44PM +0300, Jarkko Sakkinen wrote: > > On Fri, 2021-09-10 at 08:51 +0200, Greg Kroah-Hartman wrote: > > > On Fri, Sep 10, 2021 at 03:17:24AM +0300, Jarkko Sakkinen wrote: > > > > The amount of SGX memory on the system is determined by the BIOS and it > > > > varies wildly between systems. It can be from dozens of MB's on desktops > > > > or VM's, up to many GB's on servers. Just like for regular memory, it is > > > > sometimes useful to know the amount of usable SGX memory in the system. > > > > > > > > Add SGX_MemTotal field to /sys/devices/system/node/node*/meminfo, > > > > showing the total SGX memory in each NUMA node. The total memory for > > > > each NUMA node is calculated by adding the sizes of contained EPC > > > > sections together. > > > > > > > > Introduce arch_node_read_meminfo(), which can optionally be rewritten by > > > > the arch code, and rewrite it for x86 so it prints SGX_MemTotal. > > > > > > > > Signed-off-by: Jarkko Sakkinen <jarkko@kernel.org> > > > > --- > > > > v4: > > > > * A new patch. > > > > arch/x86/kernel/cpu/sgx/main.c | 14 ++++++++++++++ > > > > arch/x86/kernel/cpu/sgx/sgx.h | 6 ++++++ > > > > drivers/base/node.c | 10 +++++++++- > > > > 3 files changed, 29 insertions(+), 1 deletion(-) > > > > > > Where is the Documentation/ABI/ update for this new sysfs file? > > > > It's has been existed for a long time, e.g. > > > > cat /sys/devices/system/node/node0/meminfo > > Node 0 MemTotal: 32706792 kB > > Node 0 MemFree: 5382988 kB > > Node 0 MemUsed: 27323804 kB > > Node 0 SwapCached: 8 kB > > Node 0 Active: 3640612 kB > > Node 0 Inactive: 21757684 kB > > Node 0 Active(anon): 2833772 kB > > Node 0 Inactive(anon): 14392 kB > > Node 0 Active(file): 806840 kB > > Node 0 Inactive(file): 21743292 kB > > Node 0 Unevictable: 80640 kB > > Node 0 Mlocked: 80640 kB > > Node 0 Dirty: 36 kB > > Node 0 Writeback: 0 kB > > Node 0 FilePages: 22833124 kB > > Node 0 Mapped: 1112832 kB > > Node 0 AnonPages: 2645812 kB > > Node 0 Shmem: 282984 kB > > Node 0 KernelStack: 18544 kB > > Node 0 PageTables: 46704 kB > > Node 0 NFS_Unstable: 0 kB > > Node 0 Bounce: 0 kB > > Node 0 WritebackTmp: 0 kB > > Node 0 KReclaimable: 1311812 kB > > Node 0 Slab: 1542220 kB > > Node 0 SReclaimable: 1311812 kB > > Node 0 SUnreclaim: 230408 kB > > Node 0 AnonHugePages: 0 kB > > Node 0 ShmemHugePages: 0 kB > > Node 0 ShmemPmdMapped: 0 kB > > Node 0 FileHugePages: 0 kB > > Node 0 FilePmdMapped: 0 kB > > Node 0 HugePages_Total: 0 > > Node 0 HugePages_Free: 0 > > Node 0 HugePages_Surp: 0 This was something also spinned my head a bit, i.e. why hugepages fields are not aligned correctly. > > > > This file is undocumented but the fields seem to reflect what is in > > /proc/meminfo, so I added additional patch for documentation: > > > > https://lore.kernel.org/linux-sgx/20210910001726.811497-3-jarkko@kernel.org/ > > > > I have no idea why things are how they are. I'm just merely trying to follow > > the existing patterns. I'm also fully aware of the defacto sysfs pattern, i.e. > > one value per file. > > Then please do not add anything else to this nightmare of a mess. There is already /sys/devices/system/node/node0/hugepages/. It has alike data to the contents of meminfo: /sys/devices/system/node/node0/hugepages/hugepages-2048kB: surplus_hugepages nr_hugepages free_hugepages /sys/devices/system/node/node0/hugepages/hugepages-1048576kB: surplus_hugepages nr_hugepages free_hugepages [I'm wondering tho, how the fields in meminfo are supposed to be interpreted, given that there are two types of huge pages, but let's just ignore that for the moment.] Following this pattern, I'd perhaps go and create (and document): /sys/devices/system/node/node0/sgx/memory_size which would have the size in bytes. > thanks, > > greg k-h /Jarkko
On Fri, Sep 10, 2021 at 06:02:59PM +0300, Jarkko Sakkinen wrote: > On Fri, 2021-09-10 at 16:05 +0200, Greg Kroah-Hartman wrote: > > On Fri, Sep 10, 2021 at 04:17:44PM +0300, Jarkko Sakkinen wrote: > > > On Fri, 2021-09-10 at 08:51 +0200, Greg Kroah-Hartman wrote: > > > > On Fri, Sep 10, 2021 at 03:17:24AM +0300, Jarkko Sakkinen wrote: > > > > > The amount of SGX memory on the system is determined by the BIOS and it > > > > > varies wildly between systems. It can be from dozens of MB's on desktops > > > > > or VM's, up to many GB's on servers. Just like for regular memory, it is > > > > > sometimes useful to know the amount of usable SGX memory in the system. > > > > > > > > > > Add SGX_MemTotal field to /sys/devices/system/node/node*/meminfo, > > > > > showing the total SGX memory in each NUMA node. The total memory for > > > > > each NUMA node is calculated by adding the sizes of contained EPC > > > > > sections together. > > > > > > > > > > Introduce arch_node_read_meminfo(), which can optionally be rewritten by > > > > > the arch code, and rewrite it for x86 so it prints SGX_MemTotal. > > > > > > > > > > Signed-off-by: Jarkko Sakkinen <jarkko@kernel.org> > > > > > --- > > > > > v4: > > > > > * A new patch. > > > > > arch/x86/kernel/cpu/sgx/main.c | 14 ++++++++++++++ > > > > > arch/x86/kernel/cpu/sgx/sgx.h | 6 ++++++ > > > > > drivers/base/node.c | 10 +++++++++- > > > > > 3 files changed, 29 insertions(+), 1 deletion(-) > > > > > > > > Where is the Documentation/ABI/ update for this new sysfs file? > > > > > > It's has been existed for a long time, e.g. > > > > > > cat /sys/devices/system/node/node0/meminfo > > > Node 0 MemTotal: 32706792 kB > > > Node 0 MemFree: 5382988 kB > > > Node 0 MemUsed: 27323804 kB > > > Node 0 SwapCached: 8 kB > > > Node 0 Active: 3640612 kB > > > Node 0 Inactive: 21757684 kB > > > Node 0 Active(anon): 2833772 kB > > > Node 0 Inactive(anon): 14392 kB > > > Node 0 Active(file): 806840 kB > > > Node 0 Inactive(file): 21743292 kB > > > Node 0 Unevictable: 80640 kB > > > Node 0 Mlocked: 80640 kB > > > Node 0 Dirty: 36 kB > > > Node 0 Writeback: 0 kB > > > Node 0 FilePages: 22833124 kB > > > Node 0 Mapped: 1112832 kB > > > Node 0 AnonPages: 2645812 kB > > > Node 0 Shmem: 282984 kB > > > Node 0 KernelStack: 18544 kB > > > Node 0 PageTables: 46704 kB > > > Node 0 NFS_Unstable: 0 kB > > > Node 0 Bounce: 0 kB > > > Node 0 WritebackTmp: 0 kB > > > Node 0 KReclaimable: 1311812 kB > > > Node 0 Slab: 1542220 kB > > > Node 0 SReclaimable: 1311812 kB > > > Node 0 SUnreclaim: 230408 kB > > > Node 0 AnonHugePages: 0 kB > > > Node 0 ShmemHugePages: 0 kB > > > Node 0 ShmemPmdMapped: 0 kB > > > Node 0 FileHugePages: 0 kB > > > Node 0 FilePmdMapped: 0 kB > > > Node 0 HugePages_Total: 0 > > > Node 0 HugePages_Free: 0 > > > Node 0 HugePages_Surp: 0 > > This was something also spinned my head a bit, i.e. why hugepages fields > are not aligned correctly. > > > > > > > This file is undocumented but the fields seem to reflect what is in > > > /proc/meminfo, so I added additional patch for documentation: > > > > > > https://lore.kernel.org/linux-sgx/20210910001726.811497-3-jarkko@kernel.org/ > > > > > > I have no idea why things are how they are. I'm just merely trying to follow > > > the existing patterns. I'm also fully aware of the defacto sysfs pattern, i.e. > > > one value per file. > > > > Then please do not add anything else to this nightmare of a mess. > > There is already /sys/devices/system/node/node0/hugepages/. > > It has alike data to the contents of meminfo: > > /sys/devices/system/node/node0/hugepages/hugepages-2048kB: > surplus_hugepages > nr_hugepages > free_hugepages > > /sys/devices/system/node/node0/hugepages/hugepages-1048576kB: > surplus_hugepages > nr_hugepages > free_hugepages > > [I'm wondering tho, how the fields in meminfo are supposed to be interpreted, > given that there are two types of huge pages, but let's just ignore that > for the moment.] > > Following this pattern, I'd perhaps go and create (and document): > > /sys/devices/system/node/node0/sgx/memory_size > > which would have the size in bytes. If it is one-value-per-file, that's fine with me. thanks, greg k-h
On Fri, 2021-09-10 at 17:11 +0200, Greg Kroah-Hartman wrote: > On Fri, Sep 10, 2021 at 06:02:59PM +0300, Jarkko Sakkinen wrote: > > On Fri, 2021-09-10 at 16:05 +0200, Greg Kroah-Hartman wrote: > > > On Fri, Sep 10, 2021 at 04:17:44PM +0300, Jarkko Sakkinen wrote: > > > > On Fri, 2021-09-10 at 08:51 +0200, Greg Kroah-Hartman wrote: > > > > > On Fri, Sep 10, 2021 at 03:17:24AM +0300, Jarkko Sakkinen wrote: > > > > > > The amount of SGX memory on the system is determined by the BIOS and it > > > > > > varies wildly between systems. It can be from dozens of MB's on desktops > > > > > > or VM's, up to many GB's on servers. Just like for regular memory, it is > > > > > > sometimes useful to know the amount of usable SGX memory in the system. > > > > > > > > > > > > Add SGX_MemTotal field to /sys/devices/system/node/node*/meminfo, > > > > > > showing the total SGX memory in each NUMA node. The total memory for > > > > > > each NUMA node is calculated by adding the sizes of contained EPC > > > > > > sections together. > > > > > > > > > > > > Introduce arch_node_read_meminfo(), which can optionally be rewritten by > > > > > > the arch code, and rewrite it for x86 so it prints SGX_MemTotal. > > > > > > > > > > > > Signed-off-by: Jarkko Sakkinen <jarkko@kernel.org> > > > > > > --- > > > > > > v4: > > > > > > * A new patch. > > > > > > arch/x86/kernel/cpu/sgx/main.c | 14 ++++++++++++++ > > > > > > arch/x86/kernel/cpu/sgx/sgx.h | 6 ++++++ > > > > > > drivers/base/node.c | 10 +++++++++- > > > > > > 3 files changed, 29 insertions(+), 1 deletion(-) > > > > > > > > > > Where is the Documentation/ABI/ update for this new sysfs file? > > > > > > > > It's has been existed for a long time, e.g. > > > > > > > > cat /sys/devices/system/node/node0/meminfo > > > > Node 0 MemTotal: 32706792 kB > > > > Node 0 MemFree: 5382988 kB > > > > Node 0 MemUsed: 27323804 kB > > > > Node 0 SwapCached: 8 kB > > > > Node 0 Active: 3640612 kB > > > > Node 0 Inactive: 21757684 kB > > > > Node 0 Active(anon): 2833772 kB > > > > Node 0 Inactive(anon): 14392 kB > > > > Node 0 Active(file): 806840 kB > > > > Node 0 Inactive(file): 21743292 kB > > > > Node 0 Unevictable: 80640 kB > > > > Node 0 Mlocked: 80640 kB > > > > Node 0 Dirty: 36 kB > > > > Node 0 Writeback: 0 kB > > > > Node 0 FilePages: 22833124 kB > > > > Node 0 Mapped: 1112832 kB > > > > Node 0 AnonPages: 2645812 kB > > > > Node 0 Shmem: 282984 kB > > > > Node 0 KernelStack: 18544 kB > > > > Node 0 PageTables: 46704 kB > > > > Node 0 NFS_Unstable: 0 kB > > > > Node 0 Bounce: 0 kB > > > > Node 0 WritebackTmp: 0 kB > > > > Node 0 KReclaimable: 1311812 kB > > > > Node 0 Slab: 1542220 kB > > > > Node 0 SReclaimable: 1311812 kB > > > > Node 0 SUnreclaim: 230408 kB > > > > Node 0 AnonHugePages: 0 kB > > > > Node 0 ShmemHugePages: 0 kB > > > > Node 0 ShmemPmdMapped: 0 kB > > > > Node 0 FileHugePages: 0 kB > > > > Node 0 FilePmdMapped: 0 kB > > > > Node 0 HugePages_Total: 0 > > > > Node 0 HugePages_Free: 0 > > > > Node 0 HugePages_Surp: 0 > > > > This was something also spinned my head a bit, i.e. why hugepages fields > > are not aligned correctly. > > > > > > This file is undocumented but the fields seem to reflect what is in > > > > /proc/meminfo, so I added additional patch for documentation: > > > > > > > > https://lore.kernel.org/linux-sgx/20210910001726.811497-3-jarkko@kernel.org/ > > > > > > > > I have no idea why things are how they are. I'm just merely trying to follow > > > > the existing patterns. I'm also fully aware of the defacto sysfs pattern, i.e. > > > > one value per file. > > > > > > Then please do not add anything else to this nightmare of a mess. > > > > There is already /sys/devices/system/node/node0/hugepages/. > > > > It has alike data to the contents of meminfo: > > > > /sys/devices/system/node/node0/hugepages/hugepages-2048kB: > > surplus_hugepages > > nr_hugepages > > free_hugepages > > > > /sys/devices/system/node/node0/hugepages/hugepages-1048576kB: > > surplus_hugepages > > nr_hugepages > > free_hugepages > > > > [I'm wondering tho, how the fields in meminfo are supposed to be interpreted, > > given that there are two types of huge pages, but let's just ignore that > > for the moment.] > > > > Following this pattern, I'd perhaps go and create (and document): > > > > /sys/devices/system/node/node0/sgx/memory_size > > > > which would have the size in bytes. > > If it is one-value-per-file, that's fine with me. And if it's represented like this to user space, I think that /proc/meminfo change is unnecessary: it's less involving (e.g. in scripting) to parse these files in a loop and sum then, than grep the appropriate line from /proc/meminfo. Would no make much common sense to maintain it. For me the only open here is: would it make more sense to add x86 subdirectory to each node? With this approach the path would be something like: * /sys/devices/system/node/node0/x86/sgx_memory_size I guess huge pages is different in the sense that it's not just one arch thing, whereas SGX is directly arch related, so I think that this would be a more civilized way to deal with SGX. This way things won't bloat, if or when something else ought to need a NUMA node specific attribute. > thanks, > > greg k-h /Jarkko
diff --git a/arch/x86/kernel/cpu/sgx/main.c b/arch/x86/kernel/cpu/sgx/main.c index 63d3de02bbcc..4c6da5f4a9d4 100644 --- a/arch/x86/kernel/cpu/sgx/main.c +++ b/arch/x86/kernel/cpu/sgx/main.c @@ -717,6 +717,7 @@ static bool __init sgx_page_cache_init(void) } sgx_epc_sections[i].node = &sgx_numa_nodes[nid]; + sgx_numa_nodes[nid].size += size; sgx_nr_epc_sections++; } @@ -790,6 +791,19 @@ int sgx_set_attribute(unsigned long *allowed_attributes, } EXPORT_SYMBOL_GPL(sgx_set_attribute); +ssize_t arch_node_read_meminfo(struct device *dev, + struct device_attribute *attr, + char *buf, int len) +{ + struct sgx_numa_node *node = &sgx_numa_nodes[dev->id]; + + len += sysfs_emit_at(buf, len, + "Node %d SGX_MemTotal: %8lu kB\n", + dev->id, node->size); + + return len; +} + static int __init sgx_init(void) { int ret; diff --git a/arch/x86/kernel/cpu/sgx/sgx.h b/arch/x86/kernel/cpu/sgx/sgx.h index 4628acec0009..74713b98a859 100644 --- a/arch/x86/kernel/cpu/sgx/sgx.h +++ b/arch/x86/kernel/cpu/sgx/sgx.h @@ -39,6 +39,7 @@ struct sgx_epc_page { */ struct sgx_numa_node { struct list_head free_page_list; + unsigned long size; spinlock_t lock; }; @@ -95,4 +96,9 @@ static inline int __init sgx_vepc_init(void) void sgx_update_lepubkeyhash(u64 *lepubkeyhash); +extern ssize_t arch_node_read_meminfo(struct device *dev, + struct device_attribute *attr, + char *buf, int len); + + #endif /* _X86_SGX_H */ diff --git a/drivers/base/node.c b/drivers/base/node.c index 4a4ae868ad9f..91eaa2e2ce33 100644 --- a/drivers/base/node.c +++ b/drivers/base/node.c @@ -361,6 +361,13 @@ static void node_init_caches(unsigned int nid) { } static void node_remove_caches(struct node *node) { } #endif +ssize_t __weak arch_node_read_meminfo(struct device *dev, + struct device_attribute *attr, + char *buf, int len) +{ + return len; +} + #define K(x) ((x) << (PAGE_SHIFT - 10)) static ssize_t node_read_meminfo(struct device *dev, struct device_attribute *attr, char *buf) @@ -473,7 +480,8 @@ static ssize_t node_read_meminfo(struct device *dev, #endif ); len += hugetlb_report_node_meminfo(buf, len, nid); - return len; + + return arch_node_read_meminfo(dev, attr, buf, len); } #undef K
The amount of SGX memory on the system is determined by the BIOS and it varies wildly between systems. It can be from dozens of MB's on desktops or VM's, up to many GB's on servers. Just like for regular memory, it is sometimes useful to know the amount of usable SGX memory in the system. Add SGX_MemTotal field to /sys/devices/system/node/node*/meminfo, showing the total SGX memory in each NUMA node. The total memory for each NUMA node is calculated by adding the sizes of contained EPC sections together. Introduce arch_node_read_meminfo(), which can optionally be rewritten by the arch code, and rewrite it for x86 so it prints SGX_MemTotal. Signed-off-by: Jarkko Sakkinen <jarkko@kernel.org> --- v4: * A new patch. arch/x86/kernel/cpu/sgx/main.c | 14 ++++++++++++++ arch/x86/kernel/cpu/sgx/sgx.h | 6 ++++++ drivers/base/node.c | 10 +++++++++- 3 files changed, 29 insertions(+), 1 deletion(-)