Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitd9bb75d

Browse files
committed
Whitespace cleanup
1 parent1908a67 commitd9bb75d

File tree

1 file changed

+92
-98
lines changed

1 file changed

+92
-98
lines changed

‎doc/src/sgml/pgtesttiming.sgml

Lines changed: 92 additions & 98 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
<para>
3030
<application>pg_test_timing</> is a tool to measure the timing overhead
3131
on your system and confirm that the system time never moves backwards.
32-
Systems that are slow to collect timing data can give less accurate
32+
Systems that are slow to collect timing data can give less accurate
3333
<command>EXPLAIN ANALYZE</command> results.
3434
</para>
3535
</refsect1>
@@ -68,11 +68,10 @@
6868
<title>Interpreting results</title>
6969

7070
<para>
71-
Good results will show most (>90%) individual timing calls take less
72-
than one microsecond. Average per loop overhead will be even lower,
73-
below 100 nanoseconds. This example from an Intel i7-860 system using
74-
a TSC clock source shows excellent performance:
75-
</para>
71+
Good results will show most (>90%) individual timing calls take less than
72+
one microsecond. Average per loop overhead will be even lower, below 100
73+
nanoseconds. This example from an Intel i7-860 system using a TSC clock
74+
source shows excellent performance:
7675

7776
<screen>
7877
Testing timing overhead for 3 seconds.
@@ -85,56 +84,55 @@ Histogram of timing durations:
8584
2: 2999652 3.59518%
8685
1: 80435604 96.40465%
8786
</screen>
87+
</para>
8888

8989
<para>
90-
Note that different units are used for the per loop time than the
91-
histogram. The loop can have resolution within a few nanoseconds
92-
(nsec),while the individual timing calls can only resolve down to
93-
one microsecond(usec).
90+
Note that different units are used for the per loop time than the
91+
histogram. The loop can have resolution within a few nanoseconds (nsec),
92+
while the individual timing calls can only resolve down to one microsecond
93+
(usec).
9494
</para>
9595

9696
</refsect2>
9797
<refsect2>
9898
<title>Measuring executor timing overhead</title>
9999

100100
<para>
101-
When the query executor is running a statement using
102-
<command>EXPLAIN ANALYZE</command>, individual operations are
103-
timed as well as showing a summary. The overhead of your system
104-
can be checked by counting rows with the psql program:
105-
</para>
101+
When the query executor is running a statement using
102+
<command>EXPLAIN ANALYZE</command>, individual operations are timed as well
103+
as showing a summary. The overhead of your system can be checked by
104+
counting rows with the psql program:
106105

107106
<screen>
108107
CREATE TABLE t AS SELECT * FROM generate_series(1,100000);
109108
\timing
110109
SELECT COUNT(*) FROM t;
111110
EXPLAIN ANALYZE SELECT COUNT(*) FROM t;
112111
</screen>
112+
</para>
113113

114114
<para>
115-
The i7-860 system measured runs the count query in 9.8 ms while
116-
the <command>EXPLAIN ANALYZE</command> version takes 16.6 ms,
117-
each processing just over 100,000 rows. That 6.8 ms difference
118-
means the timing overhead per row is 68 ns, about twice what
119-
pg_test_timing estimated it would be. Even that relatively
120-
small amount of overhead is making the fully timed count statement
121-
take almost 70% longer. On more substantial queries, the
122-
timing overhead would be less problematic.
115+
The i7-860 system measured runs the count query in 9.8 ms while
116+
the <command>EXPLAIN ANALYZE</command> version takes 16.6 ms, each
117+
processing just over 100,000 rows. That 6.8 ms difference means the timing
118+
overhead per row is 68 ns, about twice what pg_test_timing estimated it
119+
would be. Even that relatively small amount of overhead is making the fully
120+
timed count statement take almost 70% longer. On more substantial queries,
121+
the timing overhead would be less problematic.
123122
</para>
124123

125124
</refsect2>
126125

127126
<refsect2>
128127
<title>Changing time sources</title>
129128
<para>
130-
On some newer Linux systems, it's possible to change the clock
131-
source used to collect timing data at any time. A second example
132-
shows the slowdown possible from switching to the slower acpi_pm
133-
time source, on the same system used for the fast results above:
134-
</para>
129+
On some newer Linux systems, it's possible to change the clock source used
130+
to collect timing data at any time. A second example shows the slowdown
131+
possible from switching to the slower acpi_pm time source, on the same
132+
system used for the fast results above:
135133

