已开启
950 #10
QLiangong创建于  28 天前
QLiangong
QLiangong成员
28 天前 创建
第 1 步:环境准备
# ① 检查 KVM
ls -l /dev/kvm

# ② 检查 Docker
docker ps

# ③ 检查 AWS CLI
aws --version

# ④ 禁用 THP(关键优化——之前分析的 4.4x 提升就在这一步)
echo never | sudo tee /sys/kernel/mm/transparent_hugepage/enabled

# ⑤ 确认 THP 已禁用
cat /sys/kernel/mm/transparent_hugepage/enabled
# 应输出: [never] madvise ...
第 2 步:编译 Firecracker(如果代码有改动)
cd /path/to/firecracker

# 常规编译
./tools/devtool -y build --release

# 或带 debug 符号(如果需要 perf 分析)
# ./tools/devtool -y build --release --no-strip
第 3 步:运行测试
AWS_EMF_NAMESPACE=local AWS_EMF_ENVIRONMENT=local \
./tools/devtool -y test -- \
    -m '' \
    -k "test_boottime" \
    integration_tests/performance/
常用测试命令汇总:
# ① 启动时间测试
AWS_EMF_NAMESPACE=local AWS_EMF_ENVIRONMENT=local \
./tools/devtool -y test -- -m '' -k "test_boottime" integration_tests/performance/

# ② 块设备性能测试
AWS_EMF_NAMESPACE=local AWS_EMF_ENVIRONMENT=local \
./tools/devtool -y test -- -m '' -k "test_block_performance" integration_tests/performance/

# ③ 快照创建延迟测试
AWS_EMF_NAMESPACE=local AWS_EMF_ENVIRONMENT=local \
./tools/devtool -y test -- -m '' -k "test_snapshot_create_latency" integration_tests/performance/

# ④ 进程启动时间测试
AWS_EMF_NAMESPACE=local AWS_EMF_ENVIRONMENT=local \
./tools/devtool -y test -- -m '' -k "test_startup_time_daemonize" integration_tests/performance/

# ⑤ 跑所有性能测试
AWS_EMF_NAMESPACE=local AWS_EMF_ENVIRONMENT=local \
./tools/devtool -y test -- -m '' integration_tests/performance/
第 4 步:收集结果
输出文件	位置	内容
test-report.json	../test_results/test-report.json	EMF metrics(含 latency、throughput 等)
fc_trace 日志	/firecracker/build/fc_trace_*.log	Firecracker 运行日志(含 event 标记)
# 查看测试结果
cat ../test_results/test-report.json | python -m json.tool | head -50

# 查看 fc_trace 日志(如果测试代码中有保存)
ls /firecracker/build/fc_trace_*.log
likedislike
QLiangong
QLiangong成员
28 天前 评论:

AWS_EMF_NAMESPACE=local AWS_EMF_ENVIRONMENT=local ./tools/devtool -y test -- -m '' integration_tests/performance/

likedislike
QLiangong
QLiangong成员
28 天前 评论:
+ echo '[Firecracker release.sh 2026-08-13T02:58:37+00:00] Building version=v1.12.0, profile=release, target=aarch64-unknown-linux-musl, Rust toolchain=1.85.0...'
[Firecracker release.sh 2026-08-13T02:58:37+00:00] Building version=v1.12.0, profile=release, target=aarch64-unknown-linux-musl, Rust toolchain=1.85.0...
+ cargo build --target aarch64-unknown-linux-musl --release --workspace --bins --examples
    Updating crates.io index
    Updating git repository `https://github.com/firecracker-microvm/micro-http`
fatal: unable to access 'https://github.com/firecracker-microvm/micro-http/': server certificate verification failed. CAfile: none CRLfile: none
error: failed to get `micro_http` as a dependency of package `vmm v0.1.0 (/firecracker/src/vmm)`

Caused by:
  failed to load source for dependency `micro_http`

Caused by:
  Unable to update https://github.com/firecracker-microvm/micro-http#e854e50b

Caused by:
  failed to clone into: /usr/local/rust/git/db/micro-http-b6958a74e1f08106

Caused by:
  revision e854e50bc06a7e7bc0e5f5835d8f3f951e21f05f not found

Caused by:
  process didn't exit successfully: `git fetch --no-tags --force --update-head-ok 'https://github.com/firecracker-microvm/micro-http' '+e854e50bc06a7e7bc0e5f5835d8f3f951e21f05f:refs/commit/e854e50bc06a7e7bc0e5f5835d8f3f951e21f05f'` (exit status: 128)
