Skip to content

go/adbc/driver/flightsql: performance loss in go1.22.5/go1.21.12 #2021

Closed
@lidavidm

Description

@lidavidm

What happened?

There appears to be an incredible amount of FFI overhead when using a driver built by recent versions of Go.

lidavidm@debian ~/C/arrow-adbc ((adfb70a2))> python tester.py                                                                                                                     (adbc-good) 
Driver: /home/lidavidm/miniforge3/envs/adbc-good/lib/libadbc_driver_flightsql.so
Completed 100 iterations
Completed 200 iterations
Completed 300 iterations
Completed 400 iterations
Completed 500 iterations
Mean:   0.005054534418188268
Median: 0.004982210506568663
Sum:    2.527267209094134
lidavidm@debian ~/C/arrow-adbc ((adfb70a2))> python tester.py                                                                                                                      (adbc-bad) 
Driver: /home/lidavidm/miniforge3/envs/adbc-bad/lib/libadbc_driver_flightsql.so
Completed 100 iterations
Completed 200 iterations
Completed 300 iterations
Completed 400 iterations
Completed 500 iterations
Mean:   0.023634329783672
Median: 0.02316386450547725
Sum:    11.817164891836

Stack Trace

N/A

How can we reproduce the bug?

$ go run github.com/apache/arrow/go/v17/arrow/flight/flightsql/example/cmd/sqlite_flightsql_server@latest -port 8080
import statistics
import time
import sys
import adbc_driver_flightsql.dbapi

print("Driver:", adbc_driver_flightsql._driver_path())

times = []

for i in range(500):
    start = time.monotonic()
    with adbc_driver_flightsql.dbapi.connect("grpc://localhost:8080") as conn:
        with conn.cursor() as cursor:
            cursor.execute("SELECT 1")
            cursor.fetchall()
    end = time.monotonic()
    times.append(end - start)

    if (i + 1) % 100 == 0:
        print(f"Completed {i + 1} iterations")

print("Mean:  ", statistics.mean(times))
print("Median:", statistics.median(times))
print("Sum:   ", sum(times))
sys.exit(0)

Environment/Setup

Linux x86_64

Conda package versions 1.0.0 (built with go1.21.7, IIRC) vs 1.1.0 (go 1.22.5)

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type: bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions