mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-15 08:14:15 +08:00
4f9b16a647
When it was introduced, zone_reclaim_mode made sense as NUMA distances punished and workloads were generally partitioned to fit into a NUMA node. NUMA machines are now common but few of the workloads are NUMA-aware and it's routine to see major performance degradation due to zone_reclaim_mode being enabled but relatively few can identify the problem. Those that require zone_reclaim_mode are likely to be able to detect when it needs to be enabled and tune appropriately so lets have a sensible default for the bulk of users. This patch (of 2): zone_reclaim_mode causes processes to prefer reclaiming memory from local node instead of spilling over to other nodes. This made sense initially when NUMA machines were almost exclusively HPC and the workload was partitioned into nodes. The NUMA penalties were sufficiently high to justify reclaiming the memory. On current machines and workloads it is often the case that zone_reclaim_mode destroys performance but not all users know how to detect this. Favour the common case and disable it by default. Users that are sophisticated enough to know they need zone_reclaim_mode will detect it. Signed-off-by: Mel Gorman <mgorman@suse.de> Acked-by: Johannes Weiner <hannes@cmpxchg.org> Reviewed-by: Zhang Yanfei <zhangyanfei@cn.fujitsu.com> Acked-by: Michal Hocko <mhocko@suse.cz> Reviewed-by: Christoph Lameter <cl@linux.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
68 lines
1.8 KiB
C
68 lines
1.8 KiB
C
/*
|
|
* Copyright (C) 2002, Erich Focht, NEC
|
|
*
|
|
* All rights reserved.
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation; either version 2 of the License, or
|
|
* (at your option) any later version.
|
|
*/
|
|
#ifndef _ASM_IA64_TOPOLOGY_H
|
|
#define _ASM_IA64_TOPOLOGY_H
|
|
|
|
#include <asm/acpi.h>
|
|
#include <asm/numa.h>
|
|
#include <asm/smp.h>
|
|
|
|
#ifdef CONFIG_NUMA
|
|
|
|
/* Nodes w/o CPUs are preferred for memory allocations, see build_zonelists */
|
|
#define PENALTY_FOR_NODE_WITH_CPUS 255
|
|
|
|
/*
|
|
* Nodes within this distance are eligible for reclaim by zone_reclaim() when
|
|
* zone_reclaim_mode is enabled.
|
|
*/
|
|
#define RECLAIM_DISTANCE 15
|
|
|
|
/*
|
|
* Returns a bitmask of CPUs on Node 'node'.
|
|
*/
|
|
#define cpumask_of_node(node) ((node) == -1 ? \
|
|
cpu_all_mask : \
|
|
&node_to_cpu_mask[node])
|
|
|
|
/*
|
|
* Returns the number of the node containing Node 'nid'.
|
|
* Not implemented here. Multi-level hierarchies detected with
|
|
* the help of node_distance().
|
|
*/
|
|
#define parent_node(nid) (nid)
|
|
|
|
/*
|
|
* Determines the node for a given pci bus
|
|
*/
|
|
#define pcibus_to_node(bus) PCI_CONTROLLER(bus)->node
|
|
|
|
void build_cpu_to_node_map(void);
|
|
|
|
#endif /* CONFIG_NUMA */
|
|
|
|
#ifdef CONFIG_SMP
|
|
#define topology_physical_package_id(cpu) (cpu_data(cpu)->socket_id)
|
|
#define topology_core_id(cpu) (cpu_data(cpu)->core_id)
|
|
#define topology_core_cpumask(cpu) (&cpu_core_map[cpu])
|
|
#define topology_thread_cpumask(cpu) (&per_cpu(cpu_sibling_map, cpu))
|
|
#endif
|
|
|
|
extern void arch_fix_phys_package_id(int num, u32 slot);
|
|
|
|
#define cpumask_of_pcibus(bus) (pcibus_to_node(bus) == -1 ? \
|
|
cpu_all_mask : \
|
|
cpumask_of_node(pcibus_to_node(bus)))
|
|
|
|
#include <asm-generic/topology.h>
|
|
|
|
#endif /* _ASM_IA64_TOPOLOGY_H */
|