forked from PeterDinda/nautilus
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Kconfig
1571 lines (1329 loc) · 44.6 KB
/
Kconfig
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
mainmenu "Nautilus AeroKernel Configuration"
menu "Platform"
choice
prompt "Target Selection"
default X86_64_HOST
config X86_64_HOST
bool "x86_64 Host (including Intel Xeon Phi KNL)"
config XEON_PHI
bool "Intel Xeon Phi Accelerator (KNC)"
config HVM_HRT
bool "Hybrid Runtime AeroKernel (HRT for HVM/Multiverse)"
config GEM5
bool "GEM5-compatible x86_64 kernel"
config GEM5_FORCE_APIC_TIMER_CALIBRATION
depends on GEM5
bool "Force APIC timer calibration"
help
Skip detection of APIC bus frequency, and CPU cycles
per tick and simply set them to desired values. Note
that Gem5 gets timers right, but given how slow it is,
it can feel ridiculous in real-time, especially
when used interactively.
DO NOT SET THIS IF YOU WANT ACCURATE SIMULATED TIME
config GEM5_APIC_BUS_FREQ_HZ
depends on GEM5_FORCE_APIC_TIMER_CALIBRATION
default 10000
int "APIC bus frequency (HZ)"
help
Desired APIC bus frequency
The smaller this number is, the more frequent timer interrupts will be.
If it is too small, you'll be in an interrupt storm.
config GEM5_APIC_CYCLES_PER_US
depends on GEM5_FORCE_APIC_TIMER_CALIBRATION
default 10
int "CPU cycles per microsecond"
help
The smaller this number is, the more frequent timer interrupts will be.
If it is too small, you'll be in an interrupt storm.
endchoice
config MAX_CPUS
int "Maximum Number of CPUs"
range 1 2048
default "256"
help
Specifies the maximum number of hardware CPUs supported by Nautilus
For uniprocessor environments, set this to 1
config MAX_IOAPICS
int "Maximum Number of IOAPICS"
range 1 255
default "16"
help
Specifies the maximum number of IOAPICS supported by Nautilus
config HRT_HIHALF_OFFSET
hex "HRT High-half offset"
default 0xffff800000000000
depends on HVM_HRT
help
Sets the fixed virtual-to-physical address mapping for the HRT
config HRT_GPA_MAP_REQ
hex "HRT Max GPA to map"
default 0x200000000
depends on HVM_HRT
help
Sets the default amount of physical memory that the VMM should
attempt to map for the HRT
config HRT_COMM_PAGE
hex "GPA of HRT/HVM communication page"
default 0x1fffff000
depends on HVM_HRT
help
Sets the default page address at which the VMM and HRT will
communicate information
config HVM_INT_VEC
int "HVM/HRT Interrupt vector"
default 255
range 33 255
depends on HVM_HRT
help
Sets the interrupt vector to use for communication between
the VMM and the HRT
choice
prompt "HRT Page Size Request"
depends on HVM_HRT
default HRT_PS_2M
help
Requests a given page size to map the initial page tables
from the VMM
config HRT_PS_512G
bool "512GB Pages"
config HRT_PS_1G
bool "1GB Pages"
config HRT_PS_2M
bool "2MB Pages"
config HRT_PS_4K
bool "4KB Pages"
endchoice
config PALACIOS
bool "Support for creating VMs using Palacios"
depends on X86_64_HOST
default 0
config PALACIOS_DIR
depends on PALACIOS
string "Path to Palacios VMM tree"
default "../palacios"
help
Path to the Palacios VMM build. Palacios must be built for
Nautilus, and both palacios/libv3vee.a and libnautilus.a must exist
config PALACIOS_EMBED_VM_IMG
bool "Embed VM image"
depends on PALACIOS
default 0
config PALACIOS_EMBEDDED_VM_IMG
depends on PALACIOS
string "Path to Palacios VM image to embed"
default "management_vm.img"
help
Path to the image that will be embedded
config PALACIOS_MGMT_VM
bool "Launch embedded VM at boot as Management VM"
depends on PALACIOS
default 0
endmenu
menu "Build"
config USE_NAUT_BUILTINS
bool "Use built-in utility functions"
default y
help
Compiles NK with its own implementations of functions
like strcpy etc., as opposed to using the compiler-builtins,
which might not cover all of the ones needed.
config CXX_SUPPORT
bool "Enable C++ support"
default y
help
Compiles the Nautilus kernel with C++ support. Necessary for,
e.g. C++ HRT integration
config RUST_SUPPORT
bool "Enable Rust support"
default n
help
Adds support for Rust code, and builds the Rust example and Shell command
choice
prompt "Compiler and related toolchain to use"
default USE_GCC
help
Chose whether to use GCC or CLang to build Nautilus
Currently, GCC is by far the most tested option
No guarantees that Clang will be able to build everything
Clang/WLLVM will generate a bitcode file for the entire kernel
config USE_GCC
bool "GCC"
config USE_CLANG
bool "Clang/LLVM"
config USE_WLLVM
bool "Clang/WLLVM (generates top level bitcode file)"
endchoice
config USE_WLLVM_WHOLE_OPT
bool "Whole kernel optimization"
default false
depends on USE_WLLVM
help
Re-optimizes entire kernel as a single unit
USAGE:
make
make whole_opt
make isoimage
config COMPILER_PREFIX
string "Prefix for compiler toolchain commands"
default ""
help
Relevant toolchain commands are prepended with this string
to allow for cross-compilation, etc
config COMPILER_SUFFIX
string "Suffix for compiler toolchain commands"
default ""
help
Relevant toolchain commands are appended with this string
to allow for different versions, etc
config TOOLCHAIN_ROOT
string "Toolchain Root"
help
Directory where the intended compiler toolchain, binutils, libraries, grub, etc are installed.
You probably want this to be blank and use PATH mechanisms to get the tools you need
endmenu
menu "Configuration"
config MAX_THREADS
int "Maximum number of threads in system"
default 1024
help
Maximum number of threads in system (or any core) at once
config RUN_TESTS_AT_BOOT
bool "Run all tests from the testing framework at boot"
default n
help
This causes the testing framework to be run immediately after
boot and before the shell or runtimes are launched. It will then
exit immediately using QEMU. This allows us to have automated
testing using continuous integration tools.
config THREAD_EXIT_KEYCODE
int "Thread Exit Keycode"
range 1 255
default "196"
help
uses a special thread exit keycode
config USE_TICKETLOCKS
bool "Use Ticket/Bakery locks instead of default spin"
default n
help
Uses ticketlocks (similar to Linux impl.) instead of
default spinlocks
config PARTITION_SUPPORT
bool "Enable support for device partitioning"
default n
help
Enable disk/device partitioning
config USE_IST
bool "Enable IST"
default n
help
Enable IST (separate interrupt stacks)
config VIRTUAL_CONSOLE_DISPLAY_NAME
bool "Display name of current virtual console"
default y
help
Puts the name of the current virtual console in the upper left
config VIRTUAL_CONSOLE_CHARDEV_CONSOLE
bool "Place a virtual console interface on a character device"
default n
help
Starts a virtual console interface on a given character device
This allows interaction with VCs much like the VGA console
does
config VIRTUAL_CONSOLE_CHARDEV_CONSOLE_NAME
string "Character device name to use"
default "serial0"
depends on VIRTUAL_CONSOLE_CHARDEV_CONSOLE
help
The character device port name to use for this console
config VIRTUAL_CONSOLE_SERIAL_MIRROR
bool "Mirror virtual console log output to serial"
default n
help
Writes any log output
traffic to serial port in addition to its
target virtual console
config VIRTUAL_CONSOLE_SERIAL_MIRROR_ALL
bool "Mirror all virtual console output to serial"
default n
depends on VIRTUAL_CONSOLE_SERIAL_MIRROR
help
Writes all printfs, logs, puts, putchars, etc
traffic to serial port in addition to their
target virtual consoles; direct displays
(screen clears, display char, etc) are not
currently mirrored.
menu "Scheduler Options"
config UTILIZATION_LIMIT
int "Utilization limit (%)"
range 0 100
default 99
help
The maximum percent utilization the scheduler will allow
on a core. This gives headroom for the scheduler itself.
config SPORADIC_RESERVATION
int "Sporadic reservation (%)"
range 0 100
default 10
help
The percentage utilization the scheduler will dedicate
to sporadic threads and tasks on each core. Sporadic
tasks that exceed this are not admitted, even if
there is time available.
config APERIODIC_RESERVATION
int "Aperiodic reservation (%)"
range 0 100
default 10
help
The percentage utilization the scheduler will dedicate
to aperiodic threads on each core. Aperiodic threads
can exceed this - they also soak up any time not being
used by RT threads.
config HZ
int "Timer Interrupt Frequency"
range 10 10000
default "10"
help
Specifies the tick rate for timers and aperiodic
scheduling. The reciprical of this number is
the scheduling quantum for aperiodic (but not RT)
threads. IMPORTANT NOTE: if you are using a watchdog,
you should set this to be > 1/(watchdog period)
config INTERRUPT_REINJECTION_DELAY_NS
int "Interrupt Reinjection Delay (in ns)"
default "10000"
help
If a timer or kick interrupt occurs when the cpu
is not preemptable, it will be reinjected (as a timer
interrupt) after this delay. The result is that
scheduler-driving interrupts is not lost, just delayed.
config AUTO_REAP
bool "Reap threads automatically"
default n
help
Should core zero periodically reap the global
thread list of dead detached threads? Only core 0
does this.
config AUTO_REAP_PERIOD_MS
depends on AUTO_REAP
int "Reaping Period (ms)"
range 10 10000
default "1000"
help
The target period between reaping the global
thread list of dead detached threads.
config WORK_STEALING
bool "Work stealing"
default n
help
If enabled an idle cpu will attempt to steal
runnable threads from other cpus.
config WORK_STEALING_INTERVAL_MS
depends on WORK_STEALING
int "Work stealing interval (ms)"
range 1 10000
default "10"
help
The target period between work-stealing attempts
by the idle thread. This is in terms of
the amount of time the idle thread itself executes
not the real-
config WORK_STEALING_AMOUNT
depends on WORK_STEALING
int "Work stealing amount"
range 1 100
default "4"
help
The number of threads the idle thread will
attempt to steal every time work stealing is
run.
config TASK_IN_SCHED
bool "Handle tasks of known size in scheduler"
default true
help
When enabled, each cpu's scheduler will execute tasks of
known size when no real-time task would be impeded. This
lifts such tasks to a priority just below real-time threads.
Note that the eager EDF properties of the scheduler are maintained -
if an RT thread is runnable, it will still run in preference
to in-scheduler task execution, no matter how much slack is available.
config TASK_THREAD
bool "Handle tasks in a special thread"
default true;
help
When enabled, each cpu has a thread that consumes tasks.
The thread can run at an arbitrary aperiodic priority.
config TASK_THREAD_PRIORITY
depends on TASK_THREAD
int "Aperiodic priority for task threads"
default 100000000
help
Priority for the task threads. The default here is
the quantum in ns. By adjusting this, you can adjust
how much priority unsized tasks effectively have in the system.
config TASK_IN_IDLE
bool "Handle tasks within idle loop"
default false
help
When enabled, each cpu's idle loop will execute tasks prior
to attempting work stealing.
config TASK_IN_IDLE_NOPREEMPT
depends on TASK_IN_IDLE
bool "Execute tasks within idle with preemption disabled"
default false
help
When enabled, the idle loop executes tasks with preemption
disabled, which can result in priority inversion for
real-time threads. However, with preemption enabled, the idle loop
may start a task, then get preempted. The task is then in
limbo until the idle loop is run again, which may be never
given that it has the lowest possible priority in the
system. The purpose of this option is to choose
which of these behaviors you want if you are executing tasks
in idle loops.
config TASK_REUSE
bool "Reuse tasks"
default false
help
When enabled, task structures are reused instead of being created/destroyed
during a task lifetime.
config TASK_REUSE_POOL_SIZE
depends on TASK_REUSE
int "Maximum pool size per CPU"
default 256
help
When the available reusable tasks per CPU exceeds this number,
they start being destroyed
config TASK_REUSE_POOL_SEED
depends on TASK_REUSE
bool "Seed task pools"
default y
help
If set, each CPU's task pool is maximally seeded at boot time
config TASK_TRAMPOLINE
bool "Trampoline tasks"
default false
help
When enabled, each task is run via a trampoline that does register
save/restore, thus the task does not need to follow callee save conventions.
config TASK_DEEP_STATISTICS
bool "Collect deeper statistics for each task"
default false
help
When enabled, additional task overheads are collected to help
work on the task system. These come at the cost of greater measurement overhead
config INTERRUPT_THREAD
bool "Restrict interrupts to special real-time interrupt thread"
default false
help
When enabled, all interrupts, except scheduling-related
interrupts, are ignored except when a special, per-core
interrupt thread is running. The interrupt thread is a
periodic real-time thread. This forces interrupt handlers
to start only at well-constrained points in time.
If interrupt handlers are of bounded, known duration, they
also then finish before well-contrained points in time
(max: end of slice + interrupt duration). The downside
of this mechanism is that interrupts are delayed until
the interrupt thread is run, increasing interrupt latency.
Note that threads can insulate themselves from interrupts
outside of this mechanism, using the interrupt_priority_class
mechanism.
config INTERRUPT_THREAD_PERIOD_US
depends on INTERRUPT_THREAD
int "Period for the interrupt thread (us)"
range 500 10000
default 1000
help
The interrupt thread will run this often
config INTERRUPT_THREAD_SLICE_US
depends on INTERRUPT_THREAD
int "Slice for the interrupt thread (us)"
range 100 5000
default 100
help
The interrupt thread will execute for this long when it runs
config INTERRUPT_THREAD_ALLOW_IDLE
depends on INTERRUPT_THREAD
bool "Also allow interrupts when running idle thread"
default false
help
Enable interrupts while running the idle thread
choice
prompt "Scheduling Model For Aperiodic Threads"
default APERIODIC_ROUND_ROBIN
config APERIODIC_DYNAMIC_QUANTUM
bool "Dynamic, Quantum-based Priority"
help
Aperiodic threads have dynamic priority based on a
fixed priority and their runtime within a scheduling quantum.
Longer runtime means lower priority.
config APERIODIC_DYNAMIC_LIFETIME
bool "Dynamic, Lifetime-based Priority"
help
Aperiodic threads have dynamic priority based on a
fixed priority and their total runtime.
Longer runtime means lower priority.
config APERIODIC_LOTTERY
bool "Lottery scheduling"
help
Aperiodic threads are given a random priority based on
the fixed priorities of all aperiodic threads on the core.
config APERIODIC_ROUND_ROBIN
bool "Round-robin scheduling"
help
Aperiodic threads are scheduled round-robbin
endchoice
endmenu
menu "Fiber Options"
config FIBER_ENABLE
bool "Enable fibers in the kernel"
default true
help
Enables fibers in the kernel. Each cpu has a thread that consumes fibers.
The thread can run at an arbitrary aperiodic priority. Turns off stack
checking for threads because fibers change stacks.
config FIBER_THREAD_STACK_SIZE
depends on FIBER_ENABLE
int "Stack size for fiber threads"
default 2097152
help
Controls the size of the stack for fiber threads. The default here is 2 MB.
config FIBER_THREAD_PRIORITY
depends on FIBER_ENABLE
int "Aperiodic priority for fiber threads"
default 100000000
help
Priority for the fiber threads. The default here is
the quantum in ns. By adjusting this, you can adjust
how much priority fibers effectively have in the system.
config FIBER_FSAVE
depends on FIBER_ENABLE && XSAVE_SUPPORT
bool "Save floating point state for fibers"
default true
help
When enabled, will save the floating point state for fibers during context switches.
choice
prompt "Select Fiber Thread Idle Type"
depends on FIBER_ENABLE
default FIBER_ENABLE_WAIT
config FIBER_ENABLE_SPIN
bool "FIBER_THREAD_SPIN"
depends on FIBER_ENABLE
help
If enabled, the fiber thread will spin (yield continuously)
even when no fibers are in the fiber queue.
config FIBER_ENABLE_SLEEP
bool "FIBER_THREAD_SLEEP"
depends on FIBER_ENABLE
help
If enabled, the fiber thread will sleep when no fibers are
in the fiber queue. The fiber thread will be woken up when
enough time elapses or a fiber is added to the fiber queue.
config FIBER_ENABLE_WAIT
bool "FIBER_THREAD_WAIT"
depends on FIBER_ENABLE
help
If enabled, the fiber thread will wait on a wait queue when no
fibers are in the fiber queue. The fiber thread will be woken up
when enough time elapses or a fiber is added to the fiber queue.
endchoice
config FIBER_THREAD_SLEEP_TIME
int "sleep time for fiber threads"
depends on ENABLE_SLEEP
default 100000000
help
The amount of time the fiber thread will sleep for when
there are no fibers on the fiber queue.
config TEST_FIBERS
bool "Enable fiber tests commands in the shell"
depends on FIBER_ENABLE
default false
help
This option will enable fiber test commands in the shell.
endmenu
config REAL_MODE_INTERFACE
bool "Enable the Long->Real interface"
default n
help
Allows long mode code in Nautilus to execute real-mode
software interrupts (e.g., BIOS, VESA, etc)
config DEBUG_REAL_MODE_INTERFACE
bool "Debug Long->Real interface"
default n
depends on REAL_MODE_INTERFACE
help
Adds debugging output for the long->real interface
config REAL_MODE_INTERFACE_SEGMENT
hex "Segment (64K total) used for Long->Real interface"
default 0x8000
depends on REAL_MODE_INTERFACE
help
Segment used for the real-mode interface
The first 32K is reserved for the trampoline
code and data. The second 32K can be used by
code invoking real mode interrupts
menu "Watchdog Options"
config WATCHDOG
bool "Enable Watchdog Timer"
default n
help
Force an NMI if a dedicated timer expires
The dedicated timer is reset during interupt
handling. The primary purpose is to catch
deadlocks, including with the monitor
config WATCHDOG_DEFAULT_TIME_MS
depends on WATCHDOG
int "Default time in ms before expiration"
default 1000
help
How long we can go without resetting the watchdog timer
config DEBUG_WATCHDOG
bool "Debug Watchdog Timer"
default n
depends on WATCHDOG
help
Adds debugging output for watchdog
NOTE: THIS IS USUALLY A BAD IDEA THAT CAN LEAD TO DEADLOCK
endmenu
config ISOCORE
bool "Enable Isolated Core Execution"
default n
help
Allows us to dedicate a core to the
execution of a function without any
interference from other cores
config DEBUG_ISOCORE
bool "Debug Isolated Core Execution"
default n
depends on ISOCORE
help
Adds debugging output for isolated core execution
The low-level code does not have debugging output
config HARDWARE_TLS
bool "Enable hardware thread-local storage (FSBASE)"
default n
depends on X86_64_HOST
help
Enables use of FSBASE to do faster TLS
When enabled, a thread context switch includes an
FSBASE context switch
config CACHEPART
bool "Enable cache partitioning"
default n
depends on X86_64_HOST
help
Allows cache partitioning
config CACHEPART_THREAD_DEFAULT_PERCENT
int "Percentage of cache to reserve for default use by threads"
range 5 100
default 20
depends on CACHEPART
help
This portion of the cache will be used by threads that make no special requests
config CACHEPART_INTERRUPT
bool "Enable interrupt partition"
default n
depends on CACHEPART
help
Create special partition for interrupts (otherwise they
use the default thread partition)
config CACHEPART_INTERRUPT_PERCENT
int "Percentage of cache to reserve for use by interrupt handlers"
range 5 100
default 10
depends on CACHEPART_INTERRUPT
help
This portion of the cache that will be used by interrupt handlers
config DEBUG_CACHEPART
bool "Debug cache partitioning"
default n
depends on CACHEPART
help
Adds debugging output for cache partitioning
config TEST_CACHEPART
bool "Add cache partitioning tests"
default n
depends on CACHEPART
help
Adds the tests for for cache partitioning
menu "Garbage Collection Options"
config GARBAGE_COLLECTION
bool "Enable Garbage Collection"
default n
help
If enabled, a conservative garbage collector is
used to garbage collect the kernel/HRT. mallocs() pass to the
GC, frees() are ignored, and mallocs can trigger global GC
WARNING: Garbage collection in Nautilus is a highly experimental feature. If you
don't know if you need this, you do not.
choice
prompt "Select Garbage Collector"
depends on GARBAGE_COLLECTION
default ENABLE_PDSGC
config ENABLE_BDWGC
bool "BDWGC"
depends on GARBAGE_COLLECTION
help
If enabled, the BDWGC garbage colector is used.
WARNING: BDWGC integration in Nautilus is a highly experimental feature. If you
don't know if you need this, you do not.
config ENABLE_PDSGC
bool "PDSGC"
depends on GARBAGE_COLLECTION
help
If enabled, the home-grown PDSGC garbage colector is used.
WARNING: PDSGC integration in Nautilus is a highly experimental feature. If you
don't know if you need this, you do not.
endchoice
config ALIGN_BDWGC
bool "Force allocations in the BDWGC garbage collector to be aligned to their own size"
default n
depends on ENABLE_BDWGC
help
If enabled, BDWGC allocations will be aligned to their own size, as in the buddy system allocator
config DEBUG_BDWGC
bool "Debug the BDWGC garbage collector"
default n
depends on ENABLE_BDWGC
help
If enabled, print debugging output from BDWGC
config EXPLICIT_ONLY_PDSGC
bool "Only use PDSGC explictly"
default n
depends on ENABLE_PDSGC
help
If enabled failing mallocs do *not* trigger gc and frees do
deallocation. PDSGC can then be used to explicitly leak check
or explicitly do garbage collection of leaked data
config DEBUG_PDSGC
bool "Debug the PDSGC garbage collector"
default n
depends on ENABLE_PDSGC
help
If enabled, print debugging output from PDSGC
config TEST_BDWGC
bool "Include the BDWGC garbage collection test suite"
default n
depends on ENABLE_BDWGC
help
Adddes test suite for BDWGC, which can be run from the shell
endmenu
menu "FPU Options"
config XSAVE_SUPPORT
bool "Allow saving of FPRs with XSAVE instructions"
default true
help
Adds xsave instruction support to Nautilus. Processor
must have xsave support or this feature will be ignored.
config XSAVE_SSE_SUPPORT
bool "Enable saving of SSE registers with XSAVE"
default true
depends on XSAVE_SUPPORT
help
Will save SSE state with XSAVE when enabled. Required
in order to save AVX and AVX512f state. This will
be ignored if processor does not have SSE registers.
config XSAVE_AVX_SUPPORT
bool "Enable saving of AVX registers with XSAVE"
default true
depends on XSAVE_SUPPORT
help
Will save AVX state with XSAVE when enabled. Required
in order to save AVX512f state. This opt. will
be ignored if processor does not have AVX registers.
config XSAVE_AVX512F_SUPPORT
bool "Enable saving of AVX512f registers with XSAVE"
default true
depends on XSAVE_SUPPORT
help
Will save AVX512f state with XSAVE when enabled. This
opt will be ignored if processor does not
have avx512f registers.
endmenu
endmenu
menu "Compatability"
config BASE_LIBC_COMPAT
bool "Basic libc compatability"
default y
help
Basic libc compatability layer
config DEBUG_BASE_LIBC_COMPAT
bool "Debug basic libc compatability"
depends on BASE_LIBC_COMPAT
default n
help
Enable debugging output from the basic libc compatability layer
config BASE_LIBM_COMPAT
bool "Basic libm compatability"
default y
help
Basic libm compatability layer
config DEBUG_BASE_LIBM_COMPAT
bool "Debug basic libm compatability"
depends on BASE_LIBM_COMPAT
default n
help
Enable debugging output from the basic libm compatability layer
config BASE_LINUX_COMPAT
bool "Basic Linux user-level compatability layer"
depends on BASE_LIBC_COMPAT
default y
help
Basic Linux user-level compatability layer
config DEBUG_BASE_LINUX_COMPAT
bool "Debug basic Linux compatability"
depends on BASE_LINUX_COMPAT
default n
help
Enable debugging output from the basic Linux compatability layer
config BASE_PTHREAD_COMPAT
bool "POSIX threads compatability layer"
default y
depends on BASE_LIBC_COMPAT && BASE_LINUX_COMPAT
help
POSIX threads
config BASE_PTHREAD_COMPAT_TESTS
bool "Add POSIX threads compatability layer tests"
depends on BASE_PTHREAD_COMPAT
default n
help
Enable tests for this layer
config DEBUG_BASE_PTHREAD_COMPAT
bool "Debug basic POSIX threads compatability layer"
depends on BASE_PTHREAD_COMPAT
default n
help
Enable debugging output from the basic POSIX threads compatability layer
endmenu
menu "Optimizations"
config FPU_SAVE
bool "Save FPU state on all context switches"
default y
help
Compiles the kernel to save FPU state on every context switch.
This is not strictly necessary if processors are not virtualized
(by the HRT).
config KICK_SCHEDULE
bool "Kick cores with IPIs on scheduling events"
default n
help
This will reduce the latency and variance of scheduling events
by kicking the remote CPU with an IPI, causing a scheduling event
to occur immediately, rather than waiting for next timer tick or
current thread to yield.
config HALT_WHILE_IDLE
bool "Halt the CPU when idle"
default n
help
This will cause the CPU to go into a halt in an idle thread when
there is nothing else important to run. Can potentially reduce
memory traffic do to yields(), especially on platforms like the
Xeon Phi.
config THREAD_OPTIMIZE
bool "Optimize threading for performance"
default n
help
Disables paranoid condition checking and optimizes thread functions
for maximum performance.
endmenu
menu Debugging
config DEBUG_INFO
bool "Compile with Debug Symbols"
default n
help
Compiles Nautilus with GCC debugging information. This
is useful for remote debugging with GDB and QEMU/BOCHS.
config DEBUG_PRINTS
bool "Enable Debugging Prints"
default n
help
Compiles the Nautilus kernel with debugging prints
config ENABLE_ASSERTS
bool "Enable Runtime Assertions"
default n
help
This will enable runtime assert statements. If this is