Skip to content

Latest commit

 

History

History
483 lines (395 loc) · 11.1 KB

File metadata and controls

483 lines (395 loc) · 11.1 KB

LATX 配置信息

LATX 提供了配置文件、环境变量、命令行参数等多种方法,控制LATX运行时的行为、优化策略和调试功能。

配置项的优先级为 命令行 > 环境变量 > ~/.config/latx-*.conf > /etc/latx-*.conf

配置文件

LATX 的配置文件分为32位版本和64位版本,分别位于 /etc/latx-i386.conf /etc/latx-x8664.conf* 和 *``~/.config/latx-i386.conf`` ~/.config/latx-x86_64.conf,均为 .ini 格式的文件。

配置文件位于代码库的 lat/configs/ 目录,安装时会自动安装到 /etc/ 目录下,运行时根据 guest 程序选择 32 位或 64 位的配置信息。

您可以通过复制系统配置文件来自定义用户配置,将配置文件复制到 ~/.config/ 目录下,并添加自己的配置信息。

LATX_XXX=X # 对所有 guest 生效的总配置


[guest_program] # 对guest_program生效的配置
LATX_YYY=Y

配置流程

LATX 的配置的逐级流程如下:

main()
├── options_init()          # 初始化默认值
├── conf_init()             # 加载配置文件
│    ├── /etc/latx.conf
│    └── ~/.config/latx.conf
├── 读取环境变量
├── 解析命令行参数
└── handle_arg_latx_*       # 写入 option_* 变量

所有默认值在 latx-options.c 中的 options_init() 中统一设置,这些默认值决定了 LATX 在无任何配置时的行为。

随后逐级加载配置信息,冲突的配置由高优先覆盖低优先级。

参数注册与入口

所有支持的参数(包括环境变量和命令行)统一定义在:

main.c → struct qemu_argument arg_table

每个参数包含:

struct qemu_argument {
    const char *argv; #命令行名称
    const char *env; #环境变量
    bool has_arg; #是否带参数
    void (*handle_opt)(const char *arg); #处理函数
    const char *example;
    const char *help; #help信息
};

参数设置方式

LATX 支持三种方式设置运行参数(以软浮点功能为例):

  1. 配置文件[guest_program]LATX_SOFTFPU = 1
  2. 环境变量export LATX_SOFTFPU=1
  3. 命令行latx-x8664 -latx-softfpu 1 guest_program

三种方式最终都会调用同一处理函数:

handle_arg_latx_softfpu

配置介绍

配置参数可分为优化类和调试类,部分配置不支持环境变量和命令行设置,仅支持初始化或编译信息设置。

AOT(预翻译)会保存恢复预翻译信息,某些配置与 AOT 冲突,开启时会自动关闭 AOT 优化(在处理函数中执行关闭逻辑)部分配置开启时会关闭 AOT 优化。

以下未特殊说明的均为置 1 时开启。

优化类配置参数

环境变量 命令行 对应代码变量 功能 AOT关系 备注
LATX_OPTIMIZE -latx-optimize tunnel-lib option_tunnel_lib 影响reg_priv_plt执行    
LATX_SMC -latx-smc 0/1/2/6 option_smc_opt 自修改代码优化    
LATX_CLOSE_PARALLEL -latx-close-parallel close_latx_parallel 关闭并行    
LATX_SOFTFPU -latx-softfpu 1/2 option_softfpu 软件浮点 冲突 关闭AOT
LATX_SOFTFPU_FAST -latx-softfpu-fast 0xffffff option_softfpu_fast 位控制的软浮点进阶优化 冲突 仅 softfpu=2 有效
LATX_PRLIMIT -latx-prlimit option_prlimit 资源限制    
LATX_ROUNDING_OPT -latx-rounding option_set_rounding_opt 浮点优化 冲突 与 softfpu 冲突
LATX_CVT_OPT -latx-cvt-opt option_cvt_opt 转换优化    
LATX_AVX_CPUID -latx-avx-cpuid option_avx_cpuid AVX 上报 CPUID   编译加参数 -a 开启
LATX_KZT -latx-kzt option_kzt 库直通    
LATX_FPUTAG -latx-fputag option_fputag 使用软件 FPU tag    
SAVE_XMM -save-xmm option_save_xmm xmm 保存控制    
LATX_JRRA -latx-jrra
option_jr_ra
option_jr_ra_stack
jr ra 优化 冲突  
LATX_IMM_REG -latx-imm-reg 1111
option_imm_reg
option_imm_rip
option_imm_complex
option_imm_precache
imm 优化   位域控制
LATX_MT -latx-mem-test option_mem_test 内存权限检测 冲突  
LATX_REAL_MAPS -latx-real-maps option_real_maps 使用真实 maps 冲突  
LATX_MONITOR_SHARED_MEM -latx-monitor-shared-mem option_monitor_shared_mem 共享内存监控    
LATX_AOT -latx-aot
option_aot
option_load_aot
option_aot_wine
预翻译   部分优化下关闭
LAT_AOT_FILE_SIZE -latx-aot-file-size file aot_file_size_optarg      
LAT_AOT_LEFT_FILE_SIZE -latx-aot-left-file-size aot_left_file_minsize_optarg 预翻译相关    
LATX_AOT_WINE_PEFILES_CACHE -latx-aot-wine-pefiles-cache latx_aot_wine_pefiles_cache      
LATX_ANONYM -latx-anonym option_anonym 隐藏虚拟化 冲突  
LATX_MMAP_START -latx-mmap_start addr mmap_next_start 设置mmap初始地址    
LATX_MMAP_FIXED -latx-mmap_fixed abi_ulong option_mmap_fixed 设置强制强制使用 MAP_FIXED 的 mmap    
LATX_UNIMP_DUMP -latx-unimp-dump option_mmap_fixed 打印不支持的 syscall    