likedislike
QLiangong
QLiangong成员
28 天前 评论:
# 当前:
env |grep -P "^(AWS_EMF_|BUILDKITE|CODECOV_)" > env.list

# 改为:
env |grep -P "^(AWS_EMF_|BUILDKITE|CODECOV_|GIT_SSL|CARGO_|HTTPS_PROXY|HTTP_PROXY|https_proxy|http_proxy)" > env.list
likedislike
QLiangong
QLiangong成员
28 天前 评论:
# 改为:
--volume "$HOME/.cargo/registry:/usr/local/rust/registry:z" \
--volume "$HOME/.cargo/git:/usr/local/rust/git:z" \
likedislike
QLiangong
QLiangong成员
28 天前 评论:
============================================================================================== test session starts ===============================================================================================
platform linux -- Python 3.12.3, pytest-8.3.5, pluggy-1.5.0 -- /opt/venv/bin/python
cachedir: ../build/pytest_cache
metadata: {'Python': '3.12.3', 'Platform': 'Linux-6.6.0-132.0.0.111.oe2403sp3.aarch64-aarch64-with-glibc2.39', 'Packages': {'pytest': '8.3.5', 'pluggy': '1.5.0'}, 'Plugins': {'rerunfailures': '14.0', 'xdist': '3.6.1', 'json-report': '1.5.0', 'timeout': '2.3.1', 'metadata': '3.1.1'}}
EC2 AMI: <!doctype html><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><meta name="keywords" content="SWG,Proxy,NetentSec"><title>HIS Proxy Notification</title><link rel="icon" href="https://console.his.huawei.com/hicweb/images/his.ico"><link rel="stylesheet" type="text/css" href="https://r.hw3static.com/s/pro_erp_slice001/proxyAccess/lst/css/common_block.css"></head><body><input id="sessionid" style="display:none" value="bcb2c9229c765c5334cfc776e22f134f"> <input id="pid" style="display:none" value="3318"> <input id="uid" style="display:none" value="0"><div id="header"><div class="headerContainer"><div class="logo_box"><a href="https://his.huawei.com/portal/#/"><img id="logo" src="https://r.hw3static.com/s/pro_erp_slice001/proxyAccess/lst/img/his_logo.png"> </a><span class="split">|</span> <img src="https://r.hw3static.com/s/pro_erp_slice001/proxyAccess/lst/img/xdefend_logo.png"></div><div class="support_box"><a href="http://his.huawei.com/portal/#/sec/view?page_id=42170ee287034805a539c9a3bdca5274" id="support">支持与帮助</a> <span onclick="changeLanguage()" id="language">EN</span><ul class="support_list"><li><a id="help" href="https://12345.his.huawei.com/wecare/onlineservice/aigc/#/chat?locale=zh-CN&hotlineId=M020240&sourceURL=https%3A%2F%2Fhis.huawei.com%2Fportal%2F%23%2Fsec%2Fintro%3Fservicealias%3Dproxy%26service_code%3Dhrn%3Ahis%3Aservicemarket%3A%3Aservice%3Aproxy">客服</a></li><li><a id="feedback" href="http://12345.huawei.com/unidesk/portal/#/requestDetail?pic=his">问题反馈</a></li><li><a id="file" href="http://his.huawei.com/doc/">文档与资源</a></li><li><a id="user" href="http://his.huawei.com/portal/#/sec/intro?servicealias=mwg_proxy_system&service_code=hrn:his:servicemarket::service:mwg_proxy_system">用户评价</a></li><li><a id="community" href="http://3ms.huawei.com/hi/group/2692001">社区</a></li></ul></div></div></div><div id="container"><div class="leftImg"><img src="https://r.hw3static.com/s/pro_erp_slice001/proxyAccess/lst/img/warning_block.jpg"></div><div class="textBox"><div id="preReason">您访问的网站可能存在安全风险</div><a class="button" id="continueBtn">接受风险并访问</a> <a class="button" id="tryButton" onclick="goRiskTips()">申请取消风险提醒</a><div class="text"><span id="ckal">参考案例:</span> <a id="example" href="http://12345.huawei.com/unidesk/portal/#/case_details?caseId=KT00018687">取消网站的风险提醒</a></div><br><div class="text"><span id="question">如有疑问,请联系</span> <a id="it" href="https://12345.his.huawei.com/wecare/onlineservice/aigc/#/chat?locale=zh-CN&hotlineId=M020240&sourceURL=https%3A%2F%2Fhis.huawei.com%2Fportal%2F%23%2Fsec%2Fintro%3Fservicealias%3Dproxy%26service_code%3Dhrn%3Ahis%3Aservicemarket%3A%3Aservice%3Aproxy">12345客服联盟</a></div></div></div><script id="ihelp_component_script" async src="//12345.his.huawei.com/wecare/onlineservice/cs.js?hotlineId=M020240&locale=zh-CN"></script><script src="https://r.hw3static.com/s/pro_erp_slice001/proxyAccess/lst/js/warning_page.js"></script><script src="https://r.hw3static.com/s/pro_erp_slice001/proxyAccess/lst/js/uem.js"></script><script>window.addEventListener("load",function(){var e=document.createElement("script");e.async=!0,e.src="https://r.hw3static.com/s/pro_erp_slice001/proxyAccess/lst/js/warning_hotfix19.js",document.body.appendChild(e)}),window.hwa("trackPageView","P20B862F43D0D18")</script></body></html>
rootdir: /firecracker/tests
configfile: pytest.ini
plugins: rerunfailures-14.0, xdist-3.6.1, json-report-1.5.0, timeout-2.3.1, metadata-3.1.1
timeout: 300.0s
timeout method: signal
timeout func_only: False
collected 134 items           
likedislike
此处折叠了74条消息 查看更多
QLiangong
QLiangong成员
12 天前 评论:
rust_bench=> SELECT id, request_tag, tag, status, started_at, collector_name
rust_bench-> FROM job_queue
rust_bench-> WHERE status IN ('success','failure')
rust_bench->   AND (started_at IS NULL OR collector_name IS NULL)
rust_bench-> ORDER BY id;
 id |               request_tag                |      tag      | status  | started_at | collector_name
