[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH] AIO: Reduce number of threads for 32bit hosts
From: |
Paolo Bonzini |
Subject: |
Re: [Qemu-devel] [PATCH] AIO: Reduce number of threads for 32bit hosts |
Date: |
Wed, 14 Jan 2015 12:18:29 +0100 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.3.0 |
On 14/01/2015 11:20, Kevin Wolf wrote:
>> > The same problem applies to coroutine stacks, and those cannot be
>> > throttled down as easily. But I guess if you limit the number of
>> > threads, the guest gets slowed down and doesn't create as many coroutines.
> Shouldn't we rather try and decrease the stack sizes a bit? 1 MB per
> coroutine is really a lot, and as I understand it, threads take even
> more by default.
Yup, 2 MB. Last time I proposed this, I think Markus was strongly in
the "better safe than sorry" camp. :)
But thread pool workers definitely don't need a big stack.
>> > It would be nice to have a way to measure coroutine stack usage, similar
>> > to what the kernel does.
> The information which pages are mapped should be there somewhere...
Yes, there is mincore(2). The complicated part is doing it fast, but
perhaps it doesn't need to be fast.
I tried gathering warning from GCC's -Wstack-usage=1023 option and the
block layer does not seem to have functions with huge stacks in the I/O
path.
So, assuming a maximum stack depth of 50 (already pretty generous since
there shouldn't be any recursive calls) a 100K stack should be pretty
much okay for coroutines and thread-pool threads.
That said there are some offenders in the device models. Other
QemuThreads, especially VCPU threads, had better stay with a big stack.
Paolo
1024-2048:
block/linux-aio.c ioq_submit stack
usage is 1104 bytes
block/mirror.c mirror_run stack
usage is 1280 bytes
block/qapi.c bdrv_query_image_info stack
usage is 1152 bytes
block/vmdk.c vmdk_open_vmdk4 stack
usage is 1840 bytes
block/vpc.c vpc_create stack
usage is 1152 bytes
cpus.c qmp_memsave stack
usage is 1120 bytes
cpus.c qmp_pmemsave stack
usage is 1120 bytes
disas/sparc.c build_hash_table stack
usage is 1072 bytes
fsdev/virtfs-proxy-helper.c main stack
usage is 1264 bytes
hw/arm/highbank.c calxeda_init stack
usage is 1200 bytes
hw/arm/stellaris.c stellaris_init stack
usage is 1120 bytes
hw/arm/virt.c machvirt_init stack
usage is 1264 bytes
hw/block/dataplane/virtio-blk.c handle_notify stack
usage is 1632 bytes
hw/block/virtio-blk.c virtio_blk_dma_restart_bh stack
usage is 1600 bytes
hw/block/virtio-blk.c virtio_blk_handle_output stack
usage is 1584 bytes
hw/core/qdev.c qdev_get_legacy_property stack
usage is 1104 bytes
hw/net/vmxnet_tx_pkt.c vmxnet_tx_pkt_do_sw_fragmentation stack
usage is 1168 bytes
hw/ppc/e500.c ppce500_load_device_tree stack
usage is 1072 bytes
hw/scsi/megasas.c megasas_dcmd_ld_get_list stack
usage is 1152 bytes
hw/tpm/tpm_passthrough.c tpm_passthrough_test_tpmdev stack
usage is 1216 bytes
linux-user/main.c main stack
usage is 1664 bytes
linux-user/main.c main stack
usage is 1696 bytes
linux-user/main.c main stack
usage is 1728 bytes
linux-user/main.c main stack
usage is 1744 bytes
linux-user/main.c main stack
usage is 1760 bytes
linux-user/main.c main stack
usage is 1776 bytes
linux-user/main.c main stack
usage is 1856 bytes
linux-user/main.c main stack
usage is 1872 bytes
linux-user/main.c main stack
usage is 1888 bytes
linux-user/main.c main stack
usage is 1952 bytes
linux-user/main.c main stack
usage is 1984 bytes
linux-user/main.c main stack
usage is 2032 bytes
migration/vmstate.c get_unused_buffer stack
usage is 1088 bytes
monitor.c monitor_parse_command stack
usage is 1424 bytes
monitor.c parse_cmdline stack
usage is 1136 bytes
qemu-img.c img_rebase stack
usage is 1248 bytes
qobject/json-parser.c parse_error stack
usage is 1280 bytes
qobject/qjson.c to_json stack
usage is 1136 bytes
qtest.c qtest_send stack
usage is 1280 bytes
savevm.c do_savevm stack
usage is 1424 bytes
slirp/slirp.c if_encap stack
usage is 1680 bytes
target-i386/kvm.c kvm_get_apic stack
usage is 1072 bytes
target-i386/kvm.c kvm_put_apic stack
usage is 1072 bytes
target-xtensa/xtensa-semi.c helper_simcall stack
usage is 1296 bytes
trace/control.c trace_init_events stack
usage is 1152 bytes
ui/keymaps.c parse_keyboard_layout stack
usage is 1152 bytes
ui/vnc.c addr_to_string stack
usage is 1136 bytes
ui/vnc.c protocol_client_init stack
usage is 1072 bytes
ui/vnc.c qmp_query_vnc stack
usage is 1344 bytes
ui/vnc.c vnc_basic_info_get stack
usage is 1136 bytes
ui/vnc-enc-tight.c tight_detect_smooth_image16 stack
usage is 1184 bytes
ui/vnc-enc-tight.c tight_detect_smooth_image24 stack
usage is 1152 bytes
ui/vnc-enc-tight.c tight_detect_smooth_image32 stack
usage is 1184 bytes
ui/vnc-enc-zrle-template.c zrle_encode_tile15be stack
usage is 1264 bytes
ui/vnc-enc-zrle-template.c zrle_encode_tile15le stack
usage is 1264 bytes
ui/vnc-enc-zrle-template.c zrle_encode_tile16be stack
usage is 1264 bytes
ui/vnc-enc-zrle-template.c zrle_encode_tile16le stack
usage is 1264 bytes
ui/vnc-enc-zrle-template.c zrle_encode_tile24abe stack
usage is 1200 bytes
ui/vnc-enc-zrle-template.c zrle_encode_tile24ale stack
usage is 1200 bytes
ui/vnc-enc-zrle-template.c zrle_encode_tile24bbe stack
usage is 1200 bytes
ui/vnc-enc-zrle-template.c zrle_encode_tile24ble stack
usage is 1200 bytes
ui/vnc-enc-zrle-template.c zrle_encode_tile32be stack
usage is 1184 bytes
ui/vnc-enc-zrle-template.c zrle_encode_tile32le stack
usage is 1184 bytes
ui/vnc-enc-zrle-template.c zrle_encode_tile8ne stack
usage is 1184 bytes
util/qemu-option.c opts_do_parse stack
usage is 1280 bytes
util/qemu-option.c opts_parse stack
usage is 1104 bytes
2048-4096:
block.c bdrv_swap stack
usage is 3920 bytes
coroutine-ucontext.c qemu_coroutine_new stack
usage is 2192 bytes
hw/arm/musicpal.c eth_send stack
usage is 2160 bytes
hw/dma/etraxfs_dma.c channel_out_run stack
usage is 2160 bytes
hw/net/cadence_gem.c gem_receive stack
usage is 2192 bytes
hw/net/cadence_gem.c gem_transmit stack
usage is 2176 bytes
hw/net/eepro100.c tx_command stack
usage is 2736 bytes
hw/net/mcf_fec.c mcf_fec_do_tx stack
usage is 2144 bytes
hw/ppc/spapr_pci.c spapr_populate_pci_dt stack
usage is 4032 bytes
hw/scsi/megasas.c megasas_ctrl_get_info stack
usage is 2176 bytes
libcacard/vcard_emul_nss.c vcard_emul_rsa_op stack
usage is 2224 bytes
monitor.c file_completion stack
usage is 3328 bytes
monitor.c host_net_remove_completion stack
usage is 2176 bytes
monitor.c netdev_del_completion stack
usage is 2112 bytes
monitor.c set_link_completion stack
usage is 2112 bytes
qemu-char.c tcp_chr_connect stack
usage is 2608 bytes
qemu-nbd.c main stack
usage is 2336 bytes
slirp/misc.c fork_exec stack
usage is 2176 bytes
slirp/socket.c sosendoob stack
usage is 2144 bytes
target-arm/helper.c register_cp_regs_for_features stack
usage is 3232 bytes
target-arm/helper.c register_cp_regs_for_features stack
usage is 3360 bytes
target-i386/kvm.c kvm_get_msrs stack
usage is 2448 bytes
target-i386/kvm.c kvm_put_msrs stack
usage is 2448 bytes
ui/sdl.c sdl_update_caption stack
usage is 2112 bytes
util/qemu-config.c qemu_config_parse stack
usage is 2416 bytes
4096-8192:
block.c bdrv_commit stack
usage is 4208 bytes
block/raw-posix.c hdev_open stack
usage is 4320 bytes
block/vmdk.c vmdk_parse_extents stack
usage is 4848 bytes
block/vvfat.c check_directory_consistency stack
usage is 5152 bytes
gdbstub.c gdb_monitor_output stack
usage is 4144 bytes
hw/arm/boot.c set_kernel_args stack
usage is 4176 bytes
hw/audio/ac97.c read_audio stack
usage is 4208 bytes
hw/audio/ac97.c write_audio stack
usage is 4208 bytes
hw/audio/es1370.c es1370_transfer_audio stack
usage is 4240 bytes
hw/audio/gus.c GUS_read_DMA stack
usage is 4192 bytes
hw/audio/marvell_88w8618.c mv88w8618_audio_callback stack
usage is 4160 bytes
hw/audio/milkymist-ac97.c ac97_in_cb stack
usage is 4176 bytes
hw/audio/milkymist-ac97.c ac97_out_cb stack
usage is 4176 bytes
hw/audio/sb16.c write_audio stack
usage is 4192 bytes
hw/char/sclpconsole-lm.c process_mdb stack
usage is 4144 bytes
hw/s390x/sclp.c sclp_service_call stack
usage is 4336 bytes
hw/scsi/lsi53c895a.c lsi_memcpy stack
usage is 4192 bytes
hw/scsi/megasas.c megasas_dcmd_cfg_read stack
usage is 4224 bytes
hw/scsi/megasas.c megasas_dcmd_pd_get_list stack
usage is 5808 bytes
hw/tpm/tpm_passthrough.c tpm_passthrough_open_sysfs_cancel stack
usage is 4144 bytes
linux-user/elfload.c vma_dump_size stack
usage is 4128 bytes
linux-user/syscall.c do_openat stack
usage is 4176 bytes
net/tap.c net_bridge_run_helper stack
usage is 4720 bytes
qemu-bridge-helper.c parse_acl_file stack
usage is 4176 bytes
qemu-char.c fd_chr_read stack
usage is 4160 bytes
qemu-char.c pty_chr_read stack
usage is 4160 bytes
qemu-char.c qemu_chr_fe_printf stack
usage is 4352 bytes
qemu-char.c qemu_chr_open_pty stack
usage is 4176 bytes
qemu-char.c tcp_chr_read stack
usage is 4192 bytes
qga/commands-posix.c get_pci_driver stack
usage is 4144 bytes
qga/main.c channel_event_cb stack
usage is 4160 bytes
target-i386/kvm.c kvm_arch_init_vcpu stack
usage is 4144 bytes
target-s390x/ioinst.c ioinst_handle_chsc_scsc stack
usage is 4112 bytes
target-s390x/misc_helper.c helper_stsi stack
usage is 4128 bytes
ui/vnc-auth-sasl.c vnc_client_read_sasl stack
usage is 4160 bytes
util/oslib-posix.c qemu_init_exec_dir stack
usage is 4144 bytes
util/path.c init_paths stack
usage is 4144 bytes
8192-16384:
block/vmdk.c vmdk_parent_open stack
usage is 10288 bytes
block/vmdk.c vmdk_read_cid stack
usage is 10304 bytes
gdbstub.c gdb_handle_packet stack
usage is 8336 bytes
hw/acpi/core.c acpi_table_add stack
usage is 8336 bytes
hw/audio/cs4231a.c cs_write_audio stack
usage is 12384 bytes
hw/core/qdev-properties-system.c set_netdev stack
usage is 8288 bytes
hw/i386/kvm/pci-assign.c assign_failed_examine stack
usage is 12480 bytes
hw/i386/pc.c load_linux stack
usage is 8336 bytes
hw/net/rtl8139.c rtl8139_transmit_one stack
usage is 8256 bytes
hw/net/xgmac.c xgmac_enet_send stack
usage is 8288 bytes
hw/s390x/s390-pci-inst.c clp_service_call stack
usage is 8384 bytes
hw/sparc64/sun4u.c sun4u_NVRAM_set_params stack
usage is 8272 bytes
hw/sparc/sun4m.c nvram_init stack
usage is 8272 bytes
hw/vfio/pci.c vfio_initfn stack
usage is 8592 bytes
linux-user/elfload.c elf_core_dump stack
usage is 12640 bytes
linux-user/elfload.c elf_core_dump stack
usage is 8544 bytes
linux-user/elfload.c vma_dump_size stack
usage is 8224 bytes
net/net.c qemu_del_net_client stack
usage is 8256 bytes
net/net.c qmp_set_link stack
usage is 8256 bytes
16384+:
block/vmdk.c vmdk_create stack
usage is 29376 bytes
block/vmdk.c vmdk_write_cid stack
usage is 20544 bytes
hw/arm/nseries.c n8x0_init stack
usage is 65728 bytes
hw/char/virtio-serial-bus.c control_out stack
usage is 49312 bytes
hw/char/virtio-serial-bus.c discard_vq_data stack
usage is 49216 bytes
hw/char/virtio-serial-bus.c send_control_msg stack
usage is 49232 bytes
hw/char/virtio-serial-bus.c write_to_port stack
usage is 49264 bytes
hw/display/vmware_vga.c vmsvga_fifo_run stack
usage is 20688 bytes
hw/dma/xilinx_axidma.c stream_process_mem2s stack
usage is 16480 bytes
hw/net/opencores_eth.c open_eth_start_xmit stack
usage is 65600 bytes
hw/net/virtio-net.c virtio_net_flush_tx stack
usage is 65664 bytes
hw/net/virtio-net.c virtio_net_handle_ctrl stack
usage is 49424 bytes
hw/net/virtio-net.c virtio_net_handle_ctrl stack
usage is 49440 bytes
hw/net/virtio-net.c virtio_net_receive stack
usage is 65728 bytes
hw/virtio/virtio-balloon.c virtio_balloon_handle_output stack
usage is 49376 bytes
hw/virtio/virtio-rng.c chr_read stack
usage is 49264 bytes
net/net.c nc_sendv_compat stack
usage is 69680 bytes
net/socket.c net_socket_send stack
usage is 69712 bytes
net/tap.c net_init_tap stack
usage is 16704 bytes
ui/vnc-jobs.c vnc_worker_thread_loop stack
usage is 75632 bytes
"might be unbounded":
backends/baum.c baum_write_packet stack
usage might be unbounded
backends/baum.c baum_write stack
usage might be unbounded
backends/rng-random.c entropy_available stack
usage might be unbounded
block/qapi.c dump_qobject stack
usage might be unbounded
block/vpc.c vpc_co_write stack
usage might be unbounded
exec.c mem_commit stack
usage might be unbounded
hw/block/nvme.c nvme_map_prp stack
usage might be unbounded
hw/bt/l2cap.c l2cap_cframe_in stack
usage might be unbounded
hw/i386/multiboot.c load_multiboot stack
usage might be unbounded
hw/intc/xics.c ics_reset stack
usage might be unbounded
hw/net/fsl_etsec/rings.c etsec_walk_rx_ring stack
usage might be unbounded
hw/net/spapr_llan.c h_send_logical_lan stack
usage might be unbounded
hw/ppc/spapr.c spapr_fixup_cpu_dt stack
usage might be unbounded
hw/ppc/spapr_pci.c spapr_phb_realize stack
usage might be unbounded
hw/ssi/xilinx_spips.c xilinx_spips_flush_txfifo stack
usage might be unbounded
hw/usb/dev-hid.c usb_hid_handle_data stack
usage might be unbounded
hw/usb/dev-mtp.c usb_mtp_add_str stack
usage might be unbounded
hw/usb/dev-mtp.c usb_mtp_handle_data stack
usage might be unbounded
hw/usb/dev-wacom.c usb_wacom_handle_data stack
usage might be unbounded
hw/usb/hcd-xhci.c xhci_process_commands stack
usage might be unbounded
hw/usb/redirect.c usbredir_handle_data stack
usage might be unbounded
linux-user/elfload.c load_elf_image stack
usage might be unbounded
linux-user/elfload.c load_symbols stack
usage might be unbounded
linux-user/syscall.c do_accept4 stack
usage might be unbounded
linux-user/syscall.c do_bind stack
usage might be unbounded
linux-user/syscall.c do_connect stack
usage might be unbounded
linux-user/syscall.c do_getpeername stack
usage might be unbounded
linux-user/syscall.c do_getsockname stack
usage might be unbounded
linux-user/syscall.c do_recvfrom stack
usage might be unbounded
linux-user/syscall.c do_sendrecvmsg_locked stack
usage might be unbounded
linux-user/syscall.c do_sendto stack
usage might be unbounded
linux-user/syscall.c do_setsockopt stack
usage might be unbounded
linux-user/syscall.c do_syscall stack
usage might be unbounded
net/tap.c tap_receive_iov stack
usage might be unbounded
qemu-char.c tcp_chr_write stack
usage might be unbounded
target-arm/helper.c helper_dc_zva stack
usage might be unbounded
ui/vnc-enc-hextile-template.h send_hextile_tile_32 stack
usage might be unbounded
ui/vnc-enc-hextile-template.h send_hextile_tile_generic_32 stack
usage might be unbounded
ui/vnc-enc-tight.c send_palette_rect stack
usage might be unbounded
util/iov.c qemu_iovec_clone stack
usage might be unbounded
- [Qemu-devel] [PATCH] AIO: Reduce number of threads for 32bit hosts, Alexander Graf, 2015/01/13
- Re: [Qemu-devel] [PATCH] AIO: Reduce number of threads for 32bit hosts, Paolo Bonzini, 2015/01/14
- Re: [Qemu-devel] [PATCH] AIO: Reduce number of threads for 32bit hosts, Kevin Wolf, 2015/01/14
- Re: [Qemu-devel] [PATCH] AIO: Reduce number of threads for 32bit hosts,
Paolo Bonzini <=
- Re: [Qemu-devel] [PATCH] AIO: Reduce number of threads for 32bit hosts, Kevin Wolf, 2015/01/14
- Re: [Qemu-devel] [PATCH] AIO: Reduce number of threads for 32bit hosts, Paolo Bonzini, 2015/01/14
- Re: [Qemu-devel] [PATCH] AIO: Reduce number of threads for 32bit hosts, Kevin Wolf, 2015/01/14
- Re: [Qemu-devel] [PATCH] AIO: Reduce number of threads for 32bit hosts, Alexander Graf, 2015/01/14
- Re: [Qemu-devel] [PATCH] AIO: Reduce number of threads for 32bit hosts, Kevin Wolf, 2015/01/15
- Re: [Qemu-devel] [PATCH] AIO: Reduce number of threads for 32bit hosts, Markus Armbruster, 2015/01/14