This is an automated email from the ASF dual-hosted git repository.

github-bot pushed a commit to branch asf-site
in repository https://gitbox.apache.org/repos/asf/datafusion-comet.git


The following commit(s) were added to refs/heads/asf-site by this push:
     new a9ae33d14 Publish built docs triggered by 
ba6b3ce214f5d6bfdca8d627318df20025e35414
a9ae33d14 is described below

commit a9ae33d147a59dd7ed2bb671d9bc1bf5fb7050c6
Author: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
AuthorDate: Wed Apr 1 10:29:20 2026 +0000

    Publish built docs triggered by ba6b3ce214f5d6bfdca8d627318df20025e35414
---
 _sources/contributor-guide/index.md.txt            |   2 +-
 _sources/contributor-guide/profiling.md.txt        | 296 +++++++++++++++++++++
 .../contributor-guide/profiling_native_code.md.txt |  94 -------
 contributor-guide/adding_a_new_expression.html     |   2 +-
 contributor-guide/adding_a_new_operator.html       |   2 +-
 contributor-guide/benchmarking.html                |   2 +-
 contributor-guide/bug_triage.html                  |   2 +-
 contributor-guide/contributing.html                |   2 +-
 contributor-guide/debugging.html                   |   2 +-
 contributor-guide/development.html                 |   2 +-
 contributor-guide/ffi.html                         |   2 +-
 contributor-guide/iceberg-spark-tests.html         |   2 +-
 contributor-guide/index.html                       |  11 +-
 contributor-guide/jvm_shuffle.html                 |   2 +-
 contributor-guide/native_shuffle.html              |   2 +-
 contributor-guide/parquet_scans.html               |   2 +-
 contributor-guide/plugin_overview.html             |   2 +-
 .../{profiling_native_code.html => profiling.html} | 291 +++++++++++++++++++-
 contributor-guide/release_process.html             |   2 +-
 contributor-guide/roadmap.html                     |   2 +-
 contributor-guide/spark-sql-tests.html             |   8 +-
 contributor-guide/sql-file-tests.html              |   2 +-
 contributor-guide/tracing.html                     |   8 +-
 objects.inv                                        | Bin 1654 -> 1643 bytes
 searchindex.js                                     |   2 +-
 25 files changed, 609 insertions(+), 135 deletions(-)

diff --git a/_sources/contributor-guide/index.md.txt 
b/_sources/contributor-guide/index.md.txt
index f6c1f4a10..0e46f5c82 100644
--- a/_sources/contributor-guide/index.md.txt
+++ b/_sources/contributor-guide/index.md.txt
@@ -35,7 +35,7 @@ Benchmarking Guide <benchmarking>
 Adding a New Operator <adding_a_new_operator>
 Adding a New Expression <adding_a_new_expression>
 Tracing <tracing>
-Profiling Native Code <profiling_native_code>
+Profiling <profiling>
 Spark SQL Tests <spark-sql-tests.md>
 Iceberg Spark Tests <iceberg-spark-tests.md>
 SQL File Tests <sql-file-tests.md>
diff --git a/_sources/contributor-guide/profiling.md.txt 
b/_sources/contributor-guide/profiling.md.txt
new file mode 100644
index 000000000..67729a235
--- /dev/null
+++ b/_sources/contributor-guide/profiling.md.txt
@@ -0,0 +1,296 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+# Profiling
+
+This guide covers profiling tools and techniques for Comet development. 
Because Comet
+spans JVM (Spark) and native (Rust) code, choosing the right profiler depends 
on what
+you are investigating.
+
+## Choosing a Profiling Tool
+
+| Tool                                                                         
  | JVM Frames | Native (Rust) Frames | Install Required | Best For             
                                                          |
