-
Notifications
You must be signed in to change notification settings - Fork 7
/
ch11.xml
4033 lines (3519 loc) · 119 KB
/
ch11.xml
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
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
<!-- fix up the "- -" entries due to commenting out stuff -->
<chapter id="LKN-config">
<title>
Kernel Configuration Option Reference
<footnote>
<para>
This chapter lists the most important configuration options offered
when you run <command>make config</command> or one of its graphical
interfaces.
The majority of the chapter is based on the in-kernel documentation
for the different kernel configuration options, which were written by
the kernel developers and released under the GPL.
</para>
</footnote>
</title>
<refentry id="CONFIG_EXPERIMENTAL">
<refnamediv>
<refname>EXPERIMENTAL</refname>
<refpurpose>Prompt for development and/or incomplete code/drivers</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<para>
Some of the many things that Linux supports (such as network
drivers, file systems, network protocols, etc.) can be in a state
of development where the functionality, stability, or the level of
testing is not yet high enough for general use. This is usually
known as the "alpha-test" phase among developers. If a feature is
currently in alpha-test, the developers usually discourage
uninformed widespread use of this feature by the general public to
avoid "Why doesn't this work?" mail messages. However, active
testing and use of these systems is welcomed. Just be aware that it
may not meet the normal level of reliability or may fail to work
in some special cases. Detailed bug reports from people familiar.
with the kernel internals are usually welcomed by the developers.
(But before submitting bug reports, please read the documents
<filename>README</filename>,
<filename>MAINTAINERS</filename>,
<filename>REPORTING-BUGS</filename>,
<filename>Documentation/BUG-HUNTING</filename>, and
<filename>Documentation/oops-tracing.txt</filename> in the kernel source).
</para>
<para>
This option also makes obsoleted drivers available. These are
drivers that have been replaced by something else, and/or are
scheduled to be removed in a future kernel release.
</para>
<para>
Unless you intend to help test and develop a feature or driver that
falls into this category, or you have a situation that requires
using these features, you should probably say no here, which will
cause the configurator to present you with fewer choices. If
you say yes here, you will be offered the choice of using features or
drivers that are currently considered to be in the alpha-test phase.
</para>
<para>
On it's own, this option does not do anything except allow you
to select other options.
</para>
</refsect1>
</refentry>
<refentry id="CONFIG_LOCALVERSION">
<refnamediv>
<refname>LOCALVERSION</refname>
<refpurpose>Local version -- append to kernel release</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<para>
This allows you to append an extra string to the end of your kernel
version. This will show up when you enter a
<command>uname</command> command, for example. The
string you set here will be appended after the contents of any files
with a filename beginning with <filename>localversion</filename> in your object and source tree,
<!--
AO: Why is order important? I thought you said "any files," the
order doesn't seem relevant.
gkh: object directory is used first, followed by the source directory.
Remember, they can be different directories now in the 2.6 build
system :)
-->
in that order. The string can be a maximum of 64 characters.
</para>
</refsect1>
</refentry>
<refentry id="CONFIG_AUDIT">
<refnamediv>
<refname>AUDIT</refname>
<refpurpose>Auditing support</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<para>
Enable an auditing infrastructure that can be used with another
kernel subsystem, such as SELinux (which requires this for
logging of avc messages output).
</para>
</refsect1>
</refentry>
<refentry id="CONFIG_IKCONFIG">
<refnamediv>
<refname>IKCONFIG</refname>
<refpurpose>Kernel <filename>.config</filename> support</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<para>
This option enables the complete Linux kernel <filename>.config</filename> file
contents to be saved in the kernel. It documents
which kernel options are used in a running kernel or an
on-disk kernel. This information can be extracted from the kernel
image file with the script
<filename>scripts/extract-ikconfig</filename> and used as input to
rebuild the current kernel or to build another kernel. It can also be
extracted from a running kernel by reading the file
<filename>/proc/config.gz</filename>.
</para>
</refsect1>
</refentry>
<refentry id="CONFIG_EMBEDDED">
<refnamediv>
<refname>EMBEDDED</refname>
<refpurpose>Configure standard kernel features (for small systems)</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<para>
This option allows certain base kernel options and settings
to be disabled or tweaked. This is for specialized environments that
can tolerate a "non-standard" kernel. This is recommend only
for experts, as it is very easy to change the options to create
a kernel that will not even boot properly.
</para>
<para>
On it's own, this option does not do anything except allow you
to select other options.
</para>
</refsect1>
</refentry>
<refentry id="CONFIG_MODULES">
<refnamediv>
<refname>MODULES</refname>
<refpurpose>Enable loadable module support</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<para>
Kernel modules are small pieces of compiled code that can
be inserted in the running kernel, rather than being
<!--
AO: Because the material here is basic and is repeated elsewhere, I
took out a sentence.
gkh: that's fine.
-->
permanently built into the kernel. If you select this option,
many parts of the kernel can be built as modules (by
answering <literal>M</literal> instead of <literal>Y</literal> where
<!--
AO: It's most useful for drivers!
gkh: not really only for drivers. I tend to build in the drivers for
my systems into the kernel, and only use modules for other things
(networking odd options for one), and use a module for stuff I am
currently developing. So most users will just use them for things
they use infrequently.
-->
indicated): this is most useful for infrequently used options that are
not required for booting. For more information, see <xref
linkend="LKN-chapter-building" /> and the manpages for
<literal>modprobe</literal>,
<literal>lsmod</literal>,
<literal>modinfo</literal>,
<literal>insmod</literal>, and
<literal>rmmod</literal>.
</para>
<para>
If you say yes here, you will need to run
<literal>make modules_install</literal> to put the modules under
<filename>/lib/modules</filename> where the module tools can find
them.
</para>
</refsect1>
</refentry>
<refentry id="CONFIG_IOSCHED_NOOP">
<refnamediv>
<refname>IOSCHED_NOOP</refname>
<refpurpose>No-op I/O scheduler</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<para>
The no-op I/O scheduler is a minimal scheduler that does basic merging
and sorting. Its main uses include non-disk based block devices such as
memory devices and specialised software or hardware environments
that do their own scheduling and require only minimal assistance from
the kernel.
</para>
</refsect1>
</refentry>
<refentry id="CONFIG_IOSCHED_AS">
<refnamediv>
<refname>IOSCHED_AS</refname>
<refpurpose>Anticipatory I/O scheduler</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<para>
The anticipatory I/O scheduler is the default disk scheduler. It is
generally a good choice for most environments, but is quite large and
complex compared to the deadline I/O scheduler. It can also be
slower in some cases, especially under some database loads.
</para>
</refsect1>
</refentry>
<refentry id="CONFIG_IOSCHED_DEADLINE">
<refnamediv>
<refname>IOSCHED_DEADLINE</refname>
<refpurpose>Deadline I/O scheduler</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<para>
The deadline I/O scheduler is simple and compact. It is often as
good as the anticipatory I/O scheduler, and under some database
workloads even better. In the case of a single process performing I/O to
a disk at any one time, its behaviour is almost identical to the
anticipatory I/O scheduler and so is a good choice.
</para>
</refsect1>
</refentry>
<refentry id="CONFIG_IOSCHED_CFQ">
<refnamediv>
<refname>IOSCHED_CFQ</refname>
<refpurpose>CFQ I/O scheduler</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<para>
The CFQ I/O scheduler tries to distribute bandwidth equally
among all processes in the system. It should provide a fair
working environment, suitable for desktop systems.
</para>
</refsect1>
</refentry>
<refentry id="CONFIG_SMP">
<refnamediv>
<refname>SMP</refname>
<refpurpose>Symmetric multi-processing support</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<para>
This enables support for systems with more than one CPU. If you have
a system with only one CPU, like most personal computers, say no. If
you have a system with more than one CPU, say yes.
</para>
<para>
If you say no here, the kernel will run on single and multiprocessor
machines, but will use only one CPU of a multiprocessor machine. If
you say yes here, the kernel will run on many, but not all,
singleprocessor machines. On a singleprocessor machine, the kernel
will run faster if you say no here.
</para>
<para>
Note that if you say yes here and choose architecture <literal>586</literal> or
<literal>Pentium</literal> under <literal>Processor family</literal>, the kernel will not work on 486
architectures. Similarly, multiprocessor kernels for the <literal>PPro</literal>
architecture may not work on all Pentium based boards.
</para>
<para>
See also
<filename>Documentation/smp.txt</filename>,
<filename>Documentation/i386/IO-APIC.txt</filename>,
<filename>Documentation/nmi_watchdog.txt</filename>, and the
<filename>SMP-HOWTO</filename> available at
<systemitem role="url">http://www.tldp.org/docs.html#howto</systemitem>.
</para>
</refsect1>
</refentry>
<refentry id="CONFIG_M386">
<refnamediv>
<refname>M386</refname>
<refpurpose>386</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<para>
This is the processor type of your CPU. This information is used for
optimization. In order to compile a kernel that can run on
all x86 CPU types (albeit not optimally fast), you can specify
<literal>386</literal> here.
</para>
<para>
The kernel will not necessarily run on earlier architectures than
the one you have chosen; e.g., a Pentium optimized kernel will run on
a PPro, but not necessarily on a i486.
</para>
<para>
Here are the settings recommended for greatest speed:
<variablelist>
<varlistentry>
<term><literal>386</literal></term>
<listitem>
<para>
Choose this if you have a AMD/Cyrix/Intel 386DX/DXL/SL/SLC/SX, Cyrix/TI 486DLC/DLC2, UMC
486SX-S and NexGen Nx586 procesor. Only <literal>386</literal> kernels will run
on a 386 class machine.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><literal>486</literal></term>
<listitem>
<para>
Choose this if you have a AMD/Cyrix/IBM/Intel 486DX/DX2/DX4 or SL/SLC/SLC2/SLC3/SX/SX2
and UMC U5D or U5S processor.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><literal>586</literal></term>
<listitem>
<para>
Choose this if you have a generic Pentium processor lacking the TSC
(time stamp counter) register.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><literal>Pentium-Classic</literal></term>
<listitem>
<para>
Choose this if you have an Intel Pentium processor.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><literal>Pentium-MMX</literal></term>
<listitem>
<para>
Choose this if you have an Intel Pentium MMX processor.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><literal>Pentium-Pro</literal></term>
<listitem>
<para>
Choose this if you have an Intel Pentium Pro processor.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><literal>Pentium-II</literal></term>
<listitem>
<para>
Choose this if you have an Intel Pentium II or pre-Coppermine Celeron processor.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><literal>Pentium-III</literal></term>
<listitem>
<para>
Choose this if you have an the Intel Pentium III or Coppermine Celeron processor.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><literal>Pentium-4</literal></term>
<listitem>
<para>
Choose this if you have an Intel Pentium 4 or P4-based Celeron processor.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><literal>K6</literal></term>
<listitem>
<para>
Choose this if you have an AMD K6, K6-II or K6-III (aka K6-3D) processor.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><literal>Athlon</literal></term>
<listitem>
<para>
Choose this if you have a AMD K7 family (Athlon/Duron/Thunderbird) processor.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><literal>Crusoe</literal></term>
<listitem>
<para>
Choose this if you have a Transmeta Crusoe series processor.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><literal>Efficeon</literal></term>
<listitem>
<para>
Choose this if you have a Transmeta Efficeon series processor.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><literal>Winchip-C6</literal></term>
<listitem>
<para>
Choose this if you have an original IDT Winchip processor.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><literal>Winchip-2</literal></term>
<listitem>
<para>
Choose this if you have an IDT Winchip 2 processor.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><literal>Winchip-2</literal></term>
<listitem>
<para>
Choose this if you have an IDT Winchip processor with 3dNow! capabilities.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><literal>GeodeGX1</literal></term>
<listitem>
<para>
Choose this if you have a Geode GX1 (Cyrix MediaGX) procssor.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><literal>Geode GX/LX</literal></term>
<listitem>
<para>
Choose this if you have an AMD Geode GX or LX processor.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><literal>CyrixIII/VIA C3</literal></term>
<listitem>
<para>
Choose this if you have a VIA Cyrix III or VIA C3 processor.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><literal>VIA C3-2</literal></term>
<listitem>
<para>
Choose this if you have a VIA C3-2 "Nehemiah" (model 9 and above) processor.
</para>
</listitem>
</varlistentry>
</variablelist>
</para>
<para>
If you don't know what to do, choose <literal>386</literal>.
</para>
</refsect1>
</refentry>
<refentry id="CONFIG_X86_GENERIC">
<refnamediv>
<refname>X86_GENERIC</refname>
<refpurpose>Generic x86 support</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<para>
Instead of just including optimizations for the selected
x86 variant (e.g. PII, Crusoe or Athlon), include some more
generic optimizations as well. This will make the kernel
perform better on x86 CPUs other than the one selected.
</para>
<para>
This is really intended for distributors who need more
generic optimizations.
</para>
</refsect1>
</refentry>
<refentry id="CONFIG_NR_CPUS">
<refnamediv>
<refname>NR_CPUS</refname>
<refpurpose>Maximum number of CPUs (2-255)</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<para>
This allows you to specify the maximum number of CPUs that this
kernel will support. The maximum supported value is 255 and the
minimum value that makes sense is 2.
</para>
<para>
This option is purely to save memory; each supported CPU adds
approximately eight kilobytes to the kernel image.
</para>
</refsect1>
</refentry>
<refentry id="CONFIG_SCHED_SMT">
<refnamediv>
<refname>SCHED_SMT</refname>
<refpurpose>SMT (Hyper-Threading) scheduler support</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<para>
SMT scheduler support improves the CPU scheduler's decision-making
on Intel Pentium 4 chips with Hyper-Threading, at a
cost of slightly increased overhead in some places.
</para>
</refsect1>
</refentry>
<refentry id="CONFIG_PREEMPT_NONE">
<refnamediv>
<refname>PREEMPT_NONE</refname>
<refpurpose>No forced preemption (server)</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<para>
This is the traditional Linux preemption model, geared toward
maximizing throughput. It still provides good latency most of the
time, occasional longer delays are possible.
</para>
<para>
Select this option if you are building a kernel for a server or
scientific/computation system, or if you want to maximize the
raw processing power of the kernel, irrespective of scheduling
latencies.
</para>
</refsect1>
</refentry>
<refentry id="CONFIG_PREEMPT_VOLUNTARY">
<refnamediv>
<refname>PREEMPT_VOLUNTARY</refname>
<refpurpose>Voluntary kernel preemption (desktop)</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<para>
This option reduces the latency of the kernel by adding more
"explicit preemption points" to the kernel code. These new
preemption points have been selected to reduce the maximum
latency of rescheduling, which provides faster response to applications
at the cost of slighly lower throughput.
</para>
<para>
This option speeds up reaction to interactive events by allowing a
low-priority process to voluntarily preempt itself even if it
is in kernel mode executing a system call. This allows
applications to appear to run more smoothly even when the system is
under load.
</para>
<para>
Select this if you are building a kernel for a desktop system.
</para>
</refsect1>
</refentry>
<refentry id="CONFIG_PREEMPT">
<refnamediv>
<refname>PREEMPT</refname>
<refpurpose>Preemptible kernel (low-latency desktop)</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<para>
This option reduces the latency of the kernel by making
all kernel code (except code executing in a critical section)
preemptible. This allows reaction to interactive events by
permitting a low priority process to be preempted involuntarily
even if it is in kernel mode executing a system call and would
otherwise not be about to reach a natural preemption point.
This allows applications to appear to run more smoothly even when the
system is under load, at the cost of slighly lower throughput
and a slight runtime overhead to kernel code.
</para>
<para>
Select this if you are building a kernel for a desktop or
embedded system with latency requirements in the milliseconds
range.
</para>
</refsect1>
</refentry>
<refentry id="CONFIG_PREEMPT_BKL">
<refnamediv>
<refname>PREEMPT_BKL</refname>
<refpurpose>Preempt the Big Kernel Lock</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<para>
This option reduces the latency of the kernel by making the
Big Kernel Lock preemptible.
</para>
<para>
Say yes here if you are building a kernel for a desktop system.
</para>
</refsect1>
</refentry>
<refentry id="CONFIG_NOHIGHMEM">
<refnamediv>
<refname>NOHIGHMEM</refname>
<refpurpose>off</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<para>
Linux can use up to 64 Gigabytes of physical memory on x86 systems.
However, the address space of 32-bit x86 processors is only 4
Gigabytes in size. That means that, if you have a large amount of
physical memory, not all of it can be permanently mapped by the
kernel. The physical memory that's not permanently mapped is called
<firstterm>high memory</firstterm>.
</para>
<para>
If you are compiling a kernel that will never run on a machine with
more than 1 Gigabyte total physical RAM, answer <literal>off</literal>
here (the default choice, and suitable for most users). This will result in
a <literal>3GB/1GB</literal> split: 3GB are mapped so that each process
sees a 3GB virtual memory space and the remaining part of the 4GB
virtual memory space is used by the kernel to permanently map as much
physical memory as possible.
</para>
<para>
If the machine has between 1 and 4 Gigabytes physical RAM, then
answer <literal>4GB</literal> here.
</para>
<para>
If more than 4 Gigabytes is used, answer <literal>64GB</literal>
here. This selection turns Intel PAE (Physical Address Extension) mode
on. PAE implements 3-level paging on IA32 processors. PAE is fully
supported by Linux, and PAE mode is implemented on all recent Intel
processors (Pentium Pro and better).
</para>
<note>
<para>
If you say
<literal>64GB</literal> here, then the kernel will not boot on CPUs
that don't support PAE!
</para>
</note>
<para>
The actual amount of total physical memory will either be
autodetected or can be forced by using a kernel command line option
such as <literal>mem=256M</literal>. (See <xref
linkend="LKN-command-line" /> for details about how to pass
options to the kernel at boot time, and what options available.)
<!--
AO: Actually, I think the parenthesized phrase should be replaced
with a reference to a section in this book. Don't you have something
on this subject?
gkh: I have a whole chapter, cross reference is now added.
-->
</para>
<para>
If unsure, say <literal>off</literal>.
</para>
</refsect1>
</refentry>
<refentry id="CONFIG_HIGHMEM4G">
<refnamediv>
<refname>HIGHMEM4G</refname>
<refpurpose>4GB</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<para>
Select this if you have a 32-bit processor and between 1 and 4
gigabytes of physical RAM.
</para>
</refsect1>
</refentry>
<refentry id="CONFIG_HIGHMEM64G">
<refnamediv>
<refname>HIGHMEM64G</refname>
<refpurpose>64GB</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<para>
Select this if you have a 32-bit processor and more than 4
gigabytes of physical RAM.
</para>
</refsect1>
</refentry>
<refentry id="CONFIG_FLATMEM_MANUAL">
<refnamediv>
<refname>FLATMEM_MANUAL</refname>
<refpurpose>Flat memory</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<para>
This option allows you to change some of the ways that
Linux manages its memory internally. Most users will see
only have one option here: <literal>FLATMEM</literal>. This is normal
and a correct option.
</para>
<para>
Some users of more advanced features, such as NUMA and
memory hotplug, may have different options here.
<literal>DISCONTIGMEM</literal> is a more mature, better tested
system, but is incompatible with memory hotplug and may suffer
decreased performance over <literal>SPARSEMEM</literal>. If unsure
between <literal>Sparse Memory</literal> and <literal>Discontiguous
Memory</literal>, choose <literal>Discontiguous Memory</literal>.
</para>
<para>
If unsure, choose this option, <literal>Flat Memory</literal>.
</para>
</refsect1>
</refentry>
<refentry id="CONFIG_DISCONTIGMEM_MANUAL">
<refnamediv>
<refname>DISCONTIGMEM_MANUAL</refname>
<refpurpose>Discontiguous memory</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<para>
This option provides better support than flat memory for discontiguous
memory systems. These systems have holes
in their physical address spaces, and this option handles the holes
more efficiently. However, the vast
majority of hardware has quite flat address spaces, and
can experience degraded performance from the extra overhead
this option imposes.
</para>
<para>
Many NUMA configurations will have this as the only option.
</para>
<para>
If unsure, choose <literal>Flat Memory</literal> over this option.
</para>
</refsect1>
</refentry>
<refentry id="CONFIG_SPARSEMEM_MANUAL">
<refnamediv>
<refname>SPARSEMEM_MANUAL</refname>
<refpurpose>Sparse memory</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<para>
This will be the only option for some systems, including
memory hotplug systems.
</para>
<para>
For many other systems, this will be an alternative to
<literal>Discontiguous Memory</literal>. This option provides some potential
performance benefits, along with decreased code complexity,
but it is newer and more experimental.
</para>
<para>
If you are unsure, choose <literal>Discontiguous Memory</literal> or
<literal>Flat Memory</literal>.
</para>
</refsect1>
</refentry>
<refentry id="CONFIG_SECCOMP">
<refnamediv>
<refname>SECCOMP</refname>
<refpurpose>Enable seccomp to safely compute untrusted bytecode</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<para>
This kernel feature is useful for number-crunching applications
that may need to compute untrusted bytecode during their
execution. By using pipes or other transports made available to
the process as file descriptors supporting the read/write
syscalls, it's possible to isolate those applications in
their own address space using seccomp. Once seccomp is
enabled via <filename>/proc/pid/seccomp</filename>, it cannot be disabled
and the task is allowed to execute only a few safe syscalls
defined by each seccomp mode.
</para>
<para>
If you are unsure, say yes. Only embedded systems should be
built by answering no.
</para>
</refsect1>
</refentry>
<refentry id="CONFIG_KEXEC">
<refnamediv>
<refname>KEXEC</refname>
<refpurpose>kexec system call (experimental)</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<para>
kexec is a system call that implements the ability to shut down your
current kernel and start up another. It is like a reboot,
but is indepedent of the system firmware. And like a reboot,
you can start any kernel with it, not just Linux.
</para>
<para>
The name comes from the similiarity to the exec system call.
</para>
<para>
Do not be surprised if this code does not
initially work for you. It may help to enable device hotplugging
support. As of this writing, the exact hardware interface is
strongly in flux, so no good recommendation can be made.
</para>
</refsect1>
</refentry>
<refentry id="CONFIG_HOTPLUG_CPU">
<refnamediv>
<refname>HOTPLUG_CPU</refname>
<refpurpose>Support for hot-pluggable CPUs (experimental)</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<para>
Say yes here to experiment with turning CPUs off and on, and to
enable suspend on SMP systems. CPUs can be controlled through the
<filename>/sys/devices/system/cpu</filename> interface.
</para>
</refsect1>
</refentry>
<refentry id="CONFIG_PM">
<refnamediv>
<refname>PM</refname>
<refpurpose>Power Management support</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<para>
Power Management allows parts of your computer to shut
off or be put into a power-conserving sleep mode if they are not
being used. There are two competing standards for doing this: APM
and ACPI. If you want to use either one, say yes here and then also
enable one of those two standards.
</para>
<para>
Power Management is most important for battery-powered laptop
computers; if you have a laptop, check out the Linux Laptop home
page at
<systemitem role="url">http://www.linux-on-laptops.com</systemitem> or
Tuxmobil-Linux on Mobile Computers at
<systemitem role="url">http://www.tuxmobil.org</systemitem>,
and the Battery Powered Linux mini-HOWTO, available from
<systemitem role="url">http://www.tldp.org/docs.html#howto</systemitem>.
</para>
<para>
Note that, even if you say no here, Linux on the x86 architecture
will issue the <literal>hlt</literal> instruction if nothing is being
done, thereby sending the processor to sleep and saving power.
</para>
</refsect1>
</refentry>
<refentry id="CONFIG_SOFTWARE_SUSPEND">
<refnamediv>
<refname>SOFTWARE_SUSPEND</refname>
<refpurpose>Software suspend</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<para>
Enable machine suspension.
</para>
<!--
AO: There is really no explanation of the option here. Instead,