python 3.12.0 perf 试用

发布时间 2023-10-07 12:31:34作者: 荣锋亮

python 3.12.0 的发布,官方支持了基于perf 的调用链分析,基于容器搞了一个简单的环境测试下

环境准备

包含了包含perf 的python 基础镜像,以及一个使用flask 的web 服务, 使用flamescope 的可视化页面分析

  • docker-compose 文件
version: '3'
services:
  flamescope:
    image: dalongrong/flamescope
    ports:
      - "9080:5000"
    volumes:
      - "./profiles:/profiles"
  app:
    build:
      context: ./
      dockerfile: Dockerfile-app
    privileged: true
    environment:
      - PYTHONPERFSUPPORT=1
    volumes:
      - ./app.py:/app/app.py
      - ./profiles:/profiles
    ports:
      - 3000:3000
    cap_add:
      - ALL
  perf-base:
    profiles:
      - perf
    build: .
    image: dalongrong/python:3.12.0-perf
  • dockerfile 说明
    基础镜像
 
FROM python:3.12.0
RUN apt update && apt-get install  -y linux-perf  procps && apt-get clean

Dockerfile-app app

FROM  dalongrong/python:3.12.0-perf
WORKDIR /app
COPY requirements.txt /app/requirements.txt
RUN pip install -r /app/requirements.txt
COPY app.py /app/app.py
ENTRYPOINT [ "flask", "--app", "app","run", "--host", "0.0.0.0", "--port", "3000" ]

app.py

from flask import Flask
 
app = Flask(__name__)
 
@app.route("/")
def hello_world():
    return "<p>Hello, World!</p>"

体验

  • 注意需要先构建基础镜像
  • 启动
docker-compose up -d
  • perf 采样数据
    容器kernel 配置
 
sh -c " echo 0 > /proc/sys/kernel/kptr_restrict"
sh -c " echo 0 > /proc/sys/kernel/perf_event_paranoid"
perf record -ag -F 999p -p 1
perf script --header > /profiles/myappperf.perf
  • flamescope 查看

从效果上来看,似乎并不是很好

 

说明

目前python 对于perf 的支持是以linux 为主的,同时从体验上来说不是很好

参考资料

https://github.com/pyenv/pyenv
https://pythoninsider.blogspot.com/2023/10/python-3120-final-now-available.html