+| 
------------------------------------------------------------------------------ 
| ---------- | -------------------- | ---------------- | 
------------------------------------------------------------------------------ |
+| [async-profiler](https://github.com/async-profiler/async-profiler)           
  | Yes        | Yes                  | Yes              | End-to-end Comet 
profiling with unified JVM + native flame graphs              |
+| [Java Flight Recorder 
(JFR)](https://docs.oracle.com/en/java/javase/17/jfapi/) | Yes        | No      
             | No (JDK 11+)     | GC pressure, allocations, thread contention, 
I/O — any JVM-level investigation |
+| [cargo-flamegraph](https://github.com/flamegraph-rs/flamegraph)              
  | No         | Yes                  | Yes              | Isolated Rust 
micro-benchmarks without a JVM                                   |
+
+**Recommendation:** Use **async-profiler** when profiling Spark queries with 
Comet enabled —
+it is the only tool that shows both JVM and native frames in a single flame 
graph.
+Use **JFR** when you need rich JVM event data (GC, locks, I/O) without 
installing anything.
+Use **cargo-flamegraph** when working on native code in isolation via `cargo 
bench`.
+
+## Profiling with async-profiler
+
+[async-profiler](https://github.com/async-profiler/async-profiler) captures 
JVM and
+native code in the same flame graph by using Linux `perf_events` or macOS 
`dtrace`.
+This makes it ideal for profiling Comet, where hot paths cross the JNI 
boundary between
+Spark and Rust.
+
+### Installation
+
+Download a release from the [async-profiler releases 
page](https://github.com/async-profiler/async-profiler/releases):
+
+```shell
+# Linux x64
+wget 
https://github.com/async-profiler/async-profiler/releases/download/v3.0/async-profiler-3.0-linux-x64.tar.gz
+mkdir -p $HOME/opt/async-profiler
+tar xzf async-profiler-3.0-linux-x64.tar.gz -C $HOME/opt/async-profiler 
--strip-components=1
+export ASYNC_PROFILER_HOME=$HOME/opt/async-profiler
+```
+
+On macOS, download the appropriate `macos` archive instead.
+
+### Attaching to a running Spark application
+
+Use the `asprof` launcher to attach to a running JVM by PID:
+
+```shell
+# Start CPU profiling for 30 seconds, output an HTML flame graph
+$ASYNC_PROFILER_HOME/bin/asprof -d 30 -f flamegraph.html <pid>
+
+# Wall-clock profiling
+$ASYNC_PROFILER_HOME/bin/asprof -e wall -d 30 -f flamegraph.html <pid>
+
+# Start profiling (no duration limit), then stop later
+$ASYNC_PROFILER_HOME/bin/asprof start -e cpu <pid>
+# ... run your query ...
+$ASYNC_PROFILER_HOME/bin/asprof stop -f flamegraph.html <pid>
+```
+
+Find the Spark driver/executor PID with `jps` or `pgrep -f SparkSubmit`.
+
+### Passing profiler flags via spark-submit
+
+You can also attach async-profiler as a Java agent at JVM startup:
+
+```shell
+spark-submit \
+  --conf 
"spark.driver.extraJavaOptions=-agentpath:$ASYNC_PROFILER_HOME/lib/libasyncProfiler.so=start,event=cpu,file=driver.html,tree"
 \
+  --conf 
"spark.executor.extraJavaOptions=-agentpath:$ASYNC_PROFILER_HOME/lib/libasyncProfiler.so=start,event=cpu,file=executor.html,tree"
 \
+  ...
+```
+
+Note: If the executor is distributed then `executor.html` will be written on 
the remote node.
+
+### Choosing an event type
+
+| Event   | When to use                                                        
                                       |
+| ------- | 
---------------------------------------------------------------------------------------------------------
 |
+| `cpu`   | Default. Shows where CPU cycles are spent. Use for compute-bound 
queries.                                 |
+| `wall`  | Wall-clock time including blocked/waiting threads. Use to find JNI 
boundary overhead and I/O stalls.      |
+| `alloc` | Heap allocation profiling. Use to find JVM allocation hotspots 
around Arrow FFI and columnar conversions. |
+| `lock`  | Lock contention. Use when threads appear to spend time waiting on 
synchronized blocks or locks.           |
+
+### Output formats
+
+| Format           | Flag               | Description                          
              |
+| ---------------- | ------------------ | 
-------------------------------------------------- |
+| HTML flame graph | `-f out.html`      | Interactive flame graph (default and 
most useful). |
+| JFR              | `-f out.jfr`       | Viewable in JDK Mission Control or 
IntelliJ.       |
+| Collapsed stacks | `-f out.collapsed` | For use with Brendan Gregg's 
FlameGraph scripts.   |
+| Text summary     | `-o text`          | Flat list of hot methods.            
              |
+
+### Platform notes
+
+**Linux:** Set `perf_event_paranoid` to allow profiling:
+
+```shell
+sudo sysctl kernel.perf_event_paranoid=1   # or 0 / -1 for full access
+sudo sysctl kernel.kptr_restrict=0          # optional: enable kernel symbols
+```
+
+**macOS:** async-profiler uses `dtrace` on macOS, which requires running as 
root or
+with SIP (System Integrity Protection) adjustments. Native Rust frames may not 
be fully
+resolved on macOS; Linux is recommended for the most complete flame graphs.
+
+### Integrated benchmark profiling
+
+The TPC benchmark scripts in `benchmarks/tpc/` have built-in async-profiler 
support via
+the `--async-profiler` flag. See 
[benchmarks/tpc/README.md](https://github.com/apache/datafusion-comet/blob/main/benchmarks/tpc/README.md)
+for details.
+
+## Profiling with Java Flight Recorder
+
+[Java Flight Recorder (JFR)](https://docs.oracle.com/en/java/javase/17/jfapi/) 
is built
+into JDK 11+ and collects detailed JVM runtime data with very low overhead. It 
does not
+see native Rust frames, but is excellent for diagnosing GC pressure, thread 
contention,
+I/O latency, and JVM-level allocation patterns.
+
+### Adding JFR flags to spark-submit
+
+```shell
+spark-submit \
+  --conf 
"spark.driver.extraJavaOptions=-XX:StartFlightRecording=duration=120s,filename=driver.jfr"
 \
+  --conf 
"spark.executor.extraJavaOptions=-XX:StartFlightRecording=duration=120s,filename=executor.jfr"
 \
+  ...
+```
+
+For continuous recording without a fixed duration:
+
+```shell
+--conf 
"spark.driver.extraJavaOptions=-XX:StartFlightRecording=disk=true,maxsize=500m,filename=driver.jfr"
+```
+
+You can also start and stop recording dynamically using `jcmd`:
+
+```shell
+jcmd <pid> JFR.start name=profile
+# ... run your query ...
+jcmd <pid> JFR.stop name=profile filename=recording.jfr
+```
+
+### Viewing recordings
+
+- **[JDK Mission Control (JMC)](https://jdk.java.net/jmc/)** — the most 
comprehensive viewer.
+  Shows flame graphs, GC timeline, thread activity, I/O, and allocation hot 
spots.
+- **IntelliJ IDEA** — open `.jfr` files directly in the built-in profiler
+  (Run → Open Profiler Snapshot).
+- **`jfr` CLI** — quick summaries from the command line: `jfr summary 
driver.jfr`
+
+### Useful JFR events for Comet debugging
+
+| Event                                                               | What 
it shows                                                               |
+| ------------------------------------------------------------------- | 
--------------------------------------------------------------------------- |
+| `jdk.GCPhasePause`                                                  | GC 
pause durations — helps identify memory pressure from Arrow allocations. |
+| `jdk.ObjectAllocationInNewTLAB` / `jdk.ObjectAllocationOutsideTLAB` | 
Allocation hot spots.                                                       |
+| `jdk.JavaMonitorWait` / `jdk.ThreadPark`                            | Thread 
contention and lock waits.                                           |
+| `jdk.FileRead` / `jdk.FileWrite` / `jdk.SocketRead`                 | I/O 
latency.                                                                |
+| `jdk.ExecutionSample`                                               | CPU 
sampling (method profiling, similar to a flame graph).                  |
+
+### Integrated benchmark profiling
+
+The TPC benchmark scripts support `--jfr` for automatic JFR recording during 
benchmark
+runs. See 
[benchmarks/tpc/README.md](https://github.com/apache/datafusion-comet/blob/main/benchmarks/tpc/README.md)
 for details.
+
+## Profiling Native Code with cargo-flamegraph
+
+For profiling Rust code in isolation — without a JVM — use `cargo bench` with
+[cargo-flamegraph](https://github.com/flamegraph-rs/flamegraph).
+
+### Running micro benchmarks with cargo bench
+
+When implementing a new operator or expression, it is good practice to add a 
new microbenchmark under `core/benches`.
+
+It is often easiest to copy an existing benchmark and modify it for the new 
operator or expression. It is also
+necessary to add a new section to the `Cargo.toml` file, such as:
+
+```toml
+[[bench]]
+name = "shuffle_writer"
+harness = false
+```
+
+These benchmarks are useful for comparing performance between releases or 
between feature branches and the
+main branch to help prevent regressions in performance when adding new 
features or fixing bugs.
+
+Individual benchmarks can be run by name with the following command.
+
+```shell
+cargo bench shuffle_writer
+```
+
+Here is some sample output from running this command.
+
+```
+     Running benches/shuffle_writer.rs 
(target/release/deps/shuffle_writer-e37b59e37879cce7)
+Gnuplot not found, using plotters backend
+shuffle_writer/shuffle_writer
+                        time:   [2.0880 ms 2.0989 ms 2.1118 ms]
+Found 9 outliers among 100 measurements (9.00%)
+  3 (3.00%) high mild
+  6 (6.00%) high severe
+```
+
+### Profiling with cargo-flamegraph
+
+Install cargo-flamegraph:
+
+```shell
+cargo install flamegraph
+```
+
+Follow the instructions in 
[cargo-flamegraph](https://github.com/flamegraph-rs/flamegraph) for your 
platform for
+running flamegraph.
+
+Here is a sample command for running `cargo-flamegraph` on MacOS.
+
+```shell
+cargo flamegraph --root --bench shuffle_writer
+```
+
+This will produce output similar to the following.
+
+```
+dtrace: system integrity protection is on, some features will not be available
+
+dtrace: description 'profile-997 ' matched 1 probe
+Gnuplot not found, using plotters backend
+Testing shuffle_writer/shuffle_writer
+Success
+
+dtrace: pid 66402 has exited
+writing flamegraph to "flamegraph.svg"
+```
+
+The generated flamegraph can now be opened in a browser that supports svg 
format.
+
+Here is the flamegraph for this example:
+
+![flamegraph](../_static/images/flamegraph.png)
+
+## Tips for Profiling Comet
+
+### Use wall-clock profiling to spot JNI boundary overhead
+
+When profiling Comet with async-profiler, `wall` mode is often more revealing 
than `cpu`
+because it captures time spent crossing the JNI boundary, waiting for native 
results,
+and blocked on I/O — none of which show up in CPU-only profiles.
+
+```shell
+$ASYNC_PROFILER_HOME/bin/asprof -e wall -d 60 -f wall-profile.html <pid>
+```
+
+### Use alloc profiling around Arrow FFI
+
+JVM allocation profiling can identify hotspots in the Arrow FFI path where 
temporary
+objects are created during data transfer between JVM and native code:
+
+```shell
+$ASYNC_PROFILER_HOME/bin/asprof -e alloc -d 60 -f alloc-profile.html <pid>
+```
+
+Look for allocations in `CometExecIterator`, `CometBatchIterator`, and Arrow 
vector
+classes.
+
+### Isolate Rust-only performance issues
+
+If a flame graph shows the hot path is entirely within native code, switch to
+`cargo-flamegraph` to get better symbol resolution and avoid JVM noise:
+
+```shell
+cd native
+cargo flamegraph --root --bench <benchmark_name>
+```
+
+### Correlating JVM and native frames
+
+In async-profiler flame graphs, native Rust frames appear below JNI entry 
points like
+`Java_org_apache_comet_Native_*`. Look for these transition points to 
understand how
+time is split between Spark's JVM code and Comet's native execution.
diff --git a/_sources/contributor-guide/profiling_native_code.md.txt 
b/_sources/contributor-guide/profiling_native_code.md.txt
deleted file mode 100644
index ec3349b2e..000000000
--- a/_sources/contributor-guide/profiling_native_code.md.txt
+++ /dev/null
@@ -1,94 +0,0 @@
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
-  http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-
-# Profiling Native Code
-
-We use `cargo bench` to run benchmarks to measure the performance of 
individual operators and expressions
-and [cargo-flamegraph](https://github.com/flamegraph-rs/flamegraph) for 
profiling.
-
-## Running micro benchmarks with cargo bench
-
-When implementing a new operator or expression, it is good practice to add a 
new microbenchmark under `core/benches`.
-
-It is often easiest to copy an existing benchmark and modify it for the new 
operator or expression. It is also
-necessary to add a new section to the `Cargo.toml` file, such as:
-
-```toml
-[[bench]]
-name = "shuffle_writer"
-harness = false
-```
-
-These benchmarks are useful when for comparing performance between releases or 
between feature branches and the
-main branch to help prevent regressions in performance when adding new 
features or fixing bugs.
-
-Individual benchmarks can be run by name with the following command.
-
-```shell
-cargo bench shuffle_writer
-```
-
-Here is some sample output from running this command.
-
-```
-     Running benches/shuffle_writer.rs 
(target/release/deps/shuffle_writer-e37b59e37879cce7)
-Gnuplot not found, using plotters backend
-shuffle_writer/shuffle_writer
-                        time:   [2.0880 ms 2.0989 ms 2.1118 ms]
-Found 9 outliers among 100 measurements (9.00%)
-  3 (3.00%) high mild
-  6 (6.00%) high severe
-```
-
-## Profiling with cargo-flamegraph
-
-Install cargo-flamegraph:
-
-```shell
-cargo install flamegraph
-```
-
-Follow the instructions in 
[cargo-flamegraph](https://github.com/flamegraph-rs/flamegraph) for your 
platform for
-running flamegraph.
-
-Here is a sample command for running `cargo-flamegraph` on MacOS.
-
-```shell
-cargo flamegraph --root --bench shuffle_writer
-```
-
-This will produce output similar to the following.
-
-```
-dtrace: system integrity protection is on, some features will not be available
-
-dtrace: description 'profile-997 ' matched 1 probe
-Gnuplot not found, using plotters backend
-Testing shuffle_writer/shuffle_writer
-Success
-
-dtrace: pid 66402 has exited
-writing flamegraph to "flamegraph.svg"
-```
-
-The generated flamegraph can now be opened in a browser that supports svg 
format.
-
-Here is the flamegraph for this example:
-
-![flamegraph](../_static/images/flamegraph.png)
diff --git a/contributor-guide/adding_a_new_expression.html 
b/contributor-guide/adding_a_new_expression.html
index fbda6d78d..5f5d2ebe6 100644
--- a/contributor-guide/adding_a_new_expression.html
+++ b/contributor-guide/adding_a_new_expression.html
@@ -366,7 +366,7 @@ under the License.
 <li class="toctree-l2"><a class="reference internal" 
href="adding_a_new_operator.html">Adding a New Operator</a></li>
 <li class="toctree-l2 current"><a class="current reference internal" 
href="#">Adding a New Expression</a></li>
 <li class="toctree-l2"><a class="reference internal" 
href="tracing.html">Tracing</a></li>
-<li class="toctree-l2"><a class="reference internal" 
href="profiling_native_code.html">Profiling Native Code</a></li>
+<li class="toctree-l2"><a class="reference internal" 
href="profiling.html">Profiling</a></li>
 <li class="toctree-l2"><a class="reference internal" 
href="spark-sql-tests.html">Spark SQL Tests</a></li>
 <li class="toctree-l2"><a class="reference internal" 
href="iceberg-spark-tests.html">Iceberg Spark Tests</a></li>
 <li class="toctree-l2"><a class="reference internal" 
href="sql-file-tests.html">SQL File Tests</a></li>
diff --git a/contributor-guide/adding_a_new_operator.html 
b/contributor-guide/adding_a_new_operator.html
index cf879fec4..cedf83546 100644
--- a/contributor-guide/adding_a_new_operator.html
+++ b/contributor-guide/adding_a_new_operator.html
@@ -366,7 +366,7 @@ under the License.
 <li class="toctree-l2 current"><a class="current reference internal" 
href="#">Adding a New Operator</a></li>
 <li class="toctree-l2"><a class="reference internal" 
href="adding_a_new_expression.html">Adding a New Expression</a></li>
 <li class="toctree-l2"><a class="reference internal" 
href="tracing.html">Tracing</a></li>
-<li class="toctree-l2"><a class="reference internal" 
href="profiling_native_code.html">Profiling Native Code</a></li>
+<li class="toctree-l2"><a class="reference internal" 
href="profiling.html">Profiling</a></li>
 <li class="toctree-l2"><a class="reference internal" 
href="spark-sql-tests.html">Spark SQL Tests</a></li>
 <li class="toctree-l2"><a class="reference internal" 
href="iceberg-spark-tests.html">Iceberg Spark Tests</a></li>
 <li class="toctree-l2"><a class="reference internal" 
href="sql-file-tests.html">SQL File Tests</a></li>
diff --git a/contributor-guide/benchmarking.html 
b/contributor-guide/benchmarking.html
index 2b510f174..f6898f443 100644
--- a/contributor-guide/benchmarking.html
+++ b/contributor-guide/benchmarking.html
@@ -366,7 +366,7 @@ under the License.
 <li class="toctree-l2"><a class="reference internal" 
href="adding_a_new_operator.html">Adding a New Operator</a></li>
 <li class="toctree-l2"><a class="reference internal" 
href="adding_a_new_expression.html">Adding a New Expression</a></li>
 <li class="toctree-l2"><a class="reference internal" 
href="tracing.html">Tracing</a></li>
-<li class="toctree-l2"><a class="reference internal" 
href="profiling_native_code.html">Profiling Native Code</a></li>
+<li class="toctree-l2"><a class="reference internal" 
href="profiling.html">Profiling</a></li>
 <li class="toctree-l2"><a class="reference internal" 
href="spark-sql-tests.html">Spark SQL Tests</a></li>
 <li class="toctree-l2"><a class="reference internal" 
href="iceberg-spark-tests.html">Iceberg Spark Tests</a></li>
 <li class="toctree-l2"><a class="reference internal" 
href="sql-file-tests.html">SQL File Tests</a></li>
diff --git a/contributor-guide/bug_triage.html 
b/contributor-guide/bug_triage.html
index 9b0495322..1435f8bb0 100644
--- a/contributor-guide/bug_triage.html
+++ b/contributor-guide/bug_triage.html
@@ -366,7 +366,7 @@ under the License.
 <li class="toctree-l2"><a class="reference internal" 
href="adding_a_new_operator.html">Adding a New Operator</a></li>
 <li class="toctree-l2"><a class="reference internal" 
href="adding_a_new_expression.html">Adding a New Expression</a></li>
 <li class="toctree-l2"><a class="reference internal" 
href="tracing.html">Tracing</a></li>
-<li class="toctree-l2"><a class="reference internal" 
href="profiling_native_code.html">Profiling Native Code</a></li>
+<li class="toctree-l2"><a class="reference internal" 
href="profiling.html">Profiling</a></li>
 <li class="toctree-l2"><a class="reference internal" 
href="spark-sql-tests.html">Spark SQL Tests</a></li>
 <li class="toctree-l2"><a class="reference internal" 
href="iceberg-spark-tests.html">Iceberg Spark Tests</a></li>
 <li class="toctree-l2"><a class="reference internal" 
href="sql-file-tests.html">SQL File Tests</a></li>
diff --git a/contributor-guide/contributing.html 
b/contributor-guide/contributing.html
index 1c973c2b8..b74c756eb 100644
--- a/contributor-guide/contributing.html
+++ b/contributor-guide/contributing.html
@@ -366,7 +366,7 @@ under the License.
 <li class="toctree-l2"><a class="reference internal" 
href="adding_a_new_operator.html">Adding a New Operator</a></li>
 <li class="toctree-l2"><a class="reference internal" 
href="adding_a_new_expression.html">Adding a New Expression</a></li>
 <li class="toctree-l2"><a class="reference internal" 
href="tracing.html">Tracing</a></li>
-<li class="toctree-l2"><a class="reference internal" 
href="profiling_native_code.html">Profiling Native Code</a></li>
+<li class="toctree-l2"><a class="reference internal" 
href="profiling.html">Profiling</a></li>
 <li class="toctree-l2"><a class="reference internal" 
href="spark-sql-tests.html">Spark SQL Tests</a></li>
 <li class="toctree-l2"><a class="reference internal" 
href="iceberg-spark-tests.html">Iceberg Spark Tests</a></li>
 <li class="toctree-l2"><a class="reference internal" 
href="sql-file-tests.html">SQL File Tests</a></li>
diff --git a/contributor-guide/debugging.html b/contributor-guide/debugging.html
index 7b43468df..9d1a9dc04 100644
--- a/contributor-guide/debugging.html
+++ b/contributor-guide/debugging.html
@@ -366,7 +366,7 @@ under the License.
 <li class="toctree-l2"><a class="reference internal" 
href="adding_a_new_operator.html">Adding a New Operator</a></li>
 <li class="toctree-l2"><a class="reference internal" 
href="adding_a_new_expression.html">Adding a New Expression</a></li>
 <li class="toctree-l2"><a class="reference internal" 
href="tracing.html">Tracing</a></li>
-<li class="toctree-l2"><a class="reference internal" 
href="profiling_native_code.html">Profiling Native Code</a></li>
+<li class="toctree-l2"><a class="reference internal" 
href="profiling.html">Profiling</a></li>
 <li class="toctree-l2"><a class="reference internal" 
href="spark-sql-tests.html">Spark SQL Tests</a></li>
 <li class="toctree-l2"><a class="reference internal" 
href="iceberg-spark-tests.html">Iceberg Spark Tests</a></li>
 <li class="toctree-l2"><a class="reference internal" 
href="sql-file-tests.html">SQL File Tests</a></li>
diff --git a/contributor-guide/development.html 
b/contributor-guide/development.html
index 4ae3578cb..aa08e72e1 100644
--- a/contributor-guide/development.html
+++ b/contributor-guide/development.html
@@ -366,7 +366,7 @@ under the License.
 <li class="toctree-l2"><a class="reference internal" 
href="adding_a_new_operator.html">Adding a New Operator</a></li>
 <li class="toctree-l2"><a class="reference internal" 
href="adding_a_new_expression.html">Adding a New Expression</a></li>
 <li class="toctree-l2"><a class="reference internal" 
href="tracing.html">Tracing</a></li>
-<li class="toctree-l2"><a class="reference internal" 
href="profiling_native_code.html">Profiling Native Code</a></li>
+<li class="toctree-l2"><a class="reference internal" 
href="profiling.html">Profiling</a></li>
 <li class="toctree-l2"><a class="reference internal" 
href="spark-sql-tests.html">Spark SQL Tests</a></li>
 <li class="toctree-l2"><a class="reference internal" 
href="iceberg-spark-tests.html">Iceberg Spark Tests</a></li>
 <li class="toctree-l2"><a class="reference internal" 
href="sql-file-tests.html">SQL File Tests</a></li>
diff --git a/contributor-guide/ffi.html b/contributor-guide/ffi.html
index 7374110be..51e957439 100644
--- a/contributor-guide/ffi.html
+++ b/contributor-guide/ffi.html
@@ -366,7 +366,7 @@ under the License.
 <li class="toctree-l2"><a class="reference internal" 
href="adding_a_new_operator.html">Adding a New Operator</a></li>
 <li class="toctree-l2"><a class="reference internal" 
href="adding_a_new_expression.html">Adding a New Expression</a></li>
 <li class="toctree-l2"><a class="reference internal" 
href="tracing.html">Tracing</a></li>
-<li class="toctree-l2"><a class="reference internal" 
href="profiling_native_code.html">Profiling Native Code</a></li>
+<li class="toctree-l2"><a class="reference internal" 
href="profiling.html">Profiling</a></li>
 <li class="toctree-l2"><a class="reference internal" 
href="spark-sql-tests.html">Spark SQL Tests</a></li>
 <li class="toctree-l2"><a class="reference internal" 
href="iceberg-spark-tests.html">Iceberg Spark Tests</a></li>
 <li class="toctree-l2"><a class="reference internal" 
href="sql-file-tests.html">SQL File Tests</a></li>
diff --git a/contributor-guide/iceberg-spark-tests.html 
b/contributor-guide/iceberg-spark-tests.html
index d25ff1841..16870fe0d 100644
--- a/contributor-guide/iceberg-spark-tests.html
+++ b/contributor-guide/iceberg-spark-tests.html
@@ -366,7 +366,7 @@ under the License.
 <li class="toctree-l2"><a class="reference internal" 
href="adding_a_new_operator.html">Adding a New Operator</a></li>
 <li class="toctree-l2"><a class="reference internal" 
href="adding_a_new_expression.html">Adding a New Expression</a></li>
 <li class="toctree-l2"><a class="reference internal" 
href="tracing.html">Tracing</a></li>
-<li class="toctree-l2"><a class="reference internal" 
href="profiling_native_code.html">Profiling Native Code</a></li>
+<li class="toctree-l2"><a class="reference internal" 
href="profiling.html">Profiling</a></li>
 <li class="toctree-l2"><a class="reference internal" 
href="spark-sql-tests.html">Spark SQL Tests</a></li>
 <li class="toctree-l2 current"><a class="current reference internal" 
href="#">Iceberg Spark Tests</a></li>
 <li class="toctree-l2"><a class="reference internal" 
href="sql-file-tests.html">SQL File Tests</a></li>
diff --git a/contributor-guide/index.html b/contributor-guide/index.html
index a10a751da..53e7ea64d 100644
--- a/contributor-guide/index.html
+++ b/contributor-guide/index.html
@@ -366,7 +366,7 @@ under the License.
 <li class="toctree-l2"><a class="reference internal" 
href="adding_a_new_operator.html">Adding a New Operator</a></li>
 <li class="toctree-l2"><a class="reference internal" 
href="adding_a_new_expression.html">Adding a New Expression</a></li>
 <li class="toctree-l2"><a class="reference internal" 
href="tracing.html">Tracing</a></li>
-<li class="toctree-l2"><a class="reference internal" 
href="profiling_native_code.html">Profiling Native Code</a></li>
+<li class="toctree-l2"><a class="reference internal" 
href="profiling.html">Profiling</a></li>
 <li class="toctree-l2"><a class="reference internal" 
href="spark-sql-tests.html">Spark SQL Tests</a></li>
 <li class="toctree-l2"><a class="reference internal" 
href="iceberg-spark-tests.html">Iceberg Spark Tests</a></li>
 <li class="toctree-l2"><a class="reference internal" 
href="sql-file-tests.html">SQL File Tests</a></li>
@@ -559,9 +559,12 @@ under the License.
 <li class="toctree-l2"><a class="reference internal" 
href="tracing.html#definition-of-labels">Definition of Labels</a></li>
 </ul>
 </li>
-<li class="toctree-l1"><a class="reference internal" 
href="profiling_native_code.html">Profiling Native Code</a><ul>
-<li class="toctree-l2"><a class="reference internal" 
href="profiling_native_code.html#running-micro-benchmarks-with-cargo-bench">Running
 micro benchmarks with cargo bench</a></li>
-<li class="toctree-l2"><a class="reference internal" 
href="profiling_native_code.html#profiling-with-cargo-flamegraph">Profiling 
with cargo-flamegraph</a></li>
+<li class="toctree-l1"><a class="reference internal" 
href="profiling.html">Profiling</a><ul>
+<li class="toctree-l2"><a class="reference internal" 
href="profiling.html#choosing-a-profiling-tool">Choosing a Profiling 
Tool</a></li>
+<li class="toctree-l2"><a class="reference internal" 
href="profiling.html#profiling-with-async-profiler">Profiling with 
async-profiler</a></li>
+<li class="toctree-l2"><a class="reference internal" 
href="profiling.html#profiling-with-java-flight-recorder">Profiling with Java 
Flight Recorder</a></li>
+<li class="toctree-l2"><a class="reference internal" 
href="profiling.html#profiling-native-code-with-cargo-flamegraph">Profiling 
Native Code with cargo-flamegraph</a></li>
+<li class="toctree-l2"><a class="reference internal" 
href="profiling.html#tips-for-profiling-comet">Tips for Profiling Comet</a></li>
 </ul>
 </li>
 <li class="toctree-l1"><a class="reference internal" 
href="spark-sql-tests.html">Spark SQL Tests</a><ul>
diff --git a/contributor-guide/jvm_shuffle.html 
b/contributor-guide/jvm_shuffle.html
index 6a970e901..31f3c9f16 100644
--- a/contributor-guide/jvm_shuffle.html
+++ b/contributor-guide/jvm_shuffle.html
@@ -366,7 +366,7 @@ under the License.
 <li class="toctree-l2"><a class="reference internal" 
href="adding_a_new_operator.html">Adding a New Operator</a></li>
 <li class="toctree-l2"><a class="reference internal" 
href="adding_a_new_expression.html">Adding a New Expression</a></li>
 <li class="toctree-l2"><a class="reference internal" 
href="tracing.html">Tracing</a></li>
-<li class="toctree-l2"><a class="reference internal" 
href="profiling_native_code.html">Profiling Native Code</a></li>
+<li class="toctree-l2"><a class="reference internal" 
href="profiling.html">Profiling</a></li>
 <li class="toctree-l2"><a class="reference internal" 
href="spark-sql-tests.html">Spark SQL Tests</a></li>
 <li class="toctree-l2"><a class="reference internal" 
href="iceberg-spark-tests.html">Iceberg Spark Tests</a></li>
 <li class="toctree-l2"><a class="reference internal" 
href="sql-file-tests.html">SQL File Tests</a></li>
diff --git a/contributor-guide/native_shuffle.html 
b/contributor-guide/native_shuffle.html
index 226188e79..3a50cc8a4 100644
--- a/contributor-guide/native_shuffle.html
+++ b/contributor-guide/native_shuffle.html
@@ -366,7 +366,7 @@ under the License.
 <li class="toctree-l2"><a class="reference internal" 
href="adding_a_new_operator.html">Adding a New Operator</a></li>
 <li class="toctree-l2"><a class="reference internal" 
href="adding_a_new_expression.html">Adding a New Expression</a></li>
 <li class="toctree-l2"><a class="reference internal" 
href="tracing.html">Tracing</a></li>
-<li class="toctree-l2"><a class="reference internal" 
href="profiling_native_code.html">Profiling Native Code</a></li>
+<li class="toctree-l2"><a class="reference internal" 
href="profiling.html">Profiling</a></li>
 <li class="toctree-l2"><a class="reference internal" 
href="spark-sql-tests.html">Spark SQL Tests</a></li>
 <li class="toctree-l2"><a class="reference internal" 
href="iceberg-spark-tests.html">Iceberg Spark Tests</a></li>
 <li class="toctree-l2"><a class="reference internal" 
href="sql-file-tests.html">SQL File Tests</a></li>
diff --git a/contributor-guide/parquet_scans.html 
b/contributor-guide/parquet_scans.html
index 9cc9a8c0a..7e5c5cbfd 100644
--- a/contributor-guide/parquet_scans.html
+++ b/contributor-guide/parquet_scans.html
@@ -366,7 +366,7 @@ under the License.
 <li class="toctree-l2"><a class="reference internal" 
href="adding_a_new_operator.html">Adding a New Operator</a></li>
 <li class="toctree-l2"><a class="reference internal" 
href="adding_a_new_expression.html">Adding a New Expression</a></li>
 <li class="toctree-l2"><a class="reference internal" 
href="tracing.html">Tracing</a></li>
-<li class="toctree-l2"><a class="reference internal" 
href="profiling_native_code.html">Profiling Native Code</a></li>
+<li class="toctree-l2"><a class="reference internal" 
href="profiling.html">Profiling</a></li>
 <li class="toctree-l2"><a class="reference internal" 
href="spark-sql-tests.html">Spark SQL Tests</a></li>
 <li class="toctree-l2"><a class="reference internal" 
href="iceberg-spark-tests.html">Iceberg Spark Tests</a></li>
 <li class="toctree-l2"><a class="reference internal" 
href="sql-file-tests.html">SQL File Tests</a></li>
diff --git a/contributor-guide/plugin_overview.html 
b/contributor-guide/plugin_overview.html
index 4db945e54..27d862c73 100644
--- a/contributor-guide/plugin_overview.html
+++ b/contributor-guide/plugin_overview.html
@@ -366,7 +366,7 @@ under the License.
 <li class="toctree-l2"><a class="reference internal" 
href="adding_a_new_operator.html">Adding a New Operator</a></li>
 <li class="toctree-l2"><a class="reference internal" 
href="adding_a_new_expression.html">Adding a New Expression</a></li>
 <li class="toctree-l2"><a class="reference internal" 
href="tracing.html">Tracing</a></li>
-<li class="toctree-l2"><a class="reference internal" 
href="profiling_native_code.html">Profiling Native Code</a></li>
+<li class="toctree-l2"><a class="reference internal" 
href="profiling.html">Profiling</a></li>
 <li class="toctree-l2"><a class="reference internal" 
href="spark-sql-tests.html">Spark SQL Tests</a></li>
 <li class="toctree-l2"><a class="reference internal" 
href="iceberg-spark-tests.html">Iceberg Spark Tests</a></li>
 <li class="toctree-l2"><a class="reference internal" 
href="sql-file-tests.html">SQL File Tests</a></li>
diff --git a/contributor-guide/profiling_native_code.html 
b/contributor-guide/profiling.html
similarity index 52%
rename from contributor-guide/profiling_native_code.html
rename to contributor-guide/profiling.html
index a34d608c1..1a5bfe4d9 100644
--- a/contributor-guide/profiling_native_code.html
+++ b/contributor-guide/profiling.html
@@ -27,7 +27,7 @@ under the License.
     <meta charset="utf-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" 
/><meta name="viewport" content="width=device-width, initial-scale=1" />
 
-    <title>Profiling Native Code &#8212; Apache DataFusion Comet  
documentation</title>
+    <title>Profiling &#8212; Apache DataFusion Comet  documentation</title>
   
   
   
@@ -61,7 +61,7 @@ under the License.
     <script src="../_static/documentation_options.js?v=5929fcd5"></script>
     <script src="../_static/doctools.js?v=9a2dae69"></script>
     <script src="../_static/sphinx_highlight.js?v=dc90522c"></script>
-    <script>DOCUMENTATION_OPTIONS.pagename = 
'contributor-guide/profiling_native_code';</script>
+    <script>DOCUMENTATION_OPTIONS.pagename = 
'contributor-guide/profiling';</script>
     <script async="true" defer="true" 
src="https://buttons.github.io/buttons.js";></script>
     <link rel="index" title="Index" href="../genindex.html" />
     <link rel="search" title="Search" href="../search.html" />
@@ -366,7 +366,7 @@ under the License.
 <li class="toctree-l2"><a class="reference internal" 
href="adding_a_new_operator.html">Adding a New Operator</a></li>
 <li class="toctree-l2"><a class="reference internal" 
href="adding_a_new_expression.html">Adding a New Expression</a></li>
 <li class="toctree-l2"><a class="reference internal" 
href="tracing.html">Tracing</a></li>
-<li class="toctree-l2 current"><a class="current reference internal" 
href="#">Profiling Native Code</a></li>
+<li class="toctree-l2 current"><a class="current reference internal" 
href="#">Profiling</a></li>
 <li class="toctree-l2"><a class="reference internal" 
href="spark-sql-tests.html">Spark SQL Tests</a></li>
 <li class="toctree-l2"><a class="reference internal" 
href="iceberg-spark-tests.html">Iceberg Spark Tests</a></li>
 <li class="toctree-l2"><a class="reference internal" 
href="sql-file-tests.html">SQL File Tests</a></li>
@@ -422,7 +422,7 @@ under the License.
     
     <li class="breadcrumb-item"><a href="index.html" class="nav-link">Comet 
Contributor Guide</a></li>
     
-    <li class="breadcrumb-item active" aria-current="page"><span 
class="ellipsis">Profiling Native Code</span></li>
+    <li class="breadcrumb-item active" aria-current="page"><span 
class="ellipsis">Profiling</span></li>
   </ul>
 </nav>
 </div>
@@ -457,12 +457,243 @@ KIND, either express or implied.  See the License for the
 specific language governing permissions and limitations
 under the License.
 -->
-<section id="profiling-native-code">
-<h1>Profiling Native Code<a class="headerlink" href="#profiling-native-code" 
title="Link to this heading">#</a></h1>
-<p>We use <code class="docutils literal notranslate"><span 
class="pre">cargo</span> <span class="pre">bench</span></code> to run 
benchmarks to measure the performance of individual operators and expressions
-and <a class="reference external" 
href="https://github.com/flamegraph-rs/flamegraph";>cargo-flamegraph</a> for 
profiling.</p>
+<section id="profiling">
+<h1>Profiling<a class="headerlink" href="#profiling" title="Link to this 
heading">#</a></h1>
+<p>This guide covers profiling tools and techniques for Comet development. 
Because Comet
+spans JVM (Spark) and native (Rust) code, choosing the right profiler depends 
on what
+you are investigating.</p>
+<section id="choosing-a-profiling-tool">
+<h2>Choosing a Profiling Tool<a class="headerlink" 
href="#choosing-a-profiling-tool" title="Link to this heading">#</a></h2>
+<div class="pst-scrollable-table-container"><table class="table">
+<thead>
+<tr class="row-odd"><th class="head"><p>Tool</p></th>
+<th class="head"><p>JVM Frames</p></th>
+<th class="head"><p>Native (Rust) Frames</p></th>
+<th class="head"><p>Install Required</p></th>
+<th class="head"><p>Best For</p></th>
+</tr>
+</thead>
+<tbody>
+<tr class="row-even"><td><p><a class="reference external" 
href="https://github.com/async-profiler/async-profiler";>async-profiler</a></p></td>
+<td><p>Yes</p></td>
+<td><p>Yes</p></td>
+<td><p>Yes</p></td>
+<td><p>End-to-end Comet profiling with unified JVM + native flame 
graphs</p></td>
+</tr>
+<tr class="row-odd"><td><p><a class="reference external" 
href="https://docs.oracle.com/en/java/javase/17/jfapi/";>Java Flight Recorder 
(JFR)</a></p></td>
+<td><p>Yes</p></td>
+<td><p>No</p></td>
+<td><p>No (JDK 11+)</p></td>
+<td><p>GC pressure, allocations, thread contention, I/O — any JVM-level 
investigation</p></td>
+</tr>
+<tr class="row-even"><td><p><a class="reference external" 
href="https://github.com/flamegraph-rs/flamegraph";>cargo-flamegraph</a></p></td>
+<td><p>No</p></td>
+<td><p>Yes</p></td>
+<td><p>Yes</p></td>
+<td><p>Isolated Rust micro-benchmarks without a JVM</p></td>
+</tr>
+</tbody>
+</table>
+</div>
+<p><strong>Recommendation:</strong> Use <strong>async-profiler</strong> when 
profiling Spark queries with Comet enabled —
+it is the only tool that shows both JVM and native frames in a single flame 
graph.
+Use <strong>JFR</strong> when you need rich JVM event data (GC, locks, I/O) 
without installing anything.
+Use <strong>cargo-flamegraph</strong> when working on native code in isolation 
via <code class="docutils literal notranslate"><span class="pre">cargo</span> 
<span class="pre">bench</span></code>.</p>
+</section>
+<section id="profiling-with-async-profiler">
+<h2>Profiling with async-profiler<a class="headerlink" 
href="#profiling-with-async-profiler" title="Link to this heading">#</a></h2>
+<p><a class="reference external" 
href="https://github.com/async-profiler/async-profiler";>async-profiler</a> 
captures JVM and
+native code in the same flame graph by using Linux <code class="docutils 
literal notranslate"><span class="pre">perf_events</span></code> or macOS <code 
class="docutils literal notranslate"><span class="pre">dtrace</span></code>.
+This makes it ideal for profiling Comet, where hot paths cross the JNI 
boundary between
+Spark and Rust.</p>
+<section id="installation">
+<h3>Installation<a class="headerlink" href="#installation" title="Link to this 
heading">#</a></h3>
+<p>Download a release from the <a class="reference external" 
href="https://github.com/async-profiler/async-profiler/releases";>async-profiler 
releases page</a>:</p>
+<div class="highlight-shell notranslate"><div 
class="highlight"><pre><span></span><span class="c1"># Linux x64</span>
+wget<span class="w"> 
</span>https://github.com/async-profiler/async-profiler/releases/download/v3.0/async-profiler-3.0-linux-x64.tar.gz
+mkdir<span class="w"> </span>-p<span class="w"> </span><span 
class="nv">$HOME</span>/opt/async-profiler
+tar<span class="w"> </span>xzf<span class="w"> 
</span>async-profiler-3.0-linux-x64.tar.gz<span class="w"> </span>-C<span 
class="w"> </span><span class="nv">$HOME</span>/opt/async-profiler<span 
class="w"> </span>--strip-components<span class="o">=</span><span 
class="m">1</span>
+<span class="nb">export</span><span class="w"> </span><span 
class="nv">ASYNC_PROFILER_HOME</span><span class="o">=</span><span 
class="nv">$HOME</span>/opt/async-profiler
+</pre></div>
+</div>
+<p>On macOS, download the appropriate <code class="docutils literal 
notranslate"><span class="pre">macos</span></code> archive instead.</p>
+</section>
+<section id="attaching-to-a-running-spark-application">
+<h3>Attaching to a running Spark application<a class="headerlink" 
href="#attaching-to-a-running-spark-application" title="Link to this 
heading">#</a></h3>
+<p>Use the <code class="docutils literal notranslate"><span 
class="pre">asprof</span></code> launcher to attach to a running JVM by PID:</p>
+<div class="highlight-shell notranslate"><div 
class="highlight"><pre><span></span><span class="c1"># Start CPU profiling for 
30 seconds, output an HTML flame graph</span>
+<span class="nv">$ASYNC_PROFILER_HOME</span>/bin/asprof<span class="w"> 
</span>-d<span class="w"> </span><span class="m">30</span><span class="w"> 
</span>-f<span class="w"> </span>flamegraph.html<span class="w"> 
</span>&lt;pid&gt;
+
+<span class="c1"># Wall-clock profiling</span>
+<span class="nv">$ASYNC_PROFILER_HOME</span>/bin/asprof<span class="w"> 
</span>-e<span class="w"> </span>wall<span class="w"> </span>-d<span class="w"> 
</span><span class="m">30</span><span class="w"> </span>-f<span class="w"> 
</span>flamegraph.html<span class="w"> </span>&lt;pid&gt;
+
+<span class="c1"># Start profiling (no duration limit), then stop later</span>
+<span class="nv">$ASYNC_PROFILER_HOME</span>/bin/asprof<span class="w"> 
</span>start<span class="w"> </span>-e<span class="w"> </span>cpu<span 
class="w"> </span>&lt;pid&gt;
+<span class="c1"># ... run your query ...</span>
+<span class="nv">$ASYNC_PROFILER_HOME</span>/bin/asprof<span class="w"> 
</span>stop<span class="w"> </span>-f<span class="w"> 
</span>flamegraph.html<span class="w"> </span>&lt;pid&gt;
+</pre></div>
+</div>
+<p>Find the Spark driver/executor PID with <code class="docutils literal 
notranslate"><span class="pre">jps</span></code> or <code class="docutils 
literal notranslate"><span class="pre">pgrep</span> <span class="pre">-f</span> 
<span class="pre">SparkSubmit</span></code>.</p>
+</section>
+<section id="passing-profiler-flags-via-spark-submit">
+<h3>Passing profiler flags via spark-submit<a class="headerlink" 
href="#passing-profiler-flags-via-spark-submit" title="Link to this 
heading">#</a></h3>
+<p>You can also attach async-profiler as a Java agent at JVM startup:</p>
+<div class="highlight-shell notranslate"><div 
class="highlight"><pre><span></span>spark-submit<span class="w"> </span><span 
class="se">\</span>
+<span class="w">  </span>--conf<span class="w"> </span><span 
class="s2">&quot;spark.driver.extraJavaOptions=-agentpath:</span><span 
class="nv">$ASYNC_PROFILER_HOME</span><span 
class="s2">/lib/libasyncProfiler.so=start,event=cpu,file=driver.html,tree&quot;</span><span
 class="w"> </span><span class="se">\</span>
+<span class="w">  </span>--conf<span class="w"> </span><span 
class="s2">&quot;spark.executor.extraJavaOptions=-agentpath:</span><span 
class="nv">$ASYNC_PROFILER_HOME</span><span 
class="s2">/lib/libasyncProfiler.so=start,event=cpu,file=executor.html,tree&quot;</span><span
 class="w"> </span><span class="se">\</span>
+<span class="w">  </span>...
+</pre></div>
+</div>
+<p>Note: If the executor is distributed then <code class="docutils literal 
notranslate"><span class="pre">executor.html</span></code> will be written on 
the remote node.</p>
+</section>
+<section id="choosing-an-event-type">
+<h3>Choosing an event type<a class="headerlink" href="#choosing-an-event-type" 
title="Link to this heading">#</a></h3>
+<div class="pst-scrollable-table-container"><table class="table">
+<thead>
+<tr class="row-odd"><th class="head"><p>Event</p></th>
+<th class="head"><p>When to use</p></th>
+</tr>
+</thead>
+<tbody>
+<tr class="row-even"><td><p><code class="docutils literal notranslate"><span 
class="pre">cpu</span></code></p></td>
+<td><p>Default. Shows where CPU cycles are spent. Use for compute-bound 
queries.</p></td>
+</tr>
+<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span 
class="pre">wall</span></code></p></td>
+<td><p>Wall-clock time including blocked/waiting threads. Use to find JNI 
boundary overhead and I/O stalls.</p></td>
+</tr>
+<tr class="row-even"><td><p><code class="docutils literal notranslate"><span 
class="pre">alloc</span></code></p></td>
+<td><p>Heap allocation profiling. Use to find JVM allocation hotspots around 
Arrow FFI and columnar conversions.</p></td>
+</tr>
+<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span 
class="pre">lock</span></code></p></td>
+<td><p>Lock contention. Use when threads appear to spend time waiting on 
synchronized blocks or locks.</p></td>
+</tr>
+</tbody>
+</table>
+</div>
+</section>
+<section id="output-formats">
+<h3>Output formats<a class="headerlink" href="#output-formats" title="Link to 
this heading">#</a></h3>
+<div class="pst-scrollable-table-container"><table class="table">
+<thead>
+<tr class="row-odd"><th class="head"><p>Format</p></th>
+<th class="head"><p>Flag</p></th>
+<th class="head"><p>Description</p></th>
+</tr>
+</thead>
+<tbody>
+<tr class="row-even"><td><p>HTML flame graph</p></td>
+<td><p><code class="docutils literal notranslate"><span class="pre">-f</span> 
<span class="pre">out.html</span></code></p></td>
+<td><p>Interactive flame graph (default and most useful).</p></td>
+</tr>
+<tr class="row-odd"><td><p>JFR</p></td>
+<td><p><code class="docutils literal notranslate"><span class="pre">-f</span> 
<span class="pre">out.jfr</span></code></p></td>
+<td><p>Viewable in JDK Mission Control or IntelliJ.</p></td>
+</tr>
+<tr class="row-even"><td><p>Collapsed stacks</p></td>
+<td><p><code class="docutils literal notranslate"><span class="pre">-f</span> 
<span class="pre">out.collapsed</span></code></p></td>
+<td><p>For use with Brendan Gregg’s FlameGraph scripts.</p></td>
+</tr>
+<tr class="row-odd"><td><p>Text summary</p></td>
+<td><p><code class="docutils literal notranslate"><span class="pre">-o</span> 
<span class="pre">text</span></code></p></td>
+<td><p>Flat list of hot methods.</p></td>
+</tr>
+</tbody>
+</table>
+</div>
+</section>
+<section id="platform-notes">
+<h3>Platform notes<a class="headerlink" href="#platform-notes" title="Link to 
this heading">#</a></h3>
+<p><strong>Linux:</strong> Set <code class="docutils literal 
notranslate"><span class="pre">perf_event_paranoid</span></code> to allow 
profiling:</p>
+<div class="highlight-shell notranslate"><div 
class="highlight"><pre><span></span>sudo<span class="w"> </span>sysctl<span 
class="w"> </span>kernel.perf_event_paranoid<span class="o">=</span><span 
class="m">1</span><span class="w">   </span><span class="c1"># or 0 / -1 for 
full access</span>
+sudo<span class="w"> </span>sysctl<span class="w"> 
</span>kernel.kptr_restrict<span class="o">=</span><span 
class="m">0</span><span class="w">          </span><span class="c1"># optional: 
enable kernel symbols</span>
+</pre></div>
+</div>
+<p><strong>macOS:</strong> async-profiler uses <code class="docutils literal 
notranslate"><span class="pre">dtrace</span></code> on macOS, which requires 
running as root or
+with SIP (System Integrity Protection) adjustments. Native Rust frames may not 
be fully
+resolved on macOS; Linux is recommended for the most complete flame graphs.</p>
+</section>
+<section id="integrated-benchmark-profiling">
+<h3>Integrated benchmark profiling<a class="headerlink" 
href="#integrated-benchmark-profiling" title="Link to this heading">#</a></h3>
+<p>The TPC benchmark scripts in <code class="docutils literal 
notranslate"><span class="pre">benchmarks/tpc/</span></code> have built-in 
async-profiler support via
+the <code class="docutils literal notranslate"><span 
class="pre">--async-profiler</span></code> flag. See <a class="reference 
external" 
href="https://github.com/apache/datafusion-comet/blob/main/benchmarks/tpc/README.md";>benchmarks/tpc/README.md</a>
+for details.</p>
+</section>
+</section>
+<section id="profiling-with-java-flight-recorder">
+<h2>Profiling with Java Flight Recorder<a class="headerlink" 
href="#profiling-with-java-flight-recorder" title="Link to this 
heading">#</a></h2>
+<p><a class="reference external" 
href="https://docs.oracle.com/en/java/javase/17/jfapi/";>Java Flight Recorder 
(JFR)</a> is built
+into JDK 11+ and collects detailed JVM runtime data with very low overhead. It 
does not
+see native Rust frames, but is excellent for diagnosing GC pressure, thread 
contention,
+I/O latency, and JVM-level allocation patterns.</p>
+<section id="adding-jfr-flags-to-spark-submit">
+<h3>Adding JFR flags to spark-submit<a class="headerlink" 
href="#adding-jfr-flags-to-spark-submit" title="Link to this heading">#</a></h3>
+<div class="highlight-shell notranslate"><div 
class="highlight"><pre><span></span>spark-submit<span class="w"> </span><span 
class="se">\</span>
+<span class="w">  </span>--conf<span class="w"> </span><span 
class="s2">&quot;spark.driver.extraJavaOptions=-XX:StartFlightRecording=duration=120s,filename=driver.jfr&quot;</span><span
 class="w"> </span><span class="se">\</span>
+<span class="w">  </span>--conf<span class="w"> </span><span 
class="s2">&quot;spark.executor.extraJavaOptions=-XX:StartFlightRecording=duration=120s,filename=executor.jfr&quot;</span><span
 class="w"> </span><span class="se">\</span>
+<span class="w">  </span>...
+</pre></div>
+</div>
+<p>For continuous recording without a fixed duration:</p>
+<div class="highlight-shell notranslate"><div 
class="highlight"><pre><span></span>--conf<span class="w"> </span><span 
class="s2">&quot;spark.driver.extraJavaOptions=-XX:StartFlightRecording=disk=true,maxsize=500m,filename=driver.jfr&quot;</span>
+</pre></div>
+</div>
+<p>You can also start and stop recording dynamically using <code 
class="docutils literal notranslate"><span class="pre">jcmd</span></code>:</p>
+<div class="highlight-shell notranslate"><div 
class="highlight"><pre><span></span>jcmd<span class="w"> 
</span>&lt;pid&gt;<span class="w"> </span>JFR.start<span class="w"> 
</span><span class="nv">name</span><span class="o">=</span>profile
+<span class="c1"># ... run your query ...</span>
+jcmd<span class="w"> </span>&lt;pid&gt;<span class="w"> </span>JFR.stop<span 
class="w"> </span><span class="nv">name</span><span 
class="o">=</span>profile<span class="w"> </span><span 
class="nv">filename</span><span class="o">=</span>recording.jfr
+</pre></div>
+</div>
+</section>
+<section id="viewing-recordings">
+<h3>Viewing recordings<a class="headerlink" href="#viewing-recordings" 
title="Link to this heading">#</a></h3>
+<ul class="simple">
+<li><p><strong><a class="reference external" 
href="https://jdk.java.net/jmc/";>JDK Mission Control (JMC)</a></strong> — the 
most comprehensive viewer.
+Shows flame graphs, GC timeline, thread activity, I/O, and allocation hot 
spots.</p></li>
+<li><p><strong>IntelliJ IDEA</strong> — open <code class="docutils literal 
notranslate"><span class="pre">.jfr</span></code> files directly in the 
built-in profiler
+(Run → Open Profiler Snapshot).</p></li>
+<li><p><strong><code class="docutils literal notranslate"><span 
class="pre">jfr</span></code> CLI</strong> — quick summaries from the command 
line: <code class="docutils literal notranslate"><span class="pre">jfr</span> 
<span class="pre">summary</span> <span 
class="pre">driver.jfr</span></code></p></li>
+</ul>
+</section>
+<section id="useful-jfr-events-for-comet-debugging">
+<h3>Useful JFR events for Comet debugging<a class="headerlink" 
href="#useful-jfr-events-for-comet-debugging" title="Link to this 
heading">#</a></h3>
+<div class="pst-scrollable-table-container"><table class="table">
+<thead>
+<tr class="row-odd"><th class="head"><p>Event</p></th>
+<th class="head"><p>What it shows</p></th>
+</tr>
+</thead>
+<tbody>
+<tr class="row-even"><td><p><code class="docutils literal notranslate"><span 
class="pre">jdk.GCPhasePause</span></code></p></td>
+<td><p>GC pause durations — helps identify memory pressure from Arrow 
allocations.</p></td>
+</tr>
+<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span 
class="pre">jdk.ObjectAllocationInNewTLAB</span></code> / <code class="docutils 
literal notranslate"><span 
class="pre">jdk.ObjectAllocationOutsideTLAB</span></code></p></td>
+<td><p>Allocation hot spots.</p></td>
+</tr>
+<tr class="row-even"><td><p><code class="docutils literal notranslate"><span 
class="pre">jdk.JavaMonitorWait</span></code> / <code class="docutils literal 
notranslate"><span class="pre">jdk.ThreadPark</span></code></p></td>
+<td><p>Thread contention and lock waits.</p></td>
+</tr>
+<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span 
class="pre">jdk.FileRead</span></code> / <code class="docutils literal 
notranslate"><span class="pre">jdk.FileWrite</span></code> / <code 
class="docutils literal notranslate"><span 
class="pre">jdk.SocketRead</span></code></p></td>
+<td><p>I/O latency.</p></td>
+</tr>
+<tr class="row-even"><td><p><code class="docutils literal notranslate"><span 
class="pre">jdk.ExecutionSample</span></code></p></td>
+<td><p>CPU sampling (method profiling, similar to a flame graph).</p></td>
+</tr>
+</tbody>
+</table>
+</div>
+</section>
+<section id="id1">
+<h3>Integrated benchmark profiling<a class="headerlink" href="#id1" 
title="Link to this heading">#</a></h3>
+<p>The TPC benchmark scripts support <code class="docutils literal 
notranslate"><span class="pre">--jfr</span></code> for automatic JFR recording 
during benchmark
+runs. See <a class="reference external" 
href="https://github.com/apache/datafusion-comet/blob/main/benchmarks/tpc/README.md";>benchmarks/tpc/README.md</a>
 for details.</p>
+</section>
+</section>
+<section id="profiling-native-code-with-cargo-flamegraph">
+<h2>Profiling Native Code with cargo-flamegraph<a class="headerlink" 
href="#profiling-native-code-with-cargo-flamegraph" title="Link to this 
heading">#</a></h2>
+<p>For profiling Rust code in isolation — without a JVM — use <code 
class="docutils literal notranslate"><span class="pre">cargo</span> <span 
class="pre">bench</span></code> with
+<a class="reference external" 
href="https://github.com/flamegraph-rs/flamegraph";>cargo-flamegraph</a>.</p>
 <section id="running-micro-benchmarks-with-cargo-bench">
-<h2>Running micro benchmarks with cargo bench<a class="headerlink" 
href="#running-micro-benchmarks-with-cargo-bench" title="Link to this 
heading">#</a></h2>
+<h3>Running micro benchmarks with cargo bench<a class="headerlink" 
href="#running-micro-benchmarks-with-cargo-bench" title="Link to this 
heading">#</a></h3>
 <p>When implementing a new operator or expression, it is good practice to add 
a new microbenchmark under <code class="docutils literal notranslate"><span 
class="pre">core/benches</span></code>.</p>
 <p>It is often easiest to copy an existing benchmark and modify it for the new 
operator or expression. It is also
 necessary to add a new section to the <code class="docutils literal 
notranslate"><span class="pre">Cargo.toml</span></code> file, such as:</p>
@@ -471,7 +702,7 @@ necessary to add a new section to the <code class="docutils 
literal notranslate"
 <span class="n">harness</span><span class="w"> </span><span 
class="o">=</span><span class="w"> </span><span class="kc">false</span>
 </pre></div>
 </div>
-<p>These benchmarks are useful when for comparing performance between releases 
or between feature branches and the
+<p>These benchmarks are useful for comparing performance between releases or 
between feature branches and the
 main branch to help prevent regressions in performance when adding new 
features or fixing bugs.</p>
 <p>Individual benchmarks can be run by name with the following command.</p>
 <div class="highlight-shell notranslate"><div 
class="highlight"><pre><span></span>cargo<span class="w"> </span>bench<span 
class="w"> </span>shuffle_writer
@@ -489,7 +720,7 @@ main branch to help prevent regressions in performance when 
adding new features
 </div>
 </section>
 <section id="profiling-with-cargo-flamegraph">
-<h2>Profiling with cargo-flamegraph<a class="headerlink" 
href="#profiling-with-cargo-flamegraph" title="Link to this heading">#</a></h2>
+<h3>Profiling with cargo-flamegraph<a class="headerlink" 
href="#profiling-with-cargo-flamegraph" title="Link to this heading">#</a></h3>
 <p>Install cargo-flamegraph:</p>
 <div class="highlight-shell notranslate"><div 
class="highlight"><pre><span></span>cargo<span class="w"> </span>install<span 
class="w"> </span>flamegraph
 </pre></div>
@@ -516,6 +747,44 @@ running flamegraph.</p>
 <p>Here is the flamegraph for this example:</p>
 <p><img alt="flamegraph" src="../_images/flamegraph.png" /></p>
 </section>
+</section>
+<section id="tips-for-profiling-comet">
+<h2>Tips for Profiling Comet<a class="headerlink" 
href="#tips-for-profiling-comet" title="Link to this heading">#</a></h2>
+<section id="use-wall-clock-profiling-to-spot-jni-boundary-overhead">
+<h3>Use wall-clock profiling to spot JNI boundary overhead<a 
class="headerlink" 
href="#use-wall-clock-profiling-to-spot-jni-boundary-overhead" title="Link to 
this heading">#</a></h3>
+<p>When profiling Comet with async-profiler, <code class="docutils literal 
notranslate"><span class="pre">wall</span></code> mode is often more revealing 
than <code class="docutils literal notranslate"><span 
class="pre">cpu</span></code>
+because it captures time spent crossing the JNI boundary, waiting for native 
results,
+and blocked on I/O — none of which show up in CPU-only profiles.</p>
+<div class="highlight-shell notranslate"><div 
class="highlight"><pre><span></span><span 
class="nv">$ASYNC_PROFILER_HOME</span>/bin/asprof<span class="w"> 
</span>-e<span class="w"> </span>wall<span class="w"> </span>-d<span class="w"> 
</span><span class="m">60</span><span class="w"> </span>-f<span class="w"> 
</span>wall-profile.html<span class="w"> </span>&lt;pid&gt;
+</pre></div>
+</div>
+</section>
+<section id="use-alloc-profiling-around-arrow-ffi">
+<h3>Use alloc profiling around Arrow FFI<a class="headerlink" 
href="#use-alloc-profiling-around-arrow-ffi" title="Link to this 
heading">#</a></h3>
+<p>JVM allocation profiling can identify hotspots in the Arrow FFI path where 
temporary
+objects are created during data transfer between JVM and native code:</p>
+<div class="highlight-shell notranslate"><div 
class="highlight"><pre><span></span><span 
class="nv">$ASYNC_PROFILER_HOME</span>/bin/asprof<span class="w"> 
</span>-e<span class="w"> </span>alloc<span class="w"> </span>-d<span 
class="w"> </span><span class="m">60</span><span class="w"> </span>-f<span 
class="w"> </span>alloc-profile.html<span class="w"> </span>&lt;pid&gt;
+</pre></div>
+</div>
+<p>Look for allocations in <code class="docutils literal notranslate"><span 
class="pre">CometExecIterator</span></code>, <code class="docutils literal 
notranslate"><span class="pre">CometBatchIterator</span></code>, and Arrow 
vector
+classes.</p>
+</section>
+<section id="isolate-rust-only-performance-issues">
+<h3>Isolate Rust-only performance issues<a class="headerlink" 
href="#isolate-rust-only-performance-issues" title="Link to this 
heading">#</a></h3>
+<p>If a flame graph shows the hot path is entirely within native code, switch 
to
+<code class="docutils literal notranslate"><span 
class="pre">cargo-flamegraph</span></code> to get better symbol resolution and 
avoid JVM noise:</p>
+<div class="highlight-shell notranslate"><div 
class="highlight"><pre><span></span><span class="nb">cd</span><span class="w"> 
</span>native
+cargo<span class="w"> </span>flamegraph<span class="w"> </span>--root<span 
class="w"> </span>--bench<span class="w"> </span>&lt;benchmark_name&gt;
+</pre></div>
+</div>
+</section>
+<section id="correlating-jvm-and-native-frames">
+<h3>Correlating JVM and native frames<a class="headerlink" 
href="#correlating-jvm-and-native-frames" title="Link to this 
heading">#</a></h3>
+<p>In async-profiler flame graphs, native Rust frames appear below JNI entry 
points like
+<code class="docutils literal notranslate"><span 
class="pre">Java_org_apache_comet_Native_*</span></code>. Look for these 
transition points to understand how
+time is split between Spark’s JVM code and Comet’s native execution.</p>
+</section>
+</section>
 </section>
 
 
diff --git a/contributor-guide/release_process.html 
b/contributor-guide/release_process.html
index 4624f65d1..cc1a671be 100644
--- a/contributor-guide/release_process.html
+++ b/contributor-guide/release_process.html
@@ -366,7 +366,7 @@ under the License.
 <li class="toctree-l2"><a class="reference internal" 
href="adding_a_new_operator.html">Adding a New Operator</a></li>
 <li class="toctree-l2"><a class="reference internal" 
href="adding_a_new_expression.html">Adding a New Expression</a></li>
 <li class="toctree-l2"><a class="reference internal" 
href="tracing.html">Tracing</a></li>
-<li class="toctree-l2"><a class="reference internal" 
href="profiling_native_code.html">Profiling Native Code</a></li>
+<li class="toctree-l2"><a class="reference internal" 
href="profiling.html">Profiling</a></li>
 <li class="toctree-l2"><a class="reference internal" 
href="spark-sql-tests.html">Spark SQL Tests</a></li>
 <li class="toctree-l2"><a class="reference internal" 
href="iceberg-spark-tests.html">Iceberg Spark Tests</a></li>
 <li class="toctree-l2"><a class="reference internal" 
href="sql-file-tests.html">SQL File Tests</a></li>
diff --git a/contributor-guide/roadmap.html b/contributor-guide/roadmap.html
index 9b5f501c1..be82d77ee 100644
--- a/contributor-guide/roadmap.html
+++ b/contributor-guide/roadmap.html
@@ -366,7 +366,7 @@ under the License.
 <li class="toctree-l2"><a class="reference internal" 
href="adding_a_new_operator.html">Adding a New Operator</a></li>
 <li class="toctree-l2"><a class="reference internal" 
href="adding_a_new_expression.html">Adding a New Expression</a></li>
 <li class="toctree-l2"><a class="reference internal" 
href="tracing.html">Tracing</a></li>
-<li class="toctree-l2"><a class="reference internal" 
href="profiling_native_code.html">Profiling Native Code</a></li>
+<li class="toctree-l2"><a class="reference internal" 
href="profiling.html">Profiling</a></li>
 <li class="toctree-l2"><a class="reference internal" 
href="spark-sql-tests.html">Spark SQL Tests</a></li>
 <li class="toctree-l2"><a class="reference internal" 
href="iceberg-spark-tests.html">Iceberg Spark Tests</a></li>
 <li class="toctree-l2"><a class="reference internal" 
href="sql-file-tests.html">SQL File Tests</a></li>
diff --git a/contributor-guide/spark-sql-tests.html 
b/contributor-guide/spark-sql-tests.html
index d0eaad61b..39dda8ced 100644
--- a/contributor-guide/spark-sql-tests.html
+++ b/contributor-guide/spark-sql-tests.html
@@ -66,7 +66,7 @@ under the License.
     <link rel="index" title="Index" href="../genindex.html" />
     <link rel="search" title="Search" href="../search.html" />
     <link rel="next" title="Running Iceberg Spark Tests" 
href="iceberg-spark-tests.html" />
-    <link rel="prev" title="Profiling Native Code" 
href="profiling_native_code.html" />
+    <link rel="prev" title="Profiling" href="profiling.html" />
   <meta name="viewport" content="width=device-width, initial-scale=1"/>
   <meta name="docsearch:language" content="en"/>
   <meta name="docsearch:version" content="" />
@@ -366,7 +366,7 @@ under the License.
 <li class="toctree-l2"><a class="reference internal" 
href="adding_a_new_operator.html">Adding a New Operator</a></li>
 <li class="toctree-l2"><a class="reference internal" 
href="adding_a_new_expression.html">Adding a New Expression</a></li>
 <li class="toctree-l2"><a class="reference internal" 
href="tracing.html">Tracing</a></li>
-<li class="toctree-l2"><a class="reference internal" 
href="profiling_native_code.html">Profiling Native Code</a></li>
+<li class="toctree-l2"><a class="reference internal" 
href="profiling.html">Profiling</a></li>
 <li class="toctree-l2 current"><a class="current reference internal" 
href="#">Spark SQL Tests</a></li>
 <li class="toctree-l2"><a class="reference internal" 
href="iceberg-spark-tests.html">Iceberg Spark Tests</a></li>
 <li class="toctree-l2"><a class="reference internal" 
href="sql-file-tests.html">SQL File Tests</a></li>
@@ -608,12 +608,12 @@ new version.</p>
                   
 <div class="prev-next-area">
     <a class="left-prev"
-       href="profiling_native_code.html"
+       href="profiling.html"
        title="previous page">
       <i class="fa-solid fa-angle-left"></i>
       <div class="prev-next-info">
         <p class="prev-next-subtitle">previous</p>
-        <p class="prev-next-title">Profiling Native Code</p>
+        <p class="prev-next-title">Profiling</p>
       </div>
     </a>
     <a class="right-next"
diff --git a/contributor-guide/sql-file-tests.html 
b/contributor-guide/sql-file-tests.html
index 30a817298..ad58a1a85 100644
--- a/contributor-guide/sql-file-tests.html
+++ b/contributor-guide/sql-file-tests.html
@@ -366,7 +366,7 @@ under the License.
 <li class="toctree-l2"><a class="reference internal" 
href="adding_a_new_operator.html">Adding a New Operator</a></li>
 <li class="toctree-l2"><a class="reference internal" 
href="adding_a_new_expression.html">Adding a New Expression</a></li>
 <li class="toctree-l2"><a class="reference internal" 
href="tracing.html">Tracing</a></li>
-<li class="toctree-l2"><a class="reference internal" 
href="profiling_native_code.html">Profiling Native Code</a></li>
+<li class="toctree-l2"><a class="reference internal" 
href="profiling.html">Profiling</a></li>
 <li class="toctree-l2"><a class="reference internal" 
href="spark-sql-tests.html">Spark SQL Tests</a></li>
 <li class="toctree-l2"><a class="reference internal" 
href="iceberg-spark-tests.html">Iceberg Spark Tests</a></li>
 <li class="toctree-l2 current"><a class="current reference internal" 
href="#">SQL File Tests</a></li>
diff --git a/contributor-guide/tracing.html b/contributor-guide/tracing.html
index 33292f424..6a592950b 100644
--- a/contributor-guide/tracing.html
+++ b/contributor-guide/tracing.html
@@ -65,7 +65,7 @@ under the License.
     <script async="true" defer="true" 
src="https://buttons.github.io/buttons.js";></script>
     <link rel="index" title="Index" href="../genindex.html" />
     <link rel="search" title="Search" href="../search.html" />
-    <link rel="next" title="Profiling Native Code" 
href="profiling_native_code.html" />
+    <link rel="next" title="Profiling" href="profiling.html" />
     <link rel="prev" title="Adding a New Expression" 
href="adding_a_new_expression.html" />
   <meta name="viewport" content="width=device-width, initial-scale=1"/>
   <meta name="docsearch:language" content="en"/>
@@ -366,7 +366,7 @@ under the License.
 <li class="toctree-l2"><a class="reference internal" 
href="adding_a_new_operator.html">Adding a New Operator</a></li>
 <li class="toctree-l2"><a class="reference internal" 
href="adding_a_new_expression.html">Adding a New Expression</a></li>
 <li class="toctree-l2 current"><a class="current reference internal" 
href="#">Tracing</a></li>
-<li class="toctree-l2"><a class="reference internal" 
href="profiling_native_code.html">Profiling Native Code</a></li>
+<li class="toctree-l2"><a class="reference internal" 
href="profiling.html">Profiling</a></li>
 <li class="toctree-l2"><a class="reference internal" 
href="spark-sql-tests.html">Spark SQL Tests</a></li>
 <li class="toctree-l2"><a class="reference internal" 
href="iceberg-spark-tests.html">Iceberg Spark Tests</a></li>
 <li class="toctree-l2"><a class="reference internal" 
href="sql-file-tests.html">SQL File Tests</a></li>
@@ -530,11 +530,11 @@ directory with the filename <code class="docutils literal 
notranslate"><span cla
       </div>
     </a>
     <a class="right-next"
-       href="profiling_native_code.html"
+       href="profiling.html"
        title="next page">
       <div class="prev-next-info">
         <p class="prev-next-subtitle">next</p>
-        <p class="prev-next-title">Profiling Native Code</p>
+        <p class="prev-next-title">Profiling</p>
       </div>
       <i class="fa-solid fa-angle-right"></i>
     </a>
diff --git a/objects.inv b/objects.inv
index d0d58f9a0..a50c5f1a3 100644
Binary files a/objects.inv and b/objects.inv differ
diff --git a/searchindex.js b/searchindex.js
index 907f9d7f8..d68a8ebf7 100644
--- a/searchindex.js
+++ b/searchindex.js
@@ -1 +1 @@
-Search.setIndex({"alltitles": {"1. Format Your Code": [[13, 
"format-your-code"]], "1. Install Comet": [[15, "install-comet"], [24, 
"install-comet"]], "1. Native Operators (nativeExecs map)": [[4, 
"native-operators-nativeexecs-map"]], "2. Build and Verify": [[13, 
"build-and-verify"]], "2. Clone Iceberg and Apply Diff": [[15, 
"clone-iceberg-and-apply-diff"]], "2. Clone Spark and Apply Diff": [[24, 
"clone-spark-and-apply-diff"]], "2. Sink Operators (sinks map)": [[4, 
"sink-operators-sinks-m [...]
\ No newline at end of file
+Search.setIndex({"alltitles": {"1. Format Your Code": [[13, 
"format-your-code"]], "1. Install Comet": [[15, "install-comet"], [24, 
"install-comet"]], "1. Native Operators (nativeExecs map)": [[4, 
"native-operators-nativeexecs-map"]], "2. Build and Verify": [[13, 
"build-and-verify"]], "2. Clone Iceberg and Apply Diff": [[15, 
"clone-iceberg-and-apply-diff"]], "2. Clone Spark and Apply Diff": [[24, 
"clone-spark-and-apply-diff"]], "2. Sink Operators (sinks map)": [[4, 
"sink-operators-sinks-m [...]
\ No newline at end of file


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to