Compare commits

...

191 Commits

Author SHA1 Message Date
546cafe6bc release: 1.7.6: fix ihk_reserve_mem_conf
Change-Id: I767f8eac655af9200f733c21353b1e141007df17
2021-03-11 15:22:36 +09:00
9dd4d99a1a docs: spec: ihk_reserve_mem_conf*: apply change only to the next reservation
Change-Id: Iaafd2ca4d96f227d03e9910a36b27801fb1e3da4
2021-03-11 15:17:44 +09:00
3a6273777a test: uti/tofu, issues/1507+1519: fix README
Change-Id: I3060e1273c8ef6a1b392a2c678da3bc02a25a4f8
2021-03-11 03:59:57 +00:00
daed585347 release: 1.7.5: fix ihk_*str() functions
Change-Id: Ic412029f856f34a10724f03e36f211f6026acd8e
2021-03-11 12:18:43 +09:00
11d7229525 docs: spec: ihk_reserve_mem_conf_str: use defaults for those not specified
Change-Id: I7cfddd3203b952cabb919ea6401e226e151e696a
2021-03-11 02:26:18 +00:00
e43d52df20 Revert "mcexec_open_exec: make fput and add to mckernel_exec_files atomic"
This reverts commit c80ea0ed23.

Change-Id: I0541e8af5157c7128f8774f6581cc207d13b649a
2021-03-10 14:21:57 +09:00
1c0da3c5b9 Revert "mcexec_open_exec: guard fput and add to mckernel_exec_files with spin_lock_irqsave"
This reverts commit cba263ff12.

Change-Id: Ifcd03a2048a3f9d6c155dd8ecd522081b5dde276
2021-03-10 14:21:49 +09:00
3084db8b26 release: 1.7.4: fix missing fput of executable
Change-Id: If3e2bb10bd21515876c5a37839cd9fcf12774329
2021-03-07 17:44:53 +09:00
cba263ff12 mcexec_open_exec: guard fput and add to mckernel_exec_files with spin_lock_irqsave
Change-Id: Id5dae8cb7f947d4e9939bf9c6762c2d1dcdd3776
2021-03-07 17:39:16 +09:00
43a6f0d41d release: 1.7.3: fix missing fput executable
Change-Id: Ib369a7803d5ef944fec4c42c5e9b20f8655e47f3
2021-03-05 15:20:16 +09:00
c80ea0ed23 mcexec_open_exec: make fput and add to mckernel_exec_files atomic
Change-Id: Iff4ac8bb9b4ebfcb9c77e84ed3f0a40e6b9efb6a
2021-03-05 14:14:30 +09:00
73d028de77 docs: move uti installation / usage into install.rst / users.rst
Change-Id: Ie1fe1593bb957e5c5fb6085543ab647ec43fd8f6
2021-03-05 11:52:38 +09:00
d812e4dedb cmake: fix POSTK_DEBUG definitions (third trial)
Change-Id: I60341362b1e17acdb7c7f9ac8c036604aec89885
2021-03-05 11:16:43 +09:00
b8cc962843 release: 1.7.2: xpmem is fixed, uti is integrated
Change-Id: I97ff528cbddaf06bb28fa064df54601308a06bca
2021-03-05 09:26:52 +09:00
c593faea89 MM: handle zero_at_free in page faults
Change-Id: Ib2b37c73936a365173d84a2a806a17374ccc05d4
2021-03-04 04:04:13 +00:00
7d69f15101 docs: describe fork starvation caused by a flood of system call offloads
Change-Id: I9826525ca582a61c6e94f44adab3068d80a699cd
Refs: #1398
Refs: #1408
2021-03-04 03:59:56 +00:00
687eae3a11 cmake: fix POSTK_DEBUG definitions (again)
Change-Id: I064b81115102bcbd2c3787c5743009be5032469e
2021-03-04 03:47:00 +00:00
eba2131f34 clv: Change no_preempt from int to ihk_atomic_t.
Fix the issue where the value of no_preempt gets unexpected value
(-1, 1, 2 etc.) after process ends when running the UTI tests.

Change-Id: I7d9c08b754a171ea3fdec20ab2e635df3b607cbd
2021-03-04 03:40:15 +00:00
1070387ed2 SCD_MSG_SCHEDULE_PROCESS: stay on current CPU if set in process' CPU mask
Change-Id: I347fe61f8123792648747ec9bf856a9340ea9d9b
2021-03-04 11:29:21 +09:00
eca107f52d __mcctrl_os_read_write_cpu_register: spin timeout in mcctrl_ikc_send_wait()
Change-Id: I918be366c81be96cd76df659e3181a194d440dd8
2021-03-04 11:29:21 +09:00
71c333965c mcexec: introduction of --flags argument
Change-Id: If5b70bf06460fc709444d8135511c3699304d31f
2021-03-04 11:29:21 +09:00
5664f54390 hugefileobj_get_page: suppress debug message
Change-Id: I2784f5bba12f961cccb17cf302f1b463721ac855
2021-03-03 05:07:49 +00:00
720b0c06d8 test: xpmem: fix test program for #1259
Change-Id: I8885e518a0202df6d20a88524564aeb648df89ab
2021-03-03 05:07:49 +00:00
e6ec52dfbd test: Add test program for #1507, #1519
Change-Id: I04927e6dd1bfe1d0b210ec0b7e9d86c449e6daca
Refs: #1507
Refs: #1519
2021-03-03 05:07:49 +00:00
b380f0790d test: shmobj: fix test program for #1381
Limitations tested in #1381 have been removed in #1458

Change-Id: I35b7ee058a75abc98f2a2ad783fdba46087b0716
Refs: #1519
2021-03-03 05:07:49 +00:00
47aec70f5f shmobj: support large page
Change-Id: I104c1b8551b87f5cbfedb13262e77c00c38e9643
2021-03-03 05:07:49 +00:00
d2db639853 xpmem: support large page
1. try to use as large page as possible on attach
2. pre-map resident remote pages on attach

Change-Id: I5580682a4199e94085a9bad9ce3958a0f14cdcea
2021-03-03 05:07:49 +00:00
3aaa5350f0 xpmem: replace mcs_rwlock with ihk_rwspinlock
Change-Id: I2d29f37f590f55db009f522395ede4c6494f8c89
2021-03-03 05:07:49 +00:00
865eb37b11 xpmem: Fix deadlock in xpmem_remove_process_memory_range()
This reverts commit 2fe5c8de2e.

Change-Id: I8ec84f654aeee7cf83603abb2aca5e90b735e977
2021-03-03 05:07:49 +00:00
5dd989450d xpmem: Make sure vm_range is used under memory_range_lock
Change-Id: I856ee9d401e7dcfd74559bad5b22a69d53a61e2f
2021-03-03 05:07:49 +00:00
4ac9dcdccd xpmem: Use correct process_vm in xpmem functions
This reverts commit 29d27b7c8d.

Change-Id: I1863cddcffa67c60e5f93d874447db9919e519dc
2021-03-03 05:07:49 +00:00
63443383e9 xpmem: truncates the size of xpmem_attach at the page boundary (workaround for fjmpi)
Fujitsu MPI tries to attach a segment with the size of the source range size plus one.

Change-Id: Iab3801727f938dfb6242b6b90c88e4986b84d08e
Refs: #1507
2021-03-03 05:07:49 +00:00
4d1d53b335 docs: integrate spec tex files
"make html" makes spec pdf files as well.

Change-Id: I0535ae97d924c15efed948dadb135210ad18f956
2021-03-03 04:20:46 +00:00
422a399f20 coredump: fix behavior when gencore fail
Change-Id: Ifdddf867b514f42a6f1ce374ec06b7550a9cdad5
Refs: #1511
2021-03-03 02:27:01 +00:00
7efb394905 remote_page_fault is handled by the offloaded thread.
Change-Id: I9cfad509260cceada74abdf39ca6a1822561e0d9
Refs: #1474
2021-03-03 02:25:56 +00:00
9c7d0cfaec getrusage: Fix memory_stat_mapped_file when SIGBUS occurs in file map
Change-Id: Ia4686f32a3c888d5c886ab6cc6c2b510885447f5
Refs: #1422
2021-03-01 05:55:37 +00:00
baa7a6adcb add ENABLE_GCOV option for cmake
Change-Id: Ic473dc52d748207e49800d0cd340918a4dce0971
2021-03-01 13:19:28 +09:00
86e12fa90c do_execveat: kill instead of panic when init_process_stack fails
Change-Id: I0845440260f04ab8e524e118c21d5a137cddb4aa
2021-03-01 12:04:50 +09:00
ae9827f628 cmake: fix missing prefix in mcreboot.sh
Change-Id: I93ee7ba1acf1269472bea40ff4e9c5bc6b3b98f8
2021-03-01 11:22:58 +09:00
79b590d732 docs: remove "mcexec -n <ppn>" requirement for Fujitsu MPI
Change-Id: I2d24fa5e11c005a7c7c61f7b351c196e920e6cef
2021-03-01 01:20:13 +00:00
1bfa339ccf man: mcexec: add "-n <ppn>" option mandatory when using MPI (except Fujitsu MPI)
Change-Id: I6d2d0337fdab13325642344529401f86bbadfdcd
2021-03-01 01:19:23 +00:00
c55a02ffba cmake: trim POSTK_DEBUG definitions
Change-Id: Ic302cd936e975abb07b998f266f7c3feecfde85c
2021-02-28 20:05:04 -05:00
dd7b7dbd0e uti: fix rpmbuild
Change-Id: I0cc60d2b38b184168a99a4778fbb5a437278da29
2021-02-27 23:06:32 -05:00
2585c8afaa prerelease: 0.95: add ihk_*_str() functions
Change-Id: I0dc2ff3c8a2b21d167cfff04ccf6d1533555ee1c
2021-02-26 11:24:48 +09:00
82056961cd uti: integrate libuti and redirect to mck/libuti.so
Change-Id: I74e0f677ea8e1cd06e8ab05d92f1d38f9be8fd7a
2021-02-26 11:03:16 +09:00
0848b64c1d uti: integrate syscall_intercept
Change-Id: Ide14341acdca1450b0ad4f8a16cc078d0743afc8
2021-02-26 10:37:56 +09:00
8a9b43fee0 cmake: add -Wno-stringop-truncation
Change-Id: I43d9ba731d0feaf8934d2724ff98072df88a902d
2021-02-26 10:37:56 +09:00
19cb302d5f uti: util_indicate_clone: check --enable-uti mcexec option
Change-Id: Ic7474d01c18acd1edbc07844d7a7b010b2175f71
2021-02-26 10:37:56 +09:00
90895cfb1f test: uti: add tofu examples
Change-Id: I1c55c872d125201e60b4fe744af74106e1c5d3a4
2021-02-26 10:37:55 +09:00
32afa80718 uti: fix handling UTI_CPU_SET env
Change-Id: Icbf8dc7e82bd6983374aefdd0d5b89ad4152c9aa
2021-02-26 10:24:19 +09:00
e3927a0b95 uti: futex: McKernel waker sends IPI to Linux waiter CPU
Change-Id: I6f725b3a6b1b26b9f553d8c58132c0c0a4416683
2021-02-26 10:24:19 +09:00
adc5b7102f uti: futex: cache remote va to remote pa result
Change-Id: Idbbb3f2981b76a0235615fceaa6281d2c7134ca2
2021-02-26 10:24:19 +09:00
5d16ce9dcc uti: identify UTI thread by thread local variable
Change-Id: I64372a932378e4ead09ea27fbf5b52062a109756
2021-02-26 10:24:19 +09:00
a9973e913d uti: futex call function in mcctrl
Previously, futex code of McKerenl was called by mccontrol,
but there ware some problems with this method.
(Mainly, location of McKernel image on memory)

Call futex code in mcctrl instead of the one in McKernel image,
giving the following benefits:
1. Not relying on shared kernel virtual address space with Linux any more
2. The cpu id store / retrieve is not needed and resulting in the code

Change-Id: Ic40929b64a655b270c435859fa287fedb713ee5c
refe: #1428
2021-02-26 10:24:19 +09:00
35296c8210 uti: fix syscall response is mis-consumed by __do_in_kernel_irq_syscall
Refs: #1617
Change-Id: Iddd8ccd81d7f692f1f45ec888d31c2a87ec521ce
2021-02-25 01:42:29 +00:00
afea6af667 Send a signal to mcexec after switching to that process.
Change-Id: Ia882ef5027931009ee65febd0cbe22022a755c4a
Refs: #1505
2021-02-19 02:28:29 +00:00
b0bd1feefb remap_file_pages: check file mapping
Change-Id: Ibf145a20181938a9825214253337a423fcd53064
Refs: #1521
2021-02-19 02:23:39 +00:00
e6e66e0392 shmget: make small free numbers reusable.
Change-Id: Ic6670214fa31a309e96794361e3ec2dcc6375f4a
Refs: #1531
2021-02-19 02:22:50 +00:00
b3ddd60277 shmget: don't update refcount when shmid is found.
Change-Id: I3eac47cd67d27efd838190f5a4c21b5d682c5fe9
Refs: #1379
2021-02-19 02:22:33 +00:00
6dce9a2bf9 add_process_memory_range: Change order of update page and insert range.
Unintended update page was occurred, when inserting range failed.

Change-Id: I3d117b8613c5fbb64463c759b5fcc81db22bd624
refs: #1512
2021-02-18 16:02:30 +09:00
93dafc5f79 migrate: Don't migrate on in-kernel interrupt
Change-Id: I9c07e0d633687ce232ec3cd0c80439ca2e856293
Refs: #1555
2021-02-18 15:30:22 +09:00
583319125a prerelease: 0.94: fix __mcctrl_os_read_write_cpu_register
Change-Id: Ibcfbe7796347cc9c2148cdea2519fe6c7ca9e97e
2021-02-18 15:23:01 +09:00
9f39d1cd88 move_pages: Fix and support some specs for LTP.
1. When nodes array is NULL, move_pages doesn't move any pages,
 instead will return the node where each page
 currently resides by status array.
2. Check whether all specified node is online or not.

Change-Id: Ie3534997833d797e2a9f595d1107b07d46e1c6cf
Refs: #1523
2021-02-18 06:16:17 +00:00
a0d446b27f smp: make smp_call_func() arch independent
Change-Id: Ib60604ceb3274b173bd7f96cf57c8c35c1889e44
2021-02-18 06:16:17 +00:00
f3c875b8e6 mbind: Use range_policy's numamask as priority on MPOL_BIND
Change-Id: Iaaa7998945c6e2b42d91d34a2f7b05db1f4d696d
2021-02-18 06:16:17 +00:00
9f1e6d707c get_mempolicy: Support (MPOL_F_NODE | MPOL_F_ADDR) specified
If flags specifies both MPOL_F_NODE and MPOL_F_ADDR,
get_mempolicy() will return the node ID of the node on
which the address addr is allocated into the location pointed to by mode.

Change-Id: Id485e3f4838e3679d877a95e53b21e3421cac88a
2021-02-18 06:16:17 +00:00
aef50d710c mempolicy: Support MPOL_INTERLEAVE
Change-Id: I6357892d792b2de8ea859a0a6799250f05066713
Refs: #959
2021-02-18 06:16:17 +00:00
7f0594d784 TO RESET: mbind: do nothing
Fixes: 00007daf ("mbind: do nothing (workaround for Fugaku)")

Change-Id: Id41940bebd2cbcc3e8637eadd4847984627b1c72
2021-02-18 06:16:17 +00:00
866f5c51a0 docs: add limitation of system calls that call copy_to_user()
Change-Id: If449c73f8d5949ab5526ea598b0f713ed4431157
Refs: #1514
2021-02-18 13:04:53 +09:00
48b1d548f2 __mcctrl_os_read_write_cpu_register: fix timeout
Change-Id: Id5a7d316d793bd535f24fd353b214aa12af1dab4
2021-02-15 08:56:04 +00:00
822b64b03c docs: add limitation related to Fujitsu TCS xos_hwb
Change-Id: I83a1ecd7a0b6d3bcde2b902cd526dfd4feb9e23a
2021-02-15 16:03:52 +09:00
aca83bcd3d Tofu: fault stack area if VM range doesn't exist in STAG registration
Change-Id: I407a8954ccaf22019b3082fd6eee68e772d1cb26
2021-02-15 14:46:58 +09:00
c7145c4b38 xpmem: fault stack area of remote process if VM range doesn't yet exist
Change-Id: I2bbb745cc9b79ab4f9ea81b242f35f1b88ad531e
2021-02-15 14:46:58 +09:00
a82d161be8 prerelease: 0.93: investigate smp_ihk_os_panic_notifier
Change-Id: I997b41f80038603261de2e8232b6b8ca200cd8cd
2021-02-09 21:39:49 -05:00
7152269a59 spec: create one rpm including .ko and binaries
Don't use kernel_module_package not to create a separate
kmod-mckernel-*.rpm containing .ko files.

Change-Id: I25b7ff662476bfc735d319b57cdf2da82f2c6aa7
2021-02-09 20:55:38 -05:00
31c08bcb7d spec, docs: update cmake options
Change-Id: Ib8277413a413b5ce956a48f7e3d9922311937ea8
2021-02-09 20:55:38 -05:00
dffb0918a2 docs: add capstone installation options
Change-Id: I96aa9a6405c17f8d9653f3d3894f0e71a57ab460
2021-02-09 06:10:32 +00:00
23cd14af7d __mcctrl_os_read_write_cpu_register: timeout in 1 sec for when McKernel can't respond
Change-Id: Ia2d5f64e107697dda1f3bae499eb3afb8a7aedba
2021-02-09 06:09:11 +00:00
a5cf2019bc cmake: fix detection of Fugaku native compilation
Change-Id: I4210e9b57223c3869464caea10c2d414e9484e14
2021-02-09 06:06:13 +00:00
11b9fe0377 page_fault_handler: fix missing increment of in_page_fault on SEGV
This integrates some of the changes of the following commit:
1cf0bd5a ("TO RESET: add debug instruments, map Linux areas for tofu")

Change-Id: Iffd8432d5a7b35f20bd45829a125583a0363dbf0
2021-02-09 00:56:15 -05:00
4905c8e638 mcexec: propagate error in __NR_gettid handler
Change-Id: I0e0f06199970fe839065567dcd5418d017b6ec00
2021-02-03 18:53:33 -05:00
3d71c6a8eb mcexec_transfer_image(): map exact size of remote memory (instead of forcing PAGE_SIZE)
Change-Id: Ic66770af6cdb15b7a2e18a08cbcd1736e5558bdf
2021-02-03 18:53:33 -05:00
1cea75dd51 mcexec: fix strncat missing NULL and pclose of uninitialized
Change-Id: I9ce4004580845a983949caa5668b2f950880cd24
2021-02-02 01:51:57 +00:00
661ba0ce4a docs: add editing spec file when building rpm
Change-Id: Ic8dc9d8c6aef6d2180844891d743a09f4a3bdd9d
2021-01-29 01:23:35 +00:00
7e82adc761 prerelease: 0.92: fix uninitialized usrdata->cpu_topology_list
Change-Id: Ia12970bda1225898823a67c2d0461144fc62ebb9
2021-01-29 09:50:53 +09:00
1f9fbe82db mcctrl: fix access to uninitialized usrdata->cpu_topology_list
Change-Id: I25a9182b9b470bb069f4f755a67fb50b88817cd2
2021-01-29 09:34:24 +09:00
aa3d4ba7bd spec: prerelease 0.91 for 4.18.0-240.8.1.el8_3.aarch64 support
Change-Id: I8b33714157b1c68c1fc1eadf0b9d072a3ee59608
2021-01-26 02:34:35 -05:00
c89ac042f9 spec: prerelease 0.9 for testing hidos and cgroup check
Change-Id: I3b04fbf3a1ffa10df9c76da7b2730b9a2521bf98
2021-01-20 13:03:16 +09:00
0f1fc88ce9 spec: prerelease 0.8 for testing hidos and cgroup check
Change-Id: I6261380ab8e99d39191cbd8aac851038cdeb5ce2
2021-01-19 17:34:45 +09:00
bbc6565e7e docs: users: add how to specify boot parameters with Fujitsu TCS
Change-Id: I0216603388780d0e5497373598c3151812238932
2021-01-19 04:03:05 +00:00
1a29f8213f spec: prerelease 0.7 for testing hidos and cgroup check
Change-Id: I17f1608051a8f8ca33d2ba7385b75b8b492d1886
2021-01-19 12:25:06 +09:00
fd21fe7411 copy_user_ranges: copy straight_start of struct vm_range
This fixes the panic in ihk_os_set_ikc_map01 of the ihklib test suite.

Change-Id: Ic03efc81c5ca2c4deaeb06673afef8cef7a1cf92
2021-01-19 00:59:46 +00:00
2460228052 mcctrl: abort on invalid addr in mcexec_transfer_image()
Change-Id: Ic064b6ffc30368ff1d3dfb14403e524cbb837ce5
2021-01-19 00:55:20 +00:00
bf926f234a Tofu: manage stag ranges in VM range split and misc cleanup
Conflicts:
	kernel/process.c

Change-Id: I480850fe93a7963a5bd4d1687fb1e5c43f58057f
2021-01-19 00:55:20 +00:00
507b937509 Tofu: mcctrl side MMU notifier and CQ/BCH cleanup
Conflicts:
	executer/kernel/mcctrl/arch/arm64/archdeps.c
	executer/kernel/mcctrl/syscall.c

Change-Id: Ided8172331a5469c6ced68fa98a42302812efe71
2021-01-19 00:55:20 +00:00
a99cf99396 cmake: add switch to turn on/off krm workaround
Change-Id: I2dfd3d7f3373cce714247f9fc36bf5040a2a8fad
2021-01-19 00:52:53 +00:00
6f373186bf docs: add specifications of IHK and McKernel
Change-Id: I523ad68c5627ca1081c0c8684606a08101982ec9
2021-01-18 08:24:37 +00:00
6667321dc1 spec: prerelease 0.6 for testing capped best-effort memory reservation
Change-Id: Iaa91b311ee6879e84ce862aeabb4bd1fcd95d35f
2021-01-07 11:14:22 +09:00
f849745b60 spec: prerelease 0.5 for testing capped best-effort memory reservation
Change-Id: I139d6e24fbadb7313116029005e115053f31a899
2021-01-07 10:56:27 +09:00
78bc06d998 cmake: set default value of ENABLE_FUGAKU_DEBUG to OFF
Change-Id: I70703410922aa1d1440d61ead6e225d92cf60003
2021-01-07 10:42:36 +09:00
d726bd3d11 profile: fix definition of PROFILE_ENABLE and __NR_profile
Change-Id: I3f9f5870f8380d3668e1ccb06fd0f6d3307e3fa4
2021-01-06 01:03:17 +00:00
df37d6867f docs: add scheduling limitations
Change-Id: Ida4a16efa4d47f448da7417a3b4bdb5fb5304fcd
2021-01-06 09:58:38 +09:00
a4b5410d0c docs: add mlockall/munlockall limitations
Change-Id: I01d1c4eb6955baee89f6827748ac8ce4082884da
2021-01-04 12:57:32 +09:00
d73e6a161c spec: prerelease 0.4 for testing capped best-effort memory reservation
Change-Id: Iec35ea1b7fa6b8930153461c395675f1576042ba
2020-12-29 17:12:14 +09:00
67334b65c3 rus_vm_fault: vmf_insert_pfn: treat VM_FAULT_NOPAGE as success
vmf_insert_pfn is added with the following commit.
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?id=1c8f422059ae5da07db7406ab916203f9417e396

Refer to the following page for the meaning of VM_FAULT_NOPAGE.
https://lwn.net/Articles/242237/

Change-Id: I2b0144a20a57c74e0e2e0d2fc24281852f49b717
2020-12-29 16:31:41 +09:00
fe3992a3a2 cmake: add switch to turn on/off Fugaku debug modifications
To prevent "TO RESET: send SIGSTOP instead of SIGV in PF" from making
some tests expecting SIGSEGV fail.

Change-Id: I8bb111cff59fe5b0b2bf6bc652dfd2fa308321ed
2020-12-29 16:31:41 +09:00
5d58100c20 cmake: add switch to turn on/off Fugaku hacks
Change-Id: I2a1ac906a19c4e45ee62acdbf0bc6f77f61974f8
2020-12-29 16:31:41 +09:00
1b106d825c Tofu: fix phys addr calculation for contiguous pages in MBPT/BCH update
Change-Id: I70def9d02bdd7e1e969dedfc277a20df6ed2dff8
2020-12-29 16:31:41 +09:00
a680395093 Tofu: kmalloc cache for stag range
Change-Id: Ib5ea12c7c8cdafa7b699308c4eeb6e9ab39905c7
2020-12-29 16:31:41 +09:00
fd5a1c4b0a TO RESET: send SIGSTOP instead of SIGV in PF
Change-Id: I5f7e07cb89f5f38b7c631d838f0eee0a2a98e246
2020-12-29 16:31:40 +09:00
b3b1883ad8 eclair: turn off gdb pagination by default
Change-Id: I7758d97b90705310bc57cb9b6da6f6af436ea7fb
2020-12-29 16:31:40 +09:00
7145c4d383 TO RESET: stack changes
Change-Id: I325420701dfa5e9eac294be086a9d1e7326d95bc
2020-12-29 16:31:40 +09:00
0b82c8942b Tofu: keep track of stags per memory range
Change-Id: I033beaeee3b141dab4485dd3a2a3848eaa84e54e
2020-12-29 16:31:40 +09:00
75694152f0 Tofu: match page sizes to MBPT and fault PTEs if not present
Change-Id: Ia7aa92005a9941d6399063fec9a0776e73fc88fe
2020-12-29 16:31:40 +09:00
1cf0bd5a78 TO RESET: add debug instruments, map Linux areas for tofu
Change-Id: I09880cad3b87182cb663d414041254817c254759
2020-12-29 16:31:39 +09:00
25943634e9 TO RESET: do_mmap: show debug message when profile is turned on
Change-Id: I18f498f3a8660114b5e038e74179df95a645d232
2020-12-29 16:31:39 +09:00
72f95f92f8 TO RESET: hugefileobj: show debug messages
Change-Id: I904c811c13a59c0db74052bc92f6661a3e1b5d34
2020-12-29 16:31:39 +09:00
ab1014863d TO RESET: page_fault_handler: send SIGSTOP instead of SIGSEGV for debug
Change-Id: Ie281dbf43280464c8f412c8444a6861e43f28beb
2020-12-29 16:31:39 +09:00
4cd7051c2d TO RESET: setup_rt_frame: show debug message
Change-Id: I07d4f2dbba9bdb72f8a2892e6b5bd429b8e0aeec
2020-12-29 16:31:39 +09:00
d5716d3c3a TO RESET: mcctrl_get_request_os_cpu and __mcctrl_os_read_write_cpu_register: show debug messages
Change-Id: Ic8430e3fd6a814b888192233b029c942500a2dc9
2020-12-29 16:31:39 +09:00
2a984a12fe TO RESET: unhandled_page_fault: show instruction address
Change-Id: I29a8d30d9b3e5cfbe5e16b1faaa253e794b8fc5b
2020-12-29 16:31:38 +09:00
3949ab65a8 TO RESET: Add kernel argument to toggle on-demand paging for hugetlbfs map
Change-Id: Id748e0a2afc4ea59142fedb652a15b4007c5dee4
2020-12-29 16:31:33 +09:00
ed923ac82f TO RESET: hugefileobj: pre-allocate on mmap
Set this change to "TO RESET" because one of the Fujitsu tests fails.

Change-Id: Iddc30e8452b3d39da4975079d0c6a035e4f3dbde
2020-12-25 11:34:14 +09:00
191e6f7499 TO RESET: preempt_enable: check if no_preempt isn't negative
Change-Id: I1cef2077c50f3b3020870505dd065d10617f440e
2020-12-25 11:34:14 +09:00
4f7fd90300 TO RESET: lock: check if runq lock is held with IRQs disabled
Change-Id: I9a79ceaf9e399ad3695ed8959ca10c587591751a
2020-12-25 11:34:09 +09:00
8f2c8791bf TO RESET: arm64: enable interrupt on panic
Change-Id: I1ceb321de324f307fc82366b162c72f64184247b
2020-12-24 17:18:37 +09:00
bbfb296c26 TO RESET: mcreboot, mcstop+release.sh: add functions
Change-Id: Ic3992dc4e16b7ade00e93edbd107c64a32068c02
2020-12-24 16:53:27 +09:00
10b17e230c TO RESET: physical memory: free memory consistency checker
Change-Id: I15aa59bb81be4d8f2acfe8d161c8255f70f9e7d3
2020-12-24 16:53:12 +09:00
b268c28e7e TO RESET: mmap: ignore MAP_HUGETLB
Change-Id: Ifd50f24de0747b06d71ebba441ae2ef451f66c4d
2020-12-24 16:51:51 +09:00
2fa1c053d7 spec: prerelease 0.3 for testing ihk_reserve_mem and memory policy
Change-Id: I4fbcfa1f93522fd01af42d1ef13d0be075086773
2020-12-24 15:11:01 +09:00
530110e3a9 Tofu: fix ENABLE_TOFU switching
Change-Id: Ib33323d4b59ea8fb4f5f40dff7ea25a36773d5e2
2020-12-24 15:00:14 +09:00
f6ed44aeec spec: prerelease 0.2 for testing ihk_reserve_mem and memory policy
Change-Id: I9ff171c5d65b5f465ce7a2767be1a710de0a0400
2020-12-24 11:23:17 +09:00
33dd2e60b1 mcexec: memory policy control by environmental variable
Refs: #1470
Change-Id: I3d556cae90d31d81572b1c4e5c680e826577d428
2020-12-24 11:18:01 +09:00
ed670c03af spec: prerelease 0.1 for testing ihk_create_os_str
Change-Id: I3c9bbc6f3c9e8951c0ad700b9c02fcdec65018ff
2020-12-23 11:33:31 +09:00
e5f4a4e87d Tofu: proper cleanup of device files when mcexec gets killed
Change-Id: I6cb0290f72d96682700f945b29585e132e525ac1
2020-12-09 13:05:54 +09:00
1918df7765 Tofu: support for barrier gate, kmalloc cache
Change-Id: I6f4cfec2ec404efd03b332fc3f449a775816230e
2020-12-09 13:05:54 +09:00
5d784f3ea4 kernel: increase stack size
Change-Id: I27698149e9206138402dcc65db0078d5dbf548cb
2020-12-09 13:05:53 +09:00
10c09aa10e MM: generic lockless kmalloc and page cache
Change-Id: I71ad498fdd10136d9c72ffe2b16b9122d1bc9673
2020-12-09 13:05:53 +09:00
41f5c0bdde MM: deferred zero cleaning on Linux CPUs
Change-Id: Icdb8ac807688533be7a95b7101edfd904250cd02
2020-12-09 13:05:53 +09:00
e7b8aeb4f7 Tofu: per-fd path memory leak fix
Change-Id: I451472365806333adfac6dae32746195e3c30694
2020-12-09 13:05:53 +09:00
1b3dd45dbc MM: straight mapping memory leak fix
Change-Id: I7d841fbedb1db498b5994eb69b0350df7a5cefb0
2020-12-09 13:05:53 +09:00
623d6f8bc3 arm64: record register state at kernel mode page fault (for eclair)
Change-Id: I066bceecc0377110faaca0b21d45a476d000e684
2020-12-09 13:05:53 +09:00
92902d36fc Tofu: initial version
Change-Id: I9c464d5af883c18715a97ca9e9981cf73b260f90
2020-12-09 13:03:01 +09:00
fe83deb3db profile: make header user-space includable
Change-Id: I4a88d9be7c169f29ef6f6328e8576a3fe3b6e34f
2020-12-08 12:32:10 +09:00
e056cb799f memclear: non-temporal memory clean (arm64)
Change-Id: I8f80ff20e98bc01088450282e1790c27c67c16eb
2020-12-08 12:32:10 +09:00
201f5ce500 MM: straight mapping
Change-Id: I70871f8c382fb00aa719ed501cc5de436d916d7f
2020-12-08 12:32:10 +09:00
100bbe6231 MM: zero memory at free and deferred zero
Change-Id: Ib0055d6f2bdd10d05d749dcd1f3d5c3d318f22f3
2020-12-08 12:32:10 +09:00
fbd121d28c mmap: return -EINVAL for non-anonymous, MAP_HUGETLB map
Change-Id: I2bcbbf0ee9c0f47160eabac4a8d09991c71fe852
2020-12-07 15:23:38 +09:00
d1d93d90cc mcexec: detect mismatch of mcexec -n and mpirun -ppn
Change-Id: I0ce1b2d48cda10713920cb88692e107b8c4d3bab
Refs: #929
2020-12-07 15:23:34 +09:00
45bc6a617a __return_syscall: check input & fix unmap memory in error cases
Change-Id: I5de3ab3acd46770518b79bdc6f1c2e00c1cd5096
2020-11-25 01:58:47 +00:00
924ba7fd65 mcctrl_ikc_send_wait: free desc only if we allocated it internally
Change-Id: I4710ea6bb31f098451347c53ac0ff0be422aec06
2020-11-25 01:58:47 +00:00
2814f7cac4 mcctrl_get_request_os_cpu: check os instance & ret_cpu
Change-Id: I4d3f6fd93eaa183d560c874ba33add83c4308c5a
2020-11-25 01:58:47 +00:00
b510de7bd5 mcctrl_perf_get: check os instance & cpu info
Change-Id: Ic4f9d818b7d58f8ae651e43175fb1c478baec9c1
2020-11-25 01:58:47 +00:00
3e927f61dc mcctrl_perf_disable: check os instance & cpu info
Change-Id: I7195272a65b31db72158f5e5bbfc490bac547b91
2020-11-25 01:58:47 +00:00
64579830dd mcctrl_perf_enable: check os instance & cpu info
Change-Id: I31ab829d63833f924af17445fd9b8488d6eb454f
2020-11-25 01:58:47 +00:00
3cc98883f5 delete_procfs_entries: fix possible crash if top entry has no children
Change-Id: I209842699615f9bb58c12ccd262ae4b17f8f558c
2020-11-25 01:58:47 +00:00
442045a320 mcctrl_ikc_send: validate os and check input packet
Change-Id: I1f8c2228043841685617b665eeeaf2ce15a08703
2020-11-25 01:58:47 +00:00
fe5d8fc71f mcctrl_getrusage: validate os input
Change-Id: I97908069f8bc4703b99f9ffca94f3dd33eb64cc4
2020-11-25 01:58:47 +00:00
550c6cc5fb mcctrl_perf_set : validate os input & check cpu info
Change-Id: If308013746ff6dce03fa8e0eb1ebaca1cb2a4a64
2020-11-25 01:58:47 +00:00
8c0b2ab6ce mcctrl_perf_num: check "os" argument
Change-Id: I13c8b0c337cac9bbb240667808e871defce34aab
2020-11-25 01:58:47 +00:00
239b1b265f release 1.7.0
Change-Id: I8413aa2d051c6164235816bae2823187870efe49
2020-11-25 10:51:40 +09:00
f646fd141b prerelase 0.96: ihk_reserve_mem: balanced, capped best effort
Change-Id: Ia98c87e651d8dd34dfd36bc0c45f1d23e245330d
2020-11-24 03:40:01 +00:00
734d1cc056 ihk submodule update: ihklib: ihk_create_os_str: add ihk_reserve_mem_conf equivalent
Change-Id: Iede1a043b0316d6541656e86091f2288fd299383
2020-11-24 03:40:01 +00:00
040a9c0c7f cmake: set QEMU_LD_PREFIX when cross-compiling
Change-Id: Ie7b86ddba344e02d6f739225e44f3ad4927f5a2f
2020-11-20 07:59:55 +00:00
8784ee4710 spec: prerelase 0.95 for testing /dev/mcosN related fix
Change-Id: I02397984cd5c4c3a3e83968ff03cf9a68e84d200
2020-09-07 16:12:09 +09:00
3a761c138e ihk submodule update: ihklib, ihkmond: fix /dev/mcosN related issues
Change-Id: I533b277f249dc4afc84929dd2bf22c19648e21d1
2020-09-07 16:11:36 +09:00
e21a3a5af3 spec: prerelase 0.94 for testing ihk_create_os_str
Change-Id: If30f6ccf269dbdbbd564498318b741a88d46a2a1
2020-09-04 12:04:01 +09:00
cd33c88025 ihk submodule update: ihklib: turn off debug messages
Change-Id: I9adc4843bd4e2d2606e0100f855c83b47a144863
2020-09-04 12:03:58 +09:00
d78a0fb74c docs: NEWS.rst: add 1.7.0-0.93 updates
Change-Id: If4f41f6d26c2da60711568f02444cf033d82a3d5
2020-09-02 01:47:20 +00:00
9f815324a4 spec: prerelase 0.93 for testing ihk_create_os_str
Change-Id: Id31646c88da0640a3d58e7805fa61f0e0583ff1c
2020-09-01 15:53:10 +09:00
2748f06c1f ihk submodule update: ihklib: add ihk_create_os_str
Change-Id: Ia219a4463562de3b9d94f8b57ba52ff19f07e721
2020-09-01 15:06:32 +09:00
a7f892113a spec: prerelase 0.92 for testing RHEL-8.3 compat
Change-Id: Ie4dbfb253aa3ddd384ed1ad481e87e5f0e042e03
2020-08-31 02:11:09 -04:00
89c696afc5 ihk submodule update: gic_chip_data: compat: RHEL-8.3
Change-Id: Ibdf67f012d66c01ed3f6a486624e6a32a42ba0e7
2020-08-31 02:04:34 -04:00
e17e86840b docs: switch to https://ihkmckernel.readthedocs.io and add contents
Change-Id: I9515034ac372dbe554e1010f646b382c5dc94458
2020-08-19 12:44:03 +09:00
0de6c6b8f9 spec: prerelase 0.91 for testing removal of mcexec -n option
Change-Id: I2b18b5fefec570bfb7a4aa0823fe97d9ea93e208
2020-08-12 13:12:06 +09:00
5ffad78b87 mcexec: use FLIB_NUM_PROCESS_ON_NODE when -n not specified (Fugaku specific)
Change-Id: I1668fecfac692d56076dd10e6e03fbf992e323ec
2020-08-12 07:30:11 +09:00
542418b1fc spec: prerelase 0.9 for testing libdwarf related package requirements
Change-Id: Iaaa116018505c4f89813883f5a99c8194cb4f99e
2020-07-29 12:22:08 +09:00
b95a2fcfab spec, README.md: fix libdwarf related package requirements
Change-Id: I460d440e33d0ff5e8ab3d4f7b328f7f2ea11bc16
2020-07-29 12:08:04 +09:00
1b11496f26 spec, README.md: add package dependency including libdwarf
Change-Id: Ie612c5dc642a9f5d6d2ba31747adb991cb568113
2020-07-22 06:59:37 +00:00
7c0e624b13 spec: prerelase 0.8 for testing mcexec -n issue
Change-Id: Ie54f7bc74097c8390f75ddbd0d6e58a8ea87ea7c
2020-07-21 13:31:45 +09:00
0b66bab992 Revert "mcexec: detect mismatch of mcexec -n and mpirun -ppn"
This reverts commit 1d135492c3.

Conflicts:
	executer/kernel/mcctrl/control.c

Change-Id: I224cced408aa4b77691a153c5e1d2fdf8043fa04
2020-07-21 13:08:21 +09:00
63ed4e7af0 spec: prerelase 0.7 for testing hugetlb map for stack
Change-Id: I4997340cd984ca8915e45749b91b1d72c1de85af
2020-07-20 08:11:40 +09:00
d7cf39883f Revert "shmobj: Support large page"
This reverts commit 9a60997ea0.

Change-Id: Id60959b4e03451987239faa0bbc2e780b72fafaa
2020-07-19 12:53:45 +00:00
40f8091fab stack: grow on page fault
The steps of the technique to replace stack with hugetlbfs map are as
follows:

(1) Prepare a hugetlbfs map with the size of rlim_cur
(2) Copy the active region of the stack to the hugetlbfs map.
    The range to copy is determined by reading /proc/[pid]/maps.
(3) Replace the stack map with the hugetlbfs map

The step (2) tries to copy a huge region if McKernel doesn't grow the
stack at run-time.

Change-Id: I5858c35b5c26dd0a42cccf9e3cc4c64b1a81f160
2020-07-19 12:53:31 +00:00
a20e1acf01 syscall: add prlimit64
Change-Id: Iad882813d54b439c236c0df74dc81508190e6707
2020-07-19 21:52:46 +09:00
b3d7bbda56 rus_vm_fault: compat: RHEL-8.2
This applies the following patch:
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?id=1c8f422059ae5da07db7406ab916203f9417e396
mm: change return type to vm_fault_t

Change-Id: I7189fc92824d21b4906f1033f1de5899bbad4680
2020-07-15 13:02:32 +09:00
9a60997ea0 shmobj: Support large page
Mixing page sizes is allowed by shmobj.

Change-Id: Ic48b71da2db6ce3f68fa3dbc8ad5ae96347d6018
Refs: #1381
Refs: #1458
2020-07-15 03:50:56 +00:00
4b66373813 mcexec: Don't forward SIGTSTP SIGTTIN SIGTTOUT to mckernel
Change-Id: I72bb74d6b98e1f0bf519c8f0fef742624a2a699a
Refs: #1425
2020-07-14 08:34:11 +00:00
b44b11ace7 set_robust_list: Add error check
set_robust_list is not supported by McKernel.

Change-Id: I1f679e2e4df24139cceb1f2294bc072cb7956002
Refs: 1399
2020-07-14 01:06:49 +00:00
ebc91cea0e tgkill: Fix argument validatation
Formerly, if tgid is specified as -1, tgkill() was equivalent to tkill().
Now it is treated as an error EINVAL.

Change-Id: I47bc75d439662a36dc6167c4446a5277422de507
Refs: 1380
2020-07-14 01:03:47 +00:00
58106d791a struct process: fix type of group_exit_status
Change-Id: Ib8492cbb077106cef1d0fa2d6d5e8e13bbb209c0
Refs: #1377
2020-07-13 08:33:07 +00:00
547 changed files with 70237 additions and 2978 deletions

6
.gitmodules vendored
View File

@ -4,3 +4,9 @@
[submodule "executer/user/lib/libdwarf/libdwarf"]
path = executer/user/lib/libdwarf/libdwarf
url = https://github.com/bgerofi/libdwarf.git
[submodule "executer/user/lib/syscall_intercept"]
path = executer/user/lib/syscall_intercept
url = https://github.com/RIKEN-SysSoft/syscall_intercept.git
[submodule "executer/user/lib/uti"]
path = executer/user/lib/uti
url = https://github.com/RIKEN-SysSoft/uti.git

View File

@ -1,4 +1,4 @@
cmake_minimum_required(VERSION 2.6)
cmake_minimum_required(VERSION 3.11)
if (NOT CMAKE_BUILD_TYPE)
set (CMAKE_BUILD_TYPE "Debug" CACHE STRING "Build type: Debug Release..." FORCE)
@ -7,10 +7,10 @@ endif (NOT CMAKE_BUILD_TYPE)
enable_language(C ASM)
project(mckernel C ASM)
set(MCKERNEL_VERSION "1.7.0")
set(MCKERNEL_VERSION "1.7.6")
# See "Fedora Packaging Guidlines -- Versioning"
set(MCKERNEL_RELEASE "0.6")
# See "Fedora Packaging Guidelines -- Versioning"
set(MCKERNEL_RELEASE "")
set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/modules)
# for rpmbuild
@ -41,6 +41,11 @@ if(IMPLICIT_FALLTHROUGH)
set(EXTRA_WARNINGS "-Wno-implicit-fallthrough")
endif(IMPLICIT_FALLTHROUGH)
CHECK_C_COMPILER_FLAG(-Wno-stringop-truncation STRINGOP_TRUNCATION)
if(STRINGOP_TRUNCATION)
list(APPEND EXTRA_WARNINGS "-Wno-stringop-truncation")
endif(STRINGOP_TRUNCATION)
# build options
set(CFLAGS_WARNING "-Wall" "-Wextra" "-Wno-unused-parameter" "-Wno-sign-compare" "-Wno-unused-function" ${EXTRA_WARNINGS} CACHE STRING "Warning flags")
add_compile_options(${CFLAGS_WARNING})
@ -50,6 +55,81 @@ if (ENABLE_WERROR)
add_compile_options("-Werror")
endif(ENABLE_WERROR)
execute_process(COMMAND bash -c "ls -ld /proc/tofu/ 2>/dev/null | wc -l"
OUTPUT_VARIABLE PROC_TOFU OUTPUT_STRIP_TRAILING_WHITESPACE)
if(PROC_TOFU STREQUAL "1")
option(ENABLE_TOFU "Built-in tofu driver support" ON)
else()
option(ENABLE_TOFU "Built-in tofu driver support" OFF)
endif()
if(ENABLE_TOFU)
add_definitions(-DENABLE_TOFU)
set(KBUILD_C_FLAGS "${KBUILD_C_FLAGS} -DENABLE_TOFU")
endif()
# when compiling on a compute-node
execute_process(COMMAND bash -c "grep $(hostname) /etc/opt/FJSVfefs/config/fefs_node1.csv 2>/dev/null | cut -d, -f2 | grep -o CN"
OUTPUT_VARIABLE FUGAKU_NODE_TYPE OUTPUT_STRIP_TRAILING_WHITESPACE)
if(FUGAKU_NODE_TYPE STREQUAL "CN")
option(ENABLE_FUGAKU_HACKS "Fugaku hacks" ON)
else()
option(ENABLE_FUGAKU_HACKS "Fugaku hacks" OFF)
endif()
if(ENABLE_FUGAKU_HACKS)
add_definitions(-DENABLE_FUGAKU_HACKS)
set(KBUILD_C_FLAGS "${KBUILD_C_FLAGS} -DENABLE_FUGAKU_HACKS")
endif()
# Fujitsu MPI tries to xpmem-attach segment with size of range size + 1?
set(FJMPI_VERSION_COMMAND "a=\$(which mpifcc); b=\${a%/*/*}; c=\${b##*/}; d=\${c#*-}; echo \$d")
execute_process(COMMAND bash -c "${FJMPI_VERSION_COMMAND}"
OUTPUT_VARIABLE FJMPI_VERSION OUTPUT_STRIP_TRAILING_WHITESPACE)
message("FJMPI_VERSION: ${FJMPI_VERSION}")
if(NOT "${FJMPI_VERSION}" STREQUAL "")
option(ENABLE_FJMPI_WORKAROUND "Fujitsu MPI workaround" ON)
else()
option(ENABLE_FJMPI_WORKAROUND "Fujitsu MPI workaround" OFF)
endif()
if(ENABLE_FJMPI_WORKAROUND)
add_definitions(-DENABLE_FJMPI_WORKAROUND)
set(KBUILD_C_FLAGS "${KBUILD_C_FLAGS} -DENABLE_FJMPI_WORKAROUND")
endif()
# krm that mandates reserved memory amount >= available at boot time?
execute_process(COMMAND bash -c "rpm -qi FJSVpxkrm-plugin-mckernel | awk '$1 == \"Version\" && $2 == \":\" { print $3 }'"
OUTPUT_VARIABLE KRM_VERSION OUTPUT_STRIP_TRAILING_WHITESPACE)
message("KRM_VERSION: ${KRM_VERSION}")
if(NOT "${KRM_VERSION}" STREQUAL "" AND "${KRM_VERSION}" VERSION_LESS_EQUAL 4.0.1)
option(ENABLE_KRM_WORKAROUND "krm workaround" ON)
else()
option(ENABLE_KRM_WORKAROUND "krm workaround" OFF)
endif()
if(ENABLE_KRM_WORKAROUND)
add_definitions(-DENABLE_KRM_WORKAROUND)
set(KBUILD_C_FLAGS "${KBUILD_C_FLAGS} -DENABLE_KRM_WORKAROUND")
endif()
# SIGSTOP instead of SIGSEGV, additional IHK Linux kmsg
option(ENABLE_FUGAKU_DEBUG "Fugaku debug instrumentation" OFF)
if(ENABLE_FUGAKU_DEBUG)
add_definitions(-DENABLE_FUGAKU_DEBUG)
set(KBUILD_C_FLAGS "${KBUILD_C_FLAGS} -DENABLE_FUGAKU_DEBUG")
endif()
option(PROFILE_ENABLE "System call profile" ON)
if(PROFILE_ENABLE)
add_definitions(-DPROFILE_ENABLE)
set(KBUILD_C_FLAGS "${KBUILD_C_FLAGS} -DPROFILE_ENABLE")
endif()
option(ENABLE_LINUX_WORK_IRQ_FOR_IKC "Use Linux work IRQ for IKC IPI" ON)
if (ENABLE_LINUX_WORK_IRQ_FOR_IKC)
set(KBUILD_C_FLAGS "${KBUILD_C_FLAGS} -DIHK_IKC_USE_LINUX_WORK_IRQ")
@ -57,10 +137,9 @@ if (ENABLE_LINUX_WORK_IRQ_FOR_IKC)
endif()
if (BUILD_TARGET STREQUAL "smp-arm64")
foreach(i RANGE 1 120)
add_definitions(-DPOSTK_DEBUG_ARCH_DEP_${i} -DPOSTK_DEBUG_TEMP_FIX_${i})
set(KBUILD_C_FLAGS "${KBUILD_C_FLAGS} -DPOSTK_DEBUG_ARCH_DEP_${i} -DPOSTK_DEBUG_TEMP_FIX_${i}")
endforeach()
set(POSTK_DEBUG_DEFINES "-DPOSTK_DEBUG_ARCH_DEP_100 -DPOSTK_DEBUG_ARCH_DEP_42 -DPOSTK_DEBUG_TEMP_FIX_29 -DPOSTK_DEBUG_TEMP_FIX_49")
add_definitions("${POSTK_DEBUG_DEFINES}")
set(KBUILD_C_FLAGS "${KBUILD_C_FLAGS} ${POSTK_DEBUG_DEFINES}")
execute_process(COMMAND awk -F= "$1 == \"CONFIG_ARM64_64K_PAGES\" { print $2; exit; }" "${KERNEL_DIR}/.config"
OUTPUT_VARIABLE CONFIG_ARM64_64K_PAGES OUTPUT_STRIP_TRAILING_WHITESPACE)
@ -155,11 +234,6 @@ if (ENABLE_QLMPI)
find_package(MPI REQUIRED)
endif()
if (ENABLE_UTI)
pkg_check_modules(LIBSYSCALL_INTERCEPT REQUIRED libsyscall_intercept)
link_directories(${LIBSYSCALL_INTERCEPT_LIBRARY_DIRS})
endif()
string(REGEX REPLACE "^([0-9]+)\\.([0-9]+)\\.([0-9]+)(-([0-9]+)(.*))?" "\\1;\\2;\\3;\\5;\\6" LINUX_VERSION ${UNAME_R})
list(GET LINUX_VERSION 0 LINUX_VERSION_MAJOR)
list(GET LINUX_VERSION 1 LINUX_VERSION_MINOR)
@ -170,6 +244,7 @@ math(EXPR LINUX_VERSION_CODE "${LINUX_VERSION_MAJOR} * 65536 + ${LINUX_VERSION_M
# compat with various install paths
set(BINDIR ${CMAKE_INSTALL_FULL_BINDIR})
set(SBINDIR ${CMAKE_INSTALL_FULL_SBINDIR})
set(LIBDIR ${CMAKE_INSTALL_FULL_LIBDIR})
set(ETCDIR ${CMAKE_INSTALL_PREFIX}/etc)
set(ROOTFSDIR "/rootfs")
if (CMAKE_INSTALL_PREFIX STREQUAL "/usr")
@ -252,6 +327,12 @@ message("KBUILD_C_FLAGS: ${KBUILD_C_FLAGS}")
message("MAP_KERNEL_START: ${MAP_KERNEL_START}")
message("ENABLE_MEMDUMP: ${ENABLE_MEMDUMP}")
message("ENABLE_PERF: ${ENABLE_PERF}")
message("ENABLE_TOFU: ${ENABLE_TOFU}")
message("ENABLE_FUGAKU_HACKS: ${ENABLE_FUGAKU_HACKS}")
message("ENABLE_FUGAKU_DEBUG: ${ENABLE_FUGAKU_DEBUG}")
message("ENABLE_KRM_WORKAROUND: ${ENABLE_KRM_WORKAROUND}")
message("ENABLE_FJMPI_WORKAROUND: ${ENABLE_FJMPI_WORKAROUND}")
message("PROFILE_ENABLE: ${PROFILE_ENABLE}")
message("ENABLE_RUSAGE: ${ENABLE_RUSAGE}")
message("ENABLE_QLMPI: ${ENABLE_QLMPI}")
message("ENABLE_UTI: ${ENABLE_UTI}")

540
NEWS.md
View File

@ -1,540 +0,0 @@
=============================================
What's new in version 1.7.0rc4 (Apr 15, 2020)
=============================================
----------------------
McKernel major updates
----------------------
1. arm64: Contiguous PTE support
2. arm64: Scalable Vector Extension (SVE) support
3. arm64: PMU overflow interrupt support
4. xpmem: Support large page attachment
5. arm64 port: Direct access to Mckernel memory from Linux
6. arm64 port: utility thread offloading, which spawns thread onto
Linux CPU
7. eclair: support for live debug
8. Crash utility extension
9. Replace mcoverlayfs with a soft userspace overlay
10. Build system is switched to cmake
11. Core dump includes thread information
------------------------
McKernel major bug fixes
------------------------
1. shmobj: Fix rusage counting for large page
2. mcctrl control: task start_time changed to u64 nsec
3. mcctrl: add handling for one more level of page tables
4. Add kernel argument to turn on/off time sharing
5. flatten_string/process env: realign env and clear trailing bits
6. madvise: Add MADV_HUGEPAGE support
8. mcctrl: remove in-kernel calls to syscalls
9. arch_cpu_read_write_register: error return fix.
10. set_cputime(): interrupt enable/disable fix.
11. set_mempolicy(): Add mode check.
12. mbind(): Fix memory_range_lock deadlock.
13. ihk_ikc_recv: Record channel to packet for release
14. Add set_cputime() kernel to kernel case and mode enum.
15. execve: Call preempt_enable() before error-exit
16. memory/x86_64: fix linux safe_kernel_map
17. do_kill(): fix pids table when nr of threads is larger than num_processors
18. shmget: Use transparent huge pages when page size isn't specified
19. prctl: Add support for PR_SET_THP_DISABLE and PR_GET_THP_DISABLE
20. monitor_init: fix undetected hang on highest numbered core
21. init_process_stack: change premapped stack size based on arch
22. x86 syscalls: add a bunch of XXat() delegated syscalls
23. do_pageout: fix direct kernel-user access
24. stack: add hwcap auxval
25. perf counters: add arch-specific perf counters
26. Added check of nohost to terminate_host().
27. kmalloc: Fix address order in free list
28. sysfs: use nr_cpu_ids for cpumasks (fixes libnuma parsing error on ARM)
29. monitor_init: Use ihk_mc_cpu_info()
30. Fix ThunderX2 write-combined PTE flag insanity
31. ARM: eliminate zero page mapping (i.e, init_low_area())
32. eliminate futex_cmpxchg_enabled check (not used and dereffed a NULL pointer)
33. page_table: Fix return value of lookup_pte when ptl4 is blank
34. sysfs: add missing symlinks for cpu/node
35. Make Linux handler run when mmap to procfs.
36. Separate mmap area from program loading (relocation) area
37. move rusage into kernel ELF image (avoid dynamic alloc before NUMA init)
38. arm: turn off cpu on panic
39. page fault handler: protect thread accesses
40. Register PPD and release_handler at the same time.
41. fix to missing exclusive processing between terminate() and
finalize_process().
42. perfctr_stop: add flags to no 'disable_intens'
43. fileobj, shmobj: free pages in object destructor (as opposed to page_unmap())
44. clear_range_l1, clear_range_middle: Fix handling contiguous PTE
45. do_mmap: don't pre-populate the whole file when asked for smaller segment
46. invalidate_one_page: Support shmobj and contiguous PTE
47. ubsan: fix undefined shifts
48. x86: disable zero mapping and add a boot pt for ap trampoline
49. rusage: Don't count PF_PATCH change
50. Fixed time processing.
51. copy_user_pte: vmap area not owned by McKernel
52. gencore: Zero-clear ELF header and memory range table
53. rpm: ignore CMakeCache.txt in dist and relax BuildRequires on cross build
54. gencore: Allocate ELF header to heap instead of stack
55. nanosleep: add cpu_pause() in spinwait loop
56. init_process: add missing initializations to proc struct
57. rus_vm_fault: always use a packet on the stack
58. process stack: use PAGE_SIZE in aux vector
59. copy_user_pte: base memobj copy on range & VR_PRIVATE
60. arm64: ptrace: Fix overwriting 1st argument with return value
61. page fault: use cow for private device mappings
62. reproductible builds: remove most install paths in c code
63. page fault: clear writable bit for non-dirtying access to shared ranges
64. mcreboot/mcstop+release: support for regular user execution
65. irqbalance_mck: replace extra service with service drop-in
66. do_mmap: give addr argument a chance even if not MAP_FIXED
67. x86: fix xchg() and cmpxchg() macros
68. IHK: support for using Linux work IRQ as IKC interrupt (optional)
69. MCS: fix ARM64 issue by using smp_XXX() functions (i.e., barrier()s)
70. procfs: add number of threads to stat and status
71. memory_range_lock: Fix deadlock in procfs/sysfs handler
72. flush instruction cache at context switch time if necessary
73. arm64: Fix PMU related functions
74. page_fault_process_memory_range: Disable COW for VM region with zeroobj
75. extend_process_region: Fall back to demand paging when not contiguous
76. munmap: fix deadlock with remote pagefault on vm range lock
77. procfs: if memory_range_lock fails, process later
78. migrate-cpu: Prevent migration target from calling schedule() twice
79. sched_request_migrate(): fix race condition between migration req and IRQs
80. get_one_cpu_topology: Renumber core_id (physical core id)
81. bb7e140 procfs cpuinfo: use sequence number as processor
82. set_host_vma(): do NOT read protect Linux VMA
===========================================
What's new in V1.6.0 (Nov 11, 2018)
===========================================
-----------------------------------------------
McKernel new features, improvements and changes
-----------------------------------------------
1. McKernel and Linux share one unified kernel virtual address space.
That is, McKernel sections resides in Linux sections spared for
modules. In this way, Linux can access the McKernel kernel memory
area.
2. hugetlbfs support
3. IHK is now included as a git submodule
4. Debug messages are turned on/off in per souce file basis at run-time.
5. It's prohibited for McKernel to access physical memory ranges which
Linux didn't give to McKernel.
6. UTI (capability to spawn a thread on Linux CPU) improvement:
* System calls issued from the thread are hooked by modifying
binary in memory.
---------------------------
McKernel bug fixes (digest)
---------------------------
#<num> below corresponds to the redmine issue number
(https://postpeta.pccluster.org/redmine/).
1. #926: shmget: Hide object with IPC_RMID from shmget
2. #1028: init_process: Inherit parent cpu_set
3. #995: Fix shebang recorded in argv[0]
4. #1024: Fix VMAP virtual address leak
5. #1109: init_process_stack: Support "ulimit -s unlimited"
6. x86 mem init: do not map identity mapping
7. mcexec_wait_syscall: requeue potential request on interrupted wait
8. mcctrl_ikc_send_wait: fix interrupt with do_frees == NULL
9. pager_req_read: handle short read
10. kprintf: only call eventfd() if it is safe to interrupt
11. process_procfs_request: Add Pid to /proc/<PID>/status
12. terminate: fix oversubscribe hang when waiting for other threads on same CPU to die
13. mcexec: Do not close fd returned to mckernel side
14. #976: execve: Clear sigaltstack and fp_regs
15. #1002: perf_event: Specify counter by bit_mask on start/stop
16. #1027: schedule: Don't reschedule immediately when wake up on migrate
17. #mcctrl: lookup unexported symbols at runtime
18. __sched_wakeup_thread: Notify interrupt_exit() of re-schedule
19. futex_wait_queue_me: Spin-sleep when timeout and idle_halt is specified
20. #1167: ihk_os_getperfevent,setperfevent: Timeout IKC sent by mcctrl
21. devobj: fix object size (POSTK_DEBUG_TEMP_FIX_36)
22. mcctrl: remove rus page cache
23. #1021: procfs: Support multiple reads of e.g. /proc/*/maps
24. #1006: wait: Delay wake-up parent within switch context
25. #1164: mem: Check if phys-mem is within the range of McKernel memory
26. #1039: page_fault_process_memory_range: Remove ihk_mc_map_virtual for CoW of device map
27. partitioned execution: pass process rank to LWK
28. process/vm: implement access_ok()
29. spinlock: rewrite spinlock to use Linux ticket head/tail format
30. #986: Fix deadlock involving mmap_sem and memory_range_lock
31. Prevent one CPU from getting chosen by concurrent forks
32. #1009: check_signal: system call restart is done only once
33. #1176: syscall: the signal received during system call processing is not processed.
34. #1036 syscall_time: Handle by McKernel
35. #1165 do_syscall: Delegate system calls to the mcexec with the same pid
36. #1194 execve: Fix calling ptrace_report_signal after preemption is disabled
37. #1005 coredump: Exclude special areas
38. #1018 procfs: Fix pread/pwrite to procfs fail when specified size is bigger than 4MB
39. #1180 sched_setaffinity: Check migration after decrementing in_interrupt
40. #771, #1179, #1143 ptrace supports threads
41. #1189 procfs/do_fork: wait until procfs entries are registered
42. #1114 procfs: add '/proc/pid/stat' to mckernel side and fix its comm
43. #1116 mcctrl procfs: check entry was returned before using it
44. #1167 ihk_os_getperfevent,setperfevent: Return -ETIME when IKC timeouts
45. mcexec/execve: fix shebangs handling
46. procfs: handle 'comm' on mckernel side
47. ihk_os_setperfevent: Return number of registered events
48. mcexec: fix terminating zero after readlink()
===========================================
What's new in V1.5.1 (July 9, 2018)
===========================================
-----------------------------------------------
McKernel new features, improvements and changes
-----------------------------------------------
1. Watchdog timer to detect hang of McKernel
mcexec prints out the following line to its stderr when a hang of
McKernel is detected.
mcexec detected hang of McKernel
The watchdog timer is enabled by passing -i <timeout_in_sec> option
to mcreboot.sh. <timeout_in_sec> specifies the interval of checking
if McKernel is alive.
Example: mcreboot.sh -i 600: Detect the hang with 10 minutes interval
The detailed step of the hang detection is as follows.
(1) mcexec acquires eventfd for notification from IHK and perform
epoll() on it.
(2) A daemon called ihkmond monitors the state of McKernel periodically
with the interval specified by the -i option. It judges that
McKernel is hanging and notifies mcexec by the eventfd if its
state hasn't changed since the last check.
2. Documentation
man page: Installed directory is changed to <install_dir>/share/man
---------------------------
McKernel bug fixes (digest)
---------------------------
1. #1146: pager_req_map(): do not take mmap_sem if not needed
2. #1135: prepare_process_ranges_args_envs(): fix saving cmdline
3. #1144: fileobj/devobj: record path name
4. #1145: fileobj: use MCS locks for per-file page hash
5. #1076: mcctrl: refactor prepare_image into new generic ikc send&wait
6. #1072: execve: fix execve with oversubscribing
7. #1132: execve: use thread variable instead of cpu_local_var(current)
8. #1117: mprotect: do not set page table writable for cow pages
9. #1143: syscall wait4: add _WALL (POSTK_DEBUG_ARCH_DEP_44)
10. #1064: rusage: Fix initialization of rusage->num_processors
11. #1133: pager_req_unmap: Put per-process data at exit
12. #731: do_fork: Propagate error code returned by mcexec
13. #1149: execve: Reinitialize vm_regions's map area on execve
14. #1065: procfs: Show file names in /proc/<PID>/maps
15. #1112: mremap: Fix type of size arguments (from ssize_t to size_t)
16. #1121: sched_getaffinity: Check arguments in the same order as in Linux
17. #1137: mmap, mremap: Check arguments in the same order as in Linux
18. #1122: fix return value of sched_getaffinity
19. #732: fix: /proc/<PID>/maps outputs a unnecessary NULL character
===================================
What's new in V1.5.0 (Apr 5, 2018)
===================================
--------------------------------------
McKernel new features and improvements
--------------------------------------
1. Aid for Linux version migration: Detect /proc, /sys format change
between two kernel verions
2. Swap out
* Only swap-out anonymous pages for now
3. Improve support of /proc/maps
4. mcstat: Linux tool to show resource usage
---------------------------
McKernel bug fixes (digest)
---------------------------
1. #727: execve: Fix memory leak when receiving SIGKILL
2. #829: perf_event_open: Support PERF_TYPE_HARDWARE and PERF_TYPE_HW_CACHE
3. #906: mcexec: Check return code of fork()
4. #1038: mcexec: Timeout when incorrect value is given to -n option
5. #943 #945 #946 #960 $961: mcexec: Support strace
6. #1029: struct thread is not released with stress-test involving signal
and futex
7. #863 #870: Respond immediately to terminating signal when
offloading system call
8. #1119: translate_rva_to_rpa(): use 2MB blocks in 1GB pages on x86
11. #898: Shutdown OS only after no in-flight IKC exist
12. #882: release_handler: Destroy objects as the process which opened it
13. #882: mcexec: Make child process exit if the parent is killed during
fork()
14. #925: XPMEM: Don't destroy per-process object of the parent
15. #885: ptrace: Support the case where a process attaches its child
16. #1031: sigaction: Support SA_RESETHAND
17. #923: rus_vm_fault: Return error when a thread not performing
system call offloading causes remote page fault
18. #1032 #1033 #1034: getrusage: Fix ru_maxrss, RUSAGE_CHILDREN,
ru_stime related bugs
19. #1120: getrusage: Fix deadlock on thread->times_update
20. #1123: Fix deadlock related to wait_queue_head_list_node
21. #1124: Fix deadlock of calling terminate() from terminate()
22. #1125: Fix deadlock related to thread status
* Related functions are: hold_thread(), do_kill() and terminate()
23. #1126: uti: Fix uti thread on the McKernel side blocks others in do_syscall()
24. #1066: procfs: Show Linux /proc/self/cgroup
25. #1127: prepare_process_ranges_args_envs(): fix generating saved_cmdline to
avoid PF in strlen()
26. #1128: ihk_mc_map/unmap_virtual(): do proper TLB invalidation
27. #1043: terminate(): fix update_lock and threads_lock order to avoid deadlock
28. #1129: mcreboot.sh: Save /proc/irq/*/smp_affinity to /tmp/mcreboot
29. #1130: mcexec: drop READ_IMPLIES_EXEC from personality
--------------------
McKernel workarounds
--------------------
1. Forbid CPU oversubscription
* It can be turned on by mcreboot.sh -O option
===================================
What's new in V1.4.0 (Oct 30, 2017)
===================================
-----------------------------------------------------------
Feature: Abstracted event type support in perf_event_open()
-----------------------------------------------------------
PERF_TYPE_HARDWARE and PERF_TYPE_CACHE types are supported.
----------------------------------
Clean-up: Direct user-space access
----------------------------------
Code lines using direct user-space access (e.g. passing user-space
pointer to memcpy()) becomes more portable across processor
architectures. The modification follows the following rules.
1. Move the code section as it is to the architecture dependent
directory if it is a part of the critical-path.
2. Otherwise, rewrite the code section by using the portable methods.
The methods include copy_from_user(), copy_to_user(),
pte_get_phys() and phys_to_virt().
--------------------------------
Test: MPI and OpenMP micro-bench
--------------------------------
The performance figures of MPI and OpenMP primitives are compared with
those of Linux by using Intel MPI Benchmarks and EPCC OpenMP Micro
Benchmark.
===================================
What's new in V1.3.0 (Sep 30, 2017)
===================================
--------------------
Feature: Kernel dump
--------------------
1. A dump level of "only kernel memory" is added.
The following two levels are available now:
0: Dump all
24: Dump only kernel memory
The dump level can be set by -d option in ihkosctl or the argument
for ihk_os_makedumpfile(), as shown in the following examples:
Command: ihkosctl 0 dump -d 24
Function call: ihk_os_makedumpfile(0, NULL, 24, 0);
2. Dump file is created when Linux panics.
The dump level can be set by dump_level kernel argument, as shown in the
following example:
ihkosctl 0 kargs "hidos dump_level=24"
The IHK dump function is registered to panic_notifier_list when creating
/dev/mcdX and called when Linux panics.
-----------------------------
Feature: Quick Process Launch
-----------------------------
MPI process launch time and some of the initialization time can be
reduced in application consisting of multiple MPI programs which are
launched in turn in the job script.
The following two steps should be performed to use this feature:
1. Replace mpiexec with ql_mpiexec_start and add some lines for
ql_mpiexec_finalize in the job script
2. Modify the app so that it can repeat calculations and wait for the
instructions from ql_mpiexec_{start,finalize} at the end of the
loop
The first step is explained using an example. Assume the original job
script looks like this:
/* Execute ensamble simulation and then data assimilation, and repeat this
ten times */
for i in {1..10}; do
/* Each ensamble simulation execution uses 100 nodes, launch ten of them
in parallel */
for j in {1..10}; do
mpiexec -n 100 -machinefile ./list1_$j p1.out a1 & pids[$i]=$!;
done
/* Wait until the ten ensamble simulation programs finish */
for j in {1..10}; do wait ${pids[$j]}; done
/* Launch one data assimilation program using 1000 nodes */
mpiexec -n 1000 -machinefile ./list2 p2.out a2
done
The job script should be modified like this:
for i in {1..10}; do
for j in {1..10}; do
/* Replace mpiexec with ql_mpiexec_start */
ql_mpiexec_start -n 100 -machinefile ./list1_$j p1.out a1 & pids[$j]=$!;
done
for j in {1..10}; do wait ${pids[$j]}; done
ql_mpiexec_start -n 1000 -machinefile ./list2 p2.out a2
done
/* p1.out and p2.out don't exit but are waiting for the next calculation.
So tell them to exit */
for j in {1..10}; do
ql_mpiexec_finalize -machinefile ./list1_$i p1.out a1;
done
ql_mpiexec_finalize -machinefile ./list2 p2.out a2;
The second step is explained using a pseudo-code.
MPI_Init();
Prepare data exchange with preceding / following MPI programs
loop:
foreach Fortran module
Initialize data using command-line argments, parameter files,
environment variables
Input data from preceding MPI programs / Read snap-shot
Perform main calculation
Output data to following MPI programs / Write snap-shot
/* ql_client() waits for command of ql_mpiexec_{start,finish} */
if (ql_client() == QL_CONTINUE) { goto loop; }
MPI_Finalize();
qlmpilib.h should be included in the code and libql{mpi,fort}.so
should be linked to the executable file.
========================
Restrictions on McKernel
========================
1. Pseudo devices such as /dev/mem and /dev/zero are not mmap()ed
correctly even if the mmap() returns a success. An access of their
mapping receives the SIGSEGV signal.
2. clone() supports only the following flags. All the other flags
cause clone() to return error or are simply ignored.
* CLONE_CHILD_CLEARTID
* CLONE_CHILD_SETTID
* CLONE_PARENT_SETTID
* CLONE_SETTLS
* CLONE_SIGHAND
* CLONE_VM
3. PAPI has the following restriction.
* Number of counters a user can use at the same time is up to the
number of the physical counters in the processor.
4. msync writes back only the modified pages mapped by the calling process.
5. The following syscalls always return the ENOSYS error.
* migrate_pages()
* move_pages()
* set_robust_list()
6. The following syscalls always return the EOPNOTSUPP error.
* arch_prctl(ARCH_SET_GS)
* signalfd()
7. signalfd4() returns a fd, but signal is not notified through the
fd.
8. set_rlimit sets the limit values but they are not enforced.
9. Address randomization is not supported.
10. brk() extends the heap more than requestd when -h
(--extend-heap-by=)<step> option of mcexec is used with the value
larger than 4 KiB. syscall_pwrite02 of LTP would fail for this
reason. This is because the test expects that the end of the heap
is set to the same address as the argument of sbrk() and expects a
segmentation violation occurs when it tries to access the memory
area right next to the boundary. However, the optimization sets
the end to a value larger than the requested. Therefore, the
expected segmentation violation doesn't occur.
11. setpriority()/getpriority() won't work. They might set/get the
priority of a random mcexec thread. This is because there's no
fixed correspondence between a McKernel thread which issues the
system call and a mcexec thread which handles the offload request.
12. mbind() can set the policy but it is not used when allocating
physical pages.
13. MPOL_F_RELATIVE_NODES and MPOL_INTERLEAVE flags for
set_mempolicy()/mbind() are not supported.
14. The MPOL_BIND policy for set_mempolicy()/mbind() works as the same
as the MPOL_PREFERRED policy. That is, the physical page allocator
doesn't give up the allocation when the specified nodes are
running out of pages but continues to search pages in the other
nodes.
15. Kernel dump on Linux panic requires Linux kernel CentOS-7.4 and
later. In addition, crash_kexec_post_notifiers kernel argument
must be given to Linux kernel.
16. setfsuid()/setfsgid() cannot change the id of the calling thread.
Instead, it changes that of the mcexec worker thread which takes
the system-call offload request.
17. mmap (hugeTLBfs): The physical pages corresponding to a map are
released when no McKernel process exist. The next map gets fresh
physical pages.
18. Sticky bit on executable file has no effect.
19. Linux (RHEL-7 for x86_64) could hang when offlining CPUs in the
process of booting McKernel due to the Linux bug, found in
Linux-3.10 and fixed in the later version. One way to circumvent
this is to always assign the same CPU set to McKernel.
20. madvise:
* MADV_HWPOISON and MADV_SOFT_OFFLINE always returns -EPERM.
* MADV_MERGEABLE and MADV_UNMERGEABLE always returns -EINVAL.
* MADV_HUGEPAGE and MADV_NOHUGEPAGE on file map returns -EINVAL
(It succeeds on RHEL-8 for aarch64).
21. brk() and mmap() doesn't report out-of-memory through its return
value. Instead, page-fault reports the error.
22. Anonymous mmap pre-maps requested number of pages when contiguous
pages are available. Demand paging is used when not available.
23. Mixing page sizes in anonymous shared mapping is not allowed. mmap
creates vm_range with one page size. And munmap or mremap that
needs the reduced page size changes the sizes of all the pages of
the vm_range.
24. ihk_os_getperfevent() could time-out when invoked from Fujitsu TCS
(job-scheduler).
25. The behaviors of madvise and mbind are changed to do nothing and
report success as a workaround for Fugaku.
26. mmap() allows unlimited overcommit. Note that it corresponds to
setting sysctl ``vm.overcommit_memory`` to 1.

285
README.md
View File

@ -1,285 +0,0 @@
![McKernel Logo](https://www.sys.r-ccs.riken.jp/members_files/bgerofi/mckernel-logo.png)
-------------------------
IHK/McKernel is a light-weight multi-kernel operating system designed for high-end supercomputing. It runs Linux and McKernel, a light-weight kernel (LWK), side-by-side inside compute nodes and aims at the following:
- Provide scalable and consistent execution of large-scale parallel scientific applications, but at the same time maintain the ability to rapidly adapt to new hardware features and emerging programming models
- Provide efficient memory and device management so that resource contention and data movement are minimized at the system level
- Eliminate OS noise by isolating OS services in Linux and provide jitter free execution on the LWK
- Support the full POSIX/Linux APIs by selectively offloading (slow-path) system calls to Linux
## Contents
- [Background](#background-and-motivation)
- [Architectural Overview](#architectural-overview)
- [Installation](#installation)
- [The Team](#the-team)
## Background and Motivation
With the growing complexity of high-end supercomputers, the current system software stack faces significant challenges as we move forward to exascale and beyond. The necessity to deal with extreme degree of parallelism, heterogeneous architectures, multiple levels of memory hierarchy, power constraints, etc., advocates operating systems that can rapidly adapt to new hardware requirements, and that can support novel programming paradigms and runtime systems. On the other hand, a new class of more dynamic and complex applications are also on the horizon, with an increasing demand for application constructs such as in-situ analysis, workflows, elaborate monitoring and performance tools. This complexity relies not only on the rich features of POSIX, but also on the Linux APIs (such as the */proc*, */sys* filesystems, etc.) in particular.
##### Two Traditional HPC OS Approaches
Traditionally, light-weight operating systems specialized for HPC followed two approaches to tackle scalable execution of large-scale applications. In the full weight kernel (FWK) approach, a full Linux environment is taken as the basis, and features that inhibit attaining HPC scalability are removed, i.e., making it light-weight. The pure light-weight kernel (LWK) approach, on the other hand, starts from scratch and effort is undertaken to add sufficient functionality so that it provides a familiar API, typically something close to that of a general purpose OS, while at the same time it retains the desired scalability and reliability attributes. Neither of these approaches yields a fully Linux compatible environment.
##### The Multi-kernel Approach
A hybrid approach recognized recently by the system software community is to run Linux simultaneously with a lightweight kernel on compute nodes and multiple research projects are now pursuing this direction. The basic idea is that simulations run on an HPC tailored lightweight kernel, ensuring the necessary isolation for noiseless execution of parallel applications, but Linux is leveraged so that the full POSIX API is supported. Additionally, the small code base of the LWK can also facilitate rapid prototyping for new, exotic hardware features. Nevertheless, the questions of how to share node resources between the two types of kernels, where do device drivers execute, how exactly do the two kernels interact with each other and to what extent are they integrated, remain subjects of ongoing debate.
## Architectural Overview
At the heart of the stack is a low-level software infrastructure called Interface for Heterogeneous Kernels (IHK). IHK is a general framework that provides capabilities for partitioning resources in a many-core environment (e.g.,CPU cores and physical memory) and it enables management of lightweight kernels. IHK can allocate and release host resources dynamically and no reboot of the host machine is required when altering configuration. IHK also provides a low-level inter-kernel messaging infrastructure, called the Inter-Kernel Communication (IKC) layer. An architectural overview of the main system components is shown below.
![arch](https://www.sys.r-ccs.riken.jp/members_files/bgerofi/mckernel.png)
McKernel is a lightweight kernel written from scratch. It is designed for HPC and is booted from IHK. McKernel retains a binary compatible ABI with Linux, however, it implements only a small set of performance sensitive system calls and the rest are offloaded to Linux. Specifically, McKernel has its own memory management, it supports processes and multi-threading with a simple round-robin cooperative (tick-less) scheduler, and it implements signaling. It also allows inter-process memory mappings and it provides interfaces to hardware performance counters.
### Functionality
An overview of some of the principal functionalities of the IHK/McKernel stack is provided below.
#### System Call Offloading
System call forwarding in McKernel is implemented as follows. When an offloaded system call occurs, McKernel marshals the system call number along with its arguments and sends a message to Linux via a dedicated IKC channel. The corresponding proxy process running on Linux is by default waiting for system call requests through an ioctl() call into IHKs system call delegator kernel module. The delegator kernel modules IKC interrupt handler wakes up the proxy process, which returns to userspace and simply invokes the requested system call. Once it obtains the return value, it instructs the delegator module to send the result back to McKernel, which subsequently passes the value to user-space.
#### Unified Address Space
The unified address space model in IHK/McKernel ensures that offloaded system calls can seamlessly resolve arguments even in case of pointers. This mechanism is depicted below and is implemented as follows.
![unified_ap](https://www.sys.r-ccs.riken.jp/members_files/bgerofi/img/unified_address_space_en.png)
First, the proxy process is compiled as a position independent binary, which enables us to map the code and data segments specific to the proxy process to an address range which is explicitly excluded from McKernels user space. The grey box on the right side of the figure demonstrates the excluded region. Second, the entire valid virtual address range of McKernels application user-space is covered by a special mapping in the proxy process for which we use a pseudo file mapping in Linux. This mapping is indicated by the blue box on the left side of the figure.
## Installation
For a smooth experience, we recommend the following combination of OS distributions and platforms:
- CentOS 7.3+ running on Intel Xeon / Xeon Phi
##### 1. Change SELinux settings
Log in as the root and disable SELinux:
~~~~
vim /etc/selinux/config
~~~~
Change the file to SELINUX=disabled
##### 2. Reboot the host machine
~~~~
sudo reboot
~~~~
##### 3. Prepare packages, kernel symbol table file
You will need the following packages installed:
~~~~
sudo yum install cmake kernel-devel binutils-devel systemd-devel numactl-devel gcc make nasm git
~~~~
Grant read permission to the System.map file of your kernel version:
~~~~
sudo chmod a+r /boot/System.map-`uname -r`
~~~~
##### 4. Obtain sources and compile the kernel
Clone the source code:
~~~~
mkdir -p ~/src/ihk+mckernel/
cd ~/src/ihk+mckernel/
git clone --recursive -b development https://github.com/RIKEN-SysSoft/mckernel.git
~~~~
(Optional) Checkout to the specific branch or version:
~~~~
cd mckernel
git checkout <pathspec>
git submodule update
~~~~
Foe example, if you want to try the development branch, use "development" as the pathspec. If you want to try the prerelease version 1.7.0-0.2, use "1.7.0-0.2".
###### 4.1 Install with cmake
Configure and compile:
~~~~
mkdir -p build && cd build
cmake -DCMAKE_INSTALL_PREFIX=${HOME}/ihk+mckernel $HOME/src/ihk+mckernel/mckernel
make -j install
~~~~
The IHK kernel modules and McKernel kernel image should be installed under the **ihk+mckernel** folder in your home directory.
###### 4.2 Install with rpm
Configure, compile and build rpm:
~~~~
mkdir -p build && cd build
cmake $HOME/src/ihk+mckernel/mckernel
make dist
cp mckernel-<version>.tar.gz <rpmbuild>/SOURCES
rpm -ba scripts/mckernel.spec
sudo rpm -ivh <rpmbuild>/RPMS/<arch>/mckernel-<version>-<release>_<linux_kernel_ver>_<dist>.<arch>.rpm
~~~~
The IHK kernel modules and McKernel kernel image are installed under the system directory.
##### 5. Boot McKernel
A boot script called mcreboot.sh is provided under sbin in the install folder. To boot on logical CPU 1 with 512MB of memory, use the following invocation:
~~~~
export TOP=${HOME}/ihk+mckernel/
cd ${TOP}
sudo ./sbin/mcreboot.sh -c 1 -m 512m
~~~~
You should see something similar like this if you display the McKernel's kernel message log:
~~~~
./sbin/ihkosctl 0 kmsg
IHK/McKernel started.
[ -1]: no_execute_available: 1
[ -1]: map_fixed: phys: 0xfee00000 => 0xffff860000009000 (1 pages)
[ -1]: setup_x86 done.
[ -1]: ns_per_tsc: 385
[ -1]: KCommand Line: hidos dump_level=24
[ -1]: Physical memory: 0x1ad3000 - 0x21000000, 525520896 bytes, 128301 pages available @ NUMA: 0
[ -1]: NUMA: 0, Linux NUMA: 0, type: 1, available bytes: 525520896, pages: 128301
[ -1]: NUMA 0 distances: 0 (10),
[ -1]: map_fixed: phys: 0x28000 => 0xffff86000000a000 (2 pages)
[ -1]: Trampoline area: 0x28000
[ -1]: map_fixed: phys: 0x0 => 0xffff86000000c000 (1 pages)
[ -1]: # of cpus : 1
[ -1]: locals = ffff880001af6000
[ 0]: BSP: 0 (HW ID: 1 @ NUMA 0)
[ 0]: BSP: booted 0 AP CPUs
[ 0]: Master channel init acked.
[ 0]: vdso is enabled
IHK/McKernel booted.
~~~~
##### 5. Run a simple program on McKernel
The mcexec command line tool (which is also the Linux proxy process) can be used for executing applications on McKernel:
~~~~
./bin/mcexec hostname
centos-vm
~~~~
##### 6. Shutdown McKernel
Finally, to shutdown McKernel and release CPU/memory resources back to Linux use the following command:
~~~~
sudo ./sbin/mcstop+release.sh
~~~~
##### 7. Advanced: Enable Utility Thread offloading Interface (UTI)
UTI enables a runtime such as MPI runtime to spawn utility threads such as MPI asynchronous progress threads to Linux cores.
1. Install capstone
Install EPEL capstone-devel:
~~~~
sudo yum install epel-release
sudo yum install capstone-devel
~~~~
2. Install syscall_intercept
~~~~
git clone https://github.com/RIKEN-SysSoft/syscall_intercept.git
cmake ../arch/aarch64 -DCMAKE_INSTALL_PREFIX=<syscall-intercept-install> -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER=gcc -DTREAT_WARNINGS_AS_ERRORS=OFF
~~~~
3. Install UTI for McKernel
Install:
~~~~
git clone https://github.com/RIKEN-SysSoft/uti.git
mkdir build && cd build
../uti/configure --prefix=<mckernel-install> --with-rm=mckernel
make && make install
~~~~
4. Install McKernel
~~~~
CMAKE_PREFIX_PATH=<syscall-intercept-install> cmake -DCMAKE_INSTALL_PREFIX=${HOME}/ihk+mckernel -DENABLE_UTI=ON $HOME/src/ihk+mckernel/mckernel
~~~~
5. Run executable
~~~~
mcexec --enable-uti <command>
~~~~
6. Install UTI for Linux for performance comparison
Install by make:
~~~~
git clone https://github.com/RIKEN-SysSoft/uti.git
mkdir build && cd build
../uti/configure --prefix=<uti-install> --with-rm=linux
make && make install
~~~~
Install by rpm:
~~~~
git clone https://github.com/RIKEN-SysSoft/uti.git
mkdir build && cd build
../uti/configure --prefix=<uti-install> --with-rm=linux
rm -f ~/rpmbuild/SOURCES/<version>.tar.gz
rpmbuild -ba ./scripts/uti.spec
rpm -Uvh uti-<version>-<release>-<arch>.rpm
~~~~
## The Team
The McKernel project was started at The University of Tokyo and currently it is mainly developed at RIKEN.
Some of our collaborators include:
- Hitachi
- Fujitsu
- CEA (France)
- NEC
## License
McKernel is GPL licensed, as found in the LICENSE file.
## Contact
Please give your feedback to us via one of the following mailing lists. Subscription via [www.pccluster.org](http://www.pccluster.org/mailman/listinfo/mckernel-users) is needed.
* English: mckernel-users@pccluster.org
* Japanese: mckernel-users-jp@pccluster.org

23
README.rst Normal file
View File

@ -0,0 +1,23 @@
.. figure:: docs/mckernel-logo.png
IHK/McKernel is a light-weight multi-kernel operating system designed
for high-end supercomputing. It runs Linux and McKernel, a light-weight
kernel (LWK), side-by-side inside compute nodes and aims at the
following:
- Provide scalable and consistent execution of large-scale parallel
scientific applications, but at the same time maintain the ability to
rapidly adapt to new hardware features and emerging programming
models
- Provide efficient memory and device management so that resource
contention and data movement are minimized at the system level
- Eliminate OS noise by isolating OS services in Linux and provide
jitter free execution on the LWK
- Support the full POSIX/Linux APIs by selectively offloading
(slow-path) system calls to Linux
Documentation
=============
Documentation is available
`here <https://ihkmckernel.readthedocs.io>`__.

View File

@ -143,6 +143,11 @@ void arch_save_panic_regs(void *irq_regs)
clv = get_arm64_this_cpu_local();
/* If kernel mode PF occurred, unroll the causing call stack */
if (cpu_local_var(kernel_mode_pf_regs)) {
regs = cpu_local_var(kernel_mode_pf_regs);
}
/* For user-space, use saved kernel context */
if (regs->pc < USER_END) {
memset(clv->arm64_cpu_local_thread.panic_regs,
@ -725,6 +730,49 @@ static void show_context_stack(struct pt_regs *regs)
}
}
#ifdef ENABLE_FUGAKU_HACKS
void __show_context_stack(struct thread *thread,
unsigned long pc, uintptr_t sp, int kprintf_locked)
{
uintptr_t stack_top;
unsigned long irqflags = 0;
stack_top = ALIGN_UP(sp, (uintptr_t)KERNEL_STACK_SIZE);
if (!kprintf_locked)
irqflags = kprintf_lock();
__kprintf("TID: %d, call stack (most recent first):\n",
thread->tid);
__kprintf("PC: %016lx, SP: %016lx\n", pc, sp);
for (;;) {
extern char _head[], _end[];
uintptr_t *fp, *lr;
fp = (uintptr_t *)sp;
lr = (uintptr_t *)(sp + 8);
if ((*fp <= sp)) {
break;
}
if ((*fp > stack_top)) {
break;
}
if ((*lr < (unsigned long)_head) ||
(*lr > (unsigned long)_end)) {
break;
}
__kprintf("PC: %016lx, SP: %016lx, FP: %016lx\n", *lr - 4, sp, *fp);
sp = *fp;
}
if (!kprintf_locked)
kprintf_unlock(irqflags);
}
#endif
void handle_IPI(unsigned int vector, struct pt_regs *regs)
{
struct ihk_mc_interrupt_handler *h;
@ -786,6 +834,19 @@ void cpu_safe_halt(void)
cpu_enable_interrupt();
}
#ifdef ENABLE_FUGAKU_HACKS
/*@
@ assigns \nothing;
@ ensures \interrupt_disabled == 0;
@*/
void cpu_halt_panic(void)
{
extern void __cpu_do_idle(void);
cpu_enable_interrupt();
__cpu_do_idle();
}
#endif
#if defined(CONFIG_HAS_NMI)
#include <arm-gic-v3.h>
@ -851,6 +912,21 @@ unsigned long cpu_enable_interrupt_save(void)
return flags;
}
#ifdef ENABLE_FUGAKU_HACKS
int cpu_interrupt_disabled(void)
{
unsigned long flags;
unsigned long masked = ICC_PMR_EL1_MASKED;
asm volatile(
"mrs_s %0, " __stringify(ICC_PMR_EL1)
: "=&r" (flags)
:
: "memory");
return (flags == masked);
}
#endif
#else /* defined(CONFIG_HAS_NMI) */
/* @ref.impl arch/arm64/include/asm/irqflags.h::arch_local_irq_enable */
@ -1372,6 +1448,14 @@ void arch_print_stack(void)
{
}
#ifdef ENABLE_FUGAKU_HACKS
unsigned long arch_get_instruction_address(const void *reg)
{
const struct pt_regs *regs = (struct pt_regs *)reg;
return regs->pc;
}
#endif
void arch_show_interrupt_context(const void *reg)
{
const struct pt_regs *regs = (struct pt_regs *)reg;
@ -1440,6 +1524,11 @@ int ihk_mc_arch_get_special_register(enum ihk_asr_type type,
return -1;
}
int ihk_mc_get_interrupt_id(int cpu)
{
return cpu;
}
/*@
@ requires \valid_cpuid(cpu); // valid CPU logical ID
@ ensures \result == 0
@ -1888,15 +1977,15 @@ int arch_cpu_read_write_register(
return ret;
}
int smp_call_func(cpu_set_t *__cpu_set, smp_func_t __func, void *__arg)
{
/* TODO: skeleton for smp_call_func */
return -1;
}
void arch_flush_icache_all(void)
{
asm("ic ialluis");
dsb(ish);
}
int ihk_mc_get_smp_handler_irq(void)
{
return LOCAL_SMP_FUNC_CALL_VECTOR;
}
/*** end of file ***/

View File

@ -89,9 +89,6 @@
mov x2, #0
bl check_signal_irq_disabled // check whether the signal is delivered(for kernel_exit)
.endif
.if \el == 1
bl check_sig_pending
.endif
disable_irq x1 // disable interrupts
.if \need_enable_step == 1
ldr x1, [tsk, #TI_FLAGS]

View File

@ -223,7 +223,12 @@ static int do_translation_fault(unsigned long addr,
unsigned int esr,
struct pt_regs *regs)
{
#ifdef ENABLE_TOFU
// XXX: Handle kernel space page faults for Tofu driver
//if (addr < USER_END)
#else
if (addr < USER_END)
#endif
return do_page_fault(addr, esr, regs);
do_bad_area(addr, esr, regs);

View File

@ -7,7 +7,8 @@
* @ref.impl
* linux-linaro/arch/arm64/include/asm/futex.h:__futex_atomic_op
*/
#define __futex_atomic_op(insn, ret, oldval, uaddr, tmp, oparg) \
#define ___futex_atomic_op(insn, ret, oldval, uaddr, tmp, oparg) \
do { \
asm volatile( \
"1: ldxr %w1, %2\n" \
insn "\n" \
@ -26,7 +27,24 @@
" .popsection\n" \
: "=&r" (ret), "=&r" (oldval), "+Q" (*uaddr), "=&r" (tmp) \
: "r" (oparg), "Ir" (-EFAULT) \
: "memory")
: "memory"); \
} while (0);
#ifndef IHK_OS_MANYCORE
#include <linux/uaccess.h>
#define __futex_atomic_op(insn, ret, oldval, uaddr, tmp, oparg) \
do { \
uaccess_enable(); \
___futex_atomic_op(insn, ret, oldval, uaddr, tmp, oparg) \
uaccess_disable(); \
} while (0);
#else
#define __futex_atomic_op(insn, ret, oldval, uaddr, tmp, oparg) \
___futex_atomic_op(insn, ret, oldval, uaddr, tmp, oparg) \
#endif
/*
* @ref.impl
@ -135,12 +153,4 @@ futex_atomic_cmpxchg_inatomic(int __user *uaddr, int oldval, int newval)
return ret;
}
static inline int get_futex_value_locked(uint32_t *dest, uint32_t *from)
{
*dest = *(volatile uint32_t *)from;
return 0;
}
#endif /* !__HEADER_ARM64_COMMON_ARCH_FUTEX_H */

View File

@ -9,6 +9,9 @@
#include "affinity.h"
#include <lwk/compiler.h>
#include "config.h"
#ifdef ENABLE_FUGAKU_HACKS
#include <ihk/debug.h>
#endif
//#define DEBUG_SPINLOCK
//#define DEBUG_MCS_RWLOCK
@ -31,6 +34,10 @@ typedef struct {
#endif /* __AARCH64EB__ */
} __attribute__((aligned(4))) ihk_spinlock_t;
#ifdef ENABLE_FUGAKU_HACKS
extern ihk_spinlock_t *get_this_cpu_runq_lock(void);
#endif
extern void preempt_enable(void);
extern void preempt_disable(void);
@ -98,6 +105,18 @@ static int __ihk_mc_spinlock_trylock_noirq(ihk_spinlock_t *lock)
: "memory");
success = !tmp;
#ifdef ENABLE_FUGAKU_HACKS
#if 0
if (success) {
if (get_this_cpu_runq_lock() == lock &&
!cpu_interrupt_disabled()) {
kprintf("%s: WARNING: runq lock held without IRQs disabled?\n", __func__); \
}
}
#endif
#endif
if (!success) {
preempt_enable();
}
@ -182,6 +201,14 @@ static void __ihk_mc_spinlock_lock_noirq(ihk_spinlock_t *lock)
: "=&r" (lockval), "=&r" (newval), "=&r" (tmp), "+Q" (*lock)
: "Q" (lock->owner), "I" (1 << TICKET_SHIFT)
: "memory");
#ifdef ENABLE_FUGAKU_HACKS
#if 0
if (get_this_cpu_runq_lock() == lock &&
!cpu_interrupt_disabled()) {
kprintf("%s: WARNING: runq lock held without IRQs disabled?\n", __func__); \
}
#endif
#endif
}
#ifdef DEBUG_SPINLOCK

View File

@ -94,7 +94,11 @@ extern char _end[];
# define LD_TASK_UNMAPPED_BASE UL(0x0000080000000000)
# define TASK_UNMAPPED_BASE UL(0x0000100000000000)
# define USER_END UL(0x0000400000000000)
#ifdef ENABLE_TOFU
# define MAP_VMAP_START UL(0xffff7bdfffff0000)
#else
# define MAP_VMAP_START UL(0xffff780000000000)
#endif
# define MAP_VMAP_SIZE UL(0x0000000100000000)
# define MAP_FIXED_START UL(0xffff7ffffbdd0000)
# define MAP_ST_START UL(0xffff800000000000)
@ -142,6 +146,7 @@ extern char _end[];
# define __PTL1_SHIFT 16
# define PTL4_INDEX_MASK 0
# define PTL3_INDEX_MASK ((UL(1) << 6) - 1)
# define PTL3_INDEX_MASK_LINUX ((UL(1) << 10) - 1)
# define PTL2_INDEX_MASK ((UL(1) << 13) - 1)
# define PTL1_INDEX_MASK PTL2_INDEX_MASK
# define __PTL4_CONT_SHIFT (__PTL4_SHIFT + 0)
@ -778,32 +783,8 @@ static inline pte_t *get_contiguous_tail(pte_t *__ptep, size_t __pgsize)
return (pte_t *)__page_align_up(__ptep + 1, align) - 1;
}
static inline int split_contiguous_pages(pte_t *ptep, size_t pgsize)
{
int ret;
pte_t *head = get_contiguous_head(ptep, pgsize);
pte_t *tail = get_contiguous_tail(ptep, pgsize);
pte_t *ptr;
uintptr_t phys;
struct page *page;
phys = pte_get_phys(head);
page = phys_to_page(phys);
if (page && (page_is_in_memobj(page)
|| page_is_multi_mapped(page))) {
ret = -EINVAL;
goto out;
}
for (ptr = head; ptr <= tail; ptr++) {
*ptr &= ~PTE_CONT;
}
ret = 0;
out:
return ret;
}
int split_contiguous_pages(pte_t *ptep, size_t pgsize,
uint32_t memobj_flags);
static inline int page_is_contiguous_head(pte_t *ptep, size_t pgsize)
{
@ -829,7 +810,13 @@ static inline int pte_is_head(pte_t *ptep, pte_t *old, size_t cont_size)
return page_is_contiguous_head(ptep, cont_size);
}
struct page_table;
typedef pte_t translation_table_t;
struct page_table {
translation_table_t* tt;
translation_table_t* tt_pa;
int asid;
};
void arch_adjust_allocate_page_size(struct page_table *pt,
uintptr_t fault_addr,
pte_t *ptep,
@ -849,7 +836,6 @@ void *map_fixed_area(unsigned long phys, unsigned long size, int uncachable);
void set_address_space_id(struct page_table *pt, int asid);
int get_address_space_id(const struct page_table *pt);
typedef pte_t translation_table_t;
void set_translation_table(struct page_table *pt, translation_table_t* tt);
translation_table_t* get_translation_table(const struct page_table *pt);
translation_table_t* get_translation_table_as_paddr(const struct page_table *pt);

View File

@ -10,4 +10,13 @@ extern void *__inline_memcpy(void *to, const void *from, size_t t);
extern void *__inline_memset(void *s, unsigned long c, size_t count);
#define ARCH_MEMCLEAR
extern void __memclear(void *addr, unsigned long len, void *tmp);
inline static void memclear(void *addr, unsigned long len)
{
uint64_t q0q1[4];
__memclear(addr, len, (void *)&q0q1);
}
#endif /* __HEADER_ARM64_COMMON_ARCH_TIMER_H */

View File

@ -80,6 +80,10 @@ static inline uint64_t __raw_readq(const volatile void *addr)
return val;
}
/* IO barriers */
#define __iormb() rmb()
#define __iowmb() wmb()
/*
* Relaxed I/O memory access primitives. These follow the Device memory
* ordering rules but do not guarantee any ordering relative to Normal memory
@ -95,5 +99,20 @@ static inline uint64_t __raw_readq(const volatile void *addr)
#define writel_relaxed(v,c) ((void)__raw_writel((uint32_t)(v),(c)))
#define writeq_relaxed(v,c) ((void)__raw_writeq((uint64_t)(v),(c)))
/*
* I/O memory access primitives. Reads are ordered relative to any
* following Normal memory access. Writes are ordered relative to any prior
* Normal memory access.
*/
#define readb(c) ({ uint8_t __v = readb_relaxed(c); __iormb(); __v; })
#define readw(c) ({ uint16_t __v = readw_relaxed(c); __iormb(); __v; })
#define readl(c) ({ uint32_t __v = readl_relaxed(c); __iormb(); __v; })
#define readq(c) ({ uint64_t __v = readq_relaxed(c); __iormb(); __v; })
#define writeb(v,c) ({ __iowmb(); writeb_relaxed((v),(c)); })
#define writew(v,c) ({ __iowmb(); writew_relaxed((v),(c)); })
#define writel(v,c) ({ __iowmb(); writel_relaxed((v),(c)); })
#define writeq(v,c) ({ __iowmb(); writeq_relaxed((v),(c)); })
#endif /* __KERNEL__ */
#endif /* __ASM_IO_H */

View File

@ -17,6 +17,7 @@
#define INTRID_STACK_TRACE 5
#define INTRID_MULTI_INTR 6
#define INTRID_MULTI_NMI 7
#define LOCAL_SMP_FUNC_CALL_VECTOR 1 /* same as IKC */
/* use PPI interrupt number */
#define INTRID_PERF_OVF 23

View File

@ -85,7 +85,11 @@ enum __rlimit_resource
__RLIMIT_RTPRIO = 14,
#define RLIMIT_RTPRIO __RLIMIT_RTPRIO
__RLIMIT_NLIMITS = 15,
/* timeout for RT tasks in us */
__RLIMIT_RTTIME = 15,
#define RLIMIT_RTTIME __RLIMIT_RTTIME
__RLIMIT_NLIMITS = 16,
__RLIM_NLIMITS = __RLIMIT_NLIMITS
#define RLIMIT_NLIMITS __RLIMIT_NLIMITS
#define RLIM_NLIMITS __RLIM_NLIMITS

View File

@ -118,12 +118,13 @@ SYSCALL_HANDLED(241, perf_event_open)
SYSCALL_DELEGATED(241, perf_event_open)
#endif // PERF_ENABLE
SYSCALL_HANDLED(260, wait4)
SYSCALL_HANDLED(261, prlimit64)
SYSCALL_HANDLED(270, process_vm_readv)
SYSCALL_HANDLED(271, process_vm_writev)
SYSCALL_HANDLED(281, execveat)
SYSCALL_HANDLED(700, get_cpu_id)
#ifdef PROFILE_ENABLE
SYSCALL_HANDLED(__NR_profile, profile)
SYSCALL_HANDLED(PROFILE_EVENT_MAX, profile)
#endif // PROFILE_ENABLE
SYSCALL_HANDLED(730, util_migrate_inter_kernel)
SYSCALL_HANDLED(731, util_indicate_clone)

View File

@ -2,7 +2,7 @@
#ifndef __HEADER_ARM64_COMMON_THREAD_INFO_H
#define __HEADER_ARM64_COMMON_THREAD_INFO_H
#define MIN_KERNEL_STACK_SHIFT 15
#define MIN_KERNEL_STACK_SHIFT 18
#include <arch-memory.h>

View File

@ -7,6 +7,9 @@
#include <process.h>
#include <syscall.h>
#include <ihk/debug.h>
#ifdef ENABLE_FUGAKU_HACKS
#include <ihk/monitor.h>
#endif
#include <arch-timer.h>
#include <cls.h>
@ -313,14 +316,27 @@ void handle_interrupt_gicv3(struct pt_regs *regs)
struct cpu_local_var *v = get_this_cpu_local_var();
//unsigned long irqflags;
int do_check = 0;
#ifdef ENABLE_FUGAKU_HACKS
struct ihk_os_cpu_monitor *monitor = cpu_local_var(monitor);
++v->in_interrupt;
#endif
irqnr = gic_read_iar();
cpu_enable_nmi();
set_cputime(from_user ? CPUTIME_MODE_U2K : CPUTIME_MODE_K2K_IN);
while (irqnr != ICC_IAR1_EL1_SPURIOUS) {
if ((irqnr < 1020) || (irqnr >= 8192)) {
gic_write_eoir(irqnr);
#ifndef ENABLE_FUGAKU_HACKS
handle_IPI(irqnr, regs);
#else
/* Once paniced, only allow CPU stop and NMI IRQs */
if (monitor->status != IHK_OS_MONITOR_PANIC ||
irqnr == INTRID_CPU_STOP ||
irqnr == INTRID_MULTI_NMI) {
handle_IPI(irqnr, regs);
}
#endif
}
irqnr = gic_read_iar();
}
@ -328,14 +344,22 @@ void handle_interrupt_gicv3(struct pt_regs *regs)
//irqflags = ihk_mc_spinlock_lock(&v->runq_lock);
/* For migration by IPI or by timesharing */
if (v->flags &
(CPU_FLAG_NEED_MIGRATE | CPU_FLAG_NEED_RESCHED)) {
v->flags &= ~CPU_FLAG_NEED_RESCHED;
do_check = 1;
if (v->flags & CPU_FLAG_NEED_RESCHED) {
if (v->flags & CPU_FLAG_NEED_MIGRATE && !from_user) {
// Don't migrate on K2K schedule
} else {
v->flags &= ~CPU_FLAG_NEED_RESCHED;
do_check = 1;
}
}
//ihk_mc_spinlock_unlock(&v->runq_lock, irqflags);
#ifndef ENABLE_FUGAKU_HACKS
if (do_check) {
#else
--v->in_interrupt;
if (monitor->status != IHK_OS_MONITOR_PANIC && do_check) {
#endif
check_signal(0, regs, 0);
schedule();
}

View File

@ -150,12 +150,6 @@ void flush_tlb_single(unsigned long addr)
arch_flush_tlb_single(asid, addr);
}
struct page_table {
translation_table_t* tt;
translation_table_t* tt_pa;
int asid;
};
extern struct page_table swapper_page_table;
static struct page_table *init_pt = &swapper_page_table;
static ihk_spinlock_t init_pt_lock;
@ -223,6 +217,13 @@ static inline int ptl4_index(unsigned long addr)
int idx = (addr >> PTL4_SHIFT) & PTL4_INDEX_MASK;
return idx;
}
#ifdef ENABLE_TOFU
static inline int ptl3_index_linux(unsigned long addr)
{
int idx = (addr >> PTL3_SHIFT) & PTL3_INDEX_MASK_LINUX;
return idx;
}
#endif
static inline int ptl3_index(unsigned long addr)
{
int idx = (addr >> PTL3_SHIFT) & PTL3_INDEX_MASK;
@ -281,6 +282,40 @@ static inline pte_t* ptl4_offset(const translation_table_t* ptl4, unsigned long
}
return ptep;
}
#ifdef ENABLE_TOFU
static inline pte_t* ptl3_offset_linux(const pte_t* l4p, unsigned long addr)
{
pte_t* ptep = NULL;
pte_t pte = 0;
unsigned long phys = 0;
translation_table_t* ptl3 = NULL;
int idx = 0;
switch (CONFIG_ARM64_PGTABLE_LEVELS)
{
case 4:
pte = ptl4_val(l4p);
phys = pte & PT_PHYSMASK;
ptl3 = phys_to_virt(phys);
idx = ptl3_index_linux(addr);
ptep = (pte_t*)ptl3 + idx;
break;
case 3:
ptl3 = (translation_table_t*)l4p;
idx = ptl3_index_linux(addr);
ptep = (pte_t*)ptl3 + idx;
break;
case 2:
case 1:
/* PTL3が無いときにはエントリではなくページテーブルのアドレスを引渡していく。*/
ptep = (pte_t*)l4p;
break;
}
return ptep;
}
#endif
static inline pte_t* ptl3_offset(const pte_t* l4p, unsigned long addr)
{
pte_t* ptep = NULL;
@ -959,7 +994,14 @@ static void init_normal_area(struct page_table *pt)
int i;
tt = get_translation_table(pt);
#ifdef ENABLE_TOFU
setup(tt,
arm64_st_phys_base,
arm64_st_phys_base + (1UL << 40));
return;
#endif
for (i = 0; i < ihk_mc_get_nr_memory_chunks(); i++) {
unsigned long map_start, map_end;
int numa_id;
@ -1287,6 +1329,58 @@ out:
return ret;
}
#ifdef ENABLE_TOFU
int ihk_mc_linux_pt_virt_to_phys_size(struct page_table *pt,
const void *virt,
unsigned long *phys,
unsigned long *size)
{
unsigned long v = (unsigned long)virt;
pte_t* ptep;
translation_table_t* tt;
unsigned long paddr;
unsigned long lsize;
tt = get_translation_table(pt);
ptep = ptl4_offset(tt, v);
if (!ptl4_present(ptep)) {
return -EFAULT;
}
ptep = ptl3_offset_linux(ptep, v);
if (!ptl3_present(ptep)) {
return -EFAULT;
}
if (ptl3_type_block(ptep)) {
paddr = ptl3_phys(ptep);
lsize = PTL3_SIZE;
goto out;
}
ptep = ptl2_offset(ptep, v);
if (!ptl2_present(ptep)) {
return -EFAULT;
}
if (ptl2_type_block(ptep)) {
paddr = ptl2_phys(ptep);
lsize = PTL2_SIZE;
goto out;
}
ptep = ptl1_offset(ptep, v);
if (!ptl1_present(ptep)) {
return -EFAULT;
}
paddr = ptl1_phys(ptep);
lsize = PTL1_SIZE;
out:
*phys = paddr | (v & (lsize - 1));
if(size) *size = lsize;
return 0;
}
#endif
int ihk_mc_pt_virt_to_phys_size(struct page_table *pt,
const void *virt,
@ -1348,7 +1442,6 @@ int ihk_mc_pt_virt_to_phys(struct page_table *pt,
return ihk_mc_pt_virt_to_phys_size(pt, virt, phys, NULL);
}
int ihk_mc_pt_print_pte(struct page_table *pt, void *virt)
{
const unsigned long v = (unsigned long)virt;
@ -1360,6 +1453,15 @@ int ihk_mc_pt_print_pte(struct page_table *pt, void *virt)
}
tt = get_translation_table(pt);
__kprintf("%s: 0x%lx, CONFIG_ARM64_PGTABLE_LEVELS: %d, ptl4_index: %ld, ptl3_index: %ld, ptl2_index: %ld, ptl1_index: %ld\n",
__func__,
v,
CONFIG_ARM64_PGTABLE_LEVELS,
ptl4_index(v),
ptl3_index(v),
ptl2_index(v),
ptl1_index(v));
ptep = ptl4_offset(tt, v);
__kprintf("l4 table: 0x%lX l4idx: %d\n", virt_to_phys(tt), ptl4_index(v));
if (!(ptl4_present(ptep))) {
@ -2147,6 +2249,198 @@ static void unmap_free_stat(struct page *page, unsigned long phys,
}
}
/*
* Kernel space page table clearing functions.
*/
struct clear_kernel_range_args {
int free_physical;
};
static int clear_kernel_range_middle(void *args0, pte_t *ptep, uint64_t base,
uint64_t start, uint64_t end, int level);
static int clear_kernel_range_l1(void *args0, pte_t *ptep, uint64_t base,
uint64_t start, uint64_t end)
{
const struct table {
unsigned long pgsize;
unsigned long cont_pgsize;
} tbl = {
.pgsize = PTL1_SIZE,
.cont_pgsize = PTL1_CONT_SIZE
};
struct clear_kernel_range_args *args = args0;
uint64_t phys = 0;
pte_t old;
size_t clear_size;
if (ptl1_null(ptep)) {
return -ENOENT;
}
old = xchg(ptep, PTE_NULL);
if (!pte_is_present(&old))
return 0;
arch_flush_tlb_single(0, base);
clear_size = pte_is_contiguous(&old) ?
tbl.cont_pgsize : tbl.pgsize;
dkprintf("%s: 0x%lx:%lu unmapped\n",
__func__, base, clear_size);
if (args->free_physical) {
phys = ptl1_phys(&old);
ihk_mc_free_pages(phys_to_virt(phys), clear_size >> PAGE_SHIFT);
}
return 0;
}
static int clear_kernel_range_l2(void *args0, pte_t *ptep, uint64_t base,
uint64_t start, uint64_t end)
{
return clear_kernel_range_middle(args0, ptep, base, start, end, 2);
}
static int clear_kernel_range_l3(void *args0, pte_t *ptep, uint64_t base,
uint64_t start, uint64_t end)
{
return clear_kernel_range_middle(args0, ptep, base, start, end, 3);
}
static int clear_kernel_range_l4(void *args0, pte_t *ptep, uint64_t base,
uint64_t start, uint64_t end)
{
return clear_kernel_range_middle(args0, ptep, base, start, end, 4);
}
static int clear_kernel_range_middle(void *args0, pte_t *ptep, uint64_t base,
uint64_t start, uint64_t end, int level)
{
const struct table {
walk_pte_t* walk;
walk_pte_fn_t* callback;
unsigned long pgsize;
unsigned long cont_pgsize;
} table[] = {
{walk_pte_l1, clear_kernel_range_l1, PTL2_SIZE, PTL2_CONT_SIZE}, /*PTL2*/
{walk_pte_l2, clear_kernel_range_l2, PTL3_SIZE, PTL3_CONT_SIZE}, /*PTL3*/
{walk_pte_l3, clear_kernel_range_l3, PTL4_SIZE, PTL4_CONT_SIZE}, /*PTL4*/
};
const struct table tbl = table[level-2];
struct clear_kernel_range_args *args = args0;
uint64_t phys = 0;
translation_table_t *tt;
int error;
pte_t old;
size_t clear_size;
if (ptl_null(ptep, level)) {
return -ENOENT;
}
dkprintf("%s(level: %d): 0x%lx in 0x%lx-0x%lx\n",
__func__, level, base, start, end);
if (ptl_type_page(ptep, level)
&& ((base < start) || (end < (base + tbl.pgsize)))) {
error = -EINVAL;
ekprintf("clear_range_middle(%p,%p,%lx,%lx,%lx,%d):"
"split page. %d\n",
args0, ptep, base, start, end, level, error);
return error;
}
if (ptl_type_page(ptep, level)) {
old = xchg(ptep, PTE_NULL);
if (!ptl_present(&old, level)) {
return 0;
}
arch_flush_tlb_single(0, base);
clear_size = pte_is_contiguous(&old) ?
tbl.cont_pgsize : tbl.pgsize;
dkprintf("%s(level: %d): 0x%lx:%lu unmapped\n",
__func__, level, base, clear_size);
if (args->free_physical) {
phys = ptl_phys(&old, level);
ihk_mc_free_pages(phys_to_virt(phys), clear_size >> PAGE_SHIFT);
}
return 0;
}
tt = (translation_table_t*)phys_to_virt(ptl_phys(ptep, level));
error = tbl.walk(tt, base, start, end, tbl.callback, args0);
if (error && (error != -ENOENT)) {
return error;
}
if (args->free_physical) {
if ((start <= base) && ((base + tbl.pgsize) <= end)) {
ptl_clear(ptep, level);
arch_flush_tlb_single(0, base);
ihk_mc_free_pages(tt, 1);
}
}
return 0;
}
static int clear_kernel_range(uintptr_t start, uintptr_t end, int free_physical)
{
const struct table {
walk_pte_t* walk;
walk_pte_fn_t* callback;
} tables[] = {
{walk_pte_l2, clear_kernel_range_l2}, /*second*/
{walk_pte_l3, clear_kernel_range_l3}, /*first*/
{walk_pte_l4, clear_kernel_range_l4}, /*zero*/
};
const struct table initial_lookup = tables[CONFIG_ARM64_PGTABLE_LEVELS - 2];
int error;
struct clear_kernel_range_args args;
translation_table_t* tt;
unsigned long irqflags;
dkprintf("%s: start: 0x%lx, end: 0x%lx, free phys: %d\n",
__func__, start, end, free_physical);
if (start <= USER_END)
return -EINVAL;
args.free_physical = free_physical;
irqflags = ihk_mc_spinlock_lock(&init_pt_lock);
tt = get_translation_table(get_init_page_table());
error = initial_lookup.walk(tt, 0,
(start & ~(0xffff000000000000)),
(end & ~(0xffff000000000000)),
initial_lookup.callback, &args);
dkprintf("%s: start: 0x%lx, end: 0x%lx, free phys: %d, ret: %d\n",
__func__, start, end, free_physical, error);
ihk_mc_spinlock_unlock(&init_pt_lock, irqflags);
return error;
}
int ihk_mc_clear_kernel_range(void *start, void *end)
{
#define KEEP_PHYSICAL 0
return clear_kernel_range((uintptr_t)start, (uintptr_t)end, KEEP_PHYSICAL);
}
/*
* User space page table clearing functions.
*/
struct clear_range_args {
int free_physical;
struct memobj *memobj;
@ -2344,6 +2638,14 @@ static int clear_range(struct page_table *pt, struct process_vm *vm,
if (memobj && ((memobj->flags & MF_PREMAP))) {
args.free_physical = 0;
}
if (vm->proc->straight_va &&
(void *)start == vm->proc->straight_va &&
(void *)end == (vm->proc->straight_va +
vm->proc->straight_len)) {
args.free_physical = 0;
}
args.memobj = memobj;
args.vm = vm;
@ -2352,7 +2654,8 @@ static int clear_range(struct page_table *pt, struct process_vm *vm,
if (ptep && pte_is_contiguous(ptep)) {
if (!page_is_contiguous_head(ptep, pgsize)) {
// start pte is not contiguous head
error = split_contiguous_pages(ptep, pgsize);
error = split_contiguous_pages(ptep, pgsize,
memobj ? memobj->flags : 0);
if (error) {
return error;
}
@ -2364,7 +2667,8 @@ static int clear_range(struct page_table *pt, struct process_vm *vm,
if (ptep && pte_is_contiguous(ptep)) {
if (!page_is_contiguous_tail(ptep, pgsize)) {
// end pte is not contiguous tail
error = split_contiguous_pages(ptep, pgsize);
error = split_contiguous_pages(ptep, pgsize,
memobj ? memobj->flags : 0);
if (error) {
return error;
}
@ -2985,7 +3289,8 @@ out:
return error;
}
int ihk_mc_pt_split(page_table_t pt, struct process_vm *vm, void *addr)
int ihk_mc_pt_split(page_table_t pt, struct process_vm *vm,
struct vm_range *range, void *addr)
{
int error;
pte_t *ptep;
@ -3007,7 +3312,9 @@ retry:
if (ptep && !ptl_null(ptep, level) && (pgaddr != addr)) {
page = NULL;
if (ptl_is_contiguous(ptep, level)) {
error = split_contiguous_pages(ptep, pgsize);
error = split_contiguous_pages(ptep, pgsize,
range->memobj ?
range->memobj->flags : 0);
if (error) {
goto out;
}
@ -3018,8 +3325,8 @@ retry:
phys = ptl_phys(ptep, level);
page = phys_to_page(phys);
}
if (page && (page_is_in_memobj(page)
|| page_is_multi_mapped(page))) {
if (!is_splitable(page, range->memobj ?
range->memobj->flags : 0)) {
error = -EINVAL;
kprintf("ihk_mc_pt_split:NYI:page break down\n");
goto out;
@ -3192,7 +3499,9 @@ int move_pte_range(page_table_t pt, struct process_vm *vm,
if (ptep && pte_is_contiguous(ptep)) {
if (!page_is_contiguous_head(ptep, pgsize)) {
// start pte is not contiguous head
error = split_contiguous_pages(ptep, pgsize);
error = split_contiguous_pages(ptep, pgsize,
range->memobj ?
range->memobj->flags : 0);
if (error) {
goto out;
}
@ -3203,7 +3512,9 @@ int move_pte_range(page_table_t pt, struct process_vm *vm,
if (ptep && pte_is_contiguous(ptep)) {
if (!page_is_contiguous_tail(ptep, pgsize)) {
// end pte is not contiguous tail
error = split_contiguous_pages(ptep, pgsize);
error = split_contiguous_pages(ptep, pgsize,
range->memobj ?
range->memobj->flags : 0);
if (error) {
goto out;
}
@ -3808,3 +4119,30 @@ void arch_adjust_allocate_page_size(struct page_table *pt,
}
}
}
int split_contiguous_pages(pte_t *ptep, size_t pgsize,
uint32_t memobj_flags)
{
int ret;
pte_t *head = get_contiguous_head(ptep, pgsize);
pte_t *tail = get_contiguous_tail(ptep, pgsize);
pte_t *ptr;
uintptr_t phys;
struct page *page;
phys = pte_get_phys(head);
page = phys_to_page(phys);
if (!is_splitable(page, memobj_flags)) {
ret = -EINVAL;
goto out;
}
for (ptr = head; ptr <= tail; ptr++) {
*ptr &= ~PTE_CONT;
}
ret = 0;
out:
return ret;
}

View File

@ -218,3 +218,41 @@ ENTRY(__inline_memset)
ret
ENDPIPROC(__inline_memset)
ENDPROC(____inline_memset)
/*
* Non-temporal vector memory clear
*
* Parameters:
* x0 - buf (assumed to be aligned to page size)
* x1 - n (assumed to be at least page size)
*/
ENTRY(__memclear)
stp q0, q1, [x2] /* Preserve two 128 bit vector regs */
eor v0.16B, v0.16B, v0.16B
eor v1.16B, v1.16B, v1.16B
1:
stnp q0, q1, [x0, #32 * 0]
stnp q0, q1, [x0, #32 * 1]
stnp q0, q1, [x0, #32 * 2]
stnp q0, q1, [x0, #32 * 3]
stnp q0, q1, [x0, #32 * 4]
stnp q0, q1, [x0, #32 * 5]
stnp q0, q1, [x0, #32 * 6]
stnp q0, q1, [x0, #32 * 7]
stnp q0, q1, [x0, #32 * 8]
stnp q0, q1, [x0, #32 * 9]
stnp q0, q1, [x0, #32 * 10]
stnp q0, q1, [x0, #32 * 11]
stnp q0, q1, [x0, #32 * 12]
stnp q0, q1, [x0, #32 * 13]
stnp q0, q1, [x0, #32 * 14]
stnp q0, q1, [x0, #32 * 15]
add x0, x0, #512
subs x1, x1, #512
cmp x1, #0
b.ne 1b
ldp q0, q1, [x2] /* Restore vector regs */
ret
ENDPROC(__memclear)

View File

@ -15,7 +15,9 @@
#include <limits.h>
#include <uio.h>
#include <syscall.h>
#include <bitops.h>
#include <rusage_private.h>
#include <memory.h>
#include <ihk/debug.h>
void terminate_mcexec(int, int);
@ -1071,6 +1073,9 @@ static int setup_rt_frame(int usig, unsigned long rc, int to_restart,
if (k->sa.sa_flags & SA_RESTORER){
regs->regs[30] = (unsigned long)k->sa.sa_restorer;
#ifdef ENABLE_FUGAKU_HACKS
kprintf("%s: SA_RESTORER: 0x%lx\n", __func__, regs->regs[30]);
#endif
} else {
regs->regs[30] = (unsigned long)VDSO_SYMBOL(thread->vm->vdso_addr, sigtramp);
}
@ -1723,9 +1728,18 @@ SYSCALL_DECLARE(mmap)
/* check arguments */
pgsize = PAGE_SIZE;
#ifndef ENABLE_FUGAKU_HACKS
if (flags & MAP_HUGETLB) {
int hugeshift = flags & (0x3F << MAP_HUGE_SHIFT);
/* OpenMPI expects -EINVAL when trying to map
* /dev/shm/ file with MAP_SHARED | MAP_HUGETLB
*/
if (!(flags & MAP_ANONYMOUS)) {
error = -EINVAL;
goto out;
}
if (hugeshift == 0) {
/* default hugepage size */
flags |= ihk_mc_get_linux_default_huge_page_shift() <<
@ -1755,6 +1769,11 @@ SYSCALL_DECLARE(mmap)
goto out;
}
}
#else
if (flags & MAP_HUGETLB) {
flags &= ~(MAP_HUGETLB);
}
#endif
#define VALID_DUMMY_ADDR ((region->user_start + PTL3_SIZE - 1) & ~(PTL3_SIZE - 1))
addr = (flags & MAP_FIXED)? addr0: VALID_DUMMY_ADDR;
@ -1789,7 +1808,7 @@ SYSCALL_DECLARE(mmap)
goto out;
}
addr = do_mmap(addr, len, prot, flags, fd, off0);
addr = do_mmap(addr, len, prot, flags, fd, off0, 0, NULL);
error = 0;
out:
@ -2233,8 +2252,10 @@ int move_pages_smp_handler(int cpu_index, int nr_cpus, void *arg)
case 0:
memcpy(mpsr->virt_addr, mpsr->user_virt_addr,
sizeof(void *) * count);
memcpy(mpsr->nodes, mpsr->user_nodes,
sizeof(int) * count);
if (mpsr->user_nodes) {
memcpy(mpsr->nodes, mpsr->user_nodes,
sizeof(int) * count);
}
memset(mpsr->ptep, 0, sizeof(pte_t) * count);
memset(mpsr->status, 0, sizeof(int) * count);
memset(mpsr->nr_pages, 0, sizeof(int) * count);
@ -2252,8 +2273,10 @@ int move_pages_smp_handler(int cpu_index, int nr_cpus, void *arg)
case 0:
memcpy(mpsr->virt_addr, mpsr->user_virt_addr,
sizeof(void *) * count);
memcpy(mpsr->nodes, mpsr->user_nodes,
sizeof(int) * count);
if (mpsr->user_nodes) {
memcpy(mpsr->nodes, mpsr->user_nodes,
sizeof(int) * count);
}
mpsr->nodes_ready = 1;
break;
case 1:
@ -2275,8 +2298,10 @@ int move_pages_smp_handler(int cpu_index, int nr_cpus, void *arg)
sizeof(void *) * count);
break;
case 1:
memcpy(mpsr->nodes, mpsr->user_nodes,
sizeof(int) * count);
if (mpsr->user_nodes) {
memcpy(mpsr->nodes, mpsr->user_nodes,
sizeof(int) * count);
}
mpsr->nodes_ready = 1;
break;
case 2:
@ -2305,8 +2330,10 @@ int move_pages_smp_handler(int cpu_index, int nr_cpus, void *arg)
sizeof(void *) * (count / 2));
break;
case 2:
memcpy(mpsr->nodes, mpsr->user_nodes,
sizeof(int) * count);
if (mpsr->user_nodes) {
memcpy(mpsr->nodes, mpsr->user_nodes,
sizeof(int) * count);
}
mpsr->nodes_ready = 1;
break;
case 3:
@ -2332,13 +2359,15 @@ int move_pages_smp_handler(int cpu_index, int nr_cpus, void *arg)
}
/* NUMA verification in parallel */
for (i = i_s; i < i_e; i++) {
if (mpsr->nodes[i] < 0 ||
mpsr->nodes[i] >= ihk_mc_get_nr_numa_nodes() ||
!test_bit(mpsr->nodes[i],
mpsr->proc->vm->numa_mask)) {
mpsr->phase_ret = -EINVAL;
break;
if (mpsr->user_nodes) {
for (i = i_s; i < i_e; i++) {
if (mpsr->nodes[i] < 0 ||
mpsr->nodes[i] >= ihk_mc_get_nr_numa_nodes() ||
!test_bit(mpsr->nodes[i],
mpsr->proc->vm->numa_mask)) {
mpsr->phase_ret = -EINVAL;
break;
}
}
}
@ -2370,7 +2399,7 @@ int move_pages_smp_handler(int cpu_index, int nr_cpus, void *arg)
/* PTE valid? */
if (!mpsr->ptep[i] || !pte_is_present(mpsr->ptep[i])) {
mpsr->status[i] = -ENOENT;
mpsr->status[i] = -EFAULT;
mpsr->ptep[i] = NULL;
continue;
}
@ -2434,6 +2463,26 @@ pte_out:
dkprintf("%s: phase %d done\n", __FUNCTION__, phase);
++phase;
/*
* When nodes array is NULL, move_pages doesn't move any pages,
* instead will return the node where each page
* currently resides by status array.
*/
if (!mpsr->user_nodes) {
/* get nid in parallel */
for (i = i_s; i < i_e; i++) {
if (mpsr->status[i] < 0) {
continue;
}
mpsr->status[i] = phys_to_nid(
pte_get_phys(mpsr->ptep[i]));
}
mpsr->phase_ret = 0;
goto out; // return node information
}
/* Processing of move pages */
if (cpu_index == 0) {
/* Allocate new pages on target NUMA nodes */
for (i = 0; i < count; i++) {
@ -2446,8 +2495,11 @@ pte_out:
/* TODO: store pgalign info in an array as well? */
if (mpsr->nr_pages[i] > 1) {
if (mpsr->nr_pages[i] * PAGE_SIZE == PTL2_SIZE)
pgalign = PTL2_SHIFT - PTL1_SHIFT;
int nr_pages;
for (pgalign = 0, nr_pages = mpsr->nr_pages[i];
nr_pages != 1; pgalign++, nr_pages >>= 1) {
}
}
dst = ihk_mc_alloc_aligned_pages_node(mpsr->nr_pages[i],

View File

@ -174,9 +174,14 @@ void bad_mode(struct pt_regs *regs, int reason, unsigned int esr)
arch_show_interrupt_context(regs);
#ifdef ENABLE_TOFU
info.si_signo = SIGSTOP;
info.si_errno = 0;
#else
info.si_signo = SIGILL;
info.si_errno = 0;
info.si_code = ILL_ILLOPC;
#endif
info._sifields._sigfault.si_addr = (void*)regs->pc;
arm64_notify_die("Oops - bad mode", regs, &info, 0);

View File

@ -155,7 +155,7 @@ int arch_map_vdso(struct process_vm *vm)
flag = VR_REMOTE | VR_PROT_READ;
flag |= VRFLAG_PROT_TO_MAXPROT(flag);
ret = add_process_memory_range(vm, start, end, vdso.vvar_phys, flag,
NULL, 0, PAGE_SHIFT, &range);
NULL, 0, PAGE_SHIFT, NULL, &range);
if (ret != 0){
dkprintf("ERROR: adding memory range for tod_data\n");
goto exit;
@ -167,7 +167,7 @@ int arch_map_vdso(struct process_vm *vm)
flag = VR_REMOTE | VR_PROT_READ | VR_PROT_EXEC;
flag |= VRFLAG_PROT_TO_MAXPROT(flag);
ret = add_process_memory_range(vm, start, end, vdso.vdso_physlist[0], flag,
NULL, 0, PAGE_SHIFT, &range);
NULL, 0, PAGE_SHIFT, NULL, &range);
if (ret != 0) {
dkprintf("ERROR: adding memory range for vdso_text\n");

View File

@ -80,7 +80,11 @@ static void (*lapic_icr_write)(unsigned int h, unsigned int l);
static void (*lapic_wait_icr_idle)(void);
void (*x86_issue_ipi)(unsigned int apicid, unsigned int low);
int running_on_kvm(void);
static void smp_func_call_handler(void);
void smp_func_call_handler(void);
int ihk_mc_get_smp_handler_irq(void)
{
return LOCAL_SMP_FUNC_CALL_VECTOR;
}
void init_processors_local(int max_id);
void assign_processor_id(void);
@ -868,6 +872,49 @@ void show_context_stack(uintptr_t *rbp) {
return;
}
#ifdef ENABLE_FUGAKU_HACKS
void __show_context_stack(struct thread *thread,
unsigned long pc, uintptr_t sp, int kprintf_locked)
{
uintptr_t stack_top;
unsigned long irqflags = 0;
stack_top = ALIGN_UP(sp, (uintptr_t)KERNEL_STACK_SIZE);
if (!kprintf_locked)
irqflags = kprintf_lock();
__kprintf("TID: %d, call stack (most recent first):\n",
thread->tid);
__kprintf("PC: %016lx, SP: %016lx\n", pc, sp);
for (;;) {
extern char _head[], _end[];
uintptr_t *fp, *lr;
fp = (uintptr_t *)sp;
lr = (uintptr_t *)(sp + 8);
if ((*fp <= sp)) {
break;
}
if ((*fp > stack_top)) {
break;
}
if ((*lr < (unsigned long)_head) ||
(*lr > (unsigned long)_end)) {
break;
}
__kprintf("PC: %016lx, SP: %016lx, FP: %016lx\n", *lr - 4, sp, *fp);
sp = *fp;
}
if (!kprintf_locked)
kprintf_unlock(irqflags);
}
#endif
void interrupt_exit(struct x86_user_context *regs)
{
if (interrupt_from_user(regs)) {
@ -876,20 +923,18 @@ void interrupt_exit(struct x86_user_context *regs)
check_need_resched();
check_signal(0, regs, -1);
}
else {
check_sig_pending();
}
}
void handle_interrupt(int vector, struct x86_user_context *regs)
{
struct ihk_mc_interrupt_handler *h;
struct cpu_local_var *v = get_this_cpu_local_var();
int from_user = interrupt_from_user(regs);
lapic_ack();
++v->in_interrupt;
set_cputime(interrupt_from_user(regs) ?
set_cputime(from_user ?
CPUTIME_MODE_U2K : CPUTIME_MODE_K2K_IN);
dkprintf("CPU[%d] got interrupt, vector: %d, RIP: 0x%lX\n",
@ -1007,15 +1052,18 @@ void handle_interrupt(int vector, struct x86_user_context *regs)
}
interrupt_exit(regs);
set_cputime(interrupt_from_user(regs) ?
set_cputime(from_user ?
CPUTIME_MODE_K2U : CPUTIME_MODE_K2K_OUT);
--v->in_interrupt;
/* for migration by IPI */
if (v->flags & CPU_FLAG_NEED_MIGRATE) {
schedule();
check_signal(0, regs, 0);
// Don't migrate on K2K schedule
if (from_user) {
schedule();
check_signal(0, regs, 0);
}
}
}
@ -1137,6 +1185,17 @@ void cpu_halt(void)
asm volatile("hlt");
}
#ifdef ENABLE_FUGAKU_HACKS
/*@
@ assigns \nothing;
@ ensures \interrupt_disabled == 0;
@*/
void cpu_halt_panic(void)
{
cpu_halt();
}
#endif
/*@
@ assigns \nothing;
@ ensures \interrupt_disabled == 0;
@ -1521,6 +1580,16 @@ void arch_print_stack(void)
__print_stack(rbp, 0);
}
#ifdef ENABLE_FUGAKU_HACKS
unsigned long arch_get_instruction_address(const void *reg)
{
const struct x86_user_context *uctx = reg;
const struct x86_basic_regs *regs = &uctx->gpr;
return regs->rip;
}
#endif
/*@
@ requires \valid(reg);
@ assigns \nothing;
@ -1609,6 +1678,11 @@ int ihk_mc_arch_get_special_register(enum ihk_asr_type type,
}
}
int ihk_mc_get_interrupt_id(int cpu)
{
return get_x86_cpu_local_variable(cpu)->apic_id;
}
/*@
@ requires \valid_cpuid(cpu); // valid CPU logical ID
@ ensures \result == 0
@ -2106,144 +2180,6 @@ int arch_cpu_read_write_register(
return 0;
}
/*
* Generic remote CPU function invocation facility.
*/
static void smp_func_call_handler(void)
{
int irq_flags;
struct smp_func_call_request *req;
int reqs_left;
reiterate:
req = NULL;
reqs_left = 0;
irq_flags = ihk_mc_spinlock_lock(
&cpu_local_var(smp_func_req_lock));
/* Take requests one-by-one */
if (!list_empty(&cpu_local_var(smp_func_req_list))) {
req = list_first_entry(&cpu_local_var(smp_func_req_list),
struct smp_func_call_request, list);
list_del(&req->list);
reqs_left = !list_empty(&cpu_local_var(smp_func_req_list));
}
ihk_mc_spinlock_unlock(&cpu_local_var(smp_func_req_lock),
irq_flags);
if (req) {
req->ret = req->sfcd->func(req->cpu_index,
req->sfcd->nr_cpus, req->sfcd->arg);
ihk_atomic_dec(&req->sfcd->cpus_left);
}
if (reqs_left)
goto reiterate;
}
int smp_call_func(cpu_set_t *__cpu_set, smp_func_t __func, void *__arg)
{
int cpu, nr_cpus = 0;
int cpu_index = 0;
int this_cpu_index = 0;
struct smp_func_call_data sfcd;
struct smp_func_call_request *reqs;
int ret = 0;
int call_on_this_cpu = 0;
cpu_set_t cpu_set;
/* Sanity checks */
if (!__cpu_set || !__func) {
return -EINVAL;
}
/* Make sure it won't change in between */
cpu_set = *__cpu_set;
for_each_set_bit(cpu, (unsigned long *)&cpu_set,
sizeof(cpu_set) * BITS_PER_BYTE) {
if (cpu == ihk_mc_get_processor_id()) {
call_on_this_cpu = 1;
}
++nr_cpus;
}
if (!nr_cpus) {
return -EINVAL;
}
reqs = kmalloc(sizeof(*reqs) * nr_cpus, IHK_MC_AP_NOWAIT);
if (!reqs) {
ret = -ENOMEM;
goto free_out;
}
sfcd.nr_cpus = nr_cpus;
sfcd.func = __func;
sfcd.arg = __arg;
ihk_atomic_set(&sfcd.cpus_left,
call_on_this_cpu ? nr_cpus - 1 : nr_cpus);
/* Add requests and send IPIs */
cpu_index = 0;
for_each_set_bit(cpu, (unsigned long *)&cpu_set,
sizeof(cpu_set) * BITS_PER_BYTE) {
unsigned long irq_flags;
reqs[cpu_index].cpu_index = cpu_index;
reqs[cpu_index].ret = 0;
if (cpu == ihk_mc_get_processor_id()) {
this_cpu_index = cpu_index;
++cpu_index;
continue;
}
reqs[cpu_index].sfcd = &sfcd;
irq_flags =
ihk_mc_spinlock_lock(&get_cpu_local_var(cpu)->smp_func_req_lock);
list_add_tail(&reqs[cpu_index].list,
&get_cpu_local_var(cpu)->smp_func_req_list);
ihk_mc_spinlock_unlock(&get_cpu_local_var(cpu)->smp_func_req_lock,
irq_flags);
ihk_mc_interrupt_cpu(cpu, LOCAL_SMP_FUNC_CALL_VECTOR);
++cpu_index;
}
/* Is this CPU involved? */
if (call_on_this_cpu) {
reqs[this_cpu_index].ret =
__func(this_cpu_index, nr_cpus, __arg);
}
/* Wait for the rest of the CPUs */
while (ihk_atomic_read(&sfcd.cpus_left) > 0) {
cpu_pause();
}
/* Check return values, if error, report the first non-zero */
for (cpu_index = 0; cpu_index < nr_cpus; ++cpu_index) {
if (reqs[cpu_index].ret != 0) {
ret = reqs[cpu_index].ret;
goto free_out;
}
}
ret = 0;
free_out:
kfree(reqs);
return ret;
}
extern int nmi_mode;
extern long freeze_thaw(void *nmi_ctx);

View File

@ -129,12 +129,4 @@ static inline int futex_atomic_op_inuser(int encoded_op,
return ret;
}
static inline int get_futex_value_locked(uint32_t *dest, uint32_t *from)
{
*dest = *(volatile uint32_t *)from;
return 0;
}
#endif

View File

@ -19,6 +19,7 @@
#include <ihk/types.h>
#include <errno.h>
struct memobj;
#define KERNEL_CS_ENTRY 4
#define KERNEL_DS_ENTRY 5
#define USER_CS_ENTRY 6
@ -412,10 +413,8 @@ static inline pte_t *get_contiguous_tail(pte_t *__ptep, size_t __pgsize)
return __ptep;
}
static inline int split_contiguous_pages(pte_t *ptep, size_t pgsize)
{
return 0;
}
int split_contiguous_pages(pte_t *ptep, size_t pgsize,
uint32_t memobj_flags);
static inline int page_is_contiguous_head(pte_t *ptep, size_t pgsize)
{
@ -451,4 +450,12 @@ extern unsigned long ap_trampoline;
/* Local is cachable */
#define IHK_IKC_QUEUE_PT_ATTR (PTATTR_NO_EXECUTE | PTATTR_WRITABLE)
#ifdef ENABLE_FUGAKU_HACKS
#ifndef __ASSEMBLY__
# define ALIGN_UP(x, align) ALIGN_DOWN((x) + (align) - 1, align)
# define ALIGN_DOWN(x, align) ((x) & ~((align) - 1))
#endif /* !__ASSEMBLY__ */
#endif
#endif

View File

@ -53,5 +53,9 @@ struct x86_cpu_local_variables *get_x86_this_cpu_local(void);
void *get_x86_cpu_local_kstack(int id);
void *get_x86_this_cpu_kstack(void);
#ifdef ENABLE_FUGAKU_HACKS
#define LOCALS_SPAN (4 * PAGE_SIZE)
#define KERNEL_STACK_SIZE LOCALS_SPAN
#endif
#endif

View File

@ -84,7 +84,11 @@ enum __rlimit_resource
__RLIMIT_RTPRIO = 14,
#define RLIMIT_RTPRIO __RLIMIT_RTPRIO
__RLIMIT_NLIMITS = 15,
/* timeout for RT tasks in us */
__RLIMIT_RTTIME = 15,
#define RLIMIT_RTTIME __RLIMIT_RTTIME
__RLIMIT_NLIMITS = 16,
__RLIM_NLIMITS = __RLIMIT_NLIMITS
#define RLIMIT_NLIMITS __RLIMIT_NLIMITS
#define RLIM_NLIMITS __RLIM_NLIMITS

View File

@ -158,6 +158,7 @@ SYSCALL_HANDLED(289, signalfd4)
#ifdef ENABLE_PERF
SYSCALL_HANDLED(298, perf_event_open)
#endif
SYSCALL_HANDLED(302, prlimit64)
#ifdef DCFA_KMOD
SYSCALL_HANDLED(303, mod_call)
#endif
@ -167,7 +168,7 @@ SYSCALL_HANDLED(311, process_vm_writev)
SYSCALL_HANDLED(322, execveat)
SYSCALL_HANDLED(700, get_cpu_id)
#ifdef PROFILE_ENABLE
SYSCALL_HANDLED(__NR_profile, profile)
SYSCALL_HANDLED(PROFILE_EVENT_MAX, profile)
#endif // PROFILE_ENABLE
SYSCALL_HANDLED(730, util_migrate_inter_kernel)
SYSCALL_HANDLED(731, util_indicate_clone)

View File

@ -21,7 +21,9 @@
#include <registers.h>
#include <string.h>
#ifndef ENABLE_FUGAKU_HACKS
#define LOCALS_SPAN (4 * PAGE_SIZE)
#endif
struct x86_cpu_local_variables *locals;
size_t x86_cpu_local_variables_span = LOCALS_SPAN; /* for debugger */

View File

@ -884,7 +884,7 @@ static int split_large_page(pte_t *ptep, size_t pgsize)
}
for (i = 0; i < PT_ENTRIES; ++i) {
if (phys_base != NOPHYS) {
if (phys_base != NOPHYS && pgsize != PTL2_SIZE) {
phys = phys_base + (i * pgsize / PT_ENTRIES);
page = phys_to_page(phys);
if (page) {
@ -1651,6 +1651,14 @@ static int clear_range(struct page_table *pt, struct process_vm *vm,
if (memobj && ((memobj->flags & MF_PREMAP))) {
args.free_physical = 0;
}
if (vm->proc->straight_va &&
(void *)start == vm->proc->straight_va &&
(void *)end == (vm->proc->straight_va +
vm->proc->straight_len)) {
args.free_physical = 0;
}
args.memobj = memobj;
args.vm = vm;
@ -2219,7 +2227,8 @@ out:
return error;
}
int ihk_mc_pt_split(page_table_t pt, struct process_vm *vm, void *addr)
int ihk_mc_pt_split(page_table_t pt, struct process_vm *vm,
struct vm_range *range, void *addr)
{
int error;
pte_t *ptep;
@ -2228,7 +2237,6 @@ int ihk_mc_pt_split(page_table_t pt, struct process_vm *vm, void *addr)
intptr_t phys;
struct page *page;
retry:
ptep = ihk_mc_pt_lookup_pte(pt, addr, 0, &pgaddr, &pgsize, NULL);
if (ptep && !pte_is_null(ptep) && (pgaddr != addr)) {
@ -2237,8 +2245,8 @@ retry:
phys = pte_get_phys(ptep);
page = phys_to_page(phys);
}
if (page && (page_is_in_memobj(page)
|| page_is_multi_mapped(page))) {
if (!is_splitable(page, range->memobj ?
range->memobj->flags : 0)) {
error = -EINVAL;
kprintf("ihk_mc_pt_split:NYI:page break down\n");
goto out;
@ -3001,3 +3009,10 @@ int patch_process_vm(struct process_vm *vm, void *udst, const void *ksrc, size_t
dkprintf("patch_process_vm(%p,%p,%p,%lx):%d\n", vm, udst, ksrc, siz, 0);
return 0;
} /* patch_process_vm() */
int split_contiguous_pages(pte_t *ptep, size_t pgsize,
uint32_t memobj_flags)
{
return 0;
}

View File

@ -31,7 +31,9 @@
#include <page.h>
#include <limits.h>
#include <syscall.h>
#include <bitops.h>
#include <rusage_private.h>
#include <memory.h>
#include <ihk/debug.h>
void terminate_mcexec(int, int);
@ -1430,6 +1432,14 @@ SYSCALL_DECLARE(mmap)
/* check arguments */
pgsize = PAGE_SIZE;
if (flags & MAP_HUGETLB) {
/* OpenMPI expects -EINVAL when trying to map
* /dev/shm/ file with MAP_SHARED | MAP_HUGETLB
*/
if (!(flags & MAP_ANONYMOUS)) {
error = -EINVAL;
goto out;
}
switch (flags & (0x3F << MAP_HUGE_SHIFT)) {
case 0:
/* default hugepage size */
@ -1502,7 +1512,7 @@ recheck:
goto out;
}
addr = do_mmap(addr, len, prot, flags, fd, off0);
addr = do_mmap(addr, len, prot, flags, fd, off0, 0, NULL);
error = 0;
out:
@ -1831,7 +1841,7 @@ int arch_map_vdso(struct process_vm *vm)
vrflags |= VR_PROT_READ | VR_PROT_EXEC;
vrflags |= VRFLAG_PROT_TO_MAXPROT(vrflags);
error = add_process_memory_range(vm, (intptr_t)s, (intptr_t)e,
NOPHYS, vrflags, NULL, 0, PAGE_SHIFT, &range);
NOPHYS, vrflags, NULL, 0, PAGE_SHIFT, NULL, &range);
if (error) {
ekprintf("ERROR: adding memory range for vdso. %d\n", error);
goto out;
@ -1863,7 +1873,8 @@ int arch_map_vdso(struct process_vm *vm)
vrflags |= VR_PROT_READ;
vrflags |= VRFLAG_PROT_TO_MAXPROT(vrflags);
error = add_process_memory_range(vm, (intptr_t)s, (intptr_t)e,
NOPHYS, vrflags, NULL, 0, PAGE_SHIFT, &range);
NOPHYS, vrflags, NULL, 0,
PAGE_SHIFT, NULL, &range);
if (error) {
ekprintf("ERROR: adding memory range for vvar. %d\n", error);
goto out;
@ -2294,8 +2305,10 @@ int move_pages_smp_handler(int cpu_index, int nr_cpus, void *arg)
case 0:
memcpy(mpsr->virt_addr, mpsr->user_virt_addr,
sizeof(void *) * count);
memcpy(mpsr->nodes, mpsr->user_nodes,
sizeof(int) * count);
if (mpsr->user_nodes) {
memcpy(mpsr->nodes, mpsr->user_nodes,
sizeof(int) * count);
}
memset(mpsr->ptep, 0, sizeof(pte_t) * count);
memset(mpsr->status, 0, sizeof(int) * count);
memset(mpsr->nr_pages, 0, sizeof(int) * count);
@ -2313,8 +2326,10 @@ int move_pages_smp_handler(int cpu_index, int nr_cpus, void *arg)
case 0:
memcpy(mpsr->virt_addr, mpsr->user_virt_addr,
sizeof(void *) * count);
memcpy(mpsr->nodes, mpsr->user_nodes,
sizeof(int) * count);
if (mpsr->user_nodes) {
memcpy(mpsr->nodes, mpsr->user_nodes,
sizeof(int) * count);
}
mpsr->nodes_ready = 1;
break;
case 1:
@ -2336,8 +2351,10 @@ int move_pages_smp_handler(int cpu_index, int nr_cpus, void *arg)
sizeof(void *) * count);
break;
case 1:
memcpy(mpsr->nodes, mpsr->user_nodes,
sizeof(int) * count);
if (mpsr->user_nodes) {
memcpy(mpsr->nodes, mpsr->user_nodes,
sizeof(int) * count);
}
mpsr->nodes_ready = 1;
break;
case 2:
@ -2366,8 +2383,10 @@ int move_pages_smp_handler(int cpu_index, int nr_cpus, void *arg)
sizeof(void *) * (count / 2));
break;
case 2:
memcpy(mpsr->nodes, mpsr->user_nodes,
sizeof(int) * count);
if (mpsr->user_nodes) {
memcpy(mpsr->nodes, mpsr->user_nodes,
sizeof(int) * count);
}
mpsr->nodes_ready = 1;
break;
case 3:
@ -2393,13 +2412,15 @@ int move_pages_smp_handler(int cpu_index, int nr_cpus, void *arg)
}
/* NUMA verification in parallel */
for (i = i_s; i < i_e; i++) {
if (mpsr->nodes[i] < 0 ||
mpsr->nodes[i] >= ihk_mc_get_nr_numa_nodes() ||
!test_bit(mpsr->nodes[i],
mpsr->proc->vm->numa_mask)) {
mpsr->phase_ret = -EINVAL;
break;
if (mpsr->user_nodes) {
for (i = i_s; i < i_e; i++) {
if (mpsr->nodes[i] < 0 ||
mpsr->nodes[i] >= ihk_mc_get_nr_numa_nodes() ||
!test_bit(mpsr->nodes[i],
mpsr->proc->vm->numa_mask)) {
mpsr->phase_ret = -EINVAL;
break;
}
}
}
@ -2495,6 +2516,26 @@ pte_out:
dkprintf("%s: phase %d done\n", __FUNCTION__, phase);
++phase;
/*
* When nodes array is NULL, move_pages doesn't move any pages,
* instead will return the node where each page
* currently resides by status array.
*/
if (!mpsr->user_nodes) {
/* get nid in parallel */
for (i = i_s; i < i_e; i++) {
if (mpsr->status[i] < 0) {
continue;
}
mpsr->status[i] = phys_to_nid(
pte_get_phys(mpsr->ptep[i]));
}
mpsr->phase_ret = 0;
goto out; // return node information
}
/* Processing of move pages */
if (cpu_index == 0) {
/* Allocate new pages on target NUMA nodes */
for (i = 0; i < count; i++) {

View File

@ -30,6 +30,9 @@ endif ()
if (NOT "${LINUX_ARCH}" STREQUAL "${CMAKE_HOST_SYSTEM_PROCESSOR}")
string(REGEX REPLACE "ld$" "" CROSS_COMPILE "${CMAKE_LINKER}")
if (CMAKE_CROSSCOMPILING)
list(APPEND KBUILD_MAKE_FLAGS "QEMU_LD_PREFIX=${CMAKE_FIND_ROOT_PATH}")
endif()
list(APPEND KBUILD_MAKE_FLAGS "ARCH=${ARCH}")
list(APPEND KBUILD_MAKE_FLAGS "CROSS_COMPILE=${CROSS_COMPILE}")
endif()

31
docs/Makefile Normal file
View File

@ -0,0 +1,31 @@
# Minimal makefile for Sphinx documentation
#
# You can set these variables from the command line.
SPHINXOPTS =
SPHINXBUILD = sphinx-build
SOURCEDIR = .
BUILDDIR = _build
# Put it first so that "make" without argument is like "make help".
help:
@$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
.PHONY: help Makefile
po:
sphinx-build -b gettext . _build/gettext
/opt/local/Library/Frameworks/Python.framework/Versions/3.8/bin/sphinx-intl update -p _build/gettext -l ja
ja:
sphinx-build -b html -D language=ja . _build/html/ja
# Catch-all target: route all unknown targets to Sphinx using the new
# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS).
%: Makefile
echo ".. figure:: docs/mckernel-logo.png" > ../README.rst; echo >> ../README.rst
cat summary.rst >> ../README.rst; echo >> ../README.rst
cat doc.rst >> ../README.rst
[[ $@ == clean ]] && specopt=clean; make -C spec/ihk $$specopt
[[ $@ == clean ]] && specopt=clean; make -C spec/mckernel $$specopt
@$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)

640
docs/NEWS.rst Normal file
View File

@ -0,0 +1,640 @@
=============================================
Version 1.7.6 (Mar 11, 2021)
=============================================
----------------------
IHK major updates
----------------------
N/A
------------------------
IHK major bug fixes
------------------------
#. ihklib: ihk_reserve_mem_conf*: apply change only to the next reservation
----------------------
McKernel major updates
----------------------
N/A
------------------------
McKernel major bug fixes
------------------------
N/A
=============================================
Version 1.7.5 (Mar 11, 2021)
=============================================
----------------------
IHK major updates
----------------------
N/A
------------------------
IHK major bug fixes
------------------------
#. ihklib: fix cgroup cpuset.cpus/mems check when using krm
#. ihklib: ihk_reserve_mem_conf_str: set default values to those not specified
----------------------
McKernel major updates
----------------------
N/A
------------------------
McKernel major bug fixes
------------------------
N/A
=============================================
Version 1.7.4 (Mar 7, 2021)
=============================================
----------------------
IHK major updates
----------------------
N/A
------------------------
IHK major bug fixes
------------------------
N/A
----------------------
McKernel major updates
----------------------
N/A
------------------------
McKernel major bug fixes
------------------------
N/A
=============================================
Version 1.7.3 (Mar 5, 2021)
=============================================
----------------------
IHK major updates
----------------------
N/A
------------------------
IHK major bug fixes
------------------------
N/A
----------------------
McKernel major updates
----------------------
N/A
------------------------
McKernel major bug fixes
------------------------
N/A
=============================================
Version 1.7.2 (Mar 5, 2021)
=============================================
----------------------
IHK major updates
----------------------
#. ihklib: add *_str() functions for reserve, assign, IKC-map, kargs
#. smp: make smp_call_func() arch independent
------------------------
IHK major bug fixes
------------------------
#. ihklib: ihk_reserve_mem: fix capped best-effort
#. TO RESET: fake missing NUMA node pieces, 90% memory limit
#. ihklib: ihk_reserve_mem_conf: range-check for IHK_RESERVE_MEM_MAX_SIZE_RATIO_ALL
#. ihklib: ihk_os_kargs: check if "hidos" is included
#. SMP: omit slab/slub shrink, use 95% limit by default
#. check cpu / numa cgroup set by krm
#. SMP: __ihk_smp_reserve_mem: add __GFP_COMP to __GFP_ATOMIC allocation
#. ihk_register_device: record minor to IHK device object
----------------------
McKernel major updates
----------------------
#. mcexec: memory policy control by environmental variable
#. mempolicy: Support MPOL_INTERLEAVE
#. uti: futex call function in mcctrl
#. uti: integrate libuti and redirect to mck/libuti.so
#. uti: integrate syscall_intercept
#. shmobj: support large page
#. xpmem: support large page
#. MM: handle zero_at_free in page faults
------------------------
McKernel major bug fixes
------------------------
#. TO RESET: stack changes
#. Tofu: keep track of stags per memory range
#. Tofu: match page sizes to MBPT and fault PTEs if not present
#. Tofu: fix phys addr calculation for contiguous pages in MBPT/BCH update
#. rus_vm_fault: vmf_insert_pfn: treat VM_FAULT_NOPAGE as success
#. Tofu: mcctrl side MMU notifier and CQ/BCH cleanup
#. copy_user_ranges: copy straight_start of struct vm_range
#. mcctrl: abort on invalid addr in mcexec_transfer_image()
#. mcctrl: fix access to uninitialized usrdata->cpu_topology_list
#. mcexec: propagate error in __NR_gettid handler
#. mcexec_transfer_image(): map exact size of remote memory (instead of forcing PAGE_SIZE)
#. xpmem: fault stack area of remote process if VM range doesn't yet exist
#. Tofu: fault stack area if VM range doesn't exist in STAG registration
#. __mcctrl_os_read_write_cpu_register: fix timeout
#. mbind: Use range_policy's numamask as priority on MPOL_BIND
#. migrate: Don't migrate on in-kernel interrupt
#. Send a signal to mcexec after switching to that process.
#. uti: fix syscall response is mis-consumed by __do_in_kernel_irq_syscall
#. uti: fix handling UTI_CPU_SET env
#. do_execveat: kill instead of panic when init_process_stack fails
#. remote_page_fault is handled by the offloaded thread.
#. coredump: fix behavior when gencore fail
#. xpmem: truncates the size of xpmem_attach at the page boundary (workaround for fjmpi)
#. __mcctrl_os_read_write_cpu_register: spin timeout in mcctrl_ikc_send_wait()
=============================================
Version 1.7.1 (Dec 23, 2020)
=============================================
----------------------
IHK major updates
----------------------
#. d5d5c23 Tofu: support for barrier gate
#. Tofu: proper cleanup of premapped DMA regions
#. Tofu: initial version
#. SMP: try with GFP_ATOMIC as well in mem reserve
------------------------
IHK major bug fixes
------------------------
#. ihklib: ihk(_os)_query_{cpu,mem}: allow to pass empty array
#. SMP: non compound page free and GFP_ATOMIC
#. ihk_get_num_os_instances: don't open /dev/mcdN
#. ihklib: ihk_create_os_str: fix variable prefix
----------------------
McKernel major updates
----------------------
#. stragiht map: creates a straight map covering the whole physical memory, and gives virtual address ranges out of it to maps to which physical pages are allocated on map
#. free-time, lazy, potentially Linux-side page-zeroing
#. Tofu built-in driver: supports memory registration and barrier gate setup
#. kmalloc cache
------------------------
McKernel major bug fixes
------------------------
#. mmap: return -EINVAL for non-anonymous, MAP_HUGETLB map
#. kernel: increase stack size
#. Tofu: proper cleanup of device files when mcexec gets killed
=============================================
Version 1.7.0 (Nov 25, 2020)
=============================================
----------------------
IHK major updates
----------------------
#. ihklib: add ihk_create_os_str
#. ihklib: ihk_reserve_mem: add capped best effort to balanced
------------------------
IHK major bug fixes
------------------------
#. make /dev/mcdN sharable
#. acpi: compat: RHEL-8.2
#. gic_chip_data: compat: RHEL-8.3
----------------------
McKernel major updates
----------------------
#. arm64: Contiguous PTE support
#. arm64: Scalable Vector Extension (SVE) support
#. arm64: PMU overflow interrupt support
#. arm64 port: Direct access to Mckernel memory from Linux
#. arm64 port: utility thread offloading, which spawns thread onto Linux CPU
#. eclair: support for live debug
#. Crash utility extension
#. Replace mcoverlayfs with a soft userspace overlay
#. Build system is switched to cmake
#. Core dump includes thread information
#. mcinspect and mcps: DWARF based LWK inspection
------------------------
McKernel major bug fixes
------------------------
#. shmobj: Fix rusage counting for large page
#. mcctrl control: task start_time changed to u64 nsec
#. mcctrl: add handling for one more level of page tables
#. Add kernel argument to turn on/off time sharing
#. flatten_string / process env: realign env and clear trailing bits
#. madvise: Add MADV_HUGEPAGE support
#. mcctrl: remove in-kernel calls to syscalls
#. arch_cpu_read_write_register: error return fix.
#. set_cputime(): interrupt enable/disable fix.
#. set_mempolicy(): Add mode check.
#. mbind(): Fix memory_range_lock deadlock.
#. ihk_ikc_recv: Record channel to packet for release
#. Add set_cputime() kernel to kernel case and mode enum.
#. execve: Call preempt_enable() before error-exit
#. memory/x86_64: fix linux safe_kernel_map
#. do_kill(): fix pids table when nr of threads is larger than num_processors
#. shmget: Use transparent huge pages when page size isn't specified
#. prctl: Add support for PR_SET_THP_DISABLE and PR_GET_THP_DISABLE
#. monitor_init: fix undetected hang on highest numbered core
#. init_process_stack: change premapped stack size based on arch
#. x86 syscalls: add a bunch of XXat() delegated syscalls
#. do_pageout: fix direct kernel-user access
#. stack: add hwcap auxval
#. perf counters: add arch-specific perf counters
#. Added check of nohost to terminate_host().
#. kmalloc: Fix address order in free list
#. sysfs: use nr_cpu_ids for cpumasks (fixes libnuma parsing error on ARM)
#. monitor_init: Use ihk_mc_cpu_info()
#. Fix ThunderX2 write-combined PTE flag insanity
#. ARM: eliminate zero page mapping (i.e, init_low_area())
#. eliminate futex_cmpxchg_enabled check (not used and dereffed a NULL pointer)
#. page_table: Fix return value of lookup_pte when ptl4 is blank
#. sysfs: add missing symlinks for cpu/node
#. Make Linux handler run when mmap to procfs.
#. Separate mmap area from program loading (relocation) area
#. move rusage into kernel ELF image (avoid dynamic alloc before NUMA init)
#. arm: turn off cpu on panic
#. page fault handler: protect thread accesses
#. Register PPD and release_handler at the same time.
#. fix to missing exclusive processing between terminate() and finalize_process().
#. perfctr_stop: add flags to no 'disable_intens'
#. fileobj, shmobj: free pages in object destructor (as opposed to page_unmap())
#. clear_range_l1, clear_range_middle: Fix handling contiguous PTE
#. do_mmap: don't pre-populate the whole file when asked for smaller segment
#. invalidate_one_page: Support shmobj and contiguous PTE
#. ubsan: fix undefined shifts
#. x86: disable zero mapping and add a boot pt for ap trampoline
#. rusage: Don't count PF_PATCH change
#. Fixed time processing.
#. copy_user_pte: vmap area not owned by McKernel
#. gencore: Zero-clear ELF header and memory range table
#. rpm: ignore CMakeCache.txt in dist and relax BuildRequires on cross build
#. gencore: Allocate ELF header to heap instead of stack
#. nanosleep: add cpu_pause() in spinwait loop
#. init_process: add missing initializations to proc struct
#. rus_vm_fault: always use a packet on the stack
#. process stack: use PAGE_SIZE in aux vector
#. copy_user_pte: base memobj copy on range & VR_PRIVATE
#. arm64: ptrace: Fix overwriting 1st argument with return value
#. page fault: use cow for private device mappings
#. reproductible builds: remove most install paths in c code
#. page fault: clear writable bit for non-dirtying access to shared ranges
#. mcreboot/mcstop+release: support for regular user execution
#. irqbalance_mck: replace extra service with service drop-in
#. do_mmap: give addr argument a chance even if not MAP_FIXED
#. x86: fix xchg() and cmpxchg() macros
#. IHK: support for using Linux work IRQ as IKC interrupt (optional)
#. MCS: fix ARM64 issue by using smp_XXX() functions (i.e., barrier()s)
#. procfs: add number of threads to stat and status
#. memory_range_lock: Fix deadlock in procfs/sysfs handler
#. flush instruction cache at context switch time if necessary
#. arm64: Fix PMU related functions
#. page_fault_process_memory_range: Disable COW for VM region with zeroobj
#. extend_process_region: Fall back to demand paging when not contiguous
#. munmap: fix deadlock with remote pagefault on vm range lock
#. procfs: if memory_range_lock fails, process later
#. migrate-cpu: Prevent migration target from calling schedule() twice
#. sched_request_migrate(): fix race condition between migration req and IRQs
#. get_one_cpu_topology: Renumber core_id (physical core id)
#. bb7e140 procfs cpuinfo: use sequence number as processor
#. set_host_vma(): do NOT read protect Linux VMA
#. hugefileobj: rewrite page allocation/handling
#. VM: use RW spinlock for vm_range_lock
#. /dev/shm: use Linux PFNs and populate mappings
#. Make struct ihk_os_rusage compatible with mckernel_rusage (workaround for Fugaku)
#. Record pthread routine address in clone(), keep helper threads on caller CPU core (workaround for Fugaku)
#. struct process: fix type of group_exit_status
#. tgkill: Fix argument validatation
#. set_robust_list: Add error check
#. mcexec: Don't forward SIGTSTP SIGTTIN SIGTTOUT to mckernel
#. syscall: add prlimit64
#. stack: grow on page fault
#. mcexec: use FLIB_NUM_PROCESS_ON_NODE when -n not specified (Fugaku specific)
===========================================
Version 1.6.0 (Nov 11, 2018)
===========================================
-----------------------------------------------
McKernel major updates
-----------------------------------------------
#. McKernel and Linux share one unified kernel virtual address space.
That is, McKernel sections resides in Linux sections spared for
modules. In this way, Linux can access the McKernel kernel memory area.
#. hugetlbfs support
#. IHK is now included as a git submodule
#. Debug messages are turned on/off in per souce file basis at run-time.
#. It's prohibited for McKernel to access physical memory ranges which Linux didn't give to McKernel.
#. UTI (capability to spawn a thread on Linux CPU) improvement:
* System calls issued from the thread are hooked by modifying binary in memory.
---------------------------
McKernel major bug fixes
---------------------------
#<digits> below denotes the redmine issue number (https://postpeta.pccluster.org/redmine/).
1. #926: shmget: Hide object with IPC_RMID from shmget
2. #1028: init_process: Inherit parent cpu_set
3. #995: Fix shebang recorded in argv[0]
4. #1024: Fix VMAP virtual address leak
5. #1109: init_process_stack: Support "ulimit -s unlimited"
6. x86 mem init: do not map identity mapping
7. mcexec_wait_syscall: requeue potential request on interrupted wait
8. mcctrl_ikc_send_wait: fix interrupt with do_frees == NULL
9. pager_req_read: handle short read
10. kprintf: only call eventfd() if it is safe to interrupt
11. process_procfs_request: Add Pid to /proc/<PID>/status
12. terminate: fix oversubscribe hang when waiting for other threads on same CPU to die
13. mcexec: Do not close fd returned to mckernel side
14. #976: execve: Clear sigaltstack and fp_regs
15. #1002: perf_event: Specify counter by bit_mask on start/stop
16. #1027: schedule: Don't reschedule immediately when wake up on migrate
17. #mcctrl: lookup unexported symbols at runtime
18. __sched_wakeup_thread: Notify interrupt_exit() of re-schedule
19. futex_wait_queue_me: Spin-sleep when timeout and idle_halt is specified
20. #1167: ihk_os_getperfevent,setperfevent: Timeout IKC sent by mcctrl
21. devobj: fix object size (POSTK_DEBUG_TEMP_FIX_36)
22. mcctrl: remove rus page cache
23. #1021: procfs: Support multiple reads of e.g. ``/proc/*/maps``
24. #1006: wait: Delay wake-up parent within switch context
25. #1164: mem: Check if phys-mem is within the range of McKernel memory
26. #1039: page_fault_process_memory_range: Remove ihk_mc_map_virtual for CoW of device map
27. partitioned execution: pass process rank to LWK
28. process/vm: implement access_ok()
29. spinlock: rewrite spinlock to use Linux ticket head/tail format
30. #986: Fix deadlock involving mmap_sem and memory_range_lock
31. Prevent one CPU from getting chosen by concurrent forks
32. #1009: check_signal: system call restart is done only once
33. #1176: syscall: the signal received during system call processing is not processed.
34. #1036 syscall_time: Handle by McKernel
35. #1165 do_syscall: Delegate system calls to the mcexec with the same pid
36. #1194 execve: Fix calling ptrace_report_signal after preemption is disabled
37. #1005 coredump: Exclude special areas
38. #1018 procfs: Fix pread/pwrite to procfs fail when specified size is bigger than 4MB
39. #1180 sched_setaffinity: Check migration after decrementing in_interrupt
40. #771, #1179, #1143 ptrace supports threads
41. #1189 procfs/do_fork: wait until procfs entries are registered
42. #1114 procfs: add '/proc/pid/stat' to mckernel side and fix its comm
43. #1116 mcctrl procfs: check entry was returned before using it
44. #1167 ihk_os_getperfevent,setperfevent: Return -ETIME when IKC timeouts
45. mcexec/execve: fix shebangs handling
46. procfs: handle 'comm' on mckernel side
47. ihk_os_setperfevent: Return number of registered events
48. mcexec: fix terminating zero after readlink()
===========================================
Version 1.5.1 (July 9, 2018)
===========================================
-----------------------------------------------
McKernel major updates
-----------------------------------------------
Watchdog timer to detect hang of McKernel
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
mcexec prints out the following line to its stderr when a hang of McKernel is detected.
::
mcexec detected hang of McKernel
The watchdog timer is enabled by passing -i <timeout_in_sec> option to mcreboot.sh. <timeout_in_sec> specifies the interval of checking if McKernel is alive.
For example, specify ``-i 600`` to detect the hang with 10 minutes interval:
::
mcreboot.sh -i 600
The detailed step of the hang detection is as follows.
#. mcexec acquires eventfd for notification from IHK and perform epoll() on it.
#. A daemon called ihkmond monitors the state of McKernel periodically with the interval specified by the -i option. It judges that McKernel is hanging and notifies mcexec by the eventfd if its state hasn't changed since the last check.
---------------------------
McKernel major bug fixes
---------------------------
1. #1146: pager_req_map(): do not take mmap_sem if not needed
2. #1135: prepare_process_ranges_args_envs(): fix saving cmdline
3. #1144: fileobj/devobj: record path name
4. #1145: fileobj: use MCS locks for per-file page hash
5. #1076: mcctrl: refactor prepare_image into new generic ikc send&wait
6. #1072: execve: fix execve with oversubscribing
7. #1132: execve: use thread variable instead of cpu_local_var(current)
8. #1117: mprotect: do not set page table writable for cow pages
9. #1143: syscall wait4: add _WALL (POSTK_DEBUG_ARCH_DEP_44)
10. #1064: rusage: Fix initialization of rusage->num_processors
11. #1133: pager_req_unmap: Put per-process data at exit
12. #731: do_fork: Propagate error code returned by mcexec
13. #1149: execve: Reinitialize vm_regions's map area on execve
14. #1065: procfs: Show file names in /proc/<PID>/maps
15. #1112: mremap: Fix type of size arguments (from ssize_t to size_t)
16. #1121: sched_getaffinity: Check arguments in the same order as in Linux
17. #1137: mmap, mremap: Check arguments in the same order as in Linux
18. #1122: fix return value of sched_getaffinity
19. #732: fix: /proc/<PID>/maps outputs a unnecessary NULL character
===================================
Version 1.5.0 (Apr 5, 2018)
===================================
--------------------------------------
McKernel major updates
--------------------------------------
1. Aid for Linux version migration: Detect /proc, /sys format change
between two kernel verions
2. Swap out
* Only swap-out anonymous pages for now
3. Improve support of /proc/maps
4. mcstat: Linux tool to show resource usage
---------------------------
McKernel major bug fixes
---------------------------
#. #727: execve: Fix memory leak when receiving SIGKILL
#. #829: perf_event_open: Support PERF_TYPE_HARDWARE and PERF_TYPE_HW_CACHE
#. #906: mcexec: Check return code of fork()
#. #1038: mcexec: Timeout when incorrect value is given to -n option
#. #943 #945 #946 #960 #961: mcexec: Support strace
#. #1029: struct thread is not released with stress-test involving signal and futex
#. #863 #870 : Respond immediately to terminating signal when offloading system call
#. #1119: translate_rva_to_rpa(): use 2MB blocks in 1GB pages on x86
#. #898: Shutdown OS only after no in-flight IKC exist
#. #882: release_handler: Destroy objects as the process which opened it
#. #882: mcexec: Make child process exit if the parent is killed during fork()
#. #925: XPMEM: Don't destroy per-process object of the parent
#. #885: ptrace: Support the case where a process attaches its child
#. #1031: sigaction: Support SA_RESETHAND
#. #923: rus_vm_fault: Return error when a thread not performing system call offloading causes remote page fault
#. #1032 #1033 #1034: getrusage: Fix ru_maxrss, RUSAGE_CHILDREN, ru_stime related bugs
#. #1120: getrusage: Fix deadlock on thread->times_update
#. #1123: Fix deadlock related to wait_queue_head_list_node
#. #1124: Fix deadlock of calling terminate() from terminate()
#. #1125: Fix deadlock related to thread status
* Related functions are: hold_thread(), do_kill() and terminate()
#. #1126: uti: Fix uti thread on the McKernel side blocks others in do_syscall()
#. #1066: procfs: Show Linux /proc/self/cgroup
#. #1127: prepare_process_ranges_args_envs(): fix generating saved_cmdline to avoid PF in strlen()
#. #1128: ihk_mc_map/unmap_virtual(): do proper TLB invalidation
#. #1043: terminate(): fix update_lock and threads_lock order to avoid deadlock
#. #1129: mcreboot.sh: Save ``/proc/irq/*/smp_affinity`` to ``/tmp/mcreboot``
#. #1130: mcexec: drop READ_IMPLIES_EXEC from personality
--------------------
McKernel workarounds
--------------------
#. Forbid CPU oversubscription
* It can be turned on by mcreboot.sh -O option
===================================
Version 1.4.0 (Oct 30, 2017)
===================================
-----------------------------------------------------------
Abstracted event type support in perf_event_open()
-----------------------------------------------------------
PERF_TYPE_HARDWARE and PERF_TYPE_CACHE types are supported.
----------------------------------
Direct user-space access
----------------------------------
Code lines using direct user-space access (e.g. passing user-space
pointer to memcpy()) becomes more portable across processor
architectures. The modification follows the following rules.
1. Move the code section as it is to the architecture dependent
directory if it is a part of the critical-path.
2. Otherwise, rewrite the code section by using the portable methods.
The methods include copy_from_user(), copy_to_user(),
pte_get_phys() and phys_to_virt().
--------------------------------
MPI and OpenMP micro-bench tests
--------------------------------
The performance figures of MPI and OpenMP primitives are compared with
those of Linux by using Intel MPI Benchmarks and EPCC OpenMP Micro
Benchmark.
===================================
Version 1.3.0 (Sep 30, 2017)
===================================
--------------------
Kernel dump
--------------------
#. A dump level of "only kernel memory" is added.
The following two levels are available now:
+--+-----------------------+
| 0|Dump all |
+--+-----------------------+
|24|Dump only kernel memory|
+--+-----------------------+
The dump level can be set by -d option in ihkosctl or the argument
for ihk_os_makedumpfile(), as shown in the following examples:
::
Command: ihkosctl 0 dump -d 24
Function call: ihk_os_makedumpfile(0, NULL, 24, 0);
#. Dump file is created when Linux panics.
The dump level can be set by dump_level kernel argument, as shown in the
following example:
::
ihkosctl 0 kargs "hidos dump_level=24"
The IHK dump function is registered to panic_notifier_list when creating /dev/mcdX and called when Linux panics.
-----------------------------
Quick Process Launch
-----------------------------
MPI process launch time and some of the initialization time can be
reduced in application consisting of multiple MPI programs which are
launched in turn in the job script.
The following two steps should be performed to use this feature:
#. Replace mpiexec with ql_mpiexec_start and add some lines for ql_mpiexec_finalize in the job script
#. Modify the app so that it can repeat calculations and wait for the instructions from ql_mpiexec_{start,finalize} at the end of the loop
The first step is explained using an example. Assume the original job script looks like this:
.. code-block:: none
/* Execute ensamble simulation and then data assimilation, and repeat this ten times */
for i in {1..10}; do
/* Each ensamble simulation execution uses 100 nodes, launch ten of them in parallel */
for j in {1..10}; do
mpiexec -n 100 -machinefile ./list1_$j p1.out a1 & pids[$i]=$!;
done
/* Wait until the ten ensamble simulation programs finish */
for j in {1..10}; do wait ${pids[$j]}; done
/* Launch one data assimilation program using 1000 nodes */
mpiexec -n 1000 -machinefile ./list2 p2.out a2
done
The job script should be modified like this:
.. code-block:: none
for i in {1..10}; do
for j in {1..10}; do
/* Replace mpiexec with ql_mpiexec_start */
ql_mpiexec_start -n 100 -machinefile ./list1_$j p1.out a1 & pids[$j]=$!;
done
for j in {1..10}; do wait ${pids[$j]}; done
ql_mpiexec_start -n 1000 -machinefile ./list2 p2.out a2
done
/* p1.out and p2.out don't exit but are waiting for the next calculation. So tell them to exit */
for j in {1..10}; do
ql_mpiexec_finalize -machinefile ./list1_$i p1.out a1;
done
ql_mpiexec_finalize -machinefile ./list2 p2.out a2;
The second step is explained using a pseudo-code.
.. code-block:: none
MPI_Init();
Prepare data exchange with preceding / following MPI programs
loop:
foreach Fortran module
Initialize data using command-line argments, parameter files, environment variables
Input data from preceding MPI programs / Read snap-shot
Perform main calculation
Output data to following MPI programs / Write snap-shot
/* ql_client() waits for command of ql_mpiexec_{start,finish} */
if (ql_client() == QL_CONTINUE) { goto loop; }
MPI_Finalize();
qlmpilib.h should be included in the code and libql{mpi,fort}.so should be linked to the executable file.

19
docs/README Normal file
View File

@ -0,0 +1,19 @@
How to build
============
Build English html
------------------
make html
Build Japanese html
--------------------
make ja
How to translate into Japanese
------------------------------
See https://www.sphinx-doc.org/en/master/usage/advanced/intl.html

65
docs/archtecture.rst Normal file
View File

@ -0,0 +1,65 @@
Architectural Overview
======================
At the heart of the stack is a low-level software infrastructure called
Interface for Heterogeneous Kernels (IHK). IHK is a general framework
that provides capabilities for partitioning resources in a many-core
environment (e.g.,CPU cores and physical memory) and it enables
management of lightweight kernels. IHK can allocate and release host
resources dynamically and no reboot of the host machine is required when
altering configuration. IHK also provides a low-level inter-kernel
messaging infrastructure, called the Inter-Kernel Communication (IKC)
layer. An architectural overview of the main system components is shown
below.
.. figure:: mckernel.png
:alt: arch
McKernel is a lightweight kernel written from scratch. It is designed
for HPC and is booted from IHK. McKernel retains a binary compatible ABI
with Linux, however, it implements only a small set of performance
sensitive system calls and the rest are offloaded to Linux.
Specifically, McKernel has its own memory management, it supports
processes and multi-threading with a simple round-robin cooperative
(tick-less) scheduler, and it implements signaling. It also allows
inter-process memory mappings and it provides interfaces to hardware
performance counters.
Functionality
-------------
An overview of some of the principal functionalities of the IHK/McKernel
stack is provided below.
System Call Offloading
~~~~~~~~~~~~~~~~~~~~~~
System call forwarding in McKernel is implemented as follows. When an
offloaded system call occurs, McKernel marshals the system call number
along with its arguments and sends a message to Linux via a dedicated
IKC channel. The corresponding proxy process running on Linux is by
default waiting for system call requests through an ioctl() call into
IHKs system call delegator kernel module. The delegator kernel modules
IKC interrupt handler wakes up the proxy process, which returns to
userspace and simply invokes the requested system call. Once it obtains
the return value, it instructs the delegator module to send the result
back to McKernel, which subsequently passes the value to user-space.
Unified Address Space
~~~~~~~~~~~~~~~~~~~~~
The unified address space model in IHK/McKernel ensures that offloaded
system calls can seamlessly resolve arguments even in case of pointers.
This mechanism is depicted below and is implemented as follows.
.. figure:: unified_address_space_en.png
:alt: unified_ap
First, the proxy process is compiled as a position independent binary,
which enables us to map the code and data segments specific to the proxy
process to an address range which is explicitly excluded from McKernels
user space. The grey box on the right side of the figure demonstrates
the excluded region. Second, the entire valid virtual address range of
McKernels application user-space is covered by a special mapping in the
proxy process for which we use a pseudo file mapping in Linux. This
mapping is indicated by the blue box on the left side of the figure.

47
docs/background.rst Normal file
View File

@ -0,0 +1,47 @@
Background and Motivation
=========================
With the growing complexity of high-end supercomputers, the current
system software stack faces significant challenges as we move forward to
exascale and beyond. The necessity to deal with extreme degree of
parallelism, heterogeneous architectures, multiple levels of memory
hierarchy, power constraints, etc., advocates operating systems that can
rapidly adapt to new hardware requirements, and that can support novel
programming paradigms and runtime systems. On the other hand, a new
class of more dynamic and complex applications are also on the horizon,
with an increasing demand for application constructs such as in-situ
analysis, workflows, elaborate monitoring and performance tools. This
complexity relies not only on the rich features of POSIX, but also on
the Linux APIs (such as the */proc*, */sys* filesystems, etc.) in
particular.
Two Traditional HPC OS Approaches
---------------------------------
Traditionally, light-weight operating systems specialized for HPC
followed two approaches to tackle scalable execution of large-scale
applications. In the full weight kernel (FWK) approach, a full Linux
environment is taken as the basis, and features that inhibit attaining
HPC scalability are removed, i.e., making it light-weight. The pure
light-weight kernel (LWK) approach, on the other hand, starts from
scratch and effort is undertaken to add sufficient functionality so that
it provides a familiar API, typically something close to that of a
general purpose OS, while at the same time it retains the desired
scalability and reliability attributes. Neither of these approaches
yields a fully Linux compatible environment.
The Multi-kernel Approach
-------------------------
A hybrid approach recognized recently by the system software community
is to run Linux simultaneously with a lightweight kernel on compute
nodes and multiple research projects are now pursuing this direction.
The basic idea is that simulations run on an HPC tailored lightweight
kernel, ensuring the necessary isolation for noiseless execution of
parallel applications, but Linux is leveraged so that the full POSIX API
is supported. Additionally, the small code base of the LWK can also
facilitate rapid prototyping for new, exotic hardware features.
Nevertheless, the questions of how to share node resources between the
two types of kernels, where do device drivers execute, how exactly do
the two kernels interact with each other and to what extent are they
integrated, remain subjects of ongoing debate.

View File

@ -0,0 +1,60 @@
Boot McKernel
----------------
A boot script called ``mcreboot.sh`` is provided under ``sbin`` in the install
folder. To boot on logical CPU 1 with 512MB of memory, use the following
invocation:
::
export TOP=${HOME}/ihk+mckernel/
cd ${TOP}
sudo ./sbin/mcreboot.sh -c 1 -m 512m
You should see something similar like this if you display the McKernels
kernel message log:
.. code-block:: none
./sbin/ihkosctl 0 kmsg
IHK/McKernel started.
[ -1]: no_execute_available: 1
[ -1]: map_fixed: phys: 0xfee00000 => 0xffff860000009000 (1 pages)
[ -1]: setup_x86 done.
[ -1]: ns_per_tsc: 385
[ -1]: KCommand Line: hidos dump_level=24
[ -1]: Physical memory: 0x1ad3000 - 0x21000000, 525520896 bytes, 128301 pages available @ NUMA: 0
[ -1]: NUMA: 0, Linux NUMA: 0, type: 1, available bytes: 525520896, pages: 128301
[ -1]: NUMA 0 distances: 0 (10),
[ -1]: map_fixed: phys: 0x28000 => 0xffff86000000a000 (2 pages)
[ -1]: Trampoline area: 0x28000
[ -1]: map_fixed: phys: 0x0 => 0xffff86000000c000 (1 pages)
[ -1]: # of cpus : 1
[ -1]: locals = ffff880001af6000
[ 0]: BSP: 0 (HW ID: 1 @ NUMA 0)
[ 0]: BSP: booted 0 AP CPUs
[ 0]: Master channel init acked.
[ 0]: vdso is enabled
IHK/McKernel booted.
Run a simple program on McKernel
-----------------------------------
The mcexec command line tool (which is also the Linux proxy process) can
be used for executing applications on McKernel:
::
./bin/mcexec hostname
centos-vm
Shutdown McKernel
--------------------
Finally, to shutdown McKernel and release CPU/memory resources back to
Linux use the following command:
::
sudo ./sbin/mcstop+release.sh

173
docs/conf.py Normal file
View File

@ -0,0 +1,173 @@
# -*- coding: utf-8 -*-
#
# Configuration file for the Sphinx documentation builder.
#
# This file does only contain a selection of the most common options. For a
# full list see the documentation:
# http://www.sphinx-doc.org/en/master/config
# -- Path setup --------------------------------------------------------------
# If extensions (or modules to document with autodoc) are in another directory,
# add these directories to sys.path here. If the directory is relative to the
# documentation root, use os.path.abspath to make it absolute, like shown here.
#
# import os
# import sys
# sys.path.insert(0, os.path.abspath('.'))
# -- Project information -----------------------------------------------------
project = u'IHK/McKernel'
copyright = u'2020, Masamichi Takagi, Balazs Gerofi, Yutaka Ishikawa'
author = u'Masamichi Takagi, Balazs Gerofi, Yutaka Ishikawa'
# The short X.Y version
version = u''
# The full version, including alpha/beta/rc tags
release = u''
# -- General configuration ---------------------------------------------------
# If your documentation needs a minimal Sphinx version, state it here.
#
# needs_sphinx = '1.0'
# Add any Sphinx extension module names here, as strings. They can be
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
# ones.
extensions = [
'recommonmark',
]
numfig = True
# Add any paths that contain templates here, relative to this directory.
templates_path = ['_templates']
# The suffix(es) of source filenames.
# You can specify multiple suffix as a list of string:
source_suffix = ['.rst', '.md']
# The master toctree document.
master_doc = 'index'
# The language for content autogenerated by Sphinx. Refer to documentation
# for a list of supported languages.
#
# This is also used if you do content translation via gettext catalogs.
# Usually you set "language" from the command line for these cases.
language = None
# List of patterns, relative to source directory, that match files and
# directories to ignore when looking for source files.
# This pattern also affects html_static_path and html_extra_path.
exclude_patterns = [u'_build', 'Thumbs.db', '.DS_Store']
# The name of the Pygments (syntax highlighting) style to use.
pygments_style = None
# -- Options for HTML output -------------------------------------------------
# The theme to use for HTML and HTML Help pages. See the documentation for
# a list of builtin themes.
#
html_theme = 'sphinx_rtd_theme'
# Theme options are theme-specific and customize the look and feel of a theme
# further. For a list of options available for each theme, see the
# documentation.
#
# html_theme_options = {}
# Add any paths that contain custom static files (such as style sheets) here,
# relative to this directory. They are copied after the builtin static files,
# so a file named "default.css" will overwrite the builtin "default.css".
html_static_path = ['_static']
# Custom sidebar templates, must be a dictionary that maps document names
# to template names.
#
# The default sidebars (for documents that don't match any pattern) are
# defined by theme itself. Builtin themes are using these templates by
# default: ``['localtoc.html', 'relations.html', 'sourcelink.html',
# 'searchbox.html']``.
#
# html_sidebars = {}
# -- Options for HTMLHelp output ---------------------------------------------
# Output file base name for HTML help builder.
htmlhelp_basename = 'IHKMcKerneldoc'
# -- Options for LaTeX output ------------------------------------------------
latex_elements = {
# The paper size ('letterpaper' or 'a4paper').
#
# 'papersize': 'letterpaper',
# The font size ('10pt', '11pt' or '12pt').
#
# 'pointsize': '10pt',
# Additional stuff for the LaTeX preamble.
#
# 'preamble': '',
# Latex figure (float) alignment
#
# 'figure_align': 'htbp',
}
# Grouping the document tree into LaTeX files. List of tuples
# (source start file, target name, title,
# author, documentclass [howto, manual, or own class]).
latex_documents = [
(master_doc, 'IHKMcKernel.tex', u'IHK/McKernel Documentation',
u'Masamichi Takagi, Balazs Gerofi, Yutaka Ishikawa', 'manual'),
]
# -- Options for manual page output ------------------------------------------
# One entry per manual page. List of tuples
# (source start file, name, description, authors, manual section).
man_pages = [
(master_doc, 'ihkmckernel', u'IHK/McKernel Documentation',
[author], 1)
]
# -- Options for Texinfo output ----------------------------------------------
# Grouping the document tree into Texinfo files. List of tuples
# (source start file, target name, title, author,
# dir menu entry, description, category)
texinfo_documents = [
(master_doc, 'IHKMcKernel', u'IHK/McKernel Documentation',
author, 'IHKMcKernel', 'One line description of project.',
'Miscellaneous'),
]
# -- Options for Epub output -------------------------------------------------
# Bibliographic Dublin Core info.
epub_title = project
# The unique identifier of the text. This can be a ISBN number
# or the project homepage.
#
# epub_identifier = ''
# A unique identification for the text.
#
# epub_uid = ''
# A list of files that should not be packed into the epub file.
epub_exclude_files = ['search.html']

11
docs/contact.rst Normal file
View File

@ -0,0 +1,11 @@
Contact
=======
Please give your feedback to us via one of the following mailing lists.
Subscription via
`www.pccluster.org <http://www.pccluster.org/mailman/listinfo/mckernel-users>`__
is needed.
- English: mckernel-users@pccluster.org
- Japanese: mckernel-users-jp@pccluster.org

5
docs/cover.rst Normal file
View File

@ -0,0 +1,5 @@
.. include:: logo.rst
.. include:: summary.rst
See `Quick Guide -- Installation <quick.html#installation>`__ for jump start.

5
docs/doc.rst Normal file
View File

@ -0,0 +1,5 @@
Documentation
=============
Documentation is available
`here <https://ihkmckernel.readthedocs.io>`__.

18
docs/ihk_developers.rst Normal file
View File

@ -0,0 +1,18 @@
.. sectnum::
:suffix: .
:depth: 3
External Specs
==============
Overview
--------
Function Specs
--------------
Command / Daemon Specs
----------------------
Booting LWK
===========

58
docs/index.rst Normal file
View File

@ -0,0 +1,58 @@
.. IHK/McKernel documentation master file, created by
sphinx-quickstart on Mon Jul 27 15:57:24 2020.
You can adapt this file completely to your liking, but it should at least
contain the root `toctree` directive.
===================
IHK/McKernel
===================
.. include:: cover.rst
.. toctree::
:maxdepth: 2
:caption: Quick Guide
quick
.. toctree::
:maxdepth: 2
:caption: Users' Guide
users
.. toctree::
:maxdepth: 2
:caption: Operators' Guide
operators
.. toctree::
:maxdepth: 2
:caption: IHK Developers' Guide
ihk_developers
.. toctree::
:maxdepth: 2
:caption: McKernel Developers' Guide
mckernel_developers
.. toctree::
:maxdepth: 2
:caption: IHK Specifications
spec/ihk
.. toctree::
:maxdepth: 2
:caption: McKernel Specifications
spec/mckernel
.. toctree::
:maxdepth: 2
:caption: What's New
NEWS

286
docs/install.rst Normal file
View File

@ -0,0 +1,286 @@
.. highlight:: bash
Installation
============
The following OS distributions and platforms are recommended:
* OS distribution
* CentOS 7.3 or later
* RHEL 7.3 or later
* Platform
* Intel Xeon
* Intel Xeon Phi
* Fujitsu A64FX
Prepare files for building McKernel
-----------------------------------
Grant read permission to the System.map file of your kernel version on the build machine:
::
sudo chmod a+r /boot/System.map-`uname -r`
Install the following packages to the build machine:
::
cmake kernel-devel binutils-devel systemd-devel numactl-devel gcc make nasm git libdwarf-devel capstone-devel
When having access to repositories
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
On RHEL 8, enable the CodeReady Linux Builder (CLB) repository:
::
sudo subscription-manager repos --enable codeready-builder-for-rhel-8-$(/bin/arch)-rpms
On CentOS 8, enable the PowerTools repository:
::
sudo dnf config-manager --set-enabled PowerTools
Enable EPEL repository:
::
sudo yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
Install with yum:
::
sudo yum install cmake kernel-devel binutils-devel systemd-devel numactl-devel gcc make nasm git libdwarf-devel capstone-devel
When not having access to repositories
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
``libdwarf-devel``
""""""""""""""""""
Ask the system administrator to install them. Note that ``libdwarf-devel`` is in the CodeReady Linux Builder repository on RHEL 8 or in the PowerTools repository on CentOS 8.
``capstone-devel``
""""""""""""""""""
A. Ask the system administrator to install ``capstone-devel``. Note that it is in the EPEL repository.
B. Download the rpm with the machine in which you are the administrator:
::
sudo yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
sudo yum install yum-utils
yumdownloader capstone-devel
And then install it to your home directory:
::
cd $HOME/$(uname -p)
rpm2cpio capstone-devel-4.0.1-9.el8.aarch64.rpm | cpio -idv
sed -i 's#/usr/#'"$HOME"'/'"$(uname -p)"'/usr/#' $HOME/$(uname -p)/usr/lib64/pkgconfig/capstone.pc
Clone, compile, install
--------------------------
Clone the source code:
::
mkdir -p ~/src/ihk+mckernel/
cd ~/src/ihk+mckernel/
git clone --recursive -b development https://github.com/RIKEN-SysSoft/mckernel.git
(Optional) Checkout to the specific branch or version:
::
cd mckernel
git checkout <pathspec>
git submodule update
Foe example, if you want to try the development branch, use
“development” as the pathspec. If you want to try the prerelease version
1.7.0-0.2, use “1.7.0-0.2”.
Move to build directory:
::
mkdir -p ~/src/ihk+mckernel/build && cd ~/src/ihk+mckernel/build
Run cmake:
When not cross-compiling:
~~~~~~~~~~~~~~~~~~~~~~~~~
::
CMAKE_PREFIX_PATH=${HOME}/$(uname -p)/usr \
cmake -DCMAKE_INSTALL_PREFIX=${HOME}/ihk+mckernel \
-DENABLE_UTI=ON \
../mckernel
Note that ``CMAKE_PREFIX_PATH=${HOME}/$(uname -p)/usr`` is required only when ``capstone-devel`` is installed to your home directory.
When cross-compiling:
~~~~~~~~~~~~~~~~~~~~~
::
cmake -DCMAKE_INSTALL_PREFIX=${HOME}/ihk+mckernel \
-DUNAME_R=<target_uname_r> \
-DKERNEL_DIR=<kernnel_dir> \
-DBUILD_TARGET=smp-arm64 \
-DCMAKE_TOOLCHAIN_FILE=../mckernel/cmake/cross-aarch64.cmake \
-DENABLE_UTI=ON \
../mckernel
Install with cmake
~~~~~~~~~~~~~~~~~~
Install with make:
::
make -j install
The kernel modules and McKernel kernel image should be installed
under the **ihk+mckernel** folder in your home directory.
Install with rpm
~~~~~~~~~~~~~~~~~~~~
Create the tarball and the spec file:
::
make dist
cp mckernel-<version>.tar.gz <rpmbuild>/SOURCES
(optional) Edit the following line in ``scripts/mckernel.spec`` to change
cmake options. For example:
::
%cmake -DCMAKE_BUILD_TYPE=Release \
-DUNAME_R=%{kernel_version} \
-DKERNEL_DIR=%{kernel_dir} \
%{?cmake_libdir:-DCMAKE_INSTALL_LIBDIR=%{cmake_libdir}} \
%{?build_target:-DBUILD_TARGET=%{build_target}} \
%{?toolchain_file:-DCMAKE_TOOLCHAIN_FILE=%{toolchain_file}} \
-DENABLE_TOFU=ON -DENABLE_FUGAKU_HACKS=ON \
-DENABLE_KRM_WORKAROUND=OFF -DWITH_KRM=ON \
-DENABLE_FUGAKU_DEBUG=OFF -DENABLE_UTI=ON \
.
Create the rpm package:
When not cross-compiling:
"""""""""""""""""""""""""
Then build the rpm:
::
rpmbuild -ba scripts/mckernel.spec
When cross-compiling:
"""""""""""""""""""""
::
rpmbuild -ba scripts/mckernel.spec --target <target_uname_m> -D 'kernel_version <target_uname_r>' -D 'kernel_dir <kernel_source>'
Install the rpm package:
::
sudo rpm -ivh <rpmbuild>/RPMS/<arch>/mckernel-<version>-<release>_<linux_kernel_ver>_<dist>.<arch>.rpm
The kernel modules and McKernel kernel image are installed under the
standard system directories.
Prepare files and change settings for installing McKernel
---------------------------------------------------------
Disable SELinux of the compute nodes:
::
sudo vim /etc/selinux/config
Change the file to SELINUX=disabled. And then reboot the compute nodes:
::
sudo reboot
Install the following packages to the compute nodes:
::
systemd-libs numactl-libs libdwarf capstone
When having access to repositories
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
On RHEL 8, enable the CodeReady Linux Builder (CLB) repository:
::
sudo subscription-manager repos --enable codeready-builder-for-rhel-8-$(/bin/arch)-rpms
On CentOS 8, enable the PowerTools repository:
::
sudo dnf config-manager --set-enabled PowerTools
Enable EPEL repository:
::
sudo yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
Install with yum:
::
sudo yum install systemd-libs numactl-libs libdwarf capstone
When not having access to repositories
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
``libdwarf``
""""""""""""
Ask the system administrator to install them. Note that ``libdwarf`` is in the CodeReady Linux Builder repository on RHEL 8 or in the PowerTools repository on CentOS 8.
``capstone``
""""""""""""
A. Ask the system administrator to install ``capstone``. Note that it is in the EPEL repository.
B. Download the rpm with the machine in which you are the administrator:
::
sudo yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
sudo yum install yum-utils
yumdownloader capstone
and then install it to your home directory:
::
cd $HOME/$(uname -p)
rpm2cpio capstone-4.0.1-9.el8.aarch64.rpm | cpio -idv

5
docs/license.rst Normal file
View File

@ -0,0 +1,5 @@
License
=======
McKernel is GPL licensed, as found in the LICENSE file.

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,469 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) 2020, Masamichi Takagi, Balazs Gerofi, Yutaka Ishikawa
# This file is distributed under the same license as the IHK/McKernel
# package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2020.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: IHK/McKernel \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-08-04 16:40+0900\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.7.0\n"
#: ../../README_.rst:2
msgid "|McKernel Logo|"
msgstr ""
#: ../../README_.rst:4
msgid ""
"IHK/McKernel is a light-weight multi-kernel operating system designed for"
" high-end supercomputing. It runs Linux and McKernel, a light-weight "
"kernel (LWK), side-by-side inside compute nodes and aims at the "
"following:"
msgstr ""
#: ../../README_.rst:9
msgid ""
"Provide scalable and consistent execution of large-scale parallel "
"scientific applications, but at the same time maintain the ability to "
"rapidly adapt to new hardware features and emerging programming models"
msgstr ""
#: ../../README_.rst:13
msgid ""
"Provide efficient memory and device management so that resource "
"contention and data movement are minimized at the system level"
msgstr ""
#: ../../README_.rst:15
msgid ""
"Eliminate OS noise by isolating OS services in Linux and provide jitter "
"free execution on the LWK"
msgstr ""
#: ../../README_.rst:17
msgid ""
"Support the full POSIX/Linux APIs by selectively offloading (slow-path) "
"system calls to Linux"
msgstr ""
#: ../../README_.rst:21
msgid "Documentation"
msgstr ""
#: ../../README_.rst:23
msgid "Documentation is available `here <https://ihkmckernel.readthedocs.io>`__."
msgstr ""
#: ../../README_.rst:27
msgid "Contents"
msgstr ""
#: ../../README_.rst:29
msgid "`Background <#background-and-motivation>`__"
msgstr ""
#: ../../README_.rst:30
msgid "`Architectural Overview <#architectural-overview>`__"
msgstr ""
#: ../../README_.rst:31
msgid "`Installation <#installation>`__"
msgstr ""
#: ../../README_.rst:32
msgid "`The Team <#the-team>`__"
msgstr ""
#: ../../README_.rst:35
msgid "Background and Motivation"
msgstr ""
#: ../../README_.rst:37
msgid ""
"With the growing complexity of high-end supercomputers, the current "
"system software stack faces significant challenges as we move forward to "
"exascale and beyond. The necessity to deal with extreme degree of "
"parallelism, heterogeneous architectures, multiple levels of memory "
"hierarchy, power constraints, etc., advocates operating systems that can "
"rapidly adapt to new hardware requirements, and that can support novel "
"programming paradigms and runtime systems. On the other hand, a new class"
" of more dynamic and complex applications are also on the horizon, with "
"an increasing demand for application constructs such as in-situ analysis,"
" workflows, elaborate monitoring and performance tools. This complexity "
"relies not only on the rich features of POSIX, but also on the Linux APIs"
" (such as the */proc*, */sys* filesystems, etc.) in particular."
msgstr ""
#: ../../README_.rst:52
msgid "Two Traditional HPC OS Approaches"
msgstr ""
#: ../../README_.rst:54
msgid ""
"Traditionally, light-weight operating systems specialized for HPC "
"followed two approaches to tackle scalable execution of large-scale "
"applications. In the full weight kernel (FWK) approach, a full Linux "
"environment is taken as the basis, and features that inhibit attaining "
"HPC scalability are removed, i.e., making it light-weight. The pure "
"light-weight kernel (LWK) approach, on the other hand, starts from "
"scratch and effort is undertaken to add sufficient functionality so that "
"it provides a familiar API, typically something close to that of a "
"general purpose OS, while at the same time it retains the desired "
"scalability and reliability attributes. Neither of these approaches "
"yields a fully Linux compatible environment."
msgstr ""
#: ../../README_.rst:67
msgid "The Multi-kernel Approach"
msgstr ""
#: ../../README_.rst:69
msgid ""
"A hybrid approach recognized recently by the system software community is"
" to run Linux simultaneously with a lightweight kernel on compute nodes "
"and multiple research projects are now pursuing this direction. The basic"
" idea is that simulations run on an HPC tailored lightweight kernel, "
"ensuring the necessary isolation for noiseless execution of parallel "
"applications, but Linux is leveraged so that the full POSIX API is "
"supported. Additionally, the small code base of the LWK can also "
"facilitate rapid prototyping for new, exotic hardware features. "
"Nevertheless, the questions of how to share node resources between the "
"two types of kernels, where do device drivers execute, how exactly do the"
" two kernels interact with each other and to what extent are they "
"integrated, remain subjects of ongoing debate."
msgstr ""
#: ../../README_.rst:83
msgid "Architectural Overview"
msgstr ""
#: ../../README_.rst:85
msgid ""
"At the heart of the stack is a low-level software infrastructure called "
"Interface for Heterogeneous Kernels (IHK). IHK is a general framework "
"that provides capabilities for partitioning resources in a many-core "
"environment (e.g.,CPU cores and physical memory) and it enables "
"management of lightweight kernels. IHK can allocate and release host "
"resources dynamically and no reboot of the host machine is required when "
"altering configuration. IHK also provides a low-level inter-kernel "
"messaging infrastructure, called the Inter-Kernel Communication (IKC) "
"layer. An architectural overview of the main system components is shown "
"below."
msgstr ""
#: ../../README_.rst:99
msgid "arch"
msgstr ""
#: ../../README_.rst:101
msgid ""
"McKernel is a lightweight kernel written from scratch. It is designed for"
" HPC and is booted from IHK. McKernel retains a binary compatible ABI "
"with Linux, however, it implements only a small set of performance "
"sensitive system calls and the rest are offloaded to Linux. Specifically,"
" McKernel has its own memory management, it supports processes and multi-"
"threading with a simple round-robin cooperative (tick-less) scheduler, "
"and it implements signaling. It also allows inter-process memory mappings"
" and it provides interfaces to hardware performance counters."
msgstr ""
#: ../../README_.rst:112
msgid "Functionality"
msgstr ""
#: ../../README_.rst:114
msgid ""
"An overview of some of the principal functionalities of the IHK/McKernel "
"stack is provided below."
msgstr ""
#: ../../README_.rst:118
msgid "System Call Offloading"
msgstr ""
#: ../../README_.rst:120
msgid ""
"System call forwarding in McKernel is implemented as follows. When an "
"offloaded system call occurs, McKernel marshals the system call number "
"along with its arguments and sends a message to Linux via a dedicated IKC"
" channel. The corresponding proxy process running on Linux is by default "
"waiting for system call requests through an ioctl() call into IHKs "
"system call delegator kernel module. The delegator kernel modules IKC "
"interrupt handler wakes up the proxy process, which returns to userspace "
"and simply invokes the requested system call. Once it obtains the return "
"value, it instructs the delegator module to send the result back to "
"McKernel, which subsequently passes the value to user-space."
msgstr ""
#: ../../README_.rst:132
msgid "Unified Address Space"
msgstr ""
#: ../../README_.rst:134
msgid ""
"The unified address space model in IHK/McKernel ensures that offloaded "
"system calls can seamlessly resolve arguments even in case of pointers. "
"This mechanism is depicted below and is implemented as follows."
msgstr ""
#: ../../README_.rst:141
msgid "unified_ap"
msgstr ""
#: ../../README_.rst:143
msgid ""
"First, the proxy process is compiled as a position independent binary, "
"which enables us to map the code and data segments specific to the proxy "
"process to an address range which is explicitly excluded from McKernels "
"user space. The grey box on the right side of the figure demonstrates the"
" excluded region. Second, the entire valid virtual address range of "
"McKernels application user-space is covered by a special mapping in the "
"proxy process for which we use a pseudo file mapping in Linux. This "
"mapping is indicated by the blue box on the left side of the figure."
msgstr ""
#: ../../README_.rst:153
msgid "Installation"
msgstr ""
#: ../../README_.rst:155
msgid ""
"For a smooth experience, we recommend the following combination of OS "
"distributions and platforms:"
msgstr ""
#: ../../README_.rst:158
msgid "CentOS 7.3+ running on Intel Xeon, Xeon Phi, Fujitsu A64FX"
msgstr ""
#: ../../README_.rst:161
msgid "1. Change SELinux settings"
msgstr ""
#: ../../README_.rst:163
msgid "Log in as the root and disable SELinux:"
msgstr ""
#: ../../README_.rst:169
msgid "Change the file to SELINUX=disabled"
msgstr ""
#: ../../README_.rst:172
msgid "2. Reboot the host machine"
msgstr ""
#: ../../README_.rst:179
msgid "3. Prepare packages, kernel symbol table file"
msgstr ""
#: ../../README_.rst:181
msgid "You will need the following packages installed:"
msgstr ""
#: ../../README_.rst:187
msgid ""
"Note that to install libdwarf-devel to RHEL-8.2, you need to enable the "
"CodeReady Linux Builder (CLB) repository and the EPEL repository with the"
" following commands:"
msgstr ""
#: ../../README_.rst:195
msgid "Grant read permission to the System.map file of your kernel version:"
msgstr ""
#: ../../README_.rst:202
msgid "4. Obtain sources and compile the kernel"
msgstr ""
#: ../../README_.rst:204
msgid "Clone the source code:"
msgstr ""
#: ../../README_.rst:212
msgid "(Optional) Checkout to the specific branch or version:"
msgstr ""
#: ../../README_.rst:220
msgid ""
"Foe example, if you want to try the development branch, use “development”"
" as the pathspec. If you want to try the prerelease version 1.7.0-0.2, "
"use “1.7.0-0.2”."
msgstr ""
#: ../../README_.rst:225
msgid "4.1 Install with cmake"
msgstr ""
#: ../../README_.rst:227
msgid "Configure and compile:"
msgstr ""
#: ../../README_.rst:235
msgid ""
"The IHK kernel modules and McKernel kernel image should be installed "
"under the **ihk+mckernel** folder in your home directory."
msgstr ""
#: ../../README_.rst:239
msgid "4.2 Install with rpm"
msgstr ""
#: ../../README_.rst:241
msgid "Build rpm:"
msgstr ""
#: ../../README_.rst:252
msgid ""
"The IHK kernel modules and McKernel kernel image are installed under the "
"system directory."
msgstr ""
#: ../../README_.rst:256
msgid "5. Boot McKernel"
msgstr ""
#: ../../README_.rst:258
msgid ""
"A boot script called mcreboot.sh is provided under sbin in the install "
"folder. To boot on logical CPU 1 with 512MB of memory, use the following "
"invocation:"
msgstr ""
#: ../../README_.rst:268
msgid ""
"You should see something similar like this if you display the McKernels "
"kernel message log:"
msgstr ""
#: ../../README_.rst:296
msgid "6. Run a simple program on McKernel"
msgstr ""
#: ../../README_.rst:298
msgid ""
"The mcexec command line tool (which is also the Linux proxy process) can "
"be used for executing applications on McKernel:"
msgstr ""
#: ../../README_.rst:307
msgid "7. Shutdown McKernel"
msgstr ""
#: ../../README_.rst:309
msgid ""
"Finally, to shutdown McKernel and release CPU/memory resources back to "
"Linux use the following command:"
msgstr ""
#: ../../README_.rst:317
msgid "8. Advanced: Enable Utility Thread offloading Interface (UTI)"
msgstr ""
#: ../../README_.rst:319
msgid ""
"UTI enables a runtime such as MPI runtime to spawn utility threads such "
"as MPI asynchronous progress threads to Linux cores."
msgstr ""
#: ../../README_.rst:323
msgid "8.1 Install capstone"
msgstr ""
#: ../../README_.rst:325
msgid "Install EPEL capstone-devel:"
msgstr ""
#: ../../README_.rst:333
msgid "8.2 Install syscall_intercept"
msgstr ""
#: ../../README_.rst:342
msgid "8.3 Install UTI for McKernel"
msgstr ""
#: ../../README_.rst:344
msgid "Install:"
msgstr ""
#: ../../README_.rst:354
msgid "8.4 Install McKernel"
msgstr ""
#: ../../README_.rst:361
msgid "8.5 Run executable"
msgstr ""
#: ../../README_.rst:368
msgid "8.6 Install UTI for Linux for performance comparison"
msgstr ""
#: ../../README_.rst:370
msgid "Install by make:"
msgstr ""
#: ../../README_.rst:379
msgid "Install by rpm:"
msgstr ""
#: ../../README_.rst:391
msgid "The Team"
msgstr ""
#: ../../README_.rst:393
msgid ""
"The McKernel project was started at The University of Tokyo and currently"
" it is mainly developed at RIKEN. Some of our collaborators include:"
msgstr ""
#: ../../README_.rst:397
msgid "Hitachi"
msgstr ""
#: ../../README_.rst:398
msgid "Fujitsu"
msgstr ""
#: ../../README_.rst:399
msgid "CEA (France)"
msgstr ""
#: ../../README_.rst:400
msgid "NEC"
msgstr ""
#: ../../README_.rst:403
msgid "License"
msgstr ""
#: ../../README_.rst:405
msgid "McKernel is GPL licensed, as found in the LICENSE file."
msgstr ""
#: ../../README_.rst:408
msgid "Contact"
msgstr ""
#: ../../README_.rst:410
msgid ""
"Please give your feedback to us via one of the following mailing lists. "
"Subscription via `www.pccluster.org "
"<http://www.pccluster.org/mailman/listinfo/mckernel-users>`__ is needed."
msgstr ""
#: ../../README_.rst:415
msgid "English: mckernel-users@pccluster.org"
msgstr ""
#: ../../README_.rst:416
msgid "Japanese: mckernel-users-jp@pccluster.org"
msgstr ""

View File

@ -0,0 +1,101 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) 2020, Masamichi Takagi, Balazs Gerofi, Yutaka Ishikawa
# This file is distributed under the same license as the IHK/McKernel
# package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2020.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: IHK/McKernel \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-08-04 16:40+0900\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.7.0\n"
#: ../../archtecture.rst:2
msgid "Architectural Overview"
msgstr ""
#: ../../archtecture.rst:4
msgid ""
"At the heart of the stack is a low-level software infrastructure called "
"Interface for Heterogeneous Kernels (IHK). IHK is a general framework "
"that provides capabilities for partitioning resources in a many-core "
"environment (e.g.,CPU cores and physical memory) and it enables "
"management of lightweight kernels. IHK can allocate and release host "
"resources dynamically and no reboot of the host machine is required when "
"altering configuration. IHK also provides a low-level inter-kernel "
"messaging infrastructure, called the Inter-Kernel Communication (IKC) "
"layer. An architectural overview of the main system components is shown "
"below."
msgstr ""
#: ../../archtecture.rst:18
msgid ""
"McKernel is a lightweight kernel written from scratch. It is designed for"
" HPC and is booted from IHK. McKernel retains a binary compatible ABI "
"with Linux, however, it implements only a small set of performance "
"sensitive system calls and the rest are offloaded to Linux. Specifically,"
" McKernel has its own memory management, it supports processes and multi-"
"threading with a simple round-robin cooperative (tick-less) scheduler, "
"and it implements signaling. It also allows inter-process memory mappings"
" and it provides interfaces to hardware performance counters."
msgstr ""
#: ../../archtecture.rst:29
msgid "Functionality"
msgstr ""
#: ../../archtecture.rst:31
msgid ""
"An overview of some of the principal functionalities of the IHK/McKernel "
"stack is provided below."
msgstr ""
#: ../../archtecture.rst:35
msgid "System Call Offloading"
msgstr ""
#: ../../archtecture.rst:37
msgid ""
"System call forwarding in McKernel is implemented as follows. When an "
"offloaded system call occurs, McKernel marshals the system call number "
"along with its arguments and sends a message to Linux via a dedicated IKC"
" channel. The corresponding proxy process running on Linux is by default "
"waiting for system call requests through an ioctl() call into IHKs "
"system call delegator kernel module. The delegator kernel modules IKC "
"interrupt handler wakes up the proxy process, which returns to userspace "
"and simply invokes the requested system call. Once it obtains the return "
"value, it instructs the delegator module to send the result back to "
"McKernel, which subsequently passes the value to user-space."
msgstr ""
#: ../../archtecture.rst:49
msgid "Unified Address Space"
msgstr ""
#: ../../archtecture.rst:51
msgid ""
"The unified address space model in IHK/McKernel ensures that offloaded "
"system calls can seamlessly resolve arguments even in case of pointers. "
"This mechanism is depicted below and is implemented as follows."
msgstr ""
#: ../../archtecture.rst:58
msgid ""
"First, the proxy process is compiled as a position independent binary, "
"which enables us to map the code and data segments specific to the proxy "
"process to an address range which is explicitly excluded from McKernels "
"user space. The grey box on the right side of the figure demonstrates the"
" excluded region. Second, the entire valid virtual address range of "
"McKernels application user-space is covered by a special mapping in the "
"proxy process for which we use a pseudo file mapping in Linux. This "
"mapping is indicated by the blue box on the left side of the figure."
msgstr ""

View File

@ -0,0 +1,79 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) 2020, Masamichi Takagi, Balazs Gerofi, Yutaka Ishikawa
# This file is distributed under the same license as the IHK/McKernel
# package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2020.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: IHK/McKernel \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-08-04 16:40+0900\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.7.0\n"
#: ../../background.rst:2
msgid "Background and Motivation"
msgstr ""
#: ../../background.rst:4
msgid ""
"With the growing complexity of high-end supercomputers, the current "
"system software stack faces significant challenges as we move forward to "
"exascale and beyond. The necessity to deal with extreme degree of "
"parallelism, heterogeneous architectures, multiple levels of memory "
"hierarchy, power constraints, etc., advocates operating systems that can "
"rapidly adapt to new hardware requirements, and that can support novel "
"programming paradigms and runtime systems. On the other hand, a new class"
" of more dynamic and complex applications are also on the horizon, with "
"an increasing demand for application constructs such as in-situ analysis,"
" workflows, elaborate monitoring and performance tools. This complexity "
"relies not only on the rich features of POSIX, but also on the Linux APIs"
" (such as the */proc*, */sys* filesystems, etc.) in particular."
msgstr ""
#: ../../background.rst:19
msgid "Two Traditional HPC OS Approaches"
msgstr ""
#: ../../background.rst:21
msgid ""
"Traditionally, light-weight operating systems specialized for HPC "
"followed two approaches to tackle scalable execution of large-scale "
"applications. In the full weight kernel (FWK) approach, a full Linux "
"environment is taken as the basis, and features that inhibit attaining "
"HPC scalability are removed, i.e., making it light-weight. The pure "
"light-weight kernel (LWK) approach, on the other hand, starts from "
"scratch and effort is undertaken to add sufficient functionality so that "
"it provides a familiar API, typically something close to that of a "
"general purpose OS, while at the same time it retains the desired "
"scalability and reliability attributes. Neither of these approaches "
"yields a fully Linux compatible environment."
msgstr ""
#: ../../background.rst:34
msgid "The Multi-kernel Approach"
msgstr ""
#: ../../background.rst:36
msgid ""
"A hybrid approach recognized recently by the system software community is"
" to run Linux simultaneously with a lightweight kernel on compute nodes "
"and multiple research projects are now pursuing this direction. The basic"
" idea is that simulations run on an HPC tailored lightweight kernel, "
"ensuring the necessary isolation for noiseless execution of parallel "
"applications, but Linux is leveraged so that the full POSIX API is "
"supported. Additionally, the small code base of the LWK can also "
"facilitate rapid prototyping for new, exotic hardware features. "
"Nevertheless, the questions of how to share node resources between the "
"two types of kernels, where do device drivers execute, how exactly do the"
" two kernels interact with each other and to what extent are they "
"integrated, remain subjects of ongoing debate."
msgstr ""

View File

@ -0,0 +1,57 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) 2020, Masamichi Takagi, Balazs Gerofi, Yutaka Ishikawa
# This file is distributed under the same license as the IHK/McKernel
# package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2020.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: IHK/McKernel \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-08-04 16:40+0900\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.7.0\n"
#: ../../boot_run_shutdown.rst:2
msgid "Boot McKernel"
msgstr ""
#: ../../boot_run_shutdown.rst:4
msgid ""
"A boot script called ``mcreboot.sh`` is provided under ``sbin`` in the "
"install folder. To boot on logical CPU 1 with 512MB of memory, use the "
"following invocation:"
msgstr ""
#: ../../boot_run_shutdown.rst:14
msgid ""
"You should see something similar like this if you display the McKernels "
"kernel message log:"
msgstr ""
#: ../../boot_run_shutdown.rst:42
msgid "Run a simple program on McKernel"
msgstr ""
#: ../../boot_run_shutdown.rst:44
msgid ""
"The mcexec command line tool (which is also the Linux proxy process) can "
"be used for executing applications on McKernel:"
msgstr ""
#: ../../boot_run_shutdown.rst:53
msgid "Shutdown McKernel"
msgstr ""
#: ../../boot_run_shutdown.rst:55
msgid ""
"Finally, to shutdown McKernel and release CPU/memory resources back to "
"Linux use the following command:"
msgstr ""

View File

@ -0,0 +1,39 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) 2020, Masamichi Takagi, Balazs Gerofi, Yutaka Ishikawa
# This file is distributed under the same license as the IHK/McKernel
# package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2020.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: IHK/McKernel \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-08-04 16:40+0900\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.7.0\n"
#: ../../contact.rst:2
msgid "Contact"
msgstr ""
#: ../../contact.rst:4
msgid ""
"Please give your feedback to us via one of the following mailing lists. "
"Subscription via `www.pccluster.org "
"<http://www.pccluster.org/mailman/listinfo/mckernel-users>`__ is needed."
msgstr ""
#: ../../contact.rst:9
msgid "English: mckernel-users@pccluster.org"
msgstr ""
#: ../../contact.rst:10
msgid "Japanese: mckernel-users-jp@pccluster.org"
msgstr ""

View File

@ -0,0 +1,59 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) 2020, Masamichi Takagi, Balazs Gerofi, Yutaka Ishikawa
# This file is distributed under the same license as the IHK/McKernel
# package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2020.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: IHK/McKernel \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-08-04 16:40+0900\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.7.0\n"
#: ../../summary.rst:1
msgid ""
"IHK/McKernel is a light-weight multi-kernel operating system designed for"
" high-end supercomputing. It runs Linux and McKernel, a light-weight "
"kernel (LWK), side-by-side inside compute nodes and aims at the "
"following:"
msgstr ""
#: ../../summary.rst:6
msgid ""
"Provide scalable and consistent execution of large-scale parallel "
"scientific applications, but at the same time maintain the ability to "
"rapidly adapt to new hardware features and emerging programming models"
msgstr ""
#: ../../summary.rst:10
msgid ""
"Provide efficient memory and device management so that resource "
"contention and data movement are minimized at the system level"
msgstr ""
#: ../../summary.rst:12
msgid ""
"Eliminate OS noise by isolating OS services in Linux and provide jitter "
"free execution on the LWK"
msgstr ""
#: ../../summary.rst:14
msgid ""
"Support the full POSIX/Linux APIs by selectively offloading (slow-path) "
"system calls to Linux"
msgstr ""
#: ../../cover.rst:5
msgid ""
"See `Quick Guide -- Installation <quick.html#installation>`__ for jump "
"start."
msgstr ""

View File

@ -0,0 +1,28 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) 2020, Masamichi Takagi, Balazs Gerofi, Yutaka Ishikawa
# This file is distributed under the same license as the IHK/McKernel
# package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2020.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: IHK/McKernel \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-08-04 16:40+0900\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.7.0\n"
#: ../../doc.rst:2
msgid "Documentation"
msgstr ""
#: ../../doc.rst:4
msgid "Documentation is available `here <https://ihkmckernel.readthedocs.io>`__."
msgstr ""

View File

@ -0,0 +1,40 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) 2020, Masamichi Takagi, Balazs Gerofi, Yutaka Ishikawa
# This file is distributed under the same license as the IHK/McKernel
# package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2020.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: IHK/McKernel \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-08-04 16:40+0900\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.7.0\n"
#: ../../ihk_developers.rst:6
msgid "External Specs"
msgstr ""
#: ../../ihk_developers.rst:9
msgid "Overview"
msgstr ""
#: ../../ihk_developers.rst:12
msgid "Function Specs"
msgstr ""
#: ../../ihk_developers.rst:15
msgid "Command / Daemon Specs"
msgstr ""
#: ../../ihk_developers.rst:18
msgid "Booting LWK"
msgstr ""

View File

@ -0,0 +1,95 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) 2020, Masamichi Takagi, Balazs Gerofi, Yutaka Ishikawa
# This file is distributed under the same license as the IHK/McKernel
# package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2020.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: IHK/McKernel \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-08-07 10:00+0900\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.7.0\n"
#: ../../index.rst:12
msgid "Quick Guide"
msgstr "クイックガイド"
#: ../../index.rst:18
msgid "Users' Guide"
msgstr "ユーザガイド"
#: ../../index.rst:24
msgid "Operators' Guide"
msgstr "運用ガイド"
#: ../../index.rst:30
msgid "IHK Developers' Guide"
msgstr ""
#: ../../index.rst:36
msgid "McKernel Developers' Guide"
msgstr ""
#: ../../index.rst:42
msgid "IHK Specifications"
msgstr ""
#: ../../index.rst:48
msgid "McKernel Specifications"
msgstr ""
#: ../../index.rst:54
msgid "What's New"
msgstr ""
#: ../../index.rst:8
msgid "IHK/McKernel"
msgstr ""
#: ../../summary.rst:1
msgid ""
"IHK/McKernel is a light-weight multi-kernel operating system designed for"
" high-end supercomputing. It runs Linux and McKernel, a light-weight "
"kernel (LWK), side-by-side inside compute nodes and aims at the "
"following:"
msgstr ""
#: ../../summary.rst:6
msgid ""
"Provide scalable and consistent execution of large-scale parallel "
"scientific applications, but at the same time maintain the ability to "
"rapidly adapt to new hardware features and emerging programming models"
msgstr ""
#: ../../summary.rst:10
msgid ""
"Provide efficient memory and device management so that resource "
"contention and data movement are minimized at the system level"
msgstr ""
#: ../../summary.rst:12
msgid ""
"Eliminate OS noise by isolating OS services in Linux and provide jitter "
"free execution on the LWK"
msgstr ""
#: ../../summary.rst:14
msgid ""
"Support the full POSIX/Linux APIs by selectively offloading (slow-path) "
"system calls to Linux"
msgstr ""
#: ../../cover.rst:5
msgid ""
"See `Quick Guide -- Installation <quick.html#installation>`__ for jump "
"start."
msgstr ""

View File

@ -0,0 +1,191 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) 2020, Masamichi Takagi, Balazs Gerofi, Yutaka Ishikawa
# This file is distributed under the same license as the IHK/McKernel
# package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2020.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: IHK/McKernel \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-08-04 16:40+0900\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.7.0\n"
#: ../../install.rst:4
msgid "Installation"
msgstr "インストール"
#: ../../install.rst:6
msgid "The following OS distributions and platforms are recommended:"
msgstr "推奨OSディストリビューションとプロセッサは以下の通り。"
#: ../../install.rst:8
msgid "OS distribution"
msgstr ""
#: ../../install.rst:10
msgid "CentOS 7.3 or later"
msgstr ""
#: ../../install.rst:11
msgid "RHEL 7.3 or later"
msgstr ""
#: ../../install.rst:13
msgid "Platform"
msgstr ""
#: ../../install.rst:15
msgid "Intel Xeon"
msgstr ""
#: ../../install.rst:16
msgid "Intel Xeon Phi"
msgstr ""
#: ../../install.rst:17
msgid "Fujitsu A64FX"
msgstr ""
#: ../../install.rst:20
msgid "Prepare files for building McKernel"
msgstr ""
#: ../../install.rst:22
msgid ""
"Grant read permission to the System.map file of your kernel version on "
"the build machine:"
msgstr ""
#: ../../install.rst:28
msgid "Install the following packages to the build machine:"
msgstr ""
#: ../../install.rst:35 ../../install.rst:179
msgid "When having access to repositories"
msgstr ""
#: ../../install.rst:37 ../../install.rst:181
msgid "On RHEL 8, enable the CodeReady Linux Builder (CLB) repository:"
msgstr ""
#: ../../install.rst:43 ../../install.rst:187
msgid "On CentOS 8, enable the PowerTools repository:"
msgstr ""
#: ../../install.rst:49 ../../install.rst:193
msgid "Install with yum:"
msgstr ""
#: ../../install.rst:56 ../../install.rst:200
msgid "When not having access to repositories"
msgstr ""
#: ../../install.rst:58
msgid ""
"Ask the system administrator to install them. Note that ``libdwarf-"
"devel`` is in the CodeReady Linux Builder repository on RHEL 8 or in the "
"PowerTools repository on CentOS 8."
msgstr ""
#: ../../install.rst:61
msgid "Clone, compile, install"
msgstr ""
#: ../../install.rst:63
msgid "Clone the source code:"
msgstr ""
#: ../../install.rst:71
msgid "(Optional) Checkout to the specific branch or version:"
msgstr ""
#: ../../install.rst:79
msgid ""
"Foe example, if you want to try the development branch, use “development”"
" as the pathspec. If you want to try the prerelease version 1.7.0-0.2, "
"use “1.7.0-0.2”."
msgstr ""
#: ../../install.rst:83
msgid "Move to build directory:"
msgstr ""
#: ../../install.rst:89
msgid "Run cmake:"
msgstr ""
#: ../../install.rst:92 ../../install.rst:135
msgid "When not cross-compiling:"
msgstr ""
#: ../../install.rst:99 ../../install.rst:142
msgid "When cross-compiling:"
msgstr ""
#: ../../install.rst:111
msgid "Install with cmake"
msgstr ""
#: ../../install.rst:113
msgid "Install with make:"
msgstr ""
#: ../../install.rst:119
msgid ""
"The kernel modules and McKernel kernel image should be installed under "
"the **ihk+mckernel** folder in your home directory."
msgstr ""
#: ../../install.rst:123
msgid "Install with rpm"
msgstr ""
#: ../../install.rst:125
msgid "Create the tarball and the spec file:"
msgstr ""
#: ../../install.rst:132
msgid "Create the rpm package:"
msgstr ""
#: ../../install.rst:148
msgid "Install the rpm package:"
msgstr ""
#: ../../install.rst:154
msgid ""
"The kernel modules and McKernel kernel image are installed under the "
"standard system directories."
msgstr ""
#: ../../install.rst:158
msgid "Prepare files and change settings for installing McKernel"
msgstr ""
#: ../../install.rst:160
msgid "Disable SELinux of the compute nodes:"
msgstr ""
#: ../../install.rst:166
msgid "Change the file to SELINUX=disabled. And then reboot the compute nodes:"
msgstr ""
#: ../../install.rst:172
msgid "Install the following packages to the compute nodes:"
msgstr ""
#: ../../install.rst:202
msgid ""
"Ask the system administrator to install them. Note that ``libdwarf`` is "
"in the CodeReady Linux Builder repository on RHEL 8 or in the PowerTools "
"repository on CentOS 8."
msgstr ""

View File

@ -0,0 +1,28 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) 2020, Masamichi Takagi, Balazs Gerofi, Yutaka Ishikawa
# This file is distributed under the same license as the IHK/McKernel
# package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2020.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: IHK/McKernel \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-08-04 16:40+0900\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.7.0\n"
#: ../../license.rst:2
msgid "License"
msgstr ""
#: ../../license.rst:4
msgid "McKernel is GPL licensed, as found in the LICENSE file."
msgstr ""

View File

@ -0,0 +1,20 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) 2020, Masamichi Takagi, Balazs Gerofi, Yutaka Ishikawa
# This file is distributed under the same license as the IHK/McKernel
# package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2020.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: IHK/McKernel \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-08-04 16:40+0900\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.7.0\n"

View File

@ -0,0 +1,28 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) 2020, Masamichi Takagi, Balazs Gerofi, Yutaka Ishikawa
# This file is distributed under the same license as the IHK/McKernel
# package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2020.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: IHK/McKernel \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-08-04 16:40+0900\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.7.0\n"
#: ../../mckernel_developers.rst:6
msgid "Interfaces"
msgstr ""
#: ../../mckernel_developers.rst:9
msgid "Interface details"
msgstr ""

View File

@ -0,0 +1,886 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) 2020, Masamichi Takagi, Balazs Gerofi, Yutaka Ishikawa
# This file is distributed under the same license as the IHK/McKernel
# package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2020.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: IHK/McKernel \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-08-07 10:26+0900\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.7.0\n"
#: ../../operators.rst:5
#, fuzzy
msgid "This document will explain how to operate system with McKernel."
msgstr "McKernelを用いたシステムを運用するシステム管理者を対象として、運用手順を説明する。"
#: ../../operators.rst:8
msgid "Installation"
msgstr "インストール"
#: ../../operators.rst:10
msgid "See `Quick Guide -- Installation <quick.html#installation>`__."
msgstr "`クイックガイド ― インストール <quick.html#installation>`__ に記載する。"
#: ../../uti.rst:2
msgid "Advanced: Enable Utility Thread offloading Interface (UTI)"
msgstr ""
#: ../../uti.rst:4
msgid ""
"UTI enables a runtime such as MPI runtime to spawn utility threads such "
"as MPI asynchronous progress threads to Linux cores."
msgstr ""
#: ../../uti.rst:8
msgid "Install capstone"
msgstr ""
#: ../../uti.rst:11 ../../uti.rst:22
msgid "When compute nodes don't have access to repositories"
msgstr ""
#: ../../uti.rst:13
msgid "Install EPEL capstone-devel:"
msgstr ""
#: ../../uti.rst:24
msgid ""
"Ask the system administrator to install ``capstone-devel``. Note that it "
"is in the EPEL repository."
msgstr ""
#: ../../uti.rst:28
msgid "Install syscall_intercept"
msgstr ""
#: ../../uti.rst:37
msgid "Install UTI for McKernel"
msgstr ""
#: ../../uti.rst:39
msgid "Install:"
msgstr ""
#: ../../uti.rst:49
msgid "Install McKernel"
msgstr ""
#: ../../uti.rst:51
msgid "Add ``-DENABLE_UTI=ON`` option to ``cmake``:"
msgstr ""
#: ../../uti.rst:58
msgid "Run programs"
msgstr ""
#: ../../uti.rst:60
msgid "Add ``--enable-uti`` option to ``mcexec``:"
msgstr ""
#: ../../uti.rst:67
msgid "Install UTI for Linux"
msgstr ""
#: ../../uti.rst:69
msgid ""
"You should skip this step if it's already installed as with, for example,"
" Fujitsu Technical Computing Suite."
msgstr ""
#: ../../uti.rst:72
msgid "Install by make"
msgstr ""
#: ../../uti.rst:82
msgid "Install by rpm"
msgstr ""
#: ../../operators.rst:15
msgid "Boot and Shut-down"
msgstr "起動停止"
#: ../../operators.rst:18
msgid "Related files"
msgstr "関連ファイル"
#: ../../operators.rst:20
msgid ""
"In the followings, the install directory of IHK/McKernel is shown as "
"``<install>`` . The kernel modules and their locations are as follows."
msgstr "以降、IHK/McKernelのインストールディレクトリを<install>とする。SMPプロセッサ向け、x86_64アーキ向けの関連ファイルの場所は以下の通り。"
#: ../../operators.rst:24
msgid "<install>/kmod/ihk.ko"
msgstr ""
#: ../../operators.rst:24
msgid "IHK-master core"
msgstr ""
#: ../../operators.rst:26
msgid "|ihk-smp|"
msgstr ""
#: ../../operators.rst:26
msgid "IHK-master driver"
msgstr ""
#: ../../operators.rst:29
msgid "|mcctrl|"
msgstr ""
#: ../../operators.rst:29
msgid "Delegator module"
msgstr ""
#: ../../operators.rst:32
msgid "|mckernel.img|"
msgstr ""
#: ../../operators.rst:32
msgid "Kernel Image"
msgstr "カーネルイメージ"
#: ../../operators.rst:40
msgid "The commands and daemons for operation and their locations are as follows."
msgstr "運用向けコマンド・デーモンのファイルの場所は以下の通り。"
#: ../../operators.rst:43
msgid "|mcreboot|"
msgstr ""
#: ../../operators.rst:43
msgid "Boot script"
msgstr "起動スクリプト"
#: ../../operators.rst:46
msgid "|mcstop|"
msgstr ""
#: ../../operators.rst:46
msgid "Shutdown script"
msgstr "シャットダウンスクリプト"
#: ../../operators.rst:49
msgid "<install>/bin/mcexec"
msgstr ""
#: ../../operators.rst:49
msgid "Process invocation command"
msgstr "プロセス起動コマンド"
#: ../../operators.rst:51
msgid "<install>/bin/eclair"
msgstr ""
#: ../../operators.rst:51
msgid "Kernel dump analysis tool"
msgstr "カーネルダンプ解析ツール"
#: ../../operators.rst:53
msgid "|vmcore2mckdump|"
msgstr ""
#: ../../operators.rst:53
msgid "Kernel dump format conversion tool"
msgstr "カーネルダンプ形式変換ツール"
#: ../../operators.rst:60
msgid "以下、関連コマンドおよび関連関数のインターフェイスを説明する。"
msgstr ""
#: ../../operators.rst:63
msgid "インターフェイス"
msgstr ""
#: ../../operators.rst:66
msgid "カーネル引数"
msgstr ""
#: ../../operators.rst:68
msgid "McKernelのカーネル引数を表 :numref:`tab-kargs` に示す。"
msgstr ""
#: ../../operators.rst:72
msgid "McKernelのカーネル引数"
msgstr ""
#: ../../operators.rst:75
msgid "hidos"
msgstr ""
#: ../../operators.rst:75
msgid "IKCを有効にする。"
msgstr ""
#: ../../operators.rst:77
msgid "|dlv|"
msgstr ""
#: ../../operators.rst
msgid "Linuxのpanicハンドラ経由でダンプを行った場合の、ダ"
msgstr ""
#: ../../operators.rst
msgid "ンプ対象とするメモリ領域の種類を<level>に設定する。"
msgstr ""
#: ../../operators.rst
msgid "設定可能な値は以下の通り。"
msgstr ""
#: ../../operators.rst:83 ../../operators.rst:164 ../../operators.rst:196
#: ../../operators.rst:234
msgid "0"
msgstr ""
#: ../../operators.rst:84 ../../operators.rst:165
msgid "IHKがMcKernelに割り当てたメモリ領域を出力する"
msgstr ""
#: ../../operators.rst:85 ../../operators.rst:166
msgid "24"
msgstr ""
#: ../../operators.rst:86 ../../operators.rst:167
msgid "カーネルが使用しているメモリ領域を出力する"
msgstr ""
#: ../../operators.rst:88 ../../operators.rst:169
msgid "指定がなかった場合は24が用いられる。"
msgstr ""
#: ../../operators.rst:90
msgid "|allow|"
msgstr ""
#: ../../operators.rst
msgid "McKernelに割り当てられたCPU数より大きい数のスレッド"
msgstr ""
#: ../../operators.rst
msgid "またはプロセスの生成を許可する。この引数が指定され"
msgstr ""
#: ../../operators.rst
msgid "ない場合に、CPU数より大きい数のスレッドまたはプロセ"
msgstr ""
#: ../../operators.rst
msgid "スをclone(), fork(), vfork()などで生成しようとする"
msgstr ""
#: ../../operators.rst
msgid "と、当該システムコールがEINVALエラーを返す。"
msgstr ""
#: ../../operators.rst:102
msgid "ブートスクリプト"
msgstr "ブートスクリプト"
#: ../../operators.rst:105 ../../operators.rst:207
msgid "書式"
msgstr ""
#: ../../operators.rst:113 ../../operators.rst:217
msgid "オプション"
msgstr ""
#: ../../operators.rst:116
msgid "|opt-c|"
msgstr ""
#: ../../operators.rst
msgid "McKernelに割り当てるCPUのリストを指定する。フォー"
msgstr ""
#: ../../operators.rst
msgid "マットは以下の通り。"
msgstr ""
#: ../../operators.rst
msgid "<CPU logical id>,<CPU logical id>...または"
msgstr ""
#: ../../operators.rst
msgid "<CPU logical id>-<CPU logical id>,<CPU logical id>"
msgstr ""
#: ../../operators.rst
msgid "-<CPU logical id>...または両者の混合。"
msgstr ""
#: ../../operators.rst:122
msgid "|opt-r|"
msgstr ""
#: ../../operators.rst
msgid "McKernelのCPUがIKCメッセージを送るLinux"
msgstr ""
#: ../../operators.rst
msgid "CPUを指定する。フォーマットは以下の通り。"
msgstr ""
#: ../../operators.rst
msgid "<CPU list>:<CPU id>+<CPU list>:<CPU id>..."
msgstr ""
#: ../../operators.rst
msgid "<CPU list>のフォーマットは-cオプションにおけるもの"
msgstr ""
#: ../../operators.rst
msgid "と同じである。"
msgstr ""
#: ../../operators.rst
msgid "各<CPU list>:<CPU id>は<CPU list>で示されるMcKernel"
msgstr ""
#: ../../operators.rst
msgid "のCPUが<CPU logical id>で示されるLinuxのCPUにIKC"
msgstr ""
#: ../../operators.rst
msgid "メッセージを送信することを意味する。"
msgstr ""
#: ../../operators.rst:131
msgid "|opt-m|"
msgstr ""
#: ../../operators.rst
msgid "McKernelに割り当てるメモリ領域を指定する。フォーマッ"
msgstr ""
#: ../../operators.rst
msgid "トは以下の通り。"
msgstr ""
#: ../../operators.rst
msgid "<size>@<NUMA-id>, <size>@<NUMA-id>..."
msgstr ""
#: ../../operators.rst:135
msgid "|opt-f|"
msgstr ""
#: ../../operators.rst
msgid "ihkmondが使用するsyslogプロトコルのfacilityを指定す"
msgstr ""
#: ../../operators.rst
msgid "る。デフォルトはLOG_LOCAL6。"
msgstr ""
#: ../../operators.rst:138
msgid "|opt-o|"
msgstr ""
#: ../../operators.rst
msgid "IHKのデバイスファイル(/dev/mcd*, /dev/mcos*)のオー"
msgstr ""
#: ../../operators.rst
msgid "ナーとグループの値を<user>[:<group>]の形式で指定す"
msgstr ""
#: ../../operators.rst
msgid "る。デフォルトはmcreboot.shを実行したユーザ。"
msgstr ""
#: ../../operators.rst:142
msgid "|opt-i|"
msgstr ""
#: ../../operators.rst
msgid "ihkmondがハングアップ検知のためにOS状態を確認する時"
msgstr ""
#: ../../operators.rst
msgid "間間隔を秒単位で指定する。-1が指定された場合はハン"
msgstr ""
#: ../../operators.rst
msgid "グアップ検知を行わない。指定がない場合はハングアッ"
msgstr ""
#: ../../operators.rst
msgid "プ検知を行わない。"
msgstr ""
#: ../../operators.rst:147
msgid "|opt-k|"
msgstr ""
#: ../../operators.rst
msgid "カーネルメッセージの/dev/logへのリダイレクト有無を"
msgstr ""
#: ../../operators.rst
msgid "指定する。0が指定された場合はリダイレクトを行わず、"
msgstr ""
#: ../../operators.rst
msgid "0以外が指定された場合はリダイレクトを行う。指定がな"
msgstr ""
#: ../../operators.rst
msgid "い場合はリダイレクトを行わない。"
msgstr ""
#: ../../operators.rst:152
msgid "-q <irq>"
msgstr ""
#: ../../operators.rst
msgid "IHKが使用するIRQ番号を指定する。指定がない場合は"
msgstr ""
#: ../../operators.rst
msgid "64-255の範囲で空いているものを使用する。"
msgstr ""
#: ../../operators.rst:155
msgid "-t"
msgstr ""
#: ../../operators.rst
msgid "x86_64アーキテクチャのみTurbo"
msgstr ""
#: ../../operators.rst
msgid "Boostをオンにする。デフォルトはオフ。"
msgstr ""
#: ../../operators.rst:158
msgid "-d <level>"
msgstr ""
#: ../../operators.rst:171
msgid "-O"
msgstr ""
#: ../../operators.rst
msgid "またはプロセスの生成を許可する。指定がない場合は許可"
msgstr ""
#: ../../operators.rst
msgid "しない。すなわち、CPU数より大きい数のスレッドまたは"
msgstr ""
#: ../../operators.rst
msgid "プロセスを生成しようとするとエラーとなる。"
msgstr ""
#: ../../operators.rst:187 ../../operators.rst:224
msgid "説明"
msgstr ""
#: ../../operators.rst:189
msgid ""
"McKernel関連カーネルモジュールをinsmodし、<cpulist>で指定されたCPUと<memlist>で指定されたメモリ領域からなるパーティションを作成し、IKC"
" mapを<ikcmap>に設定し、前記パーティションにMcKernelをブートする。"
msgstr ""
#: ../../operators.rst:193 ../../operators.rst:231
msgid "戻り値"
msgstr ""
#: ../../operators.rst:196 ../../operators.rst:234
msgid "正常終了"
msgstr ""
#: ../../operators.rst:198 ../../operators.rst:236
msgid "0以外"
msgstr ""
#: ../../operators.rst:198 ../../operators.rst:236
msgid "エラー"
msgstr ""
#: ../../operators.rst:202
msgid "シャットダウンスクリプト"
msgstr "シャットダウンスクリプト"
#: ../../operators.rst:219
msgid "なし"
msgstr ""
#: ../../operators.rst:226
msgid "McKernelをシャットダウンし、McKernel用パーティションを削除し、関連カーネルモジュールをrmmodする。"
msgstr ""
#: ../../operators.rst:240
msgid "プロセス起動コマンド"
msgstr ""
#: ../../operators.rst:245
msgid "ダンプ解析コマンド"
msgstr ""
#: ../../operators.rst:250
msgid "ダンプ形式変換コマンド"
msgstr ""
#: ../../operators.rst:255
msgid "ブート手順"
msgstr ""
#: ../../operators.rst:257
msgid "mcreboot.shを用いてブート手順を説明する。"
msgstr ""
#: ../../operators.rst:259 ../../operators.rst:906
msgid "スクリプトは以下の通り。"
msgstr ""
#: ../../operators.rst:852 ../../operators.rst:1050
msgid "手順は以下の通り。"
msgstr ""
#: ../../operators.rst:854
msgid "ihkmondを起動する。ihkmondは任意のタイミングで起動してよい。これは、ihkmondはOSインスタンスの作成を検知して動作を開始するためである。83行目"
msgstr ""
#: ../../operators.rst:856
msgid "Linuxのカーネルバージョンが、mcoverlayfsが動作するものであるかを確認する。200216行目"
msgstr ""
#: ../../operators.rst:858
msgid "irqbalanceを停止する。251257行目"
msgstr ""
#: ../../operators.rst:860
msgid ""
"/proc/irq/[n]/affinityの設定を保存した上でMcKernel "
"CPUを担当から外す。担当CPUが無くなる場合は、全てのLinux CPUを指定する。269303行目"
msgstr ""
#: ../../operators.rst:864
msgid "ihk.koをinsmodする。307行目"
msgstr ""
#: ../../operators.rst:866
msgid "Linuxによるメモリフラグメンテーションを緩和するために以下を実施する。313320行目"
msgstr ""
#: ../../operators.rst:868
msgid "アクティブでないプロセスを積極的にスワップアウトするように設定する"
msgstr ""
#: ../../operators.rst:870
msgid "クリーンなページキャッシュを無効化し、またdentriesやinodeのslabオブジェクトのうち可能なものを破棄する"
msgstr ""
#: ../../operators.rst:872
msgid "連続する空き領域を結合してより大きな空き領域にまとめる"
msgstr ""
#: ../../operators.rst:874
msgid ""
"ihk-smp-x86.koをinsmodする。340行目ihk-smp-x86.koは関数をihk.koに登録する。このため、ihk-"
"smp-x86.koはihk.koをinsmodした後にinsmodする必要がある。"
msgstr ""
#: ../../operators.rst:876
msgid "メモリを予約する。370行目"
msgstr ""
#: ../../operators.rst:878
msgid "CPUを予約する。374行目"
msgstr ""
#: ../../operators.rst:880
msgid "McKernelのカーネルモジュールmcctrl.koをinsmodする。382行目mcctrl.koはMcKernelブート時に呼ばれる関数をihk.koに登録する。このため、mcctrl.koのinsmodはihk.koのinsmodの後に、またブートの前に行う必要がある。"
msgstr ""
#: ../../operators.rst:882
msgid "OSインスタンスを作成する。406行目"
msgstr ""
#: ../../operators.rst:884
msgid "OSインスタンスにCPUを割り当てる。412行目"
msgstr ""
#: ../../operators.rst:886
msgid "McKernel CPUのIKCメッセージ送信先のLinux CPUを設定する。419行目"
msgstr ""
#: ../../operators.rst:888
msgid "OSインスタンスにメモリを割り当てる。426行目"
msgstr ""
#: ../../operators.rst:890
msgid "カーネルイメージをロードする。432行目"
msgstr ""
#: ../../operators.rst:892
msgid "カーネル引数をカーネルに渡す。438行目"
msgstr ""
#: ../../operators.rst:894
msgid "カーネルをブートする。444行目"
msgstr ""
#: ../../operators.rst:896
msgid ""
"/proc, "
"/sysファイルの準備をする。また、その中でmcoverlayfs.koをinsmodする。mcoverlayfs.koは他モジュールとの依存関係を持たない。454行目から567行目なお、関数インターフェイスでの対応関数はihk_os_create_pseudofs()である。"
msgstr ""
#: ../../operators.rst:898
msgid "irqbalanceを、Linux CPUのみを対象とする設定で開始する。569587行目"
msgstr ""
#: ../../operators.rst:902
msgid "シャットダウン手順"
msgstr ""
#: ../../operators.rst:904
msgid "mcstop+release.shを用いてシャットダウン手順を説明する。"
msgstr ""
#: ../../operators.rst:1052
msgid "ブート時にLinux CPUのみを対象とする設定で開始されたirqbalanceを停止する。2433行目"
msgstr ""
#: ../../operators.rst:1055
msgid "全てのOSインスタンスを破壊する。OSインスタンスに割り当てられていた資源はIHKがLWKのために予約した状態に移行する。3550行目"
msgstr ""
#: ../../operators.rst:1057
msgid "IHKがLWKのために予約していた資源を開放する。5277行目"
msgstr ""
#: ../../operators.rst:1059
msgid "mcctrl.koをrmmodする。81行目"
msgstr ""
#: ../../operators.rst:1061
msgid ""
"/proc, "
"/sysファイルの準備をする。また、その中でmcoverlayfs.koをrmmodする。87100行目なお、関数インターフェイスでの対応関数はihk_os_destroy_pseudofs()である。"
msgstr ""
#: ../../operators.rst:1063
msgid "ihk-smp-x86.koをrmmodする。104行目"
msgstr ""
#: ../../operators.rst:1065
msgid "ihk.koをrmmodする。112行目"
msgstr ""
#: ../../operators.rst:1067
msgid "ihkmondを停止する。121行目"
msgstr ""
#: ../../operators.rst:1069
msgid "/proc/irq/[n]/affinityの設定をブート時に保存しておいたものに戻し、ブート前の設定でirqbalanceを開始する。124135行目"
msgstr ""
#: ../../operators.rst:1071
msgid "Linuxカーネルのスワップアウト積極度の設定をデフォルトの値に戻す。138行目"
msgstr ""
#~ msgid "The following OS distributions and platforms are recommended:"
#~ msgstr ""
#~ msgid "OS distribution"
#~ msgstr ""
#~ msgid "CentOS 7.3 or later"
#~ msgstr ""
#~ msgid "RHEL 7.3 or later"
#~ msgstr ""
#~ msgid "Platform"
#~ msgstr ""
#~ msgid "Intel Xeon"
#~ msgstr ""
#~ msgid "Intel Xeon Phi"
#~ msgstr ""
#~ msgid "Fujitsu A64FX"
#~ msgstr ""
#~ msgid "Prepare files for building McKernel"
#~ msgstr ""
#~ msgid ""
#~ "Grant read permission to the System.map"
#~ " file of your kernel version on "
#~ "the build machine:"
#~ msgstr ""
#~ msgid "Install the following packages to the build machine:"
#~ msgstr ""
#~ msgid "When having access to repositories"
#~ msgstr ""
#~ msgid "On RHEL 8, enable the CodeReady Linux Builder (CLB) repository:"
#~ msgstr ""
#~ msgid "On CentOS 8, enable the PowerTools repository:"
#~ msgstr ""
#~ msgid "Install with yum:"
#~ msgstr ""
#~ msgid "When not having access to repositories"
#~ msgstr ""
#~ msgid ""
#~ "Ask the system administrator to install"
#~ " them. Note that ``libdwarf-devel`` "
#~ "is in the CodeReady Linux Builder "
#~ "repository on RHEL 8 or in the "
#~ "PowerTools repository on CentOS 8."
#~ msgstr ""
#~ msgid "Clone, compile, install"
#~ msgstr ""
#~ msgid "Clone the source code:"
#~ msgstr ""
#~ msgid "(Optional) Checkout to the specific branch or version:"
#~ msgstr ""
#~ msgid ""
#~ "Foe example, if you want to try"
#~ " the development branch, use “development”"
#~ " as the pathspec. If you want "
#~ "to try the prerelease version 1.7.0-0.2,"
#~ " use “1.7.0-0.2”."
#~ msgstr ""
#~ msgid "Move to build directory:"
#~ msgstr ""
#~ msgid "Run cmake:"
#~ msgstr ""
#~ msgid "When not cross-compiling:"
#~ msgstr ""
#~ msgid "When cross-compiling:"
#~ msgstr ""
#~ msgid "Install with cmake"
#~ msgstr ""
#~ msgid "Install with make:"
#~ msgstr ""
#~ msgid ""
#~ "The kernel modules and McKernel kernel"
#~ " image should be installed under the"
#~ " **ihk+mckernel** folder in your home "
#~ "directory."
#~ msgstr ""
#~ msgid "Install with rpm"
#~ msgstr ""
#~ msgid "Create the tarball and the spec file:"
#~ msgstr ""
#~ msgid "Create the rpm package:"
#~ msgstr ""
#~ msgid "Install the rpm package:"
#~ msgstr ""
#~ msgid ""
#~ "The kernel modules and McKernel kernel"
#~ " image are installed under the "
#~ "standard system directories."
#~ msgstr ""
#~ msgid "Prepare files and change settings for installing McKernel"
#~ msgstr ""
#~ msgid "Disable SELinux of the compute nodes:"
#~ msgstr ""
#~ msgid "Change the file to SELINUX=disabled. And then reboot the compute nodes:"
#~ msgstr ""
#~ msgid "Install the following packages to the compute nodes:"
#~ msgstr ""
#~ msgid ""
#~ "Ask the system administrator to install"
#~ " them. Note that ``libdwarf`` is in"
#~ " the CodeReady Linux Builder repository "
#~ "on RHEL 8 or in the PowerTools "
#~ "repository on CentOS 8."
#~ msgstr ""
#~ msgid "起動停止"
#~ msgstr "起動停止"
#~ msgid "関連ファイル"
#~ msgstr "関連ファイル"
#~ msgid "McKernelを用いたシステムを運用するシステム管理者を対象として、運用手順を説明する。"
#~ msgstr ""
#~ msgid ""
#~ "SMPプロセッサ向け、x86_64アーキ向けの関連ファイルの場所は以下の通り。 "
#~ "なお、IHK/McKernelのインストールディレクトリを<install>とする。"
#~ msgstr "運用向けコマンド・デーモンのファイルの場所は以下の通り。 なお、IHK/McKernelのインストールディレクトリを<install>とする。"
#~ msgid ""
#~ "SMPプロセッサ向け、x86_64アーキ向けの関連ファイルの場所は以下の通り。 "
#~ "なお、IHK/McKernelのインストールディレクトリを<install>とする。 The related "
#~ "files and their locations are as "
#~ "follows. Denote by ``<install>`` the "
#~ "install directory of IHK/McKernel."
#~ msgstr ""
#~ msgid ""
#~ "The related files and their locations"
#~ " are as follows. Denote by "
#~ "``<install>`` the install directory of "
#~ "IHK/McKernel."
#~ msgstr ""
#~ "SMPプロセッサ向け、x86_64アーキ向けの関連ファイルの場所は以下の通り。 "
#~ "なお、IHK/McKernelのインストールディレクトリを<install>とする。"
#~ msgid "運用向けコマンド・デーモンのファイルの場所は以下の通り。 なお、IHK/McKernelのインストールディレクトリを<install>とする。"
#~ msgstr "運用向けコマンド・デーモンのファイルの場所は以下の通り。 なお、IHK/McKernelのインストールディレクトリを<install>とする。"
#~ msgid "運用向けコマンド・デーモンのファイルの場所は以下の通り。"
#~ msgstr ""
#~ "The commands and daemons for operation"
#~ " and their locations are as follows."
#~ msgid "カーネルイメージ"
#~ msgstr ""
#~ msgid "ダンプ解析ツール"
#~ msgstr ""
#~ msgid "ダンプ形式変換ツール"
#~ msgstr ""
#~ msgid "tool"
#~ msgstr "ツール"

View File

@ -0,0 +1,821 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) 2020, Masamichi Takagi, Balazs Gerofi, Yutaka Ishikawa
# This file is distributed under the same license as the IHK/McKernel
# package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2020.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: IHK/McKernel \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-08-06 10:10+0900\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.7.0\n"
#: ../../ops.rst:5
msgid "McKernelを用いたシステムを運用するシステム管理者を対象として、運用手順を説明する。"
msgstr ""
#: ../../ops.rst:8
msgid "Installation"
msgstr "インストール"
#: ../../ops.rst:10
msgid "See `Quick Guide -- Installation <quick.html#installation>`__."
msgstr ""
#: ../../uti.rst:2
msgid "Advanced: Enable Utility Thread offloading Interface (UTI)"
msgstr ""
#: ../../uti.rst:4
msgid ""
"UTI enables a runtime such as MPI runtime to spawn utility threads such "
"as MPI asynchronous progress threads to Linux cores."
msgstr ""
#: ../../uti.rst:8
msgid "Install capstone"
msgstr ""
#: ../../uti.rst:11 ../../uti.rst:22
msgid "When compute nodes don't have access to repositories"
msgstr ""
#: ../../uti.rst:13
msgid "Install EPEL capstone-devel:"
msgstr ""
#: ../../uti.rst:24
msgid ""
"Ask the system administrator to install ``capstone-devel``. Note that it "
"is in the EPEL repository."
msgstr ""
#: ../../uti.rst:28
msgid "Install syscall_intercept"
msgstr ""
#: ../../uti.rst:37
msgid "Install UTI for McKernel"
msgstr ""
#: ../../uti.rst:39
msgid "Install:"
msgstr ""
#: ../../uti.rst:49
msgid "Install McKernel"
msgstr ""
#: ../../uti.rst:51
msgid "Add ``-DENABLE_UTI=ON`` option to ``cmake``:"
msgstr ""
#: ../../uti.rst:58
msgid "Run programs"
msgstr ""
#: ../../uti.rst:60
msgid "Add ``--enable-uti`` option to ``mcexec``:"
msgstr ""
#: ../../uti.rst:67
msgid "Install UTI for Linux"
msgstr ""
#: ../../uti.rst:69
msgid ""
"You should skip this step if it's already installed as with, for example,"
" Fujitsu Technical Computing Suite."
msgstr ""
#: ../../uti.rst:72
msgid "Install by make"
msgstr ""
#: ../../uti.rst:82
msgid "Install by rpm"
msgstr ""
#: ../../ops.rst:15
msgid "起動停止"
msgstr ""
#: ../../ops.rst:18
msgid "関連ファイル"
msgstr ""
#: ../../ops.rst:20
msgid ""
"SMPプロセッサ向け、x86_64アーキ向けの関連ファイルの場所は以下の通り。 "
"なお、IHK/McKernelのインストールディレクトリを<install>とする。"
msgstr ""
#: ../../ops.rst:24
msgid "<install>/kmod/ihk.ko"
msgstr ""
#: ../../ops.rst:24
msgid "IHK-master core"
msgstr ""
#: ../../ops.rst:26
msgid "|ihk-smp|"
msgstr ""
#: ../../ops.rst:26
msgid "IHK-master driver"
msgstr ""
#: ../../ops.rst:29
msgid "|mcctrl|"
msgstr ""
#: ../../ops.rst:29
msgid "Delegator module"
msgstr ""
#: ../../ops.rst:32
msgid "|mckernel.img|"
msgstr ""
#: ../../ops.rst:32
msgid "カーネルイメージ"
msgstr ""
#: ../../ops.rst:40
msgid "運用向けコマンド・デーモンのファイルの場所は以下の通り。 なお、IHK/McKernelのインストールディレクトリを<install>とする。"
msgstr ""
#: ../../ops.rst:44
msgid "|mcreboot|"
msgstr ""
#: ../../ops.rst:44 ../../ops.rst:104
msgid "ブートスクリプト"
msgstr ""
#: ../../ops.rst:47
msgid "|mcstop|"
msgstr ""
#: ../../ops.rst:47 ../../ops.rst:204
msgid "シャットダウンスクリプト"
msgstr ""
#: ../../ops.rst:50
msgid "<install>/bin/mcexec"
msgstr ""
#: ../../ops.rst:50 ../../ops.rst:242
msgid "プロセス起動コマンド"
msgstr ""
#: ../../ops.rst:52
msgid "<install>/bin/eclair"
msgstr ""
#: ../../ops.rst:52
msgid "ダンプ解析ツール"
msgstr ""
#: ../../ops.rst:54
msgid "|vmcore2mckdump|"
msgstr ""
#: ../../ops.rst:54
msgid "ダンプ形式変換ツール"
msgstr ""
#: ../../ops.rst:62
msgid "以下、関連コマンドおよび関連関数のインターフェイスを説明する。"
msgstr ""
#: ../../ops.rst:65
msgid "インターフェイス"
msgstr ""
#: ../../ops.rst:68
msgid "カーネル引数"
msgstr ""
#: ../../ops.rst:70
msgid "McKernelのカーネル引数を表 :numref:`tab-kargs` に示す。"
msgstr ""
#: ../../ops.rst:74
msgid "McKernelのカーネル引数"
msgstr ""
#: ../../ops.rst:77
msgid "hidos"
msgstr ""
#: ../../ops.rst:77
msgid "IKCを有効にする。"
msgstr ""
#: ../../ops.rst:79
msgid "|dlv|"
msgstr ""
#: ../../ops.rst
msgid "Linuxのpanicハンドラ経由でダンプを行った場合の、ダ"
msgstr ""
#: ../../ops.rst
msgid "ンプ対象とするメモリ領域の種類を<level>に設定する。"
msgstr ""
#: ../../ops.rst
msgid "設定可能な値は以下の通り。"
msgstr ""
#: ../../ops.rst:85 ../../ops.rst:166 ../../ops.rst:198 ../../ops.rst:236
msgid "0"
msgstr ""
#: ../../ops.rst:86 ../../ops.rst:167
msgid "IHKがMcKernelに割り当てたメモリ領域を出力する"
msgstr ""
#: ../../ops.rst:87 ../../ops.rst:168
msgid "24"
msgstr ""
#: ../../ops.rst:88 ../../ops.rst:169
msgid "カーネルが使用しているメモリ領域を出力する"
msgstr ""
#: ../../ops.rst:90 ../../ops.rst:171
msgid "指定がなかった場合は24が用いられる。"
msgstr ""
#: ../../ops.rst:92
msgid "|allow|"
msgstr ""
#: ../../ops.rst
msgid "McKernelに割り当てられたCPU数より大きい数のスレッド"
msgstr ""
#: ../../ops.rst
msgid "またはプロセスの生成を許可する。この引数が指定され"
msgstr ""
#: ../../ops.rst
msgid "ない場合に、CPU数より大きい数のスレッドまたはプロセ"
msgstr ""
#: ../../ops.rst
msgid "スをclone(), fork(), vfork()などで生成しようとする"
msgstr ""
#: ../../ops.rst
msgid "と、当該システムコールがEINVALエラーを返す。"
msgstr ""
#: ../../ops.rst:107 ../../ops.rst:209
msgid "書式"
msgstr ""
#: ../../ops.rst:115 ../../ops.rst:219
msgid "オプション"
msgstr ""
#: ../../ops.rst:118
msgid "|opt-c|"
msgstr ""
#: ../../ops.rst
msgid "McKernelに割り当てるCPUのリストを指定する。フォー"
msgstr ""
#: ../../ops.rst
msgid "マットは以下の通り。"
msgstr ""
#: ../../ops.rst
msgid "<CPU logical id>,<CPU logical id>...または"
msgstr ""
#: ../../ops.rst
msgid "<CPU logical id>-<CPU logical id>,<CPU logical id>"
msgstr ""
#: ../../ops.rst
msgid "-<CPU logical id>...または両者の混合。"
msgstr ""
#: ../../ops.rst:124
msgid "|opt-r|"
msgstr ""
#: ../../ops.rst
msgid "McKernelのCPUがIKCメッセージを送るLinux"
msgstr ""
#: ../../ops.rst
msgid "CPUを指定する。フォーマットは以下の通り。"
msgstr ""
#: ../../ops.rst
msgid "<CPU list>:<CPU id>+<CPU list>:<CPU id>..."
msgstr ""
#: ../../ops.rst
msgid "<CPU list>のフォーマットは-cオプションにおけるもの"
msgstr ""
#: ../../ops.rst
msgid "と同じである。"
msgstr ""
#: ../../ops.rst
msgid "各<CPU list>:<CPU id>は<CPU list>で示されるMcKernel"
msgstr ""
#: ../../ops.rst
msgid "のCPUが<CPU logical id>で示されるLinuxのCPUにIKC"
msgstr ""
#: ../../ops.rst
msgid "メッセージを送信することを意味する。"
msgstr ""
#: ../../ops.rst:133
msgid "|opt-m|"
msgstr ""
#: ../../ops.rst
msgid "McKernelに割り当てるメモリ領域を指定する。フォーマッ"
msgstr ""
#: ../../ops.rst
msgid "トは以下の通り。"
msgstr ""
#: ../../ops.rst
msgid "<size>@<NUMA-id>, <size>@<NUMA-id>..."
msgstr ""
#: ../../ops.rst:137
msgid "|opt-f|"
msgstr ""
#: ../../ops.rst
msgid "ihkmondが使用するsyslogプロトコルのfacilityを指定す"
msgstr ""
#: ../../ops.rst
msgid "る。デフォルトはLOG_LOCAL6。"
msgstr ""
#: ../../ops.rst:140
msgid "|opt-o|"
msgstr ""
#: ../../ops.rst
msgid "IHKのデバイスファイル(/dev/mcd*, /dev/mcos*)のオー"
msgstr ""
#: ../../ops.rst
msgid "ナーとグループの値を<user>[:<group>]の形式で指定す"
msgstr ""
#: ../../ops.rst
msgid "る。デフォルトはmcreboot.shを実行したユーザ。"
msgstr ""
#: ../../ops.rst:144
msgid "|opt-i|"
msgstr ""
#: ../../ops.rst
msgid "ihkmondがハングアップ検知のためにOS状態を確認する時"
msgstr ""
#: ../../ops.rst
msgid "間間隔を秒単位で指定する。-1が指定された場合はハン"
msgstr ""
#: ../../ops.rst
msgid "グアップ検知を行わない。指定がない場合はハングアッ"
msgstr ""
#: ../../ops.rst
msgid "プ検知を行わない。"
msgstr ""
#: ../../ops.rst:149
msgid "|opt-k|"
msgstr ""
#: ../../ops.rst
msgid "カーネルメッセージの/dev/logへのリダイレクト有無を"
msgstr ""
#: ../../ops.rst
msgid "指定する。0が指定された場合はリダイレクトを行わず、"
msgstr ""
#: ../../ops.rst
msgid "0以外が指定された場合はリダイレクトを行う。指定がな"
msgstr ""
#: ../../ops.rst
msgid "い場合はリダイレクトを行わない。"
msgstr ""
#: ../../ops.rst:154
msgid "-q <irq>"
msgstr ""
#: ../../ops.rst
msgid "IHKが使用するIRQ番号を指定する。指定がない場合は"
msgstr ""
#: ../../ops.rst
msgid "64-255の範囲で空いているものを使用する。"
msgstr ""
#: ../../ops.rst:157
msgid "-t"
msgstr ""
#: ../../ops.rst
msgid "x86_64アーキテクチャのみTurbo"
msgstr ""
#: ../../ops.rst
msgid "Boostをオンにする。デフォルトはオフ。"
msgstr ""
#: ../../ops.rst:160
msgid "-d <level>"
msgstr ""
#: ../../ops.rst:173
msgid "-O"
msgstr ""
#: ../../ops.rst
msgid "またはプロセスの生成を許可する。指定がない場合は許可"
msgstr ""
#: ../../ops.rst
msgid "しない。すなわち、CPU数より大きい数のスレッドまたは"
msgstr ""
#: ../../ops.rst
msgid "プロセスを生成しようとするとエラーとなる。"
msgstr ""
#: ../../ops.rst:189 ../../ops.rst:226
msgid "説明"
msgstr ""
#: ../../ops.rst:191
msgid ""
"McKernel関連カーネルモジュールをinsmodし、<cpulist>で指定されたCPUと<memlist>で指定されたメモリ領域からなるパーティションを作成し、IKC"
" mapを<ikcmap>に設定し、前記パーティションにMcKernelをブートする。"
msgstr ""
#: ../../ops.rst:195 ../../ops.rst:233
msgid "戻り値"
msgstr ""
#: ../../ops.rst:198 ../../ops.rst:236
msgid "正常終了"
msgstr ""
#: ../../ops.rst:200 ../../ops.rst:238
msgid "0以外"
msgstr ""
#: ../../ops.rst:200 ../../ops.rst:238
msgid "エラー"
msgstr ""
#: ../../ops.rst:221
msgid "なし"
msgstr ""
#: ../../ops.rst:228
msgid "McKernelをシャットダウンし、McKernel用パーティションを削除し、関連カーネルモジュールをrmmodする。"
msgstr ""
#: ../../ops.rst:247
msgid "ダンプ解析コマンド"
msgstr ""
#: ../../ops.rst:252
msgid "ダンプ形式変換コマンド"
msgstr ""
#: ../../ops.rst:257
msgid "ブート手順"
msgstr ""
#: ../../ops.rst:259
msgid "mcreboot.shを用いてブート手順を説明する。"
msgstr ""
#: ../../ops.rst:261 ../../ops.rst:908
msgid "スクリプトは以下の通り。"
msgstr ""
#: ../../ops.rst:854 ../../ops.rst:1052
msgid "手順は以下の通り。"
msgstr ""
#: ../../ops.rst:856
msgid "ihkmondを起動する。ihkmondは任意のタイミングで起動してよい。これは、ihkmondはOSインスタンスの作成を検知して動作を開始するためである。83行目"
msgstr ""
#: ../../ops.rst:858
msgid "Linuxのカーネルバージョンが、mcoverlayfsが動作するものであるかを確認する。200216行目"
msgstr ""
#: ../../ops.rst:860
msgid "irqbalanceを停止する。251257行目"
msgstr ""
#: ../../ops.rst:862
msgid ""
"/proc/irq/[n]/affinityの設定を保存した上でMcKernel "
"CPUを担当から外す。担当CPUが無くなる場合は、全てのLinux CPUを指定する。269303行目"
msgstr ""
#: ../../ops.rst:866
msgid "ihk.koをinsmodする。307行目"
msgstr ""
#: ../../ops.rst:868
msgid "Linuxによるメモリフラグメンテーションを緩和するために以下を実施する。313320行目"
msgstr ""
#: ../../ops.rst:870
msgid "アクティブでないプロセスを積極的にスワップアウトするように設定する"
msgstr ""
#: ../../ops.rst:872
msgid "クリーンなページキャッシュを無効化し、またdentriesやinodeのslabオブジェクトのうち可能なものを破棄する"
msgstr ""
#: ../../ops.rst:874
msgid "連続する空き領域を結合してより大きな空き領域にまとめる"
msgstr ""
#: ../../ops.rst:876
msgid ""
"ihk-smp-x86.koをinsmodする。340行目ihk-smp-x86.koは関数をihk.koに登録する。このため、ihk-"
"smp-x86.koはihk.koをinsmodした後にinsmodする必要がある。"
msgstr ""
#: ../../ops.rst:878
msgid "メモリを予約する。370行目"
msgstr ""
#: ../../ops.rst:880
msgid "CPUを予約する。374行目"
msgstr ""
#: ../../ops.rst:882
msgid "McKernelのカーネルモジュールmcctrl.koをinsmodする。382行目mcctrl.koはMcKernelブート時に呼ばれる関数をihk.koに登録する。このため、mcctrl.koのinsmodはihk.koのinsmodの後に、またブートの前に行う必要がある。"
msgstr ""
#: ../../ops.rst:884
msgid "OSインスタンスを作成する。406行目"
msgstr ""
#: ../../ops.rst:886
msgid "OSインスタンスにCPUを割り当てる。412行目"
msgstr ""
#: ../../ops.rst:888
msgid "McKernel CPUのIKCメッセージ送信先のLinux CPUを設定する。419行目"
msgstr ""
#: ../../ops.rst:890
msgid "OSインスタンスにメモリを割り当てる。426行目"
msgstr ""
#: ../../ops.rst:892
msgid "カーネルイメージをロードする。432行目"
msgstr ""
#: ../../ops.rst:894
msgid "カーネル引数をカーネルに渡す。438行目"
msgstr ""
#: ../../ops.rst:896
msgid "カーネルをブートする。444行目"
msgstr ""
#: ../../ops.rst:898
msgid ""
"/proc, "
"/sysファイルの準備をする。また、その中でmcoverlayfs.koをinsmodする。mcoverlayfs.koは他モジュールとの依存関係を持たない。454行目から567行目なお、関数インターフェイスでの対応関数はihk_os_create_pseudofs()である。"
msgstr ""
#: ../../ops.rst:900
msgid "irqbalanceを、Linux CPUのみを対象とする設定で開始する。569587行目"
msgstr ""
#: ../../ops.rst:904
msgid "シャットダウン手順"
msgstr ""
#: ../../ops.rst:906
msgid "mcstop+release.shを用いてシャットダウン手順を説明する。"
msgstr ""
#: ../../ops.rst:1054
msgid "ブート時にLinux CPUのみを対象とする設定で開始されたirqbalanceを停止する。2433行目"
msgstr ""
#: ../../ops.rst:1057
msgid "全てのOSインスタンスを破壊する。OSインスタンスに割り当てられていた資源はIHKがLWKのために予約した状態に移行する。3550行目"
msgstr ""
#: ../../ops.rst:1059
msgid "IHKがLWKのために予約していた資源を開放する。5277行目"
msgstr ""
#: ../../ops.rst:1061
msgid "mcctrl.koをrmmodする。81行目"
msgstr ""
#: ../../ops.rst:1063
msgid ""
"/proc, "
"/sysファイルの準備をする。また、その中でmcoverlayfs.koをrmmodする。87100行目なお、関数インターフェイスでの対応関数はihk_os_destroy_pseudofs()である。"
msgstr ""
#: ../../ops.rst:1065
msgid "ihk-smp-x86.koをrmmodする。104行目"
msgstr ""
#: ../../ops.rst:1067
msgid "ihk.koをrmmodする。112行目"
msgstr ""
#: ../../ops.rst:1069
msgid "ihkmondを停止する。121行目"
msgstr ""
#: ../../ops.rst:1071
msgid "/proc/irq/[n]/affinityの設定をブート時に保存しておいたものに戻し、ブート前の設定でirqbalanceを開始する。124135行目"
msgstr ""
#: ../../ops.rst:1073
msgid "Linuxカーネルのスワップアウト積極度の設定をデフォルトの値に戻す。138行目"
msgstr ""
#~ msgid "The following OS distributions and platforms are recommended:"
#~ msgstr "推奨OSディストリビューションとプロセッサは以下の通り。"
#~ msgid "OS distribution"
#~ msgstr ""
#~ msgid "CentOS 7.3 or later"
#~ msgstr ""
#~ msgid "RHEL 7.3 or later"
#~ msgstr ""
#~ msgid "Platform"
#~ msgstr ""
#~ msgid "Intel Xeon"
#~ msgstr ""
#~ msgid "Intel Xeon Phi"
#~ msgstr ""
#~ msgid "Fujitsu A64FX"
#~ msgstr ""
#~ msgid "Prepare files for building McKernel"
#~ msgstr ""
#~ msgid ""
#~ "Grant read permission to the System.map"
#~ " file of your kernel version on "
#~ "the build machine:"
#~ msgstr ""
#~ msgid "Install the following packages to the build machine:"
#~ msgstr ""
#~ msgid "When having access to repositories"
#~ msgstr ""
#~ msgid "On RHEL 8, enable the CodeReady Linux Builder (CLB) repository:"
#~ msgstr ""
#~ msgid "On CentOS 8, enable the PowerTools repository:"
#~ msgstr ""
#~ msgid "Install with yum:"
#~ msgstr ""
#~ msgid "When not having access to repositories"
#~ msgstr ""
#~ msgid ""
#~ "Ask the system administrator to install"
#~ " them. Note that ``libdwarf-devel`` "
#~ "is in the CodeReady Linux Builder "
#~ "repository on RHEL 8 or in the "
#~ "PowerTools repository on CentOS 8."
#~ msgstr ""
#~ msgid "Clone, compile, install"
#~ msgstr ""
#~ msgid "Clone the source code:"
#~ msgstr ""
#~ msgid "(Optional) Checkout to the specific branch or version:"
#~ msgstr ""
#~ msgid ""
#~ "Foe example, if you want to try"
#~ " the development branch, use “development”"
#~ " as the pathspec. If you want "
#~ "to try the prerelease version 1.7.0-0.2,"
#~ " use “1.7.0-0.2”."
#~ msgstr ""
#~ msgid "Move to build directory:"
#~ msgstr ""
#~ msgid "Run cmake:"
#~ msgstr ""
#~ msgid "When not cross-compiling:"
#~ msgstr ""
#~ msgid "When cross-compiling:"
#~ msgstr ""
#~ msgid "Install with cmake"
#~ msgstr ""
#~ msgid "Install with make:"
#~ msgstr ""
#~ msgid ""
#~ "The kernel modules and McKernel kernel"
#~ " image should be installed under the"
#~ " **ihk+mckernel** folder in your home "
#~ "directory."
#~ msgstr ""
#~ msgid "Install with rpm"
#~ msgstr ""
#~ msgid "Create the tarball and the spec file:"
#~ msgstr ""
#~ msgid "Create the rpm package:"
#~ msgstr ""
#~ msgid "Install the rpm package:"
#~ msgstr ""
#~ msgid ""
#~ "The kernel modules and McKernel kernel"
#~ " image are installed under the "
#~ "standard system directories."
#~ msgstr ""
#~ msgid "Prepare files and change settings for installing McKernel"
#~ msgstr ""
#~ msgid "Disable SELinux of the compute nodes:"
#~ msgstr ""
#~ msgid "Change the file to SELINUX=disabled. And then reboot the compute nodes:"
#~ msgstr ""
#~ msgid "Install the following packages to the compute nodes:"
#~ msgstr ""
#~ msgid ""
#~ "Ask the system administrator to install"
#~ " them. Note that ``libdwarf`` is in"
#~ " the CodeReady Linux Builder repository "
#~ "on RHEL 8 or in the PowerTools "
#~ "repository on CentOS 8."
#~ msgstr ""

View File

@ -0,0 +1,458 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) 2020, Masamichi Takagi, Balazs Gerofi, Yutaka Ishikawa
# This file is distributed under the same license as the IHK/McKernel
# package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2020.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: IHK/McKernel \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-08-04 16:40+0900\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.7.0\n"
#: ../../quick.rst:6
msgid "Introduction"
msgstr ""
#: ../../summary.rst:1
msgid ""
"IHK/McKernel is a light-weight multi-kernel operating system designed for"
" high-end supercomputing. It runs Linux and McKernel, a light-weight "
"kernel (LWK), side-by-side inside compute nodes and aims at the "
"following:"
msgstr ""
#: ../../summary.rst:6
msgid ""
"Provide scalable and consistent execution of large-scale parallel "
"scientific applications, but at the same time maintain the ability to "
"rapidly adapt to new hardware features and emerging programming models"
msgstr ""
#: ../../summary.rst:10
msgid ""
"Provide efficient memory and device management so that resource "
"contention and data movement are minimized at the system level"
msgstr ""
#: ../../summary.rst:12
msgid ""
"Eliminate OS noise by isolating OS services in Linux and provide jitter "
"free execution on the LWK"
msgstr ""
#: ../../summary.rst:14
msgid ""
"Support the full POSIX/Linux APIs by selectively offloading (slow-path) "
"system calls to Linux"
msgstr ""
#: ../../background.rst:2
msgid "Background and Motivation"
msgstr ""
#: ../../background.rst:4
msgid ""
"With the growing complexity of high-end supercomputers, the current "
"system software stack faces significant challenges as we move forward to "
"exascale and beyond. The necessity to deal with extreme degree of "
"parallelism, heterogeneous architectures, multiple levels of memory "
"hierarchy, power constraints, etc., advocates operating systems that can "
"rapidly adapt to new hardware requirements, and that can support novel "
"programming paradigms and runtime systems. On the other hand, a new class"
" of more dynamic and complex applications are also on the horizon, with "
"an increasing demand for application constructs such as in-situ analysis,"
" workflows, elaborate monitoring and performance tools. This complexity "
"relies not only on the rich features of POSIX, but also on the Linux APIs"
" (such as the */proc*, */sys* filesystems, etc.) in particular."
msgstr ""
#: ../../background.rst:19
msgid "Two Traditional HPC OS Approaches"
msgstr ""
#: ../../background.rst:21
msgid ""
"Traditionally, light-weight operating systems specialized for HPC "
"followed two approaches to tackle scalable execution of large-scale "
"applications. In the full weight kernel (FWK) approach, a full Linux "
"environment is taken as the basis, and features that inhibit attaining "
"HPC scalability are removed, i.e., making it light-weight. The pure "
"light-weight kernel (LWK) approach, on the other hand, starts from "
"scratch and effort is undertaken to add sufficient functionality so that "
"it provides a familiar API, typically something close to that of a "
"general purpose OS, while at the same time it retains the desired "
"scalability and reliability attributes. Neither of these approaches "
"yields a fully Linux compatible environment."
msgstr ""
#: ../../background.rst:34
msgid "The Multi-kernel Approach"
msgstr ""
#: ../../background.rst:36
msgid ""
"A hybrid approach recognized recently by the system software community is"
" to run Linux simultaneously with a lightweight kernel on compute nodes "
"and multiple research projects are now pursuing this direction. The basic"
" idea is that simulations run on an HPC tailored lightweight kernel, "
"ensuring the necessary isolation for noiseless execution of parallel "
"applications, but Linux is leveraged so that the full POSIX API is "
"supported. Additionally, the small code base of the LWK can also "
"facilitate rapid prototyping for new, exotic hardware features. "
"Nevertheless, the questions of how to share node resources between the "
"two types of kernels, where do device drivers execute, how exactly do the"
" two kernels interact with each other and to what extent are they "
"integrated, remain subjects of ongoing debate."
msgstr ""
#: ../../archtecture.rst:2
msgid "Architectural Overview"
msgstr ""
#: ../../archtecture.rst:4
msgid ""
"At the heart of the stack is a low-level software infrastructure called "
"Interface for Heterogeneous Kernels (IHK). IHK is a general framework "
"that provides capabilities for partitioning resources in a many-core "
"environment (e.g.,CPU cores and physical memory) and it enables "
"management of lightweight kernels. IHK can allocate and release host "
"resources dynamically and no reboot of the host machine is required when "
"altering configuration. IHK also provides a low-level inter-kernel "
"messaging infrastructure, called the Inter-Kernel Communication (IKC) "
"layer. An architectural overview of the main system components is shown "
"below."
msgstr ""
#: ../../archtecture.rst:18
msgid ""
"McKernel is a lightweight kernel written from scratch. It is designed for"
" HPC and is booted from IHK. McKernel retains a binary compatible ABI "
"with Linux, however, it implements only a small set of performance "
"sensitive system calls and the rest are offloaded to Linux. Specifically,"
" McKernel has its own memory management, it supports processes and multi-"
"threading with a simple round-robin cooperative (tick-less) scheduler, "
"and it implements signaling. It also allows inter-process memory mappings"
" and it provides interfaces to hardware performance counters."
msgstr ""
#: ../../archtecture.rst:29
msgid "Functionality"
msgstr ""
#: ../../archtecture.rst:31
msgid ""
"An overview of some of the principal functionalities of the IHK/McKernel "
"stack is provided below."
msgstr ""
#: ../../archtecture.rst:35
msgid "System Call Offloading"
msgstr ""
#: ../../archtecture.rst:37
msgid ""
"System call forwarding in McKernel is implemented as follows. When an "
"offloaded system call occurs, McKernel marshals the system call number "
"along with its arguments and sends a message to Linux via a dedicated IKC"
" channel. The corresponding proxy process running on Linux is by default "
"waiting for system call requests through an ioctl() call into IHKs "
"system call delegator kernel module. The delegator kernel modules IKC "
"interrupt handler wakes up the proxy process, which returns to userspace "
"and simply invokes the requested system call. Once it obtains the return "
"value, it instructs the delegator module to send the result back to "
"McKernel, which subsequently passes the value to user-space."
msgstr ""
#: ../../archtecture.rst:49
msgid "Unified Address Space"
msgstr ""
#: ../../archtecture.rst:51
msgid ""
"The unified address space model in IHK/McKernel ensures that offloaded "
"system calls can seamlessly resolve arguments even in case of pointers. "
"This mechanism is depicted below and is implemented as follows."
msgstr ""
#: ../../archtecture.rst:58
msgid ""
"First, the proxy process is compiled as a position independent binary, "
"which enables us to map the code and data segments specific to the proxy "
"process to an address range which is explicitly excluded from McKernels "
"user space. The grey box on the right side of the figure demonstrates the"
" excluded region. Second, the entire valid virtual address range of "
"McKernels application user-space is covered by a special mapping in the "
"proxy process for which we use a pseudo file mapping in Linux. This "
"mapping is indicated by the blue box on the left side of the figure."
msgstr ""
#: ../../install.rst:4
msgid "Installation"
msgstr "インストール"
#: ../../install.rst:6
msgid "The following OS distributions and platforms are recommended:"
msgstr "推奨OSディストリビューションとプロセッサは以下の通り。"
#: ../../install.rst:8
msgid "OS distribution"
msgstr ""
#: ../../install.rst:10
msgid "CentOS 7.3 or later"
msgstr ""
#: ../../install.rst:11
msgid "RHEL 7.3 or later"
msgstr ""
#: ../../install.rst:13
msgid "Platform"
msgstr ""
#: ../../install.rst:15
msgid "Intel Xeon"
msgstr ""
#: ../../install.rst:16
msgid "Intel Xeon Phi"
msgstr ""
#: ../../install.rst:17
msgid "Fujitsu A64FX"
msgstr ""
#: ../../install.rst:20
msgid "Prepare files for building McKernel"
msgstr ""
#: ../../install.rst:22
msgid ""
"Grant read permission to the System.map file of your kernel version on "
"the build machine:"
msgstr ""
#: ../../install.rst:28
msgid "Install the following packages to the build machine:"
msgstr ""
#: ../../install.rst:35 ../../install.rst:179
msgid "When having access to repositories"
msgstr ""
#: ../../install.rst:37 ../../install.rst:181
msgid "On RHEL 8, enable the CodeReady Linux Builder (CLB) repository:"
msgstr ""
#: ../../install.rst:43 ../../install.rst:187
msgid "On CentOS 8, enable the PowerTools repository:"
msgstr ""
#: ../../install.rst:49 ../../install.rst:193
msgid "Install with yum:"
msgstr ""
#: ../../install.rst:56 ../../install.rst:200
msgid "When not having access to repositories"
msgstr ""
#: ../../install.rst:58
msgid ""
"Ask the system administrator to install them. Note that ``libdwarf-"
"devel`` is in the CodeReady Linux Builder repository on RHEL 8 or in the "
"PowerTools repository on CentOS 8."
msgstr ""
#: ../../install.rst:61
msgid "Clone, compile, install"
msgstr ""
#: ../../install.rst:63
msgid "Clone the source code:"
msgstr ""
#: ../../install.rst:71
msgid "(Optional) Checkout to the specific branch or version:"
msgstr ""
#: ../../install.rst:79
msgid ""
"Foe example, if you want to try the development branch, use “development”"
" as the pathspec. If you want to try the prerelease version 1.7.0-0.2, "
"use “1.7.0-0.2”."
msgstr ""
#: ../../install.rst:83
msgid "Move to build directory:"
msgstr ""
#: ../../install.rst:89
msgid "Run cmake:"
msgstr ""
#: ../../install.rst:92 ../../install.rst:135
msgid "When not cross-compiling:"
msgstr ""
#: ../../install.rst:99 ../../install.rst:142
msgid "When cross-compiling:"
msgstr ""
#: ../../install.rst:111
msgid "Install with cmake"
msgstr ""
#: ../../install.rst:113
msgid "Install with make:"
msgstr ""
#: ../../install.rst:119
msgid ""
"The kernel modules and McKernel kernel image should be installed under "
"the **ihk+mckernel** folder in your home directory."
msgstr ""
#: ../../install.rst:123
msgid "Install with rpm"
msgstr ""
#: ../../install.rst:125
msgid "Create the tarball and the spec file:"
msgstr ""
#: ../../install.rst:132
msgid "Create the rpm package:"
msgstr ""
#: ../../install.rst:148
msgid "Install the rpm package:"
msgstr ""
#: ../../install.rst:154
msgid ""
"The kernel modules and McKernel kernel image are installed under the "
"standard system directories."
msgstr ""
#: ../../install.rst:158
msgid "Prepare files and change settings for installing McKernel"
msgstr ""
#: ../../install.rst:160
msgid "Disable SELinux of the compute nodes:"
msgstr ""
#: ../../install.rst:166
msgid "Change the file to SELINUX=disabled. And then reboot the compute nodes:"
msgstr ""
#: ../../install.rst:172
msgid "Install the following packages to the compute nodes:"
msgstr ""
#: ../../install.rst:202
msgid ""
"Ask the system administrator to install them. Note that ``libdwarf`` is "
"in the CodeReady Linux Builder repository on RHEL 8 or in the PowerTools "
"repository on CentOS 8."
msgstr ""
#: ../../boot_run_shutdown.rst:2
msgid "Boot McKernel"
msgstr ""
#: ../../boot_run_shutdown.rst:4
msgid ""
"A boot script called ``mcreboot.sh`` is provided under ``sbin`` in the "
"install folder. To boot on logical CPU 1 with 512MB of memory, use the "
"following invocation:"
msgstr ""
#: ../../boot_run_shutdown.rst:14
msgid ""
"You should see something similar like this if you display the McKernels "
"kernel message log:"
msgstr ""
#: ../../boot_run_shutdown.rst:42
msgid "Run a simple program on McKernel"
msgstr ""
#: ../../boot_run_shutdown.rst:44
msgid ""
"The mcexec command line tool (which is also the Linux proxy process) can "
"be used for executing applications on McKernel:"
msgstr ""
#: ../../boot_run_shutdown.rst:53
msgid "Shutdown McKernel"
msgstr ""
#: ../../boot_run_shutdown.rst:55
msgid ""
"Finally, to shutdown McKernel and release CPU/memory resources back to "
"Linux use the following command:"
msgstr ""
#: ../../team.rst:2
msgid "The Team"
msgstr ""
#: ../../team.rst:4
msgid ""
"The McKernel project was started at The University of Tokyo and currently"
" it is mainly developed at RIKEN. Some of our collaborators include:"
msgstr ""
#: ../../team.rst:8
msgid "Hitachi"
msgstr ""
#: ../../team.rst:9
msgid "Fujitsu"
msgstr ""
#: ../../team.rst:10
msgid "CEA (France)"
msgstr ""
#: ../../team.rst:11
msgid "NEC"
msgstr ""
#: ../../license.rst:2
msgid "License"
msgstr ""
#: ../../license.rst:4
msgid "McKernel is GPL licensed, as found in the LICENSE file."
msgstr ""
#: ../../contact.rst:2
msgid "Contact"
msgstr ""
#: ../../contact.rst:4
msgid ""
"Please give your feedback to us via one of the following mailing lists. "
"Subscription via `www.pccluster.org "
"<http://www.pccluster.org/mailman/listinfo/mckernel-users>`__ is needed."
msgstr ""
#: ../../contact.rst:9
msgid "English: mckernel-users@pccluster.org"
msgstr ""
#: ../../contact.rst:10
msgid "Japanese: mckernel-users-jp@pccluster.org"
msgstr ""

View File

@ -0,0 +1,28 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) 2020, Masamichi Takagi, Balazs Gerofi, Yutaka Ishikawa
# This file is distributed under the same license as the IHK/McKernel
# package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2020.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: IHK/McKernel \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-08-04 16:40+0900\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.7.0\n"
#: ../../spec-ihk.md:1
msgid "hi"
msgstr ""
#: ../../spec-ihk.md:3
msgid ":download:IHK Spec <ihk.pdf>"
msgstr ""

View File

@ -0,0 +1,24 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) 2020, Masamichi Takagi, Balazs Gerofi, Yutaka Ishikawa
# This file is distributed under the same license as the IHK/McKernel
# package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2020.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: IHK/McKernel \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-08-04 16:40+0900\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.7.0\n"
#: ../../spec-mckernel.md:1
msgid "Hello"
msgstr ""

View File

@ -0,0 +1,48 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) 2020, Masamichi Takagi, Balazs Gerofi, Yutaka Ishikawa
# This file is distributed under the same license as the IHK/McKernel
# package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2020.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: IHK/McKernel \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-08-07 10:00+0900\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.7.0\n"
#: ../../spec/ihk.rst:6
msgid "External Specs"
msgstr ""
#: ../../spec/ihk.rst:9
msgid "Overview"
msgstr ""
#: ../../spec/ihk.rst:12
msgid "Function Specs"
msgstr ""
#: ../../spec/ihk.rst:15
msgid "Command / Daemon Specs"
msgstr ""
#: ../../spec/ihk.rst:18
msgid "Booting LWK"
msgstr ""
#: ../../spec/mckernel.rst:6
msgid "Interfaces"
msgstr ""
#: ../../spec/mckernel.rst:9
msgid "Interface details"
msgstr ""

View File

@ -0,0 +1,53 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) 2020, Masamichi Takagi, Balazs Gerofi, Yutaka Ishikawa
# This file is distributed under the same license as the IHK/McKernel
# package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2020.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: IHK/McKernel \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-08-04 16:40+0900\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.7.0\n"
#: ../../summary.rst:1
msgid ""
"IHK/McKernel is a light-weight multi-kernel operating system designed for"
" high-end supercomputing. It runs Linux and McKernel, a light-weight "
"kernel (LWK), side-by-side inside compute nodes and aims at the "
"following:"
msgstr ""
#: ../../summary.rst:6
msgid ""
"Provide scalable and consistent execution of large-scale parallel "
"scientific applications, but at the same time maintain the ability to "
"rapidly adapt to new hardware features and emerging programming models"
msgstr ""
#: ../../summary.rst:10
msgid ""
"Provide efficient memory and device management so that resource "
"contention and data movement are minimized at the system level"
msgstr ""
#: ../../summary.rst:12
msgid ""
"Eliminate OS noise by isolating OS services in Linux and provide jitter "
"free execution on the LWK"
msgstr ""
#: ../../summary.rst:14
msgid ""
"Support the full POSIX/Linux APIs by selectively offloading (slow-path) "
"system calls to Linux"
msgstr ""

View File

@ -0,0 +1,46 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) 2020, Masamichi Takagi, Balazs Gerofi, Yutaka Ishikawa
# This file is distributed under the same license as the IHK/McKernel
# package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2020.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: IHK/McKernel \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-08-04 16:40+0900\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.7.0\n"
#: ../../team.rst:2
msgid "The Team"
msgstr ""
#: ../../team.rst:4
msgid ""
"The McKernel project was started at The University of Tokyo and currently"
" it is mainly developed at RIKEN. Some of our collaborators include:"
msgstr ""
#: ../../team.rst:8
msgid "Hitachi"
msgstr ""
#: ../../team.rst:9
msgid "Fujitsu"
msgstr ""
#: ../../team.rst:10
msgid "CEA (France)"
msgstr ""
#: ../../team.rst:11
msgid "NEC"
msgstr ""

View File

@ -0,0 +1,454 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) 2020, Masamichi Takagi, Balazs Gerofi, Yutaka Ishikawa
# This file is distributed under the same license as the IHK/McKernel
# package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2020.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: IHK/McKernel \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-08-07 10:00+0900\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.7.0\n"
#: ../../users.rst:6
msgid "Architectural Overview"
msgstr ""
#: ../../users.rst:8
msgid ""
"See `Quick Guide -- Architectural Overview <quick.html#architectural-"
"overview>`__."
msgstr ""
#: ../../users.rst:11
msgid "Running Programs"
msgstr ""
#: ../../users.rst:13
msgid ""
"You need to check if your application and pre-/post-processing programs "
"are suited to run with McKernel. Follow the guide below to choose to run "
"the whole on McKernel, or run the whole on Linux, or run pre-/post-"
"processing on Linux and the application on McKernel:"
msgstr ""
#: ../../users.rst:16
msgid "Application"
msgstr ""
#: ../../users.rst:18
msgid ""
"Run the whole on Linux if it issues system calls frequently and becoming "
"the bottleneck with McKernel. For example, it's better to run on Linux "
"those programs performing many file I/O operations."
msgstr ""
#: ../../users.rst:19
msgid "Otherwise, run it on McKernel."
msgstr ""
#: ../../users.rst:21
msgid "Pre-/Post-processing"
msgstr ""
#: ../../users.rst:23
msgid ""
"Run it on McKernel if it consumes a large amount of memory or the "
"execution time isn't prolonged prohivitively with McKernel. The reason "
"for the first condition is that the resource could be limited for Linux "
"CPUs in the nodes for McKernel."
msgstr ""
#: ../../users.rst:24
msgid "Otherwise, run it on Linux."
msgstr ""
#: ../../users.rst:28
msgid "Modify job script"
msgstr ""
#: ../../users.rst:30
msgid ""
"When using job submission system, you need to modify the job scripts so "
"that the job script itself is going to run on Linux. For example, with "
"Fujitsu Technical Computing Suite (TCS), you need to specify "
"``jobenv=linux`` by inserting the following line into the job script:"
msgstr ""
#: ../../users.rst:38
msgid "Insert ``mcexec`` into the command line"
msgstr ""
#: ../../users.rst:40
msgid ""
"You need to insert ``mcexec`` into the command lines invoking the "
"programs that you chose to run on McKernel:"
msgstr ""
#: ../../users.rst:43
msgid "Non-MPI programs"
msgstr ""
#: ../../users.rst:45
msgid "Insert ``mcexec`` before an executable:"
msgstr ""
#: ../../users.rst:52
msgid "MPI programs"
msgstr ""
#: ../../users.rst:54
msgid ""
"Insert ``mcexec -n <processes-per-node>`` **after mpirun** and before an "
"executable:"
msgstr ""
#: ../../users.rst:61
msgid ""
"``<processes-per-node>`` is the number of the processes per node and "
"calculated by (number of MPI processes) / (number of nodes)."
msgstr ""
#: ../../users.rst:64
msgid ""
"For example, ``<processes-per-node>`` equals to 4 (=32/8) when specifying"
" the number of processes and nodes as follows with Fujitsu Technical "
"Computing Suite."
msgstr ""
#: ../../users.rst:74
msgid "Limitations"
msgstr ""
#: ../../users.rst:76
msgid ""
"Pseudo devices such as /dev/mem and /dev/zero are not mmap()ed correctly "
"even if the mmap() returns a success. An access of their mapping receives"
" the SIGSEGV signal."
msgstr ""
#: ../../users.rst:80
msgid ""
"clone() supports only the following flags. All the other flags cause "
"clone() to return error or are simply ignored."
msgstr ""
#: ../../users.rst:83
msgid "CLONE_CHILD_CLEARTID"
msgstr ""
#: ../../users.rst:84
msgid "CLONE_CHILD_SETTID"
msgstr ""
#: ../../users.rst:85
msgid "CLONE_PARENT_SETTID"
msgstr ""
#: ../../users.rst:86
msgid "CLONE_SETTLS"
msgstr ""
#: ../../users.rst:87
msgid "CLONE_SIGHAND"
msgstr ""
#: ../../users.rst:88
msgid "CLONE_VM"
msgstr ""
#: ../../users.rst:90
msgid "PAPI has the following restriction."
msgstr ""
#: ../../users.rst:92
msgid ""
"Number of counters a user can use at the same time is up to the number of"
" the physical counters in the processor."
msgstr ""
#: ../../users.rst:95
msgid "msync writes back only the modified pages mapped by the calling process."
msgstr ""
#: ../../users.rst:98
msgid "The following syscalls always return the ENOSYS error."
msgstr ""
#: ../../users.rst:100
msgid "migrate_pages()"
msgstr ""
#: ../../users.rst:101
msgid "move_pages()"
msgstr ""
#: ../../users.rst:102
msgid "set_robust_list()"
msgstr ""
#: ../../users.rst:104
msgid "The following syscalls always return the EOPNOTSUPP error."
msgstr ""
#: ../../users.rst:106
msgid "arch_prctl(ARCH_SET_GS)"
msgstr ""
#: ../../users.rst:107
msgid "signalfd()"
msgstr ""
#: ../../users.rst:109
msgid "signalfd4() returns a fd, but signal is not notified through the fd."
msgstr ""
#: ../../users.rst:111
msgid "set_rlimit sets the limit values but they are not enforced."
msgstr ""
#: ../../users.rst:113
msgid "Address randomization is not supported."
msgstr ""
#: ../../users.rst:115
msgid ""
"brk() extends the heap more than requestd when -h (extend-heap-by=) "
"option of mcexec is used with the value larger than 4 KiB. "
"syscall_pwrite02 of LTP would fail for this reason. This is because the "
"test expects that the end of the heap is set to the same address as the "
"argument of sbrk() and expects a segmentation violation occurs when it "
"tries to access the memory area right next to the boundary. However, the "
"optimization sets the end to a value larger than the requested. "
"Therefore, the expected segmentation violation doesnt occur."
msgstr ""
#: ../../users.rst:125
msgid ""
"setpriority()/getpriority() wont work. They might set/get the priority "
"of a random mcexec thread. This is because theres no fixed "
"correspondence between a McKernel thread which issues the system call and"
" a mcexec thread which handles the offload request."
msgstr ""
#: ../../users.rst:130
msgid ""
"mbind() can set the policy but it is not used when allocating physical "
"pages."
msgstr ""
#: ../../users.rst:133
msgid ""
"MPOL_F_RELATIVE_NODES and MPOL_INTERLEAVE flags for "
"set_mempolicy()/mbind() are not supported."
msgstr ""
#: ../../users.rst:136
msgid ""
"The MPOL_BIND policy for set_mempolicy()/mbind() works as the same as the"
" MPOL_PREFERRED policy. That is, the physical page allocator doesnt give"
" up the allocation when the specified nodes are running out of pages but "
"continues to search pages in the other nodes."
msgstr ""
#: ../../users.rst:141
msgid ""
"Kernel dump on Linux panic requires Linux kernel CentOS-7.4 and later. In"
" addition, crash_kexec_post_notifiers kernel argument must be given to "
"Linux kernel."
msgstr ""
#: ../../users.rst:145
msgid ""
"setfsuid()/setfsgid() cannot change the id of the calling thread. "
"Instead, it changes that of the mcexec worker thread which takes the "
"system-call offload request."
msgstr ""
#: ../../users.rst:149
msgid ""
"mmap (hugeTLBfs): The physical pages corresponding to a map are released "
"when no McKernel process exist. The next map gets fresh physical pages."
msgstr ""
#: ../../users.rst:153
msgid "Sticky bit on executable file has no effect."
msgstr ""
#: ../../users.rst:155
msgid ""
"Linux (RHEL-7 for x86_64) could hang when offlining CPUs in the process "
"of booting McKernel due to the Linux bug, found in Linux-3.10 and fixed "
"in the later version. One way to circumvent this is to always assign the "
"same CPU set to McKernel."
msgstr ""
#: ../../users.rst:160
msgid "madvise:"
msgstr ""
#: ../../users.rst:162
msgid "MADV_HWPOISON and MADV_SOFT_OFFLINE always returns -EPERM."
msgstr ""
#: ../../users.rst:163
msgid "MADV_MERGEABLE and MADV_UNMERGEABLE always returns -EINVAL."
msgstr ""
#: ../../users.rst:164
msgid ""
"MADV_HUGEPAGE and MADV_NOHUGEPAGE on file map returns -EINVAL except on "
"RHEL-8 for aarch64."
msgstr ""
#: ../../users.rst:167
msgid ""
"brk() and mmap() doesnt report out-of-memory through its return value. "
"Instead, page-fault reports the error."
msgstr ""
#: ../../users.rst:170
msgid ""
"Anonymous mmap pre-maps requested number of pages when contiguous pages "
"are available. Demand paging is used when not available."
msgstr ""
#: ../../users.rst:173
msgid ""
"Mixing page sizes in anonymous shared mapping is not allowed. mmap "
"creates vm_range with one page size. And munmap or mremap that needs the "
"reduced page size changes the sizes of all the pages of the vm_range."
msgstr ""
#: ../../users.rst:178
msgid ""
"ihk_os_getperfevent() could time-out when invoked from Fujitsu TCS (job-"
"scheduler)."
msgstr ""
#: ../../users.rst:181
msgid ""
"The behaviors of madvise and mbind are changed to do nothing and report "
"success as a workaround for Fugaku."
msgstr ""
#: ../../users.rst:184
msgid ""
"mmap() allows unlimited overcommit. Note that it corresponds to setting "
"sysctl ``vm.overcommit_memory`` to 1."
msgstr ""
#~ msgid ""
#~ "At the heart of the stack is "
#~ "a low-level software infrastructure "
#~ "called Interface for Heterogeneous Kernels "
#~ "(IHK). IHK is a general framework "
#~ "that provides capabilities for partitioning"
#~ " resources in a many-core environment"
#~ " (e.g.,CPU cores and physical memory) "
#~ "and it enables management of lightweight"
#~ " kernels. IHK can allocate and "
#~ "release host resources dynamically and "
#~ "no reboot of the host machine is"
#~ " required when altering configuration. IHK"
#~ " also provides a low-level inter-"
#~ "kernel messaging infrastructure, called the"
#~ " Inter-Kernel Communication (IKC) layer."
#~ " An architectural overview of the "
#~ "main system components is shown below."
#~ msgstr ""
#~ msgid ""
#~ "McKernel is a lightweight kernel written"
#~ " from scratch. It is designed for "
#~ "HPC and is booted from IHK. "
#~ "McKernel retains a binary compatible ABI"
#~ " with Linux, however, it implements "
#~ "only a small set of performance "
#~ "sensitive system calls and the rest "
#~ "are offloaded to Linux. Specifically, "
#~ "McKernel has its own memory management,"
#~ " it supports processes and multi-"
#~ "threading with a simple round-robin "
#~ "cooperative (tick-less) scheduler, and "
#~ "it implements signaling. It also allows"
#~ " inter-process memory mappings and it"
#~ " provides interfaces to hardware "
#~ "performance counters."
#~ msgstr ""
#~ msgid "Functionality"
#~ msgstr ""
#~ msgid ""
#~ "An overview of some of the "
#~ "principal functionalities of the IHK/McKernel"
#~ " stack is provided below."
#~ msgstr ""
#~ msgid "System Call Offloading"
#~ msgstr ""
#~ msgid ""
#~ "System call forwarding in McKernel is"
#~ " implemented as follows. When an "
#~ "offloaded system call occurs, McKernel "
#~ "marshals the system call number along"
#~ " with its arguments and sends a "
#~ "message to Linux via a dedicated "
#~ "IKC channel. The corresponding proxy "
#~ "process running on Linux is by "
#~ "default waiting for system call requests"
#~ " through an ioctl() call into IHKs"
#~ " system call delegator kernel module. "
#~ "The delegator kernel modules IKC "
#~ "interrupt handler wakes up the proxy "
#~ "process, which returns to userspace and"
#~ " simply invokes the requested system "
#~ "call. Once it obtains the return "
#~ "value, it instructs the delegator module"
#~ " to send the result back to "
#~ "McKernel, which subsequently passes the "
#~ "value to user-space."
#~ msgstr ""
#~ msgid "Unified Address Space"
#~ msgstr ""
#~ msgid ""
#~ "The unified address space model in "
#~ "IHK/McKernel ensures that offloaded system "
#~ "calls can seamlessly resolve arguments "
#~ "even in case of pointers. This "
#~ "mechanism is depicted below and is "
#~ "implemented as follows."
#~ msgstr ""
#~ msgid ""
#~ "First, the proxy process is compiled "
#~ "as a position independent binary, which"
#~ " enables us to map the code and"
#~ " data segments specific to the proxy"
#~ " process to an address range which"
#~ " is explicitly excluded from McKernels "
#~ "user space. The grey box on the"
#~ " right side of the figure "
#~ "demonstrates the excluded region. Second, "
#~ "the entire valid virtual address range"
#~ " of McKernels application user-space "
#~ "is covered by a special mapping in"
#~ " the proxy process for which we "
#~ "use a pseudo file mapping in "
#~ "Linux. This mapping is indicated by "
#~ "the blue box on the left side "
#~ "of the figure."
#~ msgstr ""

View File

@ -0,0 +1,94 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) 2020, Masamichi Takagi, Balazs Gerofi, Yutaka Ishikawa
# This file is distributed under the same license as the IHK/McKernel
# package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2020.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: IHK/McKernel \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-08-04 16:40+0900\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.7.0\n"
#: ../../uti.rst:2
msgid "Advanced: Enable Utility Thread offloading Interface (UTI)"
msgstr ""
#: ../../uti.rst:4
msgid ""
"UTI enables a runtime such as MPI runtime to spawn utility threads such "
"as MPI asynchronous progress threads to Linux cores."
msgstr ""
#: ../../uti.rst:8
msgid "Install capstone"
msgstr ""
#: ../../uti.rst:11 ../../uti.rst:22
msgid "When compute nodes don't have access to repositories"
msgstr ""
#: ../../uti.rst:13
msgid "Install EPEL capstone-devel:"
msgstr ""
#: ../../uti.rst:24
msgid ""
"Ask the system administrator to install ``capstone-devel``. Note that it "
"is in the EPEL repository."
msgstr ""
#: ../../uti.rst:28
msgid "Install syscall_intercept"
msgstr ""
#: ../../uti.rst:37
msgid "Install UTI for McKernel"
msgstr ""
#: ../../uti.rst:39
msgid "Install:"
msgstr ""
#: ../../uti.rst:49
msgid "Install McKernel"
msgstr ""
#: ../../uti.rst:51
msgid "Add ``-DENABLE_UTI=ON`` option to ``cmake``:"
msgstr ""
#: ../../uti.rst:58
msgid "Run programs"
msgstr ""
#: ../../uti.rst:60
msgid "Add ``--enable-uti`` option to ``mcexec``:"
msgstr ""
#: ../../uti.rst:67
msgid "Install UTI for Linux"
msgstr ""
#: ../../uti.rst:69
msgid ""
"You should skip this step if it's already installed as with, for example,"
" Fujitsu Technical Computing Suite."
msgstr ""
#: ../../uti.rst:72
msgid "Install by make"
msgstr ""
#: ../../uti.rst:82
msgid "Install by rpm"
msgstr ""

1
docs/logo.rst Normal file
View File

@ -0,0 +1 @@
.. figure:: mckernel-logo.png

BIN
docs/mckernel-logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 KiB

BIN
docs/mckernel.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 140 KiB

View File

@ -0,0 +1,9 @@
.. sectnum::
:suffix: .
:depth: 3
Interfaces
==========
Interface details
=================

1069
docs/operators.rst Normal file

File diff suppressed because it is too large Load Diff

22
docs/quick.rst Normal file
View File

@ -0,0 +1,22 @@
.. sectnum::
:suffix: .
:depth: 3
Introduction
============
.. include:: summary.rst
.. include:: background.rst
.. include:: archtecture.rst
.. include:: install.rst
.. include:: boot_run_shutdown.rst
.. include:: team.rst
.. include:: license.rst
.. include:: contact.rst

30
docs/requirements.txt Normal file
View File

@ -0,0 +1,30 @@
alabaster==0.7.12
attrs==19.3.0
Babel==2.7.0
certifi==2019.11.28
chardet==3.0.4
commonmark==0.9.1
docutils==0.15
idna==2.8
imagesize==1.1.0
Jinja2==2.10.3
MarkupSafe==1.1.1
mistune==0.8.4
packaging==19.2
Pygments==2.5.2
pyparsing==2.4.5
pytz==2019.3
recommonmark==0.6.0
requests==2.22.0
roman==3.2
six==1.13.0
snowballstemmer==2.0.0
Sphinx==2.2.2
sphinx-rtd-theme==0.5.0
sphinxcontrib-applehelp==1.0.1
sphinxcontrib-devhelp==1.0.1
sphinxcontrib-htmlhelp==1.0.2
sphinxcontrib-jsmath==1.0.1
sphinxcontrib-qthelp==1.0.2
sphinxcontrib-serializinghtml==1.1.3
urllib3==1.25.7

3
docs/spec-ihk.md Normal file
View File

@ -0,0 +1,3 @@
## hi
:download:`IHK Spec <ihk.pdf>`

1
docs/spec-mckernel.md Normal file
View File

@ -0,0 +1 @@
## Hello

BIN
docs/spec/ihk.pdf Normal file

Binary file not shown.

7
docs/spec/ihk.rst Normal file
View File

@ -0,0 +1,7 @@
.. sectnum::
:suffix: .
:depth: 3
Specifications
==============
The specifications pdf is :download:`here <ihk/ihk.pdf>`

59
docs/spec/ihk/Makefile Normal file
View File

@ -0,0 +1,59 @@
TARGETBN = ihk
TEXFILES = ihk.tex glossary.tex
PDFFILES = $(shell ls figs/*.pdf)
XBBFILES = $(PDFFILES:.pdf=.xbb)
UNAME_S := $(shell uname -s)
ifeq ($(UNAME_S),Darwin)
PREVIEW = open -a Preview $(TARGETBN).pdf
endif
HLDIFFOPS ?= n
HLDIFFWG ?= n
HLDIFFJUL ?= n
HLDIFFJULTWO ?= n
HLDIFFAUG ?= n
HLDIFFSEP ?= n
HLDIFFPROC ?= n
HLDIFFPREV ?= n
OPTS='\let\HLDIFFOPS=$(HLDIFFOPS) \let\HLDIFFWG=$(HLDIFFWG) \let\HLDIFFJUL=$(HLDIFFJUL) \let\HLDIFFJULTWO=$(HLDIFFJULTWO) \let\HLDIFFAUG=$(HLDIFFAUG) \let\HLDIFFSEP=$(HLDIFFSEP) \let\HLDIFFPROC=$(HLDIFFPROC) \let\HLDIFFPREV=$(HLDIFFPREV) \input'
all: $(TARGETBN).pdf
%.xbb : %.pdf
extractbb $<
$(TARGETBN).glsdefs: $(TEXFILES) $(XBBFILES) $(PDFFILES)
platex $(OPTS) $(TARGETBN)
$(TARGETBN).aux : $(TEXFILES) $(TARGETBN).glsdefs $(XBBFILES) $(PDFFILES)
platex $(OPTS) $(TARGETBN)
# $(TARGETBN).bbl : $(TARGETBN).aux $(TARGETBN).bib $(XBBFILES) $(PDFFILES)
# bibtex $(TARGETBN)
# platex $(OPTS) $(TARGETBN)
# bibtex $(TARGETBN)
#$(TARGETBN).glo : $(TARGETBN).glsdefs $(XBBFILES) $(PDFFILES)
# platex $(OPTS) $(TARGETBN)
$(TARGETBN).gls : $(TARGETBN).glo
makeglossaries $(TARGETBN)
$(TARGETBN).toc : $(TARGETBN).gls $(XBBFILES) $(PDFFILES)
platex $(OPTS) $(TARGETBN)
$(TARGETBN).out : $(TARGETBN).toc
platex $(OPTS) $(TARGETBN)
$(TARGETBN).dvi: $(TARGETBN).aux $(TARGETBN).gls $(TARGETBN).toc $(TARGETBN).out $(XBBFILES) $(PDFFILES)
platex $(OPTS) $(TARGETBN)
$(TARGETBN).pdf: $(TARGETBN).dvi
dvipdfmx $(TARGETBN).dvi
$(PREVIEW)
clean:
rm -f $(TARGETBN).pdf $(TARGETBN).dvi $(TARGETBN).aux $(TARGETBN).bbl $(TARGETBN).glo $(TARGETBN).gls $(TARGETBN).glsdefs $(TARGETBN).toc $(XBBFILES) $(TARGETBN).out
#.SECONDARY:

21
docs/spec/ihk/README Normal file
View File

@ -0,0 +1,21 @@
WGでの説明との差異については、
  以下を指定することで該当部分を赤字で表示できます。
$ make HLDIFFWG=y
2)運用ソフト連携部抜粋からの差異については、
  以下を指定することで該当部分を赤字で表示できます。
$ make HLDIFFOPS=y
2017/6/30版と2017/7/21版との差異については、
  以下を指定することで該当部分を赤字で表示できます。
$ make HLDIFFJUL=y
2017/7/21版と2017/7/31版との差異については、
  以下を指定することで該当部分を赤字で表示できます。
$ make HLDIFFJULTWO=y

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,810 @@
%!PS-Adobe-3.0 EPSF-3.0
%%Creator: cairo 1.12.2 (http://cairographics.org)
%%CreationDate: Sat May 31 15:02:11 2014
%%Pages: 1
%%DocumentData: Clean7Bit
%%LanguageLevel: 2
%%BoundingBox: 0 0 241 111
%%EndComments
%%BeginProlog
save
50 dict begin
/q { gsave } bind def
/Q { grestore } bind def
/cm { 6 array astore concat } bind def
/w { setlinewidth } bind def
/J { setlinecap } bind def
/j { setlinejoin } bind def
/M { setmiterlimit } bind def
/d { setdash } bind def
/m { moveto } bind def
/l { lineto } bind def
/c { curveto } bind def
/h { closepath } bind def
/re { exch dup neg 3 1 roll 5 3 roll moveto 0 rlineto
0 exch rlineto 0 rlineto closepath } bind def
/S { stroke } bind def
/f { fill } bind def
/f* { eofill } bind def
/n { newpath } bind def
/W { clip } bind def
/W* { eoclip } bind def
/BT { } bind def
/ET { } bind def
/pdfmark where { pop globaldict /?pdfmark /exec load put }
{ globaldict begin /?pdfmark /pop load def /pdfmark
/cleartomark load def end } ifelse
/BDC { mark 3 1 roll /BDC pdfmark } bind def
/EMC { mark /EMC pdfmark } bind def
/cairo_store_point { /cairo_point_y exch def /cairo_point_x exch def } def
/Tj { show currentpoint cairo_store_point } bind def
/TJ {
{
dup
type /stringtype eq
{ show } { -0.001 mul 0 cairo_font_matrix dtransform rmoveto } ifelse
} forall
currentpoint cairo_store_point
} bind def
/cairo_selectfont { cairo_font_matrix aload pop pop pop 0 0 6 array astore
cairo_font exch selectfont cairo_point_x cairo_point_y moveto } bind def
/Tf { pop /cairo_font exch def /cairo_font_matrix where
{ pop cairo_selectfont } if } bind def
/Td { matrix translate cairo_font_matrix matrix concatmatrix dup
/cairo_font_matrix exch def dup 4 get exch 5 get cairo_store_point
/cairo_font where { pop cairo_selectfont } if } bind def
/Tm { 2 copy 8 2 roll 6 array astore /cairo_font_matrix exch def
cairo_store_point /cairo_font where { pop cairo_selectfont } if } bind def
/g { setgray } bind def
/rg { setrgbcolor } bind def
/d1 { setcachedevice } bind def
%%EndProlog
11 dict begin
/FontType 42 def
/FontName /DejaVuSans-Bold def
/PaintType 0 def
/FontMatrix [ 1 0 0 1 0 0 ] def
/FontBBox [ 0 0 0 0 ] def
/Encoding 256 array def
0 1 255 { Encoding exch /.notdef put } for
Encoding 32 /space put
Encoding 45 /hyphen put
Encoding 67 /C put
Encoding 75 /K put
Encoding 76 /L put
Encoding 79 /O put
Encoding 83 /S put
Encoding 100 /d put
Encoding 101 /e put
Encoding 103 /g put
Encoding 104 /h put
Encoding 105 /i put
Encoding 108 /l put
Encoding 109 /m put
Encoding 110 /n put
Encoding 111 /o put
Encoding 114 /r put
Encoding 116 /t put
Encoding 119 /w put
Encoding 121 /y put
/CharStrings 21 dict dup begin
/.notdef 0 def
/C 1 def
/o 2 def
/m 3 def
/d 4 def
/i 5 def
/t 6 def
/y 7 def
/space 8 def
/O 9 def
/S 10 def
/L 11 def
/g 12 def
/h 13 def
/hyphen 14 def
/w 15 def
/e 16 def
/K 17 def
/r 18 def
/n 19 def
/l 20 def
end readonly def
/sfnts [
<000100000009008000030010637674203eb9310800000de4000002546670676d5b026bf00000
1038000000ac676c7966e9c2ceb70000009c00000d4868656164fefb4689000010e400000036
686865610eaf07860000111c00000024686d74786c99099600001140000000546c6f63610000
910c00001194000000586d617870065a062d000011ec00000020707265707c61a2e70000120c
000007a700020066fe96046605a400030007001fbc00040126000000060126b6010805890204
002fc4d4ec310010d4ecd4ec301311211125211121660400fc73031bfce5fe96070ef8f27206
2900000000010066ffe3055c05f00019003b401a0c10090016030d101916ae0310ae099c0398
1a132d0c00062b1a10fcc432ec310010e4f4ec10fec410c511123911123930b42f1b5f1b0201
5d250e0123200011100021321617112e0123220215141233323637055c6ae67dfe8bfe4c01b4
01757de66a6bd073ceececce73d06b52373801a10165016601a13837fecb4944fef8e8e7fef8
4449000000020058ffe30527047b000b0017002d401306a11200a10cca12981809420f4c0342
153b1810fcecfcec310010e4f4ec10ee30b637133f19471303015d0122061514163332363534
2603200011100021200011100002c1777d7d77757c7c7501210145febbfedffedefeb9014703
7baba1a1ababa1a1ab0100fec8feecfeecfec80138011401140138000000000100aa000007b4
047b0025006940291b151209040700200607180fdb20d02303ca1eb31c13070014120c080d06
48140d12481f1b0d1d102610fc4bb00f5458b9001d00403859fc3cfcecfcec3911123931002f
3c3ce4f43ce4ec32113911391117393001400f1f2730275027702780279027af27075d013e01
333216151121113e013534262322060711211134262322061511211121153e0133321604ba44
bb70c1cafe980101464e666f02fe9840526770fe98016842ab6774b203a6686deee3fd560248
0d1c1a776ba89ffdda0248ba6ba99dfdd90460a45f60700000000002005cffe3050e06140010
001c0038401b17a100d00e11a105d008980eca01a3031404000d02401a420b3b1d10fcecf4ec
323231002fece4f4e4ec10e4ee30b44f1e601e02015d0111211121350e012322001110003332
1603323635342623220615141603a60168fe984ab275cffef6010acf74b3a273797973727979
03bc0258f9eca2635c01490103010301495dfcc9a8a0a0a8a8a0a0a80000000200ac00000212
0614000300070029400e06dd00b304a30205010d0400100810fc3cec3231002fecf4ec304009
500960097009800904015d1321112111211121ac0166fe9a0166fe9a0460fba00614fedc0000
0001001b000003a4059e0013006d401a0e05080f03a11101b308a1000a080b09020904000d10
120e541410fc4bb00f544bb010545b4bb011545b4bb012545b58b9000e004038593cc4fc3cc4
c412393931002fc4ecf43cec32113939300140183f003f1302000200030f100f115002500350
1560026003095d005d01112111211114163b011121222635112311331102330171fe8f3e5cb8
fecdd4b1b2b2059efec2ff00fe254e37ff00b1d401db0100013e000000010019fe4605120460
000f013640430f1d000f05040b0c0d030e1d050504031d040504021d0102050504021d03020f
000f011d00000f250e0a021005000a9f08da0300b3100f0e0b0908050302010904001010d44b
b00a544bb012545b4bb014545b58b9000000403859c41739310010e432f4ec11391239113930
4b5358071005ed071008ed071008ed071005ed071005ed17390708ed59220140a40002000210
021002200240025002650274028602800294029002a002b402b002b002b002c002c002d402d0
02e002e002180401090305050506050705081601150515061507240524062407350035013803
36063607390e390f450045014a034a044505450667026506860286058606880d880e97029605
9606990d990ea802aa03aa04a90ea90fb501bc03b804b009b00abf0bb90db90ec802cb0dcb0e
c90fd602e502395d005d1321090121010e012b01353332363f01190166012d01000166fe2947
bd9bcf705b53170a0460fd0802f8fb36bb95eb3a4b1f000000020066ffe3066605f0000b0017
0032401306ae1200ae0c9c129818092d0f37032d152b1810fcecfcec310010e4f4ec10ee3040
0b0019171310192f193f1905015d012202151412333212353402032000111000212000111000
0366b0c2c2b0b1c2c2b101680198fe68fe98fe99fe67019904d9fefcecebfefc0104ebec0104
0117fe64fe95fe96fe64019c016a016b019c000000010093ffe3052d05f0002700a7402a0025
041418110a0b1e1f041501c30415c318ae1104ae259c1198281e0a0b1f1b07001b190e140719
222810dcecc4d4ecc4111239393939310010e4f4ec10fee510e5111739111239111239304054
702901391d391e391f39204a1e4a1f4a20580a5d1d5c1e5e1f5e205a216a1c6f1d6f1e6f1f68
206f206e21740b740c740d7c1f7c207c21960b970c9b1e9a1f9c209a21a60ba60ca60daa1daa
1eaa1faa20aa21285d015d01112e012322061514161f011e0115140421222427111604333236
3534262f012e0135342421320404cb7bea688a845975a4f9d2fedbfed38efee28f8f010b7c7e
865b8895e0cf0120010e7b010405a6fec437384c503c43182132ccbcf7f1363501454c4d544e
464c1e2130d2b2dff0250000000100bc000004e105d500050017400b02c0008d040116030003
0610fcc4ec31002fe4ec30132111211121bc018102a4fbdb05d5fb4efedd0002005cfe46050e
0479001c0028004b40261c0f030015cc16d4199f121da10cd009ca0db323a112da00d003260c
000d0e40152042063b2910fcecc4f4ec323231002fe4e4ece4f4e4ec10fef5ee1112393930b4
4f2a602a02015d250e0123220035340033321617352111100021222627111e01333236350322
0615141633323635342603a64ab275cdfef4010ccd75b24a0168feabfebc69c4635eb45bb0a4
ec6f7c7873707c7cbe625c0143fafb01415c63a6fc11fef2fee32021011736359aa40306a496
9a9fa49596a4000100ac0000051206140017003540180d0400010adb12d015ca10a30e01020d
0047110d0d0f101810fcec32f4ec31002f3cecf4e4ec1139393930b46019801902015d011121
35113426272e012322061511211121113e013332160512fe980d1015482e7080fe9a016651b6
6ec2c902aafd566f0199936e1a2327ad99fdd90614fda8625dee00000001006f01bc02e302df
00030012b702ab00aa0401000410d4c4310010f4ec30132111216f0274fd8c02dffedd000000
000100480000071d0460000c0182404a061d070807051d04050808070a340b0a040504093405
05040b340203020a34090a030302021d03020c000c011d00000c250a050203060300df0b080c
0b0a09080605040302010b07000d10d44bb00a544bb00b545b4bb00c545b58b9000000403859
cc173931002f3cec32321739304b5358071005ed071008ed071008ed071005ed071005ed0710
08ed071008ed071005ed59220140e6150a200a35023505300a470a400a400a5f0a6c0a7f0ab0
02b002b005b005b00ac002c005d10ad00ae002e005ef0a171602140314041205100610071008
1209140a160b260124022b0529062a082b09240b250c2f0e3500350134023b053a063a073708
380c3f0e47024903460448054708480c5903560456085b09540b590c5f0e6602600462056006
60076008640a600b750270047305700670077008740a700b8701880684088909860b8b0c8f0e
94089b0c900ea602a903a604a905a508a909a60baa0cb601b906b608b90cc601c403ca04c906
d502d903d704da05e508e909e60bea0c5b5d005d13211b01211b012101210b012148015cbcbd
012bbcbd015cfed9fe79bdbcfe790460fcfc0304fd0402fcfba00302fcfe00020058ffe3050a
047b0014001b004340210015d80109cc08d4059f0c01d7189f12ca0c981c1b150208150d0044
020d0f3b1c10fcecf4ecc4111239310010e4f4ece410fef4ee10ee3930b42f1d3f1d02015d01
15211e0133323637110e0123200011100021200005342623220607050afcbb0d9c8c71ed7d7f
fe7ffed0feaf014b01220108013dfe9077606882100233667e7e4344feec3031013501170112
013afec293667d756e000000000100bc0000067105d5000a00814013080502030300c1090605
01040608011600030b10fcec32d4c4113931002f3cec32173930405616051606100c3c033b07
4c034b075b0358055d076f036705670660066807600c7f0378077f07700c85048606aa071727
0232023b0842024b085402590558085f08600266056d08700278057b087f088a058d08ab0813
5d015d1321110121090121011121bc0181022b01bffd310319fe1efdaefe7f05d5fddf0221fd
3dfcee024cfdb4000000000100ac000003ec047b001100374016110e0906070003c00b940eca
09b3070a060d0008101210fc4bb0135458b90008ffc03859c4ec3231002fe4f4e4fcc4113911
123930012e012322061511211121153e013332161703ec2f5d2f8a95fe9a016645b37d122a28
032f1615b1a5fdfc0460b86e65030500000100ac00000512047b0017003540180d0400010adb
12d015ca10b30e01020d0047110d0d0f101810fcec32f4ec31002f3ce4f4e4ec1139393930b4
6019801902015d01112135113426272e012322061511211121153e013332160512fe980d1015
482e7080fe9a016651b66ec2c902aafd566f019b916e1a2327ad99fdd90460a4625dee000000
000100ac0000021206140003001eb700a302010d00100410fcec31002fec3040095005600570
05800504015d13211121ac0166fe9a0614f9ec00000001660133016600bc00e90000013d00a2
00fa031f00020002006601660002000200ac015400ec00bc006201660181048501540166016d
04a400020166007f04cd000000020133006200710000002504a401bc00ba00e500660181018d
0548055a0166016d000000000002000200f605c301f0053902390058046d043d04b2048104b2
016601750466048100b00466043902d1049c047b04cf047b005801330166014c0166014c0002
00ac009a014a0123009a029a01440119014402cd00c100000166013f019a013b05cb05cb00d5
00d5015000ac00ac0077020a01c701f2012f015801b2012300f600f6011f012f0135023501ee
01e70133009800d10358050a009a008f0112009800bc00cd00e500e500f2007304000166008f
05d5022b05d500c300e100d700e50000006a01020000001d032d05d505d505f000a8006a00ec
00e1010205d506140721046602f800ec018302a602f80123010201020112011f031f005e03cd
046004c7048900ec01bc00ba01020333031f03420333035c0112011f05d5019a009a00e10666
0179046004600460047b000000ec02c302b802cd00be00dd00d50000006a025c027b029a00dd
01ae01ba01120000008501ae04600762041b009a069a045800ee009a029a00d102cd019a0150
05cb05cb008b008b063100f6040600f0034c016004a800c10000002505c101000121074a0612
0096014a078300a800000337007b0014000000c9010005c105c105c105c101000108061d0096
0427039e00ec0102027d0133009800d10358017900cd02390362009c009c009c009301b80093
00b80073000014000326b707060504030201002c2010b002254964b040515820c859212d2cb0
02254964b040515820c859212d2c20100720b00050b00d7920b8ffff5058041b0559b0051cb0
032508b0042523e120b00050b00d7920b8ffff5058041b0559b0051cb0032508e12d2c4b5058
20b80128454459212d2cb002254560442d2c4b5358b00225b0022545445921212d2c45442d2c
b00225b0022549b00525b005254960b0206368208a108a233a8a10653a2d000100000002547a
fbd542385f0f3cf5001f080000000000cc44537f00000000cc44537ff772fcae0fcd09650001
0008000000010000000000010000076dfe1d00001021f772f9320fcd00010000000000000000
000000000000001504cd006605df0066057f0058085600aa05ba005c02be00ac03d3001b0537
001902c9000006cd006605c30093051900bc05ba005c05b200ac0352006f07640048056d0058
063300bc03f200ac05b200ac02be00ac000000000000004c000000e400000170000002500000
02ec00000340000003f40000056c0000056c0000060000000728000007600000082c000008b4
000008e400000aa400000b5000000c0c00000c8400000d0c00000d48000100000015034e002b
0078000c0002001000400008000005ed02210008000441840280012600fe0003012500110003
01240121003a0005012400fa000301230016000301220121003a0005012200fe00030121003a
0003012000fa0003011f00bb0003011e00640003011d00fe0003011c00190003011b001e0003
011a00fe0003011900fe0003011800fe0003011700fe0003011600fe000301150114000e0005
011500fe00030114000e0003011300fe0003011200fe0003010f010e007d0005010f00fe0003
010e007d0003010d010c008c0005010d00fe0003010d00c00004010c010b00590005010c008c
0003010c00800004010b010a00260005010b00590003010b00400004010a00260003010900fe
0003010800fe00030107000c00030107008000040106b2972e054113010600fa0003010500fa
0003010400fe0003010300190003010200fa0003010100fa0003010040ff7d03ff3e03fefe03
fcfb2c05fcfe03fb2c03fafe03f9f84705f97d03f84703f7fa03f6fe03f5fe03f4fe03f3bb03
f2fe03f1fe03f0fe03ef1e03eefe03edec0a05edfe03ec0a03ec4004ebea0a05eb3203ea0a03
e9fa03e8911605e8fe03e7fa03e6fa03e5911605e5fe03e4fe03e3fe03e2fe03e1fe03e0fe03
dffe03defa03dddc1805dd6403dc1803dba01e05db6403dad92505dafa03d92503d8d12505d8
fa03d7d61405d71603d6d51005d61403d51003d4d30b05d42003d30b03d2d12505d2fa03d191
1605d12503d0940c05d02303cfce1405cf2603cecd1205ce1403cd1203cc911605cc1d03cb14
03cac9bb05cafe03c9c85d05c9bb03c98004c840ffc72505c85d03c84004c72503c6fe03c564
03c4901005c4fe03c31c03c2fe03c1fe03c0bf3a05c0fa03bfad1b05bf3a03bebd1a05be3203
bdbc1105bd1a03bcbb0f05bc1103bbba0c05bb0f03ba0c03b9911605b9fe03b8fe03b71503b6
1203b5fe03b4fe03b3fe03b21703b11903b01603afad1b05affa03aead1b05aefa03ad911605
ad1b03ac911605ac7d03abfe03aa2603a9fe03a8fe03a7fe03a6fe03a50a03a4fe03a3a20e05
a3fe03a20e03a24004a1a01e05a1fa03a0911605a01e039f9116059ffa039e940c059e1c039d
fe039c9bbb059cfe039b9a5d059bbb039b80049a8f25059a5d039a400499fe0398972e0598fe
03972e0396911605961e40ff0395940c05952003940c0393911605934b039291160592fe0391
9010059116039010038f25038efe038dfe038cfe038bfe038afe0389fe038887250588fe0387
250386fe0385fe0384320383960382fe0381fe038019037f0a037efe037dfe037cfe037bfa03
7afa0379fe037776a60577fe0376a60375741b0575fa03741b0373fa03727d0371fe03706f2c
056f2c036efa036dfa036cfa036bfe036afe0369fe0368630c0568320367fe0366320365640a
0565fe03640a0364400463620a05630c03620a0361601505619603600111056015035f0a035e
fe035dfe035c0111055cfe035b5a1b055bfe035a0111055a1b0359fe0358fa0357fe03560111
0540ff56fe0355fe03541e035314035251190552fa0351011105511903504f190550fa034f4e
11054f19034e11034d1e034c4b14054c15034b4a11054b14034a490e054a1103490e0348fa03
4746140547150346140345fa0344430e05440f03430e034241250542fa034101110541250340
3f0f0540fe033f3e0e053f0f033e0e033d3c0d053d16033c0d033b64033afe0339140338fe03
37130336351a0536250335341405351a0335c004340a0d0534140334800433320c0533140333
4004320c033130a60531fe033001110530a6032f0c032e13032d2c3a052dfa032c1525052c3a
032b64032a640329fe0328150327171105271e03262003251e0324231105402b241e03231103
22000d0522fa03210f032140042014031f0a031e1e031d1c19051d25031c0f13051c19031cb8
01004091041b0d031a194b051a7d0319011105194b0318fe031711031615250516fa03150111
0515250314640313110312fe031101110511fe031064030f0e10050f13030fc0040e10030e80
040d0111050dfa030c32030b0a0d050b16030b80040a0d030a400409fe0308fe0307fe030605
0a0506fe03050a0305400404fa030364030201110502fe0301000d05011103000d0301b80164
858d012b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b
2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b
2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b
2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b
2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b
2b2b2b2b2b2b2b2b2b2b2b2b002b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b
2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b
2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b
2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b
2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b
2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b
2b2b2b2b1d0000>
] def
/f-0-0 currentdict end definefont pop
11 dict begin
/FontType 42 def
/FontName /DejaVuSans def
/PaintType 0 def
/FontMatrix [ 1 0 0 1 0 0 ] def
/FontBBox [ 0 0 0 0 ] def
/Encoding 256 array def
0 1 255 { Encoding exch /.notdef put } for
Encoding 32 /space put
Encoding 45 /hyphen put
Encoding 49 /one put
Encoding 67 /C put
Encoding 69 /E put
Encoding 72 /H put
Encoding 73 /I put
Encoding 75 /K put
Encoding 76 /L put
Encoding 77 /M put
Encoding 80 /P put
Encoding 83 /S put
Encoding 87 /W put
Encoding 97 /a put
Encoding 99 /c put
Encoding 100 /d put
Encoding 101 /e put
Encoding 103 /g put
Encoding 105 /i put
Encoding 108 /l put
Encoding 109 /m put
Encoding 110 /n put
Encoding 111 /o put
Encoding 114 /r put
Encoding 115 /s put
Encoding 116 /t put
Encoding 117 /u put
Encoding 118 /v put
Encoding 120 /x put
/CharStrings 30 dict dup begin
/.notdef 0 def
/I 1 def
/H 2 def
/K 3 def
/hyphen 4 def
/M 5 def
/a 6 def
/s 7 def
/t 8 def
/e 9 def
/r 10 def
/P 11 def
/i 12 def
/o 13 def
/n 14 def
/g 15 def
/C 16 def
/S 17 def
/l 18 def
/v 19 def
/d 20 def
/E 21 def
/x 22 def
/c 23 def
/u 24 def
/one 25 def
/space 26 def
/m 27 def
/L 28 def
/W 29 def
end readonly def
/sfnts [
<0001000000090080000300106376742000691d3900001490000001fe6670676d7134766a0000
1690000000ab676c7966192e18be0000009c000013f468656164fd0346870000173c00000036
686865610cb8066f0000177400000024686d74788c78109400001798000000786c6f63610001
2bf8000018100000007c6d617870048b06710000188c00000020707265703b07f100000018ac
0000056800020066fe96046605a400030007001a400c04fb0006fb0108057f0204002fc4d4ec
310010d4ecd4ec301311211125211121660400fc73031bfce5fe96070ef8f2720629000100c9
0000019305d50003002eb700af02011c00040410fc4bb0105458b9000000403859ec31002fec
3001400d30054005500560058f059f05065d13331123c9caca05d5fa2b00000100c90000053b
05d5000b002c4014089502ad0400810a0607031c053809011c00040c10fcec32fcec3231002f
3ce432fcec30b2500d01015d133311211133112311211123c9ca02decacafd22ca05d5fd9c02
64fa2b02c7fd3900000100c90000056a05d5000a00ef40280811050605071106060503110405
04021105050442080502030300af09060501040608011c00040b10fcec32d4c4113931002f3c
ec321739304b5358071004ed071005ed071005ed071004ed5922b2080301015d409214020104
0209081602280528083702360534084702460543085502670276027705830288058f0894029b
08e702150603090509061b031907050a030a07180328052b062a073604360536063507300c41
034004450540064007400c62036004680567077705700c8b038b058e068f078f0c9a039d069d
07b603b507c503c507d703d607e803e904e805ea06f703f805f9062c5d71005d711333110121
090121011123c9ca029e0104fd1b031afef6fd33ca05d5fd890277fd48fce302cffd31000000
0001006401df027f028300030011b6009c020401000410dccc310010d4ec301321152164021b
fde50283a400000100c90000061f05d5000c00bf403403110708070211010208080702110302
090a0901110a0a09420a070203080300af080b050908030201050a061c043e0a1c00040d10fc
ecfcec11173931002f3cc4ec32111739304b5358071005ed071008ed071008ed071005ed5922
b2700e01015d405603070f080f09020a15021407130a260226072007260a200a3407350a6902
7c027b07790a80028207820a90021604010b0313011b0323012c032708280934013c03560859
0965086a097608790981018d0395019b03145d005d13210901211123110123011123c9012d01
7d017f012dc5fe7fcbfe7fc405d5fc0803f8fa2b051ffc000400fae100000002007bffe3042d
047b000a002500bc4027191f0b17090e00a91706b90e1120861fba1cb923b8118c170c001703
180d09080b1f030814452610fcecccd4ec323211393931002fc4e4f4fcf4ec10c6ee10ee1139
1139123930406e301d301e301f3020302130223f27401d401e401f402040214022501d501e50
1f50205021502250277027851d871e871f8720872185229027a027f0271e301e301f30203021
401e401f40204021501e501f50205021601e601f60206021701e701f70207021801e801f8020
8021185d015d0122061514163332363d01371123350e01232226353436332135342623220607
353e0133321602bedfac816f99b9b8b83fbc88accbfdfb0102a79760b65465be5af3f0023366
7b6273d9b4294cfd81aa6661c1a2bdc0127f8b2e2eaa2727fc000001006fffe303c7047b0027
00e7403c0d0c020e0b531f1e080902070a531f1f1e420a0b1e1f041500860189041486158918
b91104b925b8118c281e0a0b1f1b0700521b080e07081422452810fcc4ecd4ece41112393939
39310010e4f4ec10fef5ee10f5ee121739304b535807100eed111739070eed1117395922b200
2701015d406d1c0a1c0b1c0c2e092c0a2c0b2c0c3b093b0a3b0b3b0c0b200020012402280a28
0b2a132f142f152a16281e281f292029212427860a860b860c860d12000000010202060a060b
030c030d030e030f03100319031a031b031c041d09272f293f295f297f2980299029a029f029
185d005d7101152e012322061514161f011e0115140623222627351e013332363534262f012e
01353436333216038b4ea85a898962943fc4a5f7d85ac36c66c661828c65ab40ab98e0ce66b4
043fae282854544049210e2a99899cb62323be353559514b50250f2495829eac1e0000000001
0037000002f2059e0013003840190e05080f03a9001101bc08870a0b08090204000810120e46
1410fc3cc4fc3cc432393931002fecf43cc4ec3211393930b2af1501015d0111211521111416
3b01152322263511233533110177017bfe854b73bdbdd5a28787059efec28ffda0894e9a9fd2
02608f013e00000000020071ffe3047f047b0014001b00704024001501098608880515a90105
b90c01bb18b912b80c8c1c1b1502081508004b02120f451c10fcecf4ecc4111239310010e4f4
ece410ee10ee10f4ee1112393040293f1d701da01dd01df01d053f003f013f023f153f1b052c
072f082f092c0a6f006f016f026f156f1b095d71015d0115211e0133323637150e0123200011
1000333200072e0123220607047ffcb20ccdb76ac76263d06bfef4fec70129fce20107b802a5
889ab90e025e5abec73434ae2a2c0138010a01130143feddc497b4ae9e00000100ba0000034a
047b001100304014060b0700110b03870eb809bc070a06080008461210fcc4ec3231002fe4f4
ecc4d4cc11123930b450139f1302015d012e012322061511231133153e0133321617034a1f49
2c9ca7b9b93aba85132e1c03b41211cbbefdb20460ae666305050000000200c90000048d05d5
00080013003a40180195100095098112100a0802040005190d3f11001c09041410fcec32fcec
11173931002ff4ecd4ec30400b0f151f153f155f15af1505015d011133323635342623252132
041514042b0111230193fe8d9a9a8dfe3801c8fb0101fefffbfeca052ffdcf92878692a6e3db
dde2fda8000200c100000179061400030007002b400e06be04b100bc020501080400460810fc
3cec3231002fe4fcec30400b1009400950096009700905015d1333112311331523c1b8b8b8b8
0460fba00614e90000020071ffe30475047b000b0017004a401306b91200b90cb8128c180912
0f51031215451810fcecf4ec310010e4f4ec10ee3040233f197b007b067f077f087f097f0a7f
0b7b0c7f0d7f0e7f0f7f107f117b12a019f01911015d01220615141633323635342627320011
1000232200111000027394acab9593acac93f00112feeef0f1feef011103dfe7c9c9e7e8c8c7
e99cfec8feecfeedfec701390113011401380000000100ba00000464047b0013003640190309
00030e0106870e11b80cbc0a010208004e0d09080b461410fcec32f4ec31002f3ce4f4c4ec11
12173930b46015cf1502015d0111231134262322061511231133153e013332160464b87c7c95
acb9b942b375c1c602a4fd5c029e9f9ebea4fd870460ae6564ef00020071fe56045a047b000b
0028004a4023190c1d0912861316b90f03b92623b827bc09b90fbd1a1d261900080c47061212
20452910fcc4ecf4ec323231002fc4e4ece4f4c4ec10fed5ee1112393930b6602a802aa02a03
015d01342623220615141633323617100221222627351e013332363d010e0123220211101233
321617353303a2a59594a5a59495a5b8fefefa61ac51519e52b5b439b27ccefcfcce7cb239b8
023dc8dcdcc8c7dcdcebfee2fee91d1eb32c2abdbf5b6362013a01030104013a6263aa000001
0073ffe3052705f000190036401a0da10eae0a951101a100ae04951791118c1a07190d003014
101a10fcec32ec310010e4f4ecf4ec10eef6ee30b40f1b1f1b02015d01152e01232000111000
21323637150e01232000111000213216052766e782ff00fef00110010082e7666aed84feadfe
7a0186015386ed0562d55f5efec7fed8fed9fec75e5fd34848019f01670168019f4700000001
0087ffe304a205f00027007e403c0d0c020e0b021e1f1e080902070a021f1f1e420a0b1e1f04
15010015a11494189511049500942591118c281e0a0b1f1b0700221b190e2d071914222810dc
c4ecfcece4111239393939310010e4f4e4ec10eef6ee10c6111739304b535807100eed111739
07100eed1117395922b20f2901015db61f292f294f29035d01152e012322061514161f011e01
15140421222627351e013332363534262f012e01353424333216044873cc5fa5b377a67ae2d7
feddfee76aef807bec72adbc879a7be2ca0117f569da05a4c53736807663651f192bd9b6d9e0
302fd04546887e6e7c1f182dc0abc6e42600000100c100000179061400030022b70097020108
00460410fcec31002fec30400d10054005500560057005f00506015d13331123c1b8b80614f9
ec000001003d0000047f0460000600fb40270311040504021101020505040211030206000601
1100000642020300bf0506050302010504000710d44bb00a5458b90000004038594bb014544b
b015545b58b90000ffc03859c4173931002fec3239304b5358071005ed071008ed071008ed07
1005ed592201408e48026a027b027f02860280029102a402080600060109030904150015011a
031a0426002601290329042008350035013a033a043008460046014903490446054806400856
0056015903590450086600660169036904670568066008750074017b037b0475057a06850085
0189038904890586069600960197029a03980498059706a805a706b008c008df08ff083e5d00
5d133309013301233dc3015e015ec3fe5cfa0460fc5403acfba0000000020071ffe3045a0614
0010001c003840191ab9000e14b905088c0eb801970317040008024711120b451d10fcecf4ec
323231002fece4f4c4ec10c4ee30b6601e801ea01e03015d0111331123350e01232202111000
33321601141633323635342623220603a2b8b83ab17ccbff00ffcb7cb1fdc7a79292a8a89292
a703b6025ef9eca86461014401080108014461fe15cbe7e7cbcbe7e7000100c90000048b05d5
000b002e401506950402950081089504ad0a05010907031c00040c10fcec32d4c4c431002fec
ecf4ec10ee30b21f0d01015d132115211121152111211521c903b0fd1a02c7fd3902f8fc3e05
d5aafe46aafde3aa00000001003b000004790460000b01434046051106070604110304070706
0411050401020103110202010b110001000a11090a0101000a110b0a0708070911080807420a
070401040800bf05020a0704010408000208060c10d44bb00a544bb00f545b4bb010545b4bb0
11545b58b90006004038594bb0145458b90006ffc03859c4d4c411173931002f3cec32173930
4b5358071005ed071008ed071008ed071005ed071005ed071008ed071008ed071005ed592201
40980a04040a1a04150a260a3d04310a55045707580a660a76017a047607740a8d04820a9904
9f049707920a900aa601a904af04a507a30aa00a1c0a03040505090a0b1a03150515091a0b29
03260525092a0b200d3a013903370534073609390b300d4903460545094a0b400d5900560159
02590357055606590756085609590b500d6f0d78017f0d9b019407ab01a407b00dcf0ddf0dff
0d2f5d005d09022309012309013309010464fe6b01aad9febafebad901b3fe72d90129012904
60fddffdc101b8fe48024a0216fe71018f0000010071ffe303e7047b0019003f401b00860188
040e860d880ab91104b917b8118c1a07120d004814451a10fce432ec310010e4f4ec10fef4ee
10f5ee30400b0f1b101b801b901ba01b05015d01152e0123220615141633323637150e012322
0011100021321603e74e9d50b3c6c6b3509d4e4da55dfdfed6012d010655a20435ac2b2be3cd
cde32b2baa2424013e010e0112013a230000000200aeffe30458047b00130014003b401c0309
00030e0106870e118c0a01bc14b80c0d0908140b4e020800461510fcecf439ec3231002fe4e4
32f4c4ec1112173930b46f15c01502015d1311331114163332363511331123350e0123222601
aeb87c7c95adb8b843b175c1c801cf01ba02a6fd619f9fbea4027bfba0ac6663f003a8000001
00e10000045a05d5000a004040154203a00402a005810700a009081f061c03001f010b10d44b
b00f5458b9000100403859ecc4fcec31002fec32f4ecd4ec304b5358592201b40f030f04025d
3721110535253311211521fe014afe990165ca014afca4aa047348b848fad5aa0000000100ba
0000071d047b0022005a4026061209180f00061d07150c871d2003b81bbc19100700110f0808
065011080f501c18081a462310fcec32fcfcfcec11123931002f3c3ce4f43cc4ec3211121739
3040133024502470249024a024a024bf24df24ff2409015d013e013332161511231134262322
061511231134262322061511231133153e01333216042945c082afbeb972758fa6b972778da6
b9b93fb0797aab03897c76f5e2fd5c029ea19cbea4fd87029ea29bbfa3fd870460ae67627c00
0000000100c90000046a05d500050025400c0295008104011c033a00040610fcecec31002fe4
ec304009300750078003800404015d133311211521c9ca02d7fc5f05d5fad5aa000100440000
07a605d5000c017b4049051a0605090a09041a0a09031a0a0b0a021a01020b0b0a0611070807
05110405080807021103020c000c011100000c420a050203060300af0b080c0b0a0908060504
0302010b07000d10d4cc173931002f3cec32321739304b5358071005ed071008ed071008ed07
1005ed071008ed071005ed0705ed071008ed5922b2000e01015d40f206020605020a000a000a
120a2805240a200a3e023e05340a300a4c024d05420a400a59026a026b05670a600a7b027f02
7c057f05800a960295051d070009020803000406050005000601070408000807090009040a0a
0c000e1a0315041508190c100e200421052006200720082309240a250b200e200e3c023a0335
04330530083609390b3f0c300e460046014a0240044505400542064207420840084009440a4d
0c400e400e58025608590c500e66026703610462056006600760086409640a640b770076017b
027803770474057906790777087008780c7f0c7f0e860287038804890585098a0b8f0e97049f
0eaf0e5b5d005d1333090133090133012309012344cc013a0139e3013a0139cdfe89fefec5fe
c2fe05d5fb1204eefb1204eefa2b0510faf00000013500b800cb00cb00c100aa009c01a600b8
00660000007100cb00a002b20085007500b800c301cb0189022d00cb00a600f000d300aa0087
00cb03aa0400014a003300cb000000d9050200f4015400b4009c01390114013907060400044e
04b4045204b804e704cd0037047304cd04600473013303a2055605a60556053903c5021200c9
001f00b801df007300ba03e9033303bc0444040e00df03cd03aa00e503aa0404000000cb008f
00a4007b00b80014016f007f027b0252008f00c705cd009a009a006f00cb00cd019e01d300f0
00ba018300d5009803040248009e01d500c100cb00f600830354027f00000333026600d300c7
00a400cd008f009a0073040005d5010a00fe022b00a400b4009c00000062009c0000001d032d
05d505d505d505f0007f007b005400a406b80614072301d300b800cb00a601c301ec069300a0
00d3035c037103db0185042304a80448008f0139011401390360008f05d5019a061407230666
0179046004600460047b009c00000277046001aa00e904600762007b00c5007f027b000000b4
025205cd006600bc00660077061000cd013b01850389008f007b0000001d00cd074a042f009c
009c0000077d006f0000006f0335006a006f007b00ae00b2002d0396008f027b00f600830354
063705f6008f009c04e10266008f018d02f600cd03440029006604ee00730000140000960000
b707060504030201002c2010b002254964b040515820c859212d2cb002254964b040515820c8
59212d2c20100720b00050b00d7920b8ffff5058041b0559b0051cb0032508b0042523e120b0
0050b00d7920b8ffff5058041b0559b0051cb0032508e12d2c4b505820b0fd454459212d2cb0
02254560442d2c4b5358b00225b0022545445921212d2c45442d2cb00225b0022549b00525b0
05254960b0206368208a108a233a8a10653a2d00000100000002547a3baaaa525f0f3cf5001f
080000000000cc44538600000000cc445386f7d6fcae0d720955000000080000000100000000
00010000076dfe1d00000de2f7d6fa510d7200010000000000000000000000000000001e04cd
0066025c00c9060400c9053f00c902e3006406e700c904e7007b042b006f0323003704ec0071
034a00ba04d300c9023900c104e50071051200ba051400710596007305140087023900c104bc
003d05140071050e00c904bc003b04660071051200ae051700e1028b000007cb00ba047500c9
07e9004400000000000000440000008c000000e8000002100000023c00000338000004640000
05c40000064000000714000007840000080400000854000008f80000097000000a3800000ad0
00000bc800000c0400000d2800000dc000000e2000000fa40000103c000010c0000011300000
1130000011f400001238000013f400010000001e0354002b0068000c00020010009900080000
0415021600080004b8028040fffbfe03fa1403f92503f83203f79603f60e03f5fe03f4fe03f3
2503f20e03f19603f02503ef8a4105effe03ee9603ed9603ecfa03ebfa03eafe03e93a03e842
03e7fe03e63203e5e45305e59603e48a4105e45303e3e22f05e3fa03e22f03e1fe03e0fe03df
3203de1403dd9603dcfe03db1203da7d03d9bb03d8fe03d68a4105d67d03d5d44705d57d03d4
4703d3d21b05d3fe03d21b03d1fe03d0fe03cffe03cefe03cd9603cccb1e05ccfe03cb1e03ca
3203c9fe03c6851105c61c03c51603c4fe03c3fe03c2fe03c1fe03c0fe03bffe03befe03bdfe
03bcfe03bbfe03ba1103b9862505b9fe03b8b7bb05b8fe03b7b65d05b7bb03b78004b6b52505
b65d40ff03b64004b52503b4fe03b39603b2fe03b1fe03b0fe03affe03ae6403ad0e03acab25
05ac6403abaa1205ab2503aa1203a98a4105a9fa03a8fe03a7fe03a6fe03a51203a4fe03a3a2
0e05a33203a20e03a16403a08a4105a096039ffe039e9d0c059efe039d0c039c9b19059c6403
9b9a10059b19039a1003990a0398fe0397960d0597fe03960d03958a410595960394930e0594
2803930e0392fa039190bb0591fe03908f5d0590bb039080048f8e25058f5d038f40048e2503
8dfe038c8b2e058cfe038b2e038a8625058a410389880b05891403880b038786250587640386
85110586250385110384fe038382110583fe0382110381fe0380fe037ffe0340ff7e7d7d057e
fe037d7d037c64037b5415057b25037afe0379fe03780e03770c03760a0375fe0374fa0373fa
0372fa0371fa0370fe036ffe036efe036c21036bfe036a1142056a530369fe03687d03671142
0566fe0365fe0364fe0363fe0362fe03613a0360fa035e0c035dfe035bfe035afe0359580a05
59fa03580a035716190557320356fe035554150555420354150353011005531803521403514a
130551fe03500b034ffe034e4d10054efe034d10034cfe034b4a13054bfe034a4910054a1303
491d0d05491003480d0347fe0346960345960344fe0343022d0543fa0342bb03414b0340fe03
3ffe033e3d12053e14033d3c0f053d12033c3b0d053c40ff0f033b0d033afe0339fe03383714
0538fa033736100537140336350b05361003350b03341e03330d0332310b0532fe03310b0330
2f0b05300d032f0b032e2d09052e10032d09032c32032b2a25052b64032a2912052a25032912
032827250528410327250326250b05260f03250b0324fe0323fe03220f032101100521120320
64031ffa031e1d0d051e64031d0d031c1142051cfe031bfa031a42031911420519fe03186403
1716190517fe031601100516190315fe0314fe0313fe031211420512fe0311022d0511420310
7d030f64030efe030d0c16050dfe030c0110050c16030bfe030a100309fe0308022d0508fe03
0714030664030401100504fe03401503022d0503fe0302011005022d0301100300fe0301b801
64858d012b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b
2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b
2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b
2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b
2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b002b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b
2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b
2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b
2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b
2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b1d00>
] def
/f-1-0 currentdict end definefont pop
11 dict begin
/FontType 42 def
/FontName /VL-Gothic-Regular def
/PaintType 0 def
/FontMatrix [ 1 0 0 1 0 0 ] def
/FontBBox [ 0 0 0 0 ] def
/Encoding 256 array def
0 1 255 { Encoding exch /.notdef put } for
Encoding 46 /period put
/CharStrings 2 dict dup begin
/.notdef 0 def
/period 1 def
end readonly def
/sfnts [
<0001000000080080000300006376742000210279000000fc00000004676c7966d1b395150000
008c0000007068656164fc6046fe00000100000000366868656108f102ea0000013800000024
686d747803a400da0000015c000000086c6f6361000000c8000001640000000c6d617870002c
019f000001700000002070726570b98f84000000019000000007000200210000016e029a0003
0007002eb101002f3cb2070400ed32b10605dc3cb2030200ed3200b103002f3cb2050400ed32
b2070601fc3cb2010200ed32331121112521112121014dfed4010bfef5029afd662102580000
000100b90000013b00960003000033353315b982969600000021027900010000000206e93a38
693f5f0f3cf5001f03e800000000cc12fe2700000000cc12fe27fff4feae0512043300000008
00020001000000000001000003e8fef200000537fff4febe0512000100000000000000000000
00000000000201b0002101f400b90000000000000058000000700001000000020100001a006e
000a000200000000000000000004002e00010001b901ff00008d850000>
] def
/f-2-0 currentdict end definefont pop
%%Page: 1 1
%%BeginPageSetup
%%PageBoundingBox: 0 0 241 111
%%EndPageSetup
q 0 0 241 111 rectclip q
0.501961 0.701961 1 rg
0.301 100.012 79.703 -83.402 re f
0 g
0.6 w
0 J
1 j
[] 0.0 d
4 M q 1 0 0 -1 0 110.000488 cm
0.301 9.988 79.703 83.402 re S Q
BT
9.6 0 0 9.6 0.438692 92.310254 Tm
/f-0-0 1 Tf
[(Comm)-3(odit)-3(y OS)]TJ
ET
1 0.933333 0.666667 rg
92 100.008 72 -83.398 re f
0 g
0.6 w
0 j
q 1 0 0 -1 0 110.000488 cm
92 9.992 72 83.398 re S Q
1 0.933333 0.666667 rg
168 100.008 72 -83.398 re f
0 g
[ 1.8 1.8] 0 d
q 1 0 0 -1 0 110.000488 cm
168 9.992 72 83.398 re S Q
1 g
4.301 84.008 72 -63.699 re f
0 g
0.6 w
[] 0.0 d
q 1 0 0 -1 0 110.000488 cm
4.301 25.992 72 63.699 re S Q
BT
9.6 0 0 9.6 14.491817 74.431208 Tm
/f-1-0 1 Tf
[(IHK)105(-Master)]TJ
ET
1 g
8.301 68.309 64 -24 re f
0 g
q 1 0 0 -1 0 110.000488 cm
8.301 41.691 64 24 re S Q
BT
8.8 0 0 8.8 21.467989 59.510254 Tm
/f-1-0 1 Tf
[(P)44(artition)]TJ
-0.108398 -1.25 Td
[(Manager)]TJ
ET
1 g
8.602 36.008 64 -11.398 re f
0 g
q 1 0 0 -1 0 110.000488 cm
8.602 73.992 64 11.398 re S Q
BT
8.8 0 0 8.8 32.69338 28.41767 Tm
/f-1-0 1 Tf
[(IK)54(C)]TJ
9.6 0 0 9.6 92.610567 92.310254 Tm
/f-0-0 1 Tf
[(Light)-3(-weigh)-3(t )]TJ
1.74707 -1.25 Td
[(K)17(ernel)]TJ
6.169596 1.25 Td
[(Light)-3(-weigh)-3(t )]TJ
1.74707 -1.25 Td
[(K)17(ernel)]TJ
ET
1 g
96 76.008 64 -55.398 re f
0 g
q 1 0 0 -1 0 110.000488 cm
96 33.992 64 55.398 re S Q
1 g
172 76.008 64 -55.699 re f
0 g
q 1 0 0 -1 0 110.000488 cm
172 33.992 64 55.699 re S Q
BT
9.6 0 0 9.6 181.482442 66.431208 Tm
/f-1-0 1 Tf
[(IHK)105(-Slave)]TJ
-7.916667 0 Td
[(IHK)105(-Slave)]TJ
ET
1 g
100.785 64.61 55.215 -24 re f
0 g
q 1 0 0 -1 0 110.000488 cm
100.785 45.391 55.215 24 re S Q
BT
8.8 0 0 8.8 104.639083 56.310254 Tm
/f-1-0 1 Tf
[(P)44(artitioned)]TJ
0.254883 -1.25 Td
[(Ex)30(ecution)]TJ
ET
1 g
176.785 64.008 55.215 -24 re f
0 g
q 1 0 0 -1 0 110.000488 cm
176.785 45.992 55.215 24 re S Q
BT
8.8 0 0 8.8 180.639083 55.710254 Tm
/f-1-0 1 Tf
[(P)44(artitioned)]TJ
0.254883 -1.25 Td
[(Ex)30(ecution)]TJ
ET
1 g
100 36.012 56 -11.402 re f
0 g
0.6 w
q 1 0 0 -1 0 110.000488 cm
100 73.988 56 11.402 re S Q
BT
8.8 0 0 8.8 121.280098 28.310254 Tm
/f-1-0 1 Tf
[(IK)54(C)]TJ
ET
1 g
177.016 36.118 56 -11.398 re f
0 g
q 1 0 0 -1 0 110.000488 cm
177.016 73.883 56 11.398 re S Q
BT
8.8 0 0 8.8 198.29338 28.41767 Tm
/f-1-0 1 Tf
[(IK)54(C)]TJ
ET
1 g
0.301 12.309 32 -12 re f
0 g
0.6 w
q 1 0 0 -1 0 110.000488 cm
0.301 97.691 32 12 re S Q
BT
8.8 0 0 8.8 6.262911 4.417676 Tm
/f-1-0 1 Tf
[(Cor)20(e)]TJ
ET
1 g
48 12.61 32 -12 re f
0 g
q 1 0 0 -1 0 110.000488 cm
48 97.391 32 12 re S Q
BT
8.8 0 0 8.8 53.575411 4.417676 Tm
/f-1-0 1 Tf
[(Cor)20(e)]TJ
ET
1 g
92 12.61 28 -12 re f
0 g
q 1 0 0 -1 0 110.000488 cm
92 97.391 28 12 re S Q
BT
8.8 0 0 8.8 95.975411 4.417676 Tm
/f-1-0 1 Tf
[(Cor)20(e)]TJ
ET
1 g
136 12.61 28 -12 re f
0 g
q 1 0 0 -1 0 110.000488 cm
136 97.391 28 12 re S Q
BT
8.8 0 0 8.8 139.975411 4.417676 Tm
/f-1-0 1 Tf
[(Cor)20(e)]TJ
ET
1 g
168 12.61 28 -12 re f
0 g
q 1 0 0 -1 0 110.000488 cm
168 97.391 28 12 re S Q
BT
8.8 0 0 8.8 171.975411 4.417676 Tm
/f-1-0 1 Tf
[(Cor)20(e)]TJ
ET
1 g
212 12.61 28 -12 re f
0 g
q 1 0 0 -1 0 110.000488 cm
212 97.391 28 12 re S Q
BT
8.8 0 0 8.8 215.975411 4.417676 Tm
/f-1-0 1 Tf
[(Cor)20(e)]TJ
8 0 0 8 32.208614 6.710254 Tm
/f-2-0 1 Tf
(....)Tj
10.954687 0.0999023 Td
[(....)-7489(....)]TJ
ET
0.6 g
0.8 w
[ 2.4 2.4] 0 d
q 1 0 0 -1 0 110.000488 cm
96.703 9.289 m 100.465 5.289 l 232.141 5.289 l 235.902 9.289 l S Q
0 g
BT
8.8 0 0 8.8 133.029708 103.585254 Tm
/f-1-0 1 Tf
[(1 or mor)19(e L)91(WKs)]TJ
ET
Q Q
showpage
%%Trailer
end restore
%%EOF

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
docs/spec/ihk/figs/thaw.pdf Normal file

Binary file not shown.

View File

@ -0,0 +1,45 @@
% \chapter{Terms}
% 本章では用語とその定義を説明する。
% \begin{description}
\newglossaryentry{レイテンシコア}{name=レイテンシコア, description={シングルスレッド実行における遅延削減に重点を置いて開発されたプロセッサのコア。}}
%または結果が出始めるまでのコストであるスタートアップコストを小さくすることに重点を置いて開発されたプロセッサのコア。
\newglossaryentry{ノード}{name=ノード, description={一つ以上のプロセッサ、それらに接続されたRAM、それらに接続されたI/Oデバイスから構成されるコンピュータで、スーパーコンピュータはこれらの群で構成される。}}
\newglossaryentry{OSサービス}{name=OSサービス, description={プロセス管理、メモリ管理、システムコールなどアプリケーションに提供するハードウェア仮想化サービス。}}
\newglossaryentry{汎用OS}{name=汎用OS, description={Linuxに代表される、主にサーバ用途のOS。}}
\newglossaryentry{軽量カーネル、Light-Weight Kernel (LWK)}{name=軽量カーネル、Light-Weight Kernel (LWK), description={アプリケーション実行に必要な最低限の機能のみ備えるOSカーネル。}}
\newglossaryentry{Full Wieght Kernel (FWK)}{name=Full Wieght Kernel (FWK), description={汎用OSが提供する全てのOSサービスを単体で提供するOSカーネル。}}
\newglossaryentry{McKernel}{name=McKernel, description={将来のメニーコアアーキテクチャ型スーパーコンピュータシステム向けのOSとして東京大学で開発が開始され理化学研究所が開発を引き継いでいるOSカーネル。}}
\newglossaryentry{Interface for Heterogeneous Kernels (IHK)}{name=Interface for Heterogeneous Kernels (IHK), description={ード上の複数のパーティションで異種OSカーネルを同時動作させる仕組みを実現するフレームワーク。Linuxカーネルモジュールとして動作するIHKMaster、LWK用ライブラリとして動作するIHKSlaveから構成される。また、IHK使用者に対してはLinuxのカーネルモジュール、LWK用ライブラリとして提供される。}}
\newglossaryentry{IHK-Master}{name=IHK-Master, description={Linuxカーネルモジュールとして動作し、ードのブート、パーティション作成、LWK起動、LWKとの通信の機能を提供するIHKのモジュール。}}
\newglossaryentry{IHK-Slave}{name=IHK-Slave, description={LWKのモジュールとして動作し、IHKMasterとの通信の機能を提供するIHKのモジュール。}}
\newglossaryentry{Inter-Kernel Communication (IKC)}{name=Inter-Kernel Communication (IKC), description={IHK-MasterとIHKSlaveにより提供される異種カーネル間の通信。}}
\newglossaryentry{ジョブ}{name=ジョブ, description={一連のノード操作またはプロセス群の実行。}}
\newglossaryentry{ジョブスケジューラ}{name=ジョブスケジューラ, description={ユーザからのリクエストを受け、ジョブにスーパーコンピュータシステムのノードを割り当て、また割り当てられたノード群の上でジョブを実行するソフトウェアシステム。}}
\newglossaryentry{資源}{name=資源, description={アプリケーション実行の際にユーザによって一定時間占有される、物理コア、RAM、HDDなどのスーパーコンピュータの構成要素。}}
\newglossaryentry{パーティショニング・パーティション}{name=パーティショニング・パーティション, description={ードの資源を分割すること。または分割されてできた資源サブセットのこと。McKernelの実行の際には物理コアおよびメモリを分割する。}}
\newglossaryentry{mcctrl}{name=mcctrl, description={Linuxのカーネルモジュールとして動作し、McKernelと通信を行うMcKernelのモジュール。}}
\newglossaryentry{mcexec}{name=mcexec, description={Linuxのユーザプログラムとして動作し、McKernelのプロセスの管理を行うMcKernelのモジュール。}}
\newglossaryentry{buitin構成}{name=buitin構成, description={一つのプロセッサを複数のパーティションに分けて、一つのパーティションでLinuxなどのOSサービスを提供するOSカーネルを動作させ、他のパーティションでLWKを動作させる構成。}}
\newglossaryentry{attached構成}{name=attached構成, description={プロセッサでLinuxなどのOSサービスを提供するOSカーネルを動作させ、PCIバスなどのI/Oバスで接続されたデバイスでLWKを動作させる構成。}}
\newglossaryentry{McKernelインスタンス}{name=McKernelインスタンス, description={独立したパーティション内で他のOSカーネルと資源を共有せずに動作するMcKernelの実体。}}
\newglossaryentry{アプリ特化カーネル}{name=アプリ特化カーネル, description={アプリケーションの高速化ができるように最適化されたOSカーネル。例えばタイムシェアリング機能をなくすことでOSイズを低減することでアプリケーションの高速化を行ったカーネル。}}
\newglossaryentry{カーネル切り替え}{name=カーネル切り替え, description={複数のアプリ特化カーネルから一つ選択してそれを動作させること。}}
\newglossaryentry{Non-Uniform Memory Access (NUMA)}{name=Non-Uniform Memory Access (NUMA), description={メモリアクセスについて、ある一つのコアから観測される遅延やバンド幅がメモリ領域によって異なるアーキテクチャ。}}
\newglossaryentry{NUMA-node}{name=NUMA-node, description={メモリコントローラとDRAMの組み合わせなどのメモリアクセスを行うハードウェアモジュールのこと。}}
\newglossaryentry{インターコネクト}{name=インターコネクト, description={ノードとノードを結ぶ通信路のこと。}}
\newglossaryentry{procfs}{name=procfs, description={Linuxの提供する、ファイルシステムをインターフェイスとするカーネルからの情報提示及びカーネルへの指示機構。}}
\newglossaryentry{Linux API}{name=Linux API, description={アプリケーションがLinuxカーネルの機能を利用する際の規則のこと。例えば、システムコールの名前、その呼び出しの引数の数、型、返り値の型、その作用が挙げられる。}}
\newglossaryentry{モジュール}{name=モジュール, description={ソフトウェアのある程度独立して動作する部分。}}
\newglossaryentry{コモディティクラスタ}{name=コモディティクラスタ, description={広く販売されているコンピュータを複数接続して構成したクラスタ型コンピュータ。例としてはIntel社製プロセッサを搭載したPC/ATアーキテクチャのマシンをInfiniBandネットワークで複数接続して構成したコンピュータが挙げられる。}}
\newglossaryentry{形式手法}{name=形式手法, description={ステートマシンとステートを用いた論理記述を用いて特定の条件が成立する可能性の有無を証明する手法。}}
\newglossaryentry{アノテーション}{name=アノテーション, description={ソースコードに埋め込む、補助的な動作や条件などを表す記述。}}
\newglossaryentry{アサーション}{name=アサーション, description={成立すべき条件を表す記述。}}
\newglossaryentry{Open Source Software (OSS)}{name=Open Source Software (OSS), description={ソースが公開されているソフトウェア。}}
\newglossaryentry{Linuxオンリーモード}{name=Linuxオンリーモード, description={運用者またはシステムソフトウェア開発者視点でのードの状態であって、Linuxのみが動作する状態のこと。}}
\newglossaryentry{McKernelモード}{name=McKernelモード, description={運用者またはシステムソフトウェア開発者視点でのードの状態であって、LinuxとMcKernelが動作する状態のこと。}}
\newglossaryentry{Linux動作モード}{name=Linux動作モード, description={ユーザ視点でのアプリの動作形態であって、Linuxのみが動作するードを用いるという動作形態のこと。}}
\newglossaryentry{McKernel動作モード}{name=McKernel動作モード, description={ユーザ視点でのアプリの動作形態であって、LinuxとMcKernelが動作するードを用いるという動作形態のこと。}}
\newglossaryentry{ジョブ資源管理機能}{name=ジョブ資源管理機能, description={ノードにジョブを起動する、1ジョブに対して一つ選択される代表ノードで動作するプロセス。}}
\newglossaryentry{Process Launch Environment (PLE)}{name=Process Launch Environment (PLE), description={複数ノードにプロセスを起動する仕組み。}}
%各ノードでプロセス起動指示を待つデーモンと、このデーモンに指示を与える\texttt{mpiexec}などのツールからなる。
% \end{description}

BIN
docs/spec/ihk/ihk.pdf Normal file

Binary file not shown.

3482
docs/spec/ihk/ihk.tex Normal file

File diff suppressed because it is too large Load Diff

Some files were not shown because too many files have changed in this diff Show More