mirror of
https://github.com/projectacrn/acrn-hypervisor.git
synced 2025-06-18 11:47:30 +00:00
dm: use hugetlb by default
use hugetlb to set vm memory by default. Signed-off-by: Li, Fei1 <fei1.li@intel.com>
This commit is contained in:
parent
136d5c30fb
commit
652e37e908
@ -72,7 +72,6 @@ char *guest_uuid_str;
|
|||||||
char *vsbl_file_name;
|
char *vsbl_file_name;
|
||||||
uint8_t trusty_enabled;
|
uint8_t trusty_enabled;
|
||||||
bool stdio_in_use;
|
bool stdio_in_use;
|
||||||
bool hugetlb;
|
|
||||||
|
|
||||||
static int guest_vmexit_on_hlt, guest_vmexit_on_pause;
|
static int guest_vmexit_on_hlt, guest_vmexit_on_pause;
|
||||||
static int virtio_msix = 1;
|
static int virtio_msix = 1;
|
||||||
@ -145,7 +144,6 @@ usage(int code)
|
|||||||
" -U: uuid\n"
|
" -U: uuid\n"
|
||||||
" -w: ignore unimplemented MSRs\n"
|
" -w: ignore unimplemented MSRs\n"
|
||||||
" -W: force virtio to use single-vector MSI\n"
|
" -W: force virtio to use single-vector MSI\n"
|
||||||
" -T: use hugetlb for memory allocation\n"
|
|
||||||
" -x: local apic is in x2APIC mode\n"
|
" -x: local apic is in x2APIC mode\n"
|
||||||
" -Y: disable MPtable generation\n"
|
" -Y: disable MPtable generation\n"
|
||||||
" -k: kernel image path\n"
|
" -k: kernel image path\n"
|
||||||
@ -649,14 +647,13 @@ main(int argc, char *argv[])
|
|||||||
mptgen = 1;
|
mptgen = 1;
|
||||||
memflags = 0;
|
memflags = 0;
|
||||||
quit_vm_loop = 0;
|
quit_vm_loop = 0;
|
||||||
hugetlb = 0;
|
|
||||||
|
|
||||||
if (signal(SIGHUP, sig_handler_term) == SIG_ERR)
|
if (signal(SIGHUP, sig_handler_term) == SIG_ERR)
|
||||||
fprintf(stderr, "cannot register handler for SIGHUP\n");
|
fprintf(stderr, "cannot register handler for SIGHUP\n");
|
||||||
if (signal(SIGINT, sig_handler_term) == SIG_ERR)
|
if (signal(SIGINT, sig_handler_term) == SIG_ERR)
|
||||||
fprintf(stderr, "cannot register handler for SIGINT\n");
|
fprintf(stderr, "cannot register handler for SIGINT\n");
|
||||||
|
|
||||||
optstr = "abehuwxACHIPSTWYvk:r:B:p:g:c:s:m:l:U:G:i:";
|
optstr = "abehuwxACHIPSWYvk:r:B:p:g:c:s:m:l:U:G:i:";
|
||||||
while ((c = getopt_long(argc, argv, optstr, long_options,
|
while ((c = getopt_long(argc, argv, optstr, long_options,
|
||||||
&option_idx)) != -1) {
|
&option_idx)) != -1) {
|
||||||
switch (c) {
|
switch (c) {
|
||||||
@ -740,10 +737,6 @@ main(int argc, char *argv[])
|
|||||||
case 'W':
|
case 'W':
|
||||||
virtio_msix = 0;
|
virtio_msix = 0;
|
||||||
break;
|
break;
|
||||||
case 'T':
|
|
||||||
if (check_hugetlb_support())
|
|
||||||
hugetlb = 1;
|
|
||||||
break;
|
|
||||||
case 'x':
|
case 'x':
|
||||||
x2apic_mode = 1;
|
x2apic_mode = 1;
|
||||||
break;
|
break;
|
||||||
@ -807,6 +800,11 @@ main(int argc, char *argv[])
|
|||||||
if (argc != 1)
|
if (argc != 1)
|
||||||
usage(1);
|
usage(1);
|
||||||
|
|
||||||
|
if (!check_hugetlb_support()) {
|
||||||
|
fprintf(stderr, "check_hugetlb_support failed\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
vmname = argv[0];
|
vmname = argv[0];
|
||||||
|
|
||||||
for (;;) {
|
for (;;) {
|
||||||
|
@ -385,8 +385,7 @@ vm_setup_memory(struct vmctx *ctx, size_t memsize, enum vm_mmap_style vms)
|
|||||||
objsize = ctx->lowmem;
|
objsize = ctx->lowmem;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (hugetlb)
|
return hugetlb_setup_memory(ctx);
|
||||||
return hugetlb_setup_memory(ctx);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Stake out a contiguous region covering the guest physical memory
|
* Stake out a contiguous region covering the guest physical memory
|
||||||
@ -431,10 +430,8 @@ vm_setup_memory(struct vmctx *ctx, size_t memsize, enum vm_mmap_style vms)
|
|||||||
void
|
void
|
||||||
vm_unsetup_memory(struct vmctx *ctx)
|
vm_unsetup_memory(struct vmctx *ctx)
|
||||||
{
|
{
|
||||||
if (hugetlb) {
|
hugetlb_unsetup_memory(ctx);
|
||||||
hugetlb_unsetup_memory(ctx);
|
return;
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ctx->lowmem > 0)
|
if (ctx->lowmem > 0)
|
||||||
munmap(ctx->mmap_lowmem, ctx->lowmem);
|
munmap(ctx->mmap_lowmem, ctx->lowmem);
|
||||||
|
@ -159,6 +159,4 @@ int vm_reset_ptdev_intx_info(struct vmctx *ctx, int virt_pin, bool pic_pin);
|
|||||||
int vm_create_vcpu(struct vmctx *ctx, uint16_t vcpu_id);
|
int vm_create_vcpu(struct vmctx *ctx, uint16_t vcpu_id);
|
||||||
|
|
||||||
int vm_get_cpu_state(struct vmctx *ctx, void *state_buf);
|
int vm_get_cpu_state(struct vmctx *ctx, void *state_buf);
|
||||||
|
|
||||||
extern bool hugetlb;
|
|
||||||
#endif /* _VMMAPI_H_ */
|
#endif /* _VMMAPI_H_ */
|
||||||
|
@ -107,7 +107,7 @@ else
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
acrn-dm -T -A -m $mem_size -c $2$boot_GVT_option"$GVT_args" -s 0:0,hostbridge -s 1:0,lpc -l com1,stdio \
|
acrn-dm -A -m $mem_size -c $2$boot_GVT_option"$GVT_args" -s 0:0,hostbridge -s 1:0,lpc -l com1,stdio \
|
||||||
-s 5,virtio-console,@pty:pty_port \
|
-s 5,virtio-console,@pty:pty_port \
|
||||||
-s 6,virtio-hyper_dmabuf \
|
-s 6,virtio-hyper_dmabuf \
|
||||||
-s 8,wdt-i6300esb \
|
-s 8,wdt-i6300esb \
|
||||||
@ -274,7 +274,7 @@ else
|
|||||||
GVT_args=''
|
GVT_args=''
|
||||||
fi
|
fi
|
||||||
|
|
||||||
acrn-dm -T -A -m $mem_size -c $2$boot_GVT_option"$GVT_args" -s 0:0,hostbridge -s 1:0,lpc -l com1,stdio \
|
acrn-dm -A -m $mem_size -c $2$boot_GVT_option"$GVT_args" -s 0:0,hostbridge -s 1:0,lpc -l com1,stdio \
|
||||||
-l com1,stdio \
|
-l com1,stdio \
|
||||||
-s 9,virtio-net,$tap \
|
-s 9,virtio-net,$tap \
|
||||||
-s 3,virtio-blk$boot_dev_flag,/data/$5/$5.img \
|
-s 3,virtio-blk$boot_dev_flag,/data/$5/$5.img \
|
||||||
|
@ -19,7 +19,7 @@ mem_size=1000M
|
|||||||
# make sure there is enough 2M hugepages in the pool
|
# make sure there is enough 2M hugepages in the pool
|
||||||
echo 1024 > /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages
|
echo 1024 > /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages
|
||||||
|
|
||||||
acrn-dm -T -A -m $mem_size -c $2 -s 0:0,hostbridge -s 1:0,lpc -l com1,stdio \
|
acrn-dm -A -m $mem_size -c $2 -s 0:0,hostbridge -s 1:0,lpc -l com1,stdio \
|
||||||
-s 2,pci-gvt -G "$3" \
|
-s 2,pci-gvt -G "$3" \
|
||||||
-s 5,virtio-console,@pty:pty_port \
|
-s 5,virtio-console,@pty:pty_port \
|
||||||
-s 6,virtio-hyper_dmabuf \
|
-s 6,virtio-hyper_dmabuf \
|
||||||
|
@ -330,38 +330,26 @@ Set up Reference UOS
|
|||||||
Device Manager memory allocation mechanism
|
Device Manager memory allocation mechanism
|
||||||
==========================================
|
==========================================
|
||||||
|
|
||||||
There are two Device Manager memory allocation mechanisms available:
|
The ACRN Device Manager (DM) virtual memory allocation uses the HugeTLB mechanism.
|
||||||
|
(You can read more about `HugeTLB in the linux kernel <https://linuxgazette.net/155/krishnakumar.html>`_
|
||||||
|
for more information about how this mechanism works.)
|
||||||
|
|
||||||
- Contiguous Memory Allocator (CMA), and
|
For hugeTLB to work, you'll need to reserve huge pages:
|
||||||
- Huge Page Tables (HugeTLB). HugeTLB is the default.
|
|
||||||
|
|
||||||
To choose CMA, do the following:
|
- For a (large) 1GB huge page reservation, add ``hugepagesz=1G hugepages=reserved_pg_num``
|
||||||
|
(for example, ``hugepagesz=1G hugepages=4``) to the SOS cmdline in
|
||||||
|
``acrn.conf`` (for EFI)
|
||||||
|
|
||||||
1) Add ``cma=reserved_mem_size@recommend_memory_offset-0``, (for example
|
- For a (smaller) 2MB huge page reservation, after the SOS starts up, run the
|
||||||
``cma=2560M@0x100000000-0``) to the SOS cmdline in ``acrn.conf``
|
command::
|
||||||
|
|
||||||
2) Start ``acrn-dm`` *without* the ``-T`` option
|
echo reserved_pg_num > /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages
|
||||||
|
|
||||||
To support HugeTLB, do the following:
|
.. note::
|
||||||
|
You can use 2M reserving method to do reservation for 1G page size, but it
|
||||||
1) Do huge page reservation
|
may fail. For an EFI platform, you may skip 1G page reservation
|
||||||
|
by using a 2M page, but make sure your huge page reservation size is
|
||||||
- For 1G huge page reservation, add ``hugepagesz=1G hugepages=reserved_pg_num``
|
large enough for your usage.
|
||||||
(for example, ``hugepagesz=1G hugepages=4``) to the SOS cmdline in
|
|
||||||
``acrn.conf`` (for EFI)
|
|
||||||
|
|
||||||
- For 2M huge page reservation, after the SOS starts up, run the
|
|
||||||
command::
|
|
||||||
|
|
||||||
echo reserved_pg_num > /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages
|
|
||||||
|
|
||||||
.. note::
|
|
||||||
You can use 2M reserving method to do reservation for 1G page size, but it
|
|
||||||
may fail. For an EFI platform, you may skip 1G page reservation
|
|
||||||
by using a 2M page, but make sure your huge page reservation size is
|
|
||||||
large enough for your usage.
|
|
||||||
|
|
||||||
2) Start ``acrn-dm`` *with* the ``-T`` option.
|
|
||||||
|
|
||||||
Build ACRN from Source
|
Build ACRN from Source
|
||||||
**********************
|
**********************
|
||||||
|
Loading…
Reference in New Issue
Block a user