-
Notifications
You must be signed in to change notification settings - Fork 0
/
Kconfig
838 lines (689 loc) · 22.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
mainmenu "Nautilus AeroKernel Configuration"
menu "Platform/Arch Options"
choice
prompt "Target Selection"
default X86_64_HOST
config X86_64_HOST
bool "x86_64 Host"
config XEON_PHI
bool "Intel Xeon Phi Accelerator"
config HVM_HRT
bool "Hybrid Runtime AeroKernel (HRT)"
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 "Nautilus AeroKernel Build Config"
config USE_NAUT_BUILTINS
bool "Use GCC Built-in Utility Functions"
default y
help
Compiles the Nuatilus kernel with built-in functions
like __builtin_strcpy etc., as opposed to Nautilus
versions, the full set of which may not be supported
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 TOOLCHAIN_ROOT
string "Toolchain Root"
help
Directory where the intended GCC toolchain, binutils, libraries, grub, etc are installed.
endmenu
menu "Interface Options"
config THREAD_EXIT_KEYCODE
int "Thread Exit Keycode"
range 1 255
default "196"
help
uses a special thread exit keycode
endmenu
menu "Nautilus AeroKernel 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 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 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.
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 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
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
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
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"
default n
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"
default n
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
endmenu
menu "AeroKernel Performance 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.
config USE_IDLE_THREADS
bool "Start idle threads on all cores"
default n
help
Enables idle threads to start in addition to the main boot threads.
Usually not needed.
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
disabled, they will not be generated
config PROFILE
bool "Enable Profiling"
default n
help
Profile select function entries and exits
config SILENCE_UNDEF_ERR
bool "Silence Errors for Undefined Functions"
default n
help
Mutes error prints related to undefined
libc compatibility functions. Useful when
porting applications to HRT model.
config ENABLE_STACK_CHECK
bool "Enable Runtime Stack Overrun Checking"
default n
help
This checks the stack pointer on every thread switch to
make sure that a thread hasn't overrun its allocated
stack
config DEBUG_PAGING
bool "Debug Paging"
depends on DEBUG_PRINTS
default n
help
Turn on debug prints for paging subsystem
config DEBUG_BOOTMEM
bool "Debug Bootmem Allocator"
depends on DEBUG_PRINTS
default n
help
Turn on debugging for the boot memory allocator
config DEBUG_BUDDY
bool "Debug Buddy Allocator"
depends on DEBUG_PRINTS
default n
help
Turn on debugging for the buddy allocator
config DEBUG_KMEM
bool "Debug Kernel Memory Allocator"
depends on DEBUG_PRINTS
default n
help
Turn on debugging for the high-level kernel
memory allocator (malloc/free)
config DEBUG_FPU
bool "Debug FPU"
depends on DEBUG_PRINTS
default n
help
Turn on debug prints for FPU related code (SIMD,MMX,SSE,etc.)
config DEBUG_SMP
bool "Debug SMP"
depends on DEBUG_PRINTS
default n
help
Turn on debug prints for SMP code
config DEBUG_HRT
bool "Debug HRT"
depends on DEBUG_PRINTS && HVM_HRT
default n
help
Turn on debug prints for HRT/HVM code
config DEBUG_SFI
bool "Debug SFI"
depends on DEBUG_PRINTS
default n
help
Turn on debug prints for SFI platform firmware code
config DEBUG_CXX
bool "Debug C++"
depends on DEBUG_PRINTS
default n
help
Turn on debug prints for C++ initialization/support code
config DEBUG_THREADS
bool "Debug Threads"
depends on DEBUG_PRINTS
default n
help
Turn on debug prints for threads
config DEBUG_GROUP
bool "Debug Groups"
depends on DEBUG_PRINTS
default n
help
Turn on debug prints for group
config DEBUG_GROUP_BARRIER
bool "Debug Group Barrier"
depends on DEBUG_GROUP
default n
help
Turn on debug prints for group barrier
config DEBUG_SCHED
bool "Debug Scheduler"
depends on DEBUG_PRINTS
default n
help
Turn on debug prints for the scheduler
config DEBUG_GROUP_SCHED
bool "Debug Group Scheduling"
depends on DEBUG_PRINTS
default n
help
Turn on debug prints for group scheduling
config DEBUG_TIMERS
bool "Debug Timers"
depends on DEBUG_PRINTS
default n
help
Turn on debug prints for timer subsystem
config DEBUG_SYNCH
bool "Debug Synchronization"
depends on DEBUG_PRINTS
default n
help
Turns on debug prints for synchronization functions
(rwlock, condvar)
config DEBUG_BARRIER
bool "Debug Barriers"
depends on DEBUG_PRINTS
default n
help
Turns on debug prints for barriers
config DEBUG_NUMA
bool "Debug NUMA code"
depends on DEBUG_PRINTS
default n
help
Turns on debug prints for NUMA code
config DEBUG_VIRTUAL_CONSOLE
bool "Debug Virtual Console"
default n
help
Turn on debug output for VC
config DEBUG_DEV
bool "Debug Base Device Interface"
default n
help
Turn on debug output for base device interface
config DEBUG_CHARDEV
bool "Debug Character Device Interface"
depends on DEBUG_DEV
default n
help
Turn on debug output for character device interface
config DEBUG_BLKDEV
bool "Debug Block Device Interface"
depends on DEBUG_DEV
default n
help
Turn on debug output for block device interface
config DEBUG_NETDEV
bool "Debug Network Device Interface"
depends on DEBUG_DEV
default n
help
Turn on debug output for network device interface
config DEBUG_FILESYSTEM
bool "Debug Base Filesystem Interface"
depends on DEBUG_PRINTS
default n
help
Turn on debug prints for the filesystem interface
config DEBUG_LOADER
bool "Debug loader"
depends on DEBUG_PRINTS
default n
help
Turn on debug prints for the loader
endmenu
menu "Parallel Runtime Integration"
choice
prompt "Selection of Parallel Runtime"
default NO_RT
config LEGION_RT
bool "Legion RT"
depends on CXX_SUPPORT
config LEGION_RT_ROOT
string "Legion RT Root"
depends on LEGION_RT
help
Directory where the intended Legion runtime is installed
config LEGION_RT_DEBUG
bool "Legion RT Deep Debugging"
default n
depends on LEGION_RT
help
Turns on deep debugging prints for legion runtime in Nautilus
config NDPC_RT
bool "NDPC RT"
depends on CXX_SUPPORT
config NDPC_RT_ROOT
string "NDPC RT Root"
depends on NDPC_RT
help
Directory where the intended NDPC runtime is installed
config NDPC_RT_TEST_OBJ
string "NDPC RT Test Object File"
depends on NDPC_RT
help
File that contains a function test_ndpc()
config NESL_RT
bool "NESL RT"
config NESL_RT_ROOT
string "NESL RT Root"
depends on NESL_RT
help
Directory where the intended NESL runtime is installed
config NESL_NDPC_RT_ROOT
string "NESL NDPC RT Root"
depends on NESL_RT
help
Directory where the intended NDPC runtime is installed
config NO_RT
bool "No parallel runtime"
endchoice
endmenu
source "src/dev/Kconfig"
source "src/fs/Kconfig"
menu "Lua support"
config LOAD_LUA
bool "Enable Lua support in Nautilus"
default n
help
Initial port of he Lua 5.2.4 runtime to Nautilus
config LUA_TEST
bool "Test framework for invoking Nautilus functions from Lua"
default n
depends on LOAD_LUA
help
Nautilus functionas are made available to Lua externally
endmenu