136134
<screen>
137-
# cat /sys/devices/system/clocksource/clocksource0/available_clocksource
135+
# cat /sys/devices/system/clocksource/clocksource0/available_clocksource
138136
tsc hpet acpi_pm
139137
# echo acpi_pm > /sys/devices/system/clocksource/clocksource0/current_clocksource
140138
# pg_test_timing
@@ -147,45 +145,43 @@ Histogram of timing durations:
147145
2: 2990371 72.05956%
148146
1: 1155682 27.84870%
149147
</screen>
148+
</para>
150149

151150
<para>
152-
In this configuration, the sample <command>EXPLAIN ANALYZE</command>
153-
above takes 115.9 ms. That's 1061 nsec of timing overhead, again
154-
a small multiple of what's measured directly by this utility.
155-
That much timing overhead means the actual query itself is only
156-
taking a tiny fraction of the accounted for time, most of it
157-
is being consumed in overhead instead. In this configuration,
158-
any <command>EXPLAIN ANALYZE</command> totals involving many
159-
timed operations would be inflated significantly by timing overhead.
151+
In this configuration, the sample <command>EXPLAIN ANALYZE</command> above
152+
takes 115.9 ms. That's 1061 nsec of timing overhead, again a small multiple
153+
of what's measured directly by this utility. That much timing overhead
154+
means the actual query itself is only taking a tiny fraction of the
155+
accounted for time, most of it is being consumed in overhead instead. In
156+
this configuration, any <command>EXPLAIN ANALYZE</command> totals involving
157+
many timed operations would be inflated significantly by timing overhead.
160158
</para>
161159

162160
<para>
163-
FreeBSD also allows changing the time source on the fly, and
164-
it logs information about the timer selected during boot:
165-
</para>
161+
FreeBSD also allows changing the time source on the fly, and it logs
162+
information about the timer selected during boot:
166163

167164
<screen>
168-
dmesg | grep "Timecounter"
165+
dmesg | grep "Timecounter"
169166
sysctl kern.timecounter.hardware=TSC
170167
</screen>
168+
</para>
171169

172170
<para>
173-
Other systems may only allow setting the time source on boot.
174-
On older Linux systems the "clock" kernel setting is the only way
175-
to make this sort of change. And even on some more recent ones,
176-
the only option you'll see for a clock source is "jiffies". Jiffies
177-
are the older Linux software clock implementation, which can have
178-
good resolution when it's backed by fast enough timing hardware,
179-
as in this example:
180-
</para>
171+
Other systems may only allow setting the time source on boot. On older
172+
Linux systems the "clock" kernel setting is the only way to make this sort
173+
of change. And even on some more recent ones, the only option you'll see
174+
for a clock source is "jiffies". Jiffies are the older Linux software clock
175+
implementation, which can have good resolution when it's backed by fast
176+
enough timing hardware, as in this example:
181177

182178
<screen>
183-
$ cat /sys/devices/system/clocksource/clocksource0/available_clocksource
184-
jiffies
179+
$ cat /sys/devices/system/clocksource/clocksource0/available_clocksource
180+
jiffies
185181
$ dmesg | grep time.c
186182
time.c: Using 3.579545 MHz WALL PM GTOD PIT/TSC timer.
187183
time.c: Detected 2400.153 MHz processor.
188-
$./pg_test_timing
184+
$ pg_test_timing
189185
Testing timing overhead for 3 seconds.
190186
Per timing duration including loop overhead: 97.75 ns
191187
Histogram of timing durations:
@@ -197,76 +193,74 @@ Histogram of timing durations:
197193
2: 2993204 9.75277%
198194
1: 27694571 90.23734%
199195
</screen>
196+
</para>
200197

201198
</refsect2>
199+
202200
<refsect2>
203201
<title>Clock hardware and timing accuracy</title>
204202

205203
<para>
206-
Collecting accurate timing information is normally done on computers
207-
using hardware clocks with various levels of accuracy. With some
208-
hardware the operating systems can pass the system clock time almost
209-
directly to programs. A system clock can also be derived from a chip
210-
that simply provides timing interrupts, periodic ticks at some known
211-
time interval. In either case, operating system kernels provide
212-
a clock source that hides these details. But the accuracy of that
213-
clock source and how quickly it can return results varies based
214-
on the underlying hardware.
204+
Collecting accurate timing information is normally done on computers using
205+
hardware clocks with various levels of accuracy. With some hardware the
206+
operating systems can pass the system clock time almost directly to
207+
programs. A system clock can also be derived from a chip that simply
208+
provides timing interrupts, periodic ticks at some known time interval. In
209+
either case, operating system kernels provide a clock source that hides
210+
these details. But the accuracy of that clock source and how quickly it can
211+
return results varies based on the underlying hardware.
215212
</para>
216213