部分无环境变量和命令行控制的优化选项可在 optimize-config.h 修改编译信息开启或关闭

对应宏 对应代码变量 功能
CONFIG_LATX_FLAG_REDUCTION option_flag_reduction flag 优化
CONFIG_LATX_INSTS_PATTERN option_instptn inst pattern 优化
CONFIG_LATX_SPLIT_TB option_split_tb TB分离
自动检测 option_enable_lasx LASX 启用
自动检测 option_fast_atomic 原子优化
LOW_MEM_MODE_0 option_shadow_file shadow 页
option_lative 随机测试用
CONFIG_LATX_AOT option_load_aot AOT 加载控制
option_aot_wine AOT wine

调试类配置参数

调试类配置需在 debug 模式的 LATX 下使用,添加编译参数 --enable-debug 或使用 debug 模式编译脚本 latxbuild/build64-dbg.sh

下表总结了 debug 模式下可开启的调试信息开关:

环境变量 命令行 对应代码变量 功能
LATX_BEGIN_TRACE -latx-runtime-trace-begin option_begin_trace_addr trace 起点
LATX_END_TRACE -latx-runtime-trace-end option_end_trace_addr trace 终点
LATX_DUMP -latx-dump 11111
option_dump
option_dump_ir1
option_dump_ir2
option_dump_host
option_dump_profile
dump 信息
LATX_SHOW_TB -latx-show-tb debug_tb_pc 打印指定 TB
LATX_TRACE_MEM -latx-trace-mem latx_trace_mem 内存写追踪
LATX_BREAK_INSN -latx-break-insn latx_break_insn 指令断点
LATX_DEBUG_LATIVE -latx-debug-lative option_debug_lative 调试模式
LATX_ENABLE_FCSR_EXC -latx-enable-fcsr-exc option_enable_fcsr_exc 浮点异常
LATX_UNLINK -latx-unlink
latx_unlink_count
latx_unlink_cpu
TB unlink 控制
LATX_TRACE -latx-trace 11
option_trace_tb
option_trace_ir1
打印 TB 信息
LATX_DISASSEMBLE_TRACE_CMP -latx-disassemble-trace-cmp a:b option_latx_disassemble_trace_cmp 对比不同反汇编器结果
环境变量 命令行 功能说明
-h or help 打印帮助信息
LAT_GDB -g <port> 启动时暂停执行,并在指定端口等待 GDB 远程连接(用于调试 guest 程序)
LAT_STACK_SIZE -s <size> 设置 guest 程序的栈大小(单位:字节)
LAT_CPU -cpu <model> 指定模拟 CPU 类型(影响指令集与特性支持)
LAT_SET_ENV -E var=value 为 guest 程序设置环境变量
LAT_UNSET_ENV -U var 从 guest 环境中移除指定变量
LAT_ARGV0 -0 <argv0> 强制指定 guest 程序的 argv[0]
LAT_UNAME -r <string> 修改 uname 返回值(用于绕过兼容性检查)
LAT_GUEST_BASE -B <addr> 设置 guest 内存基地址(用于地址空间布局控制)
LAT_RESERVED_VA -R <size> 预留一段虚拟地址空间给 guest 使用
LAT_LOG -d <items> 启用调试日志(如 cpu、exec、in_asm 等)
LAT_IMM_SKIP_PC -imm-skip imm_re优化跳过的pc
LAT_DFILTER -dfilter 基于地址范围过滤日志记录
LAT_LOG_FILENAME -D <file> 指定日志输出文件(默认 stderr)
LAT_PAGESIZE -p <size> 强制指定 host 页大小
LAT_SINGLESTEP -singlestep 启用单步执行模式(每条指令执行后返回)
LAT_STRACE -strace 跟踪 guest 的系统调用
LAT_STRACE_ERROR -strace-error 仅打印失败的系统调用
LAT_RAND_SEED -seed <value> 设置随机数种子(用于可重复测试)
LAT_TRACE -trace 启用 trace 事件系统
LAT_PLUGIN -plugin <file> 加载插件(用于扩展功能或分析)
LAT_LD_PREFIX -L <path> 指定 ELF loader 路径(用于自定义运行环境)