Changes between Version 59 and Version 60 of replication_distribution
- Timestamp:
- Dec 20, 2019, 12:24:41 AM (5 years ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
replication_distribution
v59 v60 100 100 Almost-mkh defines 3 types of these kernel segments described below. To avoid contention and improve locality,these four segments are replicated or distributed in each cluster. 101 101 102 === 3.1 .KCODE ===102 === 3.1 KCODE === 103 103 104 104 The '''KCODE''' segment contains the kernel code defined in the ''kernel.elf'' file. To avoid contention and improve locality, almos-mkh '''replicates''' this code in all clusters. This code has already been copied in all clusters by the bootloader. In each cluster K, and for each process P in cluster K (including the kernel process_zero), almos-mkh registers the KCODE vseg in all VSL(P,K), and map it to the local copy in all the GPT(P,K). This vseg uses only big pages, and there is no on-demand paging for this type of vseg. With this local mapping all access to the virtual instruction addresses will be simply translated by the MMU to the local physical address. … … 107 107 This is not a problem because A KCODE vseg is a ''private'' vseg, that is accessed only by local threads. 108 108 109 === 3.2 .KDATA ===109 === 3.2 KDATA === 110 110 111 111 The '''KDATA''' segment contains the kernel global data, statically allocated at compilation time, and defined in the ''kernel.elf'' file. To avoid contention and improve locality, almos-mkh defines a KDATA vseg in each cluster. The corresponding data have already been copied by the boot-loader in all clusters. … … 118 118 To allows any thread running in any cluster to access the N KDATA vsegs, almos-mkh can register these N vsegs in all VSL(P,K), and map them in all GPT(P,K). 119 119 120 === 3.3 .KHEAP ===120 === 3.3 KHEAP === 121 121 122 122 The '''KHEAP''' segment contains, in each cluster K, the kernel structures dynamically allocated by the kernel in cluster K to satisfy the users requests (such as the ''process'' descriptors, the ''thread'' descriptors, the ''vseg'' descriptors, the ''file'' descriptors, etc.). To avoid contention and improve locality, almos-mkh defines one KHEAP segment in each cluster implementing a ''physically distributed kernel heap''. In each cluster, this KHEAP segment contains actually all physical memory that is not already allocated to store the KCODE and KDATA segments. … … 128 128 === 3.4 KSTACK === 129 129 130 Any thread entering the kernel to execute a system call needs a kernel stack, that must be in the protected memory.131 This requires as many kernel stacks as the total number of threads (user threads + dedicated kernel threads) in the system.132 For each thread, almos-mkh implements the kernel stack in the thread descriptor, that is dynamically allocated in the KHEAP segment, when the thread is created.133 Therefore, there is no specific KSTACK segment for the kernel stacks.130 Any thread entering the kernel to execute a system call needs a kernel stack, that must be in the kernel land. 131 This requires to implement in kernel land as many kernel stacks as the total number of threads (user threads + dedicated kernel threads) in the system. 132 For each thread, almos-mkh implements the kernel stack in the 16 Kbytes thread descriptor, that is dynamically allocated in the KHEAP segment, when the thread is created. 133 Therefore, there is no specific KSTACK segment type for the kernel stacks. 134 134 135 135 === 3.5 Local & Remote accesses === 136 136 137 Almos-mkh defines two different policies to access the shareddata stored in the N KDATA and KHEAP segments :137 Almos-mkh defines two different policies to access the data stored in the N KDATA and KHEAP segments : 138 138 * The local accesses to the local kernel structures can use normal pointers that will be translated by the MMU to local physical adresses. 139 * The remote access to remotely allocated kernel structures '''must''' use the ''hal_remote_load( cxy , ptr )'' and ''hal_remote_store( cxy , ptr ) functions, where ''ptr'' is a normal pointer on a variable stored in the KDATA or KHEAP vseg, and ''cxy'' is the remote cluster identifier. Notice that a given kernel global variable is now identified by and extended pointer ''XPTR( cxy , ptr )''. With these remote access primitives, any kernel instance in cluster Kcan access any global variable in any cluster.139 * The remote access to remotely allocated kernel structures '''must''' use the ''hal_remote_load( cxy , ptr )'' and ''hal_remote_store( cxy , ptr ) functions, where ''ptr'' is a normal pointer to the KDATA or KHEAP vseg, and ''cxy'' is the remote cluster identifier. Notice that a kernel global (shared) variable is identified by and extended pointer ''XPTR( cxy , ptr )''. With these remote access primitives, any kernel instance in any cluster can access any global variable in any cluster. 140 140 141 141 In other words, almost-mkh clearly distinguish the ''local accesses'', that can use standard pointers, from the ''remote access'' that must use extended pointers.