----+------------------------------------------+---------------+---------+------------+----------------
 32 | a5d4bf28296d37be90acc6b4ddf9382334364138 | AMD EPYC 9654 | failure |            |
 37 | a1b79ddc2c23c1d00945f8df4f2e8076c07fc478 | AMD EPYC 9654 | failure |            |
(2 行记录)


rust_bench=> SELECT id, request_tag, tag, status, is_optional, started_at, collector_name
rust_bench-> FROM job_queue
rust_bench-> WHERE request_tag IN (
rust_bench(>   'a1b79ddc2c23c1d00945f8df4f2e8076c07fc478',
rust_bench(>   'a5d4bf28296d37be90acc6b4ddf9382334364138'
rust_bench(> )
rust_bench-> ORDER BY request_tag, tag;
 id |               request_tag                |      tag      | status  | is_optional |          started_at           | collector_name
----+------------------------------------------+---------------+---------+-------------+-------------------------------+----------------
 37 | a1b79ddc2c23c1d00945f8df4f2e8076c07fc478 | AMD EPYC 9654 | failure | t           |                               |
 39 | a1b79ddc2c23c1d00945f8df4f2e8076c07fc478 | AMD EPYC 9755 | success | t           | 2026-08-27 19:07:10.006113+08 | AMD EPYC 9755
 35 | a1b79ddc2c23c1d00945f8df4f2e8076c07fc478 | Kunpeng 920B  | success | f           | 2026-08-18 17:31:49.062885+08 | Kunpeng 920B
 41 | a1b79ddc2c23c1d00945f8df4f2e8076c07fc478 | Kunpeng 950   | success | t           | 2026-08-27 17:01:31.415233+08 | Kunpeng 950
 32 | a5d4bf28296d37be90acc6b4ddf9382334364138 | AMD EPYC 9654 | failure | t           |                               |
 33 | a5d4bf28296d37be90acc6b4ddf9382334364138 | AMD EPYC 9755 | success | t           | 2026-08-27 20:34:04.034033+08 | AMD EPYC 9755
 31 | a5d4bf28296d37be90acc6b4ddf9382334364138 | Kunpeng 920B  | success | f           | 2026-08-18 16:37:53.558957+08 | Kunpeng 920B
 34 | a5d4bf28296d37be90acc6b4ddf9382334364138 | Kunpeng 950   | success | t           | 2026-08-27 17:06:04.287704+08 | Kunpeng 950
(8 行记录)


rust_bench=> SELECT tag, status, completed_at FROM benchmark_request ORDER BY created_at;
                   tag                    |  status   |         completed_at
------------------------------------------+-----------+-------------------------------
 a5d4bf28296d37be90acc6b4ddf9382334364138 | completed | 2026-08-18 17:16:59.971931+08
 a1b79ddc2c23c1d00945f8df4f2e8076c07fc478 | completed | 2026-08-19 11:14:20.419013+08
 2161b9dd0431dee34336d9718bc831658131b2e6 | completed | 2026-08-28 17:56:45.327712+08
(3 行记录)


rust_bench=> SELECT tag, status, is_optional, started_at, completed_at
rust_bench-> FROM job_queue
rust_bench-> WHERE request_tag = '2161b9dd0431dee34336d9718bc831658131b2e6'
rust_bench-> ORDER BY tag;
      tag      | status  | is_optional |          started_at           |         completed_at
---------------+---------+-------------+-------------------------------+-------------------------------
 AMD EPYC 9654 | queued  | t           |                               |
 AMD EPYC 9755 | success | t           | 2026-08-27 20:35:37.500081+08 | 2026-08-27 20:37:05.589708+08
 Kunpeng 920B  | success | f           | 2026-08-27 16:14:25.815012+08 | 2026-08-27 17:32:34.665174+08
 Kunpeng 950   | success | t           | 2026-08-28 14:28:09.972775+08 | 2026-08-28 15:44:38.763423+08
(4 行记录)


rust_bench=>
rust_bench=> SELECT name, is_active FROM collector_config ORDER BY name;
       name       | is_active
------------------+-----------
 AMD EPYC 9755    | t
 Blue Kunpeng 950 | t
 Kunpeng 920B     | t
 Kunpeng 950      | t
(4 行记录)
likedislike
QLiangong
QLiangong成员
12 天前 评论:
-- 步骤 1:确认坏行仍是这 2 个(幂等保护)
SELECT id, request_tag, tag, status FROM job_queue
WHERE status IN ('success','failure')
  AND (started_at IS NULL OR collector_name IS NULL);
-- 预期:id 32 和 37,共 2 行

-- 步骤 2:删除
DELETE FROM job_queue
WHERE status IN ('success','failure')
  AND (started_at IS NULL OR collector_name IS NULL);
-- 预期:DELETE 2

-- 步骤 3:验证清零
SELECT count(*) FROM job_queue
WHERE status IN ('success','failure')
  AND (started_at IS NULL OR collector_name IS NULL);
-- 预期:0

-- 步骤 4:确认关键数据未受影响
SELECT tag, status FROM benchmark_request ORDER BY created_at;             -- 3 个 completed
SELECT tag, status FROM job_queue
WHERE request_tag = '2161b9dd0431dee34336d9718bc831658131b2e6'
ORDER BY tag;   -- 9654 仍为 queued(保留!9654 将来连接时会跑它),其余 success

\q
likedislike
QLiangong
QLiangong成员
12 天前 评论:
rust_bench=> SELECT id, request_tag, tag, status FROM job_queue
rust_bench-> WHERE status IN ('success','failure')
rust_bench->   AND (started_at IS NULL OR collector_name IS NULL);
 id |               request_tag                |      tag      | status
----+------------------------------------------+---------------+---------
 32 | a5d4bf28296d37be90acc6b4ddf9382334364138 | AMD EPYC 9654 | failure
 37 | a1b79ddc2c23c1d00945f8df4f2e8076c07fc478 | AMD EPYC 9654 | failure
(2 行记录)


rust_bench=> DELETE FROM job_queue
rust_bench-> WHERE status IN ('success','failure')
rust_bench->   AND (started_at IS NULL OR collector_name IS NULL);
DELETE 2
rust_bench=> SELECT count(*) FROM job_queue
rust_bench-> WHERE status IN ('success','failure')
rust_bench->   AND (started_at IS NULL OR collector_name IS NULL);
 count
-------
     0
(1 行记录)


rust_bench=> SELECT tag, status FROM benchmark_request ORDER BY created_at;             -- 3 个 completed
                   tag                    |  status
------------------------------------------+-----------
 a5d4bf28296d37be90acc6b4ddf9382334364138 | completed
 a1b79ddc2c23c1d00945f8df4f2e8076c07fc478 | completed
 2161b9dd0431dee34336d9718bc831658131b2e6 | completed
(3 行记录)


rust_bench=> SELECT tag, status FROM job_queue
rust_bench-> WHERE request_tag = '2161b9dd0431dee34336d9718bc831658131b2e6'
rust_bench-> ORDER BY tag;   -- 9654 仍为 queued(保留!9654 将来连接时会跑它),其余 success
      tag      | status
---------------+---------
 AMD EPYC 9654 | queued
 AMD EPYC 9755 | success
 Kunpeng 920B  | success
 Kunpeng 950   | success
(4 行记录)

likedislike
QLiangong
QLiangong成员
11 天前 评论:
sync_import] Done: 139 rows affected total
[sync_import] Import completed successfully
[sync_import] Pulling transfer repo...
From https://gitcode.com/QLiangong/rust-bench-data
   220f6463..15975f25  main       -> origin/main
Updating 220f6463..15975f25
Fast-forward
 results_920b.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
[sync_import] Starting import: D:\benchmark_sql\rust_data\rust-bench-data\results_920b.json -> postgresql://rust_bench:password@localhost:5432/rust_bench
[sync_import] WARNING: Failed to unify artifact ('2161b9dd0431dee34336d9718bc831658131b2e6', 'default', 'daft_multimodal'): 错误:  列"id"只能更新为默认值
DETAIL:  列"id"是定义为GENERATED ALWAYS的标识列.

[sync_import] collector_config: 2 rows processed (0 applied, 2 skipped)
[sync_import] benchmark_request: 3 rows processed (0 applied, 3 skipped)
[sync_import] WARNING: Failed to upsert row in artifact: 错误:  重复键违反唯一约束"artifact_name_tag_repo_key"
DETAIL:  键值"(name, tag, repo)=(2161b9dd0431dee34336d9718bc831658131b2e6, default, daft_multimodal)" 已经存在

[sync_import] artifact: 8 rows processed (7 applied, 1 skipped)
[sync_import] collection: 66 rows processed (66 applied, 0 skipped)
[sync_import] runtime_pstat_series: 12 rows processed (12 applied, 0 skipped)
[sync_import] job_queue: 11 rows processed (0 applied, 11 skipped)
[sync_import] runtime_pstat: 54 rows processed (54 applied, 0 skipped)
[sync_import] Data import committed: 139 rows affected
[sync_import] Sequence public.collector_config_id_seq -> 1000003
[sync_import] Sequence public.benchmark_request_id_seq -> 1000000
[sync_import] Sequence public.artifact_id_seq -> 1000013
[sync_import] Sequence public.collection_id_seq -> 1000095
[sync_import] Sequence public.runtime_pstat_series_id_seq -> 1000016
[sync_import] Sequence public.error_new_id_seq -> 1000008
[sync_import] Sequence public.job_queue_id_seq -> 1000000
[sync_import] 7 sequences updated
[sync_import] Done: 139 rows affected total
[sync_import] Import completed successfully
[sync_import] Pulling transfer repo...
From https://gitcode.com/QLiangong/rust-bench-data
   15975f25..a913139d  main       -> origin/main
Updating 15975f25..a913139d
Filtering content: 100% (1/1)
Filtering content: 100% (1/1), 92.87 KiB | 75.00 KiB/s, done.
Fast-forward
 results_920b.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
[sync_import] Starting import: D:\benchmark_sql\rust_data\rust-bench-data\results_920b.json -> postgresql://rust_bench:password@localhost:5432/rust_bench
[sync_import] WARNING: Failed to unify artifact ('2161b9dd0431dee34336d9718bc831658131b2e6', 'default', 'daft_multimodal'): 错误:  列"id"只能更新为默认值
DETAIL:  列"id"是定义为GENERATED ALWAYS的标识列.

[sync_import] collector_config: 2 rows processed (0 applied, 2 skipped)
[sync_import] benchmark_request: 3 rows processed (0 applied, 3 skipped)
[sync_import] WARNING: Failed to upsert row in artifact: 错误:  重复键违反唯一约束"artifact_name_tag_repo_key"
DETAIL:  键值"(name, tag, repo)=(2161b9dd0431dee34336d9718bc831658131b2e6, default, daft_multimodal)" 已经存在

[sync_import] artifact: 8 rows processed (7 applied, 1 skipped)
[sync_import] collection: 66 rows processed (66 applied, 0 skipped)
[sync_import] runtime_pstat_series: 12 rows processed (12 applied, 0 skipped)
[sync_import] job_queue: 11 rows processed (0 applied, 11 skipped)
[sync_import] runtime_pstat: 54 rows processed (54 applied, 0 skipped)
[sync_import] Data import committed: 139 rows affected
[sync_import] Sequence public.collector_config_id_seq -> 1000003
[sync_import] Sequence public.benchmark_request_id_seq -> 1000000
[sync_import] Sequence public.artifact_id_seq -> 1000013
[sync_import] Sequence public.collection_id_seq -> 1000095
[sync_import] Sequence public.runtime_pstat_series_id_seq -> 1000016
[sync_import] Sequence public.error_new_id_seq -> 1000008
[sync_import] Sequence public.job_queue_id_seq -> 1000000
[sync_import] 7 sequences updated
[sync_import] Done: 139 rows affected total
[sync_import] Import completed successfully


likedislike
QLiangong
QLiangong成员
6 天前 评论:

图片.png

likedislike