mirror of
https://github.com/python/cpython.git
synced 2025-12-07 22:00:16 +00:00
This PR implements frame caching in the RemoteUnwinder class to significantly reduce memory reads when profiling remote processes with deep call stacks. When cache_frames=True, the unwinder stores the frame chain from each sample and reuses unchanged portions in subsequent samples. Since most profiling samples capture similar call stacks (especially the parent frames), this optimization avoids repeatedly reading the same frame data from the target process. The implementation adds a last_profiled_frame field to the thread state that tracks where the previous sample stopped. On the next sample, if the current frame chain reaches this marker, the cached frames from that point onward are reused instead of being re-read from remote memory. The sampling profiler now enables frame caching by default.
128 lines
5.1 KiB
XML
128 lines
5.1 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
|
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
|
<ItemGroup Label="ProjectConfigurations">
|
|
<ProjectConfiguration Include="Debug|ARM">
|
|
<Configuration>Debug</Configuration>
|
|
<Platform>ARM</Platform>
|
|
</ProjectConfiguration>
|
|
<ProjectConfiguration Include="Debug|ARM64">
|
|
<Configuration>Debug</Configuration>
|
|
<Platform>ARM64</Platform>
|
|
</ProjectConfiguration>
|
|
<ProjectConfiguration Include="Debug|Win32">
|
|
<Configuration>Debug</Configuration>
|
|
<Platform>Win32</Platform>
|
|
</ProjectConfiguration>
|
|
<ProjectConfiguration Include="Debug|x64">
|
|
<Configuration>Debug</Configuration>
|
|
<Platform>x64</Platform>
|
|
</ProjectConfiguration>
|
|
<ProjectConfiguration Include="PGInstrument|ARM">
|
|
<Configuration>PGInstrument</Configuration>
|
|
<Platform>ARM</Platform>
|
|
</ProjectConfiguration>
|
|
<ProjectConfiguration Include="PGInstrument|ARM64">
|
|
<Configuration>PGInstrument</Configuration>
|
|
<Platform>ARM64</Platform>
|
|
</ProjectConfiguration>
|
|
<ProjectConfiguration Include="PGInstrument|Win32">
|
|
<Configuration>PGInstrument</Configuration>
|
|
<Platform>Win32</Platform>
|
|
</ProjectConfiguration>
|
|
<ProjectConfiguration Include="PGInstrument|x64">
|
|
<Configuration>PGInstrument</Configuration>
|
|
<Platform>x64</Platform>
|
|
</ProjectConfiguration>
|
|
<ProjectConfiguration Include="PGUpdate|ARM">
|
|
<Configuration>PGUpdate</Configuration>
|
|
<Platform>ARM</Platform>
|
|
</ProjectConfiguration>
|
|
<ProjectConfiguration Include="PGUpdate|ARM64">
|
|
<Configuration>PGUpdate</Configuration>
|
|
<Platform>ARM64</Platform>
|
|
</ProjectConfiguration>
|
|
<ProjectConfiguration Include="PGUpdate|Win32">
|
|
<Configuration>PGUpdate</Configuration>
|
|
<Platform>Win32</Platform>
|
|
</ProjectConfiguration>
|
|
<ProjectConfiguration Include="PGUpdate|x64">
|
|
<Configuration>PGUpdate</Configuration>
|
|
<Platform>x64</Platform>
|
|
</ProjectConfiguration>
|
|
<ProjectConfiguration Include="Release|ARM">
|
|
<Configuration>Release</Configuration>
|
|
<Platform>ARM</Platform>
|
|
</ProjectConfiguration>
|
|
<ProjectConfiguration Include="Release|ARM64">
|
|
<Configuration>Release</Configuration>
|
|
<Platform>ARM64</Platform>
|
|
</ProjectConfiguration>
|
|
<ProjectConfiguration Include="Release|Win32">
|
|
<Configuration>Release</Configuration>
|
|
<Platform>Win32</Platform>
|
|
</ProjectConfiguration>
|
|
<ProjectConfiguration Include="Release|x64">
|
|
<Configuration>Release</Configuration>
|
|
<Platform>x64</Platform>
|
|
</ProjectConfiguration>
|
|
</ItemGroup>
|
|
<PropertyGroup Label="Globals">
|
|
<ProjectGuid>{4D7C112F-3083-4D9E-9754-9341C14D9B39}</ProjectGuid>
|
|
<RootNamespace>_remote_debugging</RootNamespace>
|
|
<Keyword>Win32Proj</Keyword>
|
|
<SupportPGO>false</SupportPGO>
|
|
</PropertyGroup>
|
|
<Import Project="python.props" />
|
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
|
<PropertyGroup Label="Configuration">
|
|
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
|
<CharacterSet>NotSet</CharacterSet>
|
|
</PropertyGroup>
|
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
|
<PropertyGroup>
|
|
<TargetExt>$(PyStdlibPydExt)</TargetExt>
|
|
</PropertyGroup>
|
|
<ImportGroup Label="ExtensionSettings">
|
|
</ImportGroup>
|
|
<ImportGroup Label="PropertySheets">
|
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
|
<Import Project="pyproject.props" />
|
|
</ImportGroup>
|
|
<PropertyGroup Label="UserMacros" />
|
|
<PropertyGroup>
|
|
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
|
|
</PropertyGroup>
|
|
<ItemDefinitionGroup>
|
|
<Link>
|
|
<AdditionalDependencies>ntdll.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
|
</Link>
|
|
</ItemDefinitionGroup>
|
|
<ItemGroup>
|
|
<ClCompile Include="..\Modules\_remote_debugging\module.c" />
|
|
<ClCompile Include="..\Modules\_remote_debugging\object_reading.c" />
|
|
<ClCompile Include="..\Modules\_remote_debugging\code_objects.c" />
|
|
<ClCompile Include="..\Modules\_remote_debugging\frames.c" />
|
|
<ClCompile Include="..\Modules\_remote_debugging\frame_cache.c" />
|
|
<ClCompile Include="..\Modules\_remote_debugging\threads.c" />
|
|
<ClCompile Include="..\Modules\_remote_debugging\asyncio.c" />
|
|
</ItemGroup>
|
|
<ItemGroup>
|
|
<ClInclude Include="..\Modules\_remote_debugging\_remote_debugging.h" />
|
|
</ItemGroup>
|
|
<ItemGroup>
|
|
<ResourceCompile Include="..\PC\python_nt.rc" />
|
|
</ItemGroup>
|
|
<ItemGroup>
|
|
<ProjectReference Include="pythoncore.vcxproj">
|
|
<Project>{cf7ac3d1-e2df-41d2-bea6-1e2556cdea26}</Project>
|
|
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
|
|
</ProjectReference>
|
|
<ProjectReference Include="python3dll.vcxproj">
|
|
<Project>{885d4898-d08d-4091-9c40-c700cfe3fc5a}</Project>
|
|
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
|
|
</ProjectReference>
|
|
</ItemGroup>
|
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
|
<ImportGroup Label="ExtensionTargets">
|
|
</ImportGroup>
|
|
</Project>
|