1# x86 specific tunables.
2# Copyright (C) 2017-2022 Free Software Foundation, Inc.
3# This file is part of the GNU C Library.
4
5# The GNU C Library is free software; you can redistribute it and/or
6# modify it under the terms of the GNU Lesser General Public
7# License as published by the Free Software Foundation; either
8# version 2.1 of the License, or (at your option) any later version.
9
10# The GNU C Library is distributed in the hope that it will be useful,
11# but WITHOUT ANY WARRANTY; without even the implied warranty of
12# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13# Lesser General Public License for more details.
14
15# You should have received a copy of the GNU Lesser General Public
16# License along with the GNU C Library; if not, see
17# <https://www.gnu.org/licenses/>.
18
19glibc {
20  cpu {
21    hwcaps {
22      type: STRING
23    }
24    x86_ibt {
25      type: STRING
26    }
27    x86_shstk {
28      type: STRING
29    }
30    x86_non_temporal_threshold {
31      type: SIZE_T
32    }
33    x86_rep_movsb_threshold {
34      type: SIZE_T
35      # Since there is overhead to set up REP MOVSB operation, REP
36      # MOVSB isn't faster on short data.  The memcpy micro benchmark
37      # in glibc shows that 2KB is the approximate value above which
38      # REP MOVSB becomes faster than SSE2 optimization on processors
39      # with Enhanced REP MOVSB.  Since larger register size can move
40      # more data with a single load and store, the threshold is
41      # higher with larger register size.  Micro benchmarks show AVX
42      # REP MOVSB becomes faster apprximately at 8KB.  The AVX512
43      # threshold is extrapolated to 16KB.  For machines with FSRM the
44      # threshold is universally set at 2112 bytes.  Note: Since the
45      # REP MOVSB threshold must be greater than 8 times of vector
46      # size and the default value is 4096 * (vector size / 16), the
47      # default value and the minimum value must be updated at
48      # run-time.  NB: Don't set the default value since we can't tell
49      # if the tunable value is set by user or not [BZ #27069].
50      minval: 1
51    }
52    x86_rep_stosb_threshold {
53      type: SIZE_T
54      # Since there is overhead to set up REP STOSB operation, REP STOSB
55      # isn't faster on short data.  The memset micro benchmark in glibc
56      # shows that 2KB is the approximate value above which REP STOSB
57      # becomes faster on processors with Enhanced REP STOSB.  Since the
58      # stored value is fixed, larger register size has minimal impact
59      # on threshold.
60      minval: 1
61      default: 2048
62    }
63    x86_data_cache_size {
64      type: SIZE_T
65    }
66    x86_shared_cache_size {
67      type: SIZE_T
68    }
69  }
70}
71