-
Notifications
You must be signed in to change notification settings - Fork 0
/
getcpu.html
187 lines (141 loc) · 5.33 KB
/
getcpu.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
<!-- Creator : groff version 1.22.4 -->
<!-- CreationDate: Wed Jan 29 11:26:55 2020 -->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta name="generator" content="groff -Thtml, see www.gnu.org">
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<meta name="Content-Style" content="text/css">
<style type="text/css">
p { margin-top: 0; margin-bottom: 0; vertical-align: top }
pre { margin-top: 0; margin-bottom: 0; vertical-align: top }
table { margin-top: 0; margin-bottom: 0; vertical-align: top }
h1 { text-align: center }
</style>
<title>GETCPU</title>
</head>
<body>
<h1 align="center">GETCPU</h1>
<a href="#NAME">NAME</a><br>
<a href="#SYNOPSIS">SYNOPSIS</a><br>
<a href="#DESCRIPTION">DESCRIPTION</a><br>
<a href="#RETURN VALUE">RETURN VALUE</a><br>
<a href="#ERRORS">ERRORS</a><br>
<a href="#VERSIONS">VERSIONS</a><br>
<a href="#CONFORMING TO">CONFORMING TO</a><br>
<a href="#NOTES">NOTES</a><br>
<a href="#SEE ALSO">SEE ALSO</a><br>
<a href="#COLOPHON">COLOPHON</a><br>
<hr>
<h2>NAME
<a name="NAME"></a>
</h2>
<p style="margin-left:11%; margin-top: 1em">getcpu -
determine CPU and NUMA node on which the calling thread is
running</p>
<h2>SYNOPSIS
<a name="SYNOPSIS"></a>
</h2>
<p style="margin-left:11%; margin-top: 1em"><b>#include
<linux/getcpu.h></b></p>
<p style="margin-left:11%; margin-top: 1em"><b>int
getcpu(unsigned *</b><i>cpu</i><b>, unsigned
*</b><i>node</i><b>, struct getcpu_cache
*</b><i>tcache</i><b>);</b></p>
<h2>DESCRIPTION
<a name="DESCRIPTION"></a>
</h2>
<p style="margin-left:11%; margin-top: 1em">The
<b>getcpu</b>() system call identifies the processor and
node on which the calling thread or process is currently
running and writes them into the integers pointed to by the
<i>cpu</i> and <i>node</i> arguments. The processor is a
unique small integer identifying a CPU. The node is a unique
small identifier identifying a NUMA node. When either
<i>cpu</i> or <i>node</i> is NULL nothing is written to the
respective pointer.</p>
<p style="margin-left:11%; margin-top: 1em">The third
argument to this system call is nowadays unused, and should
be specified as NULL unless portability to Linux 2.6.23 or
earlier is required (see NOTES).</p>
<p style="margin-left:11%; margin-top: 1em">The information
placed in <i>cpu</i> is guaranteed to be current only at the
time of the call: unless the CPU affinity has been fixed
using <b>sched_setaffinity</b>(2), the kernel might change
the CPU at any time. (Normally this does not happen because
the scheduler tries to minimize movements between CPUs to
keep caches hot, but it is possible.) The caller must allow
for the possibility that the information returned in
<i>cpu</i> and <i>node</i> is no longer current by the time
the call returns.</p>
<h2>RETURN VALUE
<a name="RETURN VALUE"></a>
</h2>
<p style="margin-left:11%; margin-top: 1em">On success, 0
is returned. On error, -1 is returned, and <i>errno</i> is
set appropriately.</p>
<h2>ERRORS
<a name="ERRORS"></a>
</h2>
<table width="100%" border="0" rules="none" frame="void"
cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="9%">
<p style="margin-top: 1em"><b>EFAULT</b></p></td>
<td width="2%"></td>
<td width="78%">
<p style="margin-top: 1em">Arguments point outside the
calling process’s address space.</p></td></tr>
</table>
<h2>VERSIONS
<a name="VERSIONS"></a>
</h2>
<p style="margin-left:11%; margin-top: 1em"><b>getcpu</b>()
was added in kernel 2.6.19 for x86-64 and i386. Library
support was added in glibc 2.29 (Earlier glibc versions did
not provide a wrapper for this system call, necessitating
the use of <b>syscall</b>(2).)</p>
<h2>CONFORMING TO
<a name="CONFORMING TO"></a>
</h2>
<p style="margin-left:11%; margin-top: 1em"><b>getcpu</b>()
is Linux-specific.</p>
<h2>NOTES
<a name="NOTES"></a>
</h2>
<p style="margin-left:11%; margin-top: 1em">Linux makes a
best effort to make this call as fast as possible. (On some
architectures, this is done via an implementation in the
<b>vdso</b>(7).) The intention of <b>getcpu</b>() is to
allow programs to make optimizations with per-CPU data or
for NUMA optimization.</p>
<p style="margin-left:11%; margin-top: 1em">The
<i>tcache</i> argument is unused since Linux 2.6.24. In
earlier kernels, if this argument was non-NULL, then it
specified a pointer to a caller-allocated buffer in
thread-local storage that was used to provide a caching
mechanism for <b>getcpu</b>(). Use of the cache could speed
<b>getcpu</b>() calls, at the cost that there was a very
small chance that the returned information would be out of
date. The caching mechanism was considered to cause problems
when migrating threads between CPUs, and so the argument is
now ignored.</p>
<h2>SEE ALSO
<a name="SEE ALSO"></a>
</h2>
<p style="margin-left:11%; margin-top: 1em"><b>mbind</b>(2),
<b>sched_setaffinity</b>(2), <b>set_mempolicy</b>(2),
<b>sched_getcpu</b>(3), <b>cpuset</b>(7), <b>vdso</b>(7)</p>
<h2>COLOPHON
<a name="COLOPHON"></a>
</h2>
<p style="margin-left:11%; margin-top: 1em">This page is
part of release 5.02 of the Linux <i>man-pages</i> project.
A description of the project, information about reporting
bugs, and the latest version of this page, can be found at
https://www.kernel.org/doc/man-pages/.</p>
<hr>
</body>
</html>