217214
<para>
218-
Inaccurate time keeping can result in system instability. Test
219-
any change to the clock source very carefully. Operating system
220-
defaults are sometimes made to favor reliability over best
221-
accuracy. And if you are using a virtual machine, look into the
222-
recommended time sources compatible with it. Virtual hardware
223-
faces additional difficulties when emulating timers, and there
224-
are often per operating system settings suggested by vendors.
215+
Inaccurate time keeping can result in system instability. Test any change
216+
to the clock source very carefully. Operating system defaults are sometimes
217+
made to favor reliability over best accuracy. And if you are using a virtual
218+
machine, look into the recommended time sources compatible with it. Virtual
219+
hardware faces additional difficulties when emulating timers, and there are
220+
often per operating system settings suggested by vendors.
225221
</para>
226222

227223
<para>
228-
The Time Stamp Counter (TSC) clock source is the most accurate one
229-
available on current generation CPUs. It's the preferred way to track
230-
the system time when it's supported by the operating system and the
231-
TSC clock is reliable. There are several ways that TSC can fail
232-
to provide an accurate timing source, making it unreliable. Older
233-
systems can have a TSC clock that varies based on the CPU
234-
temperature, making it unusable for timing. Trying to use TSC on some
235-
older multi-core CPUs can give a reported time that's inconsistent
236-
among multiple cores. This can result in the time going backwards, a
237-
problem this program checks for. And even the newest systems can
238-
fail to provide accurate TSC timing with very aggressive power saving
239-
configurations.
224+
The Time Stamp Counter (TSC) clock source is the most accurate one available
225+
on current generation CPUs. It's the preferred way to track the system time
226+
when it's supported by the operating system and the TSC clock is
227+
reliable. There are several ways that TSC can fail to provide an accurate
228+
timing source, making it unreliable. Older systems can have a TSC clock that
229+
varies based on the CPU temperature, making it unusable for timing. Trying
230+
to use TSC on some older multi-core CPUs can give a reported time that's
231+
inconsistent among multiple cores. This can result in the time going
232+
backwards, a problem this program checks for. And even the newest systems
233+
can fail to provide accurate TSC timing with very aggressive power saving
234+
configurations.
240235
</para>
241236

242237
<para>
243-
Newer operating systems may check for the known TSC problems and
244-
switch to aslower, more stable clock source when they are seen.
245-
If your systemsupports TSC time but doesn't default to that, it
246-
may be disabled for a goodreason. And some operating systems may
247-
not detect all the possible problems correctly, or will allow using
248-
TSC even in situations where it's known to beinaccurate.
238+
Newer operating systems may check for the known TSC problems and switch to a
239+
slower, more stable clock source when they are seen. If your system
240+
supports TSC time but doesn't default to that, it may be disabled for a good
241+
reason. And some operating systems may not detect all the possible problems
242+
correctly, or will allow using TSC even in situations where it's known to be
243+
inaccurate.
249244
</para>
250245

251246
<para>
252-
The High Precision Event Timer (HPET) is the preferred timer on
253-
systemswhere it's available and TSC is not accurate. The timer
254-
chip itself isprogrammable to allow up to 100 nanosecond resolution,
255-
but you may not seethat much accuracy in your system clock.
247+
The High Precision Event Timer (HPET) is the preferred timer on systems
248+
where it's available and TSC is not accurate. The timer chip itself is
249+
programmable to allow up to 100 nanosecond resolution, but you may not see
250+
that much accuracy in your system clock.
256251
</para>
257252

258253
<para>
259-
Advanced Configuration and Power Interface (ACPI) provides a
260-
Power Management (PM) Timer, which Linux refers to as the acpi_pm.
261-
The clock derived from acpi_pm will at best provide 300 nanosecond
262-
resolution.
254+
Advanced Configuration and Power Interface (ACPI) provides a Power
255+
Management (PM) Timer, which Linux refers to as the acpi_pm. The clock
256+
derived from acpi_pm will at best provide 300 nanosecond resolution.
263257
</para>
264258

265259
<para>
266-
Timers used on older PC hardware including the 8254 Programmable
267-
IntervalTimer (PIT), the real-time clock (RTC), the Advanced
268-
Programmable InterruptController (APIC) timer, and the Cyclone
269-
timer. These timers aim formillisecond resolution.
260+
Timers used on older PC hardware including the 8254 Programmable Interval
261+
Timer (PIT), the real-time clock (RTC), the Advanced Programmable Interrupt
262+
Controller (APIC) timer, and the Cyclone timer. These timers aim for
263+
millisecond resolution.
270264
</para>
271265
</refsect2>
272266
</refsect1>

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp