diff --git a/plans/sqlite_off_main_thread_plan.md b/plans/sqlite_off_main_thread_plan.md new file mode 100644 index 0000000..a455988 --- /dev/null +++ b/plans/sqlite_off_main_thread_plan.md @@ -0,0 +1,379 @@ +# Plan: Remove All SQLite from lws-main Thread + +## Problem Statement + +After implementing the 4 offload fixes (v2.1.4), `lws-main` still consumes **53.87% avg CPU** (down from 68.71%). Perf profiling shows **100% of the top symbols are SQLite** — B-tree traversal, page cache, VFS reads. The worker threads (`db-read`, `db-write`, `event-worker`) are nearly idle at 0.0–0.1%. + +The goal is to eliminate all synchronous SQLite access from `lws-main` so it only does: JSON parsing, WebSocket I/O, subscription matching (in-memory), and message queuing. + +## Thread Architecture Change + +Reduce from 7 threads to 4: + +``` +Current: lws-main, db-read-1, db-read-2, db-read-3, db-read-4, db-write, event-worker +Proposed: lws-main, db-read, db-write, event-worker +``` + +The 4 reader threads are overkill — they average 0.07–0.10% CPU each. A single `db-read` thread is sufficient for the current workload. This can be made configurable later if needed. + +## Remaining SQLite Calls on lws-main + +Every synchronous SQLite call that currently runs on `lws-main`: + +### Hot Path — Per-Event (every incoming EVENT message) + +| Call | Location | Frequency | Cost | +|------|----------|-----------|------| +| `event_id_exists_in_db()` | websockets.c:1324, 2134 | Every EVENT | ~10-50us per B-tree lookup | +| `get_config_value("relay_pubkey")` | websockets.c:2050 | Every kind-14 EVENT | SQLite SELECT | +| `get_config_value("admin_pubkey")` | websockets.c:2073 | Every kind-23456 EVENT | SQLite SELECT | + +### Hot Path — Per-Connection (every new WebSocket connection) + +| Call | Location | Frequency | Cost | +|------|----------|-----------|------| +| `get_config_bool("trust_proxy_headers")` | websockets.c:1071 | Every connection | SQLite SELECT | +| `get_config_bool("nip42_auth_required_events")` | websockets.c:1134 | Every connection | SQLite SELECT | +| `get_config_bool("nip42_auth_required_subscriptions")` | websockets.c:1135 | Every connection | SQLite SELECT | + +### Hot Path — Per-REQ (every subscription request) + +| Call | Location | Frequency | Cost | +|------|----------|-----------|------| +| `get_config_bool("expiration_enabled")` | main.c:1424 | Every REQ | SQLite SELECT | +| `get_config_bool("expiration_filter")` | main.c:1425 | Every REQ | SQLite SELECT | +| `check_database_auth_rules()` | websockets.c:1706 | Every REQ when WoT enabled | SQLite SELECT | + +### Medium Path — Per-COUNT (NIP-45) + +| Call | Location | Frequency | Cost | +|------|----------|-----------|------| +| `thread_pool_execute_count_sync()` | websockets.c:3689 | Every COUNT message | Blocks main thread waiting for db-read | + +### Low Path — Periodic (every 60s or on timer) + +| Call | Location | Frequency | Cost | +|------|----------|-----------|------| +| `refresh_hot_config_if_needed()` | websockets.c:228-247 | Every 5s | 8 SQLite SELECTs | +| `generate_and_post_status_event()` | websockets.c:3213 | Every N hours | store_event + broadcast | +| `ip_ban_cleanup/log_stats` | websockets.c:3004-3005 | Every 60s | SQLite reads/writes | + +### Per-EVENT — Validator Path (called from event-worker AND sync path) + +| Call | Location | Frequency | Cost | +|------|----------|-----------|------| +| `get_config_value("admin_pubkey")` | request_validator.c:308 | Every kind-23456 EVENT | SQLite SELECT | +| `get_config_value("nip42_auth_enabled")` | request_validator.c:326 | Every EVENT | SQLite SELECT | +| `get_config_bool("pow_enabled")` | request_validator.c:370 | Every EVENT | SQLite SELECT | +| `get_config_int("pow_min_difficulty")` | request_validator.c:371 | Every EVENT | SQLite SELECT | +| `get_config_int("pow_validation_flags")` | request_validator.c:372 | Every EVENT | SQLite SELECT | +| `get_config_int("nip40_expiration_grace_period")` | request_validator.c:432 | Every EVENT with expiration | SQLite SELECT | +| `get_config_value("auth_enabled")` | request_validator.c:212 | Every EVENT (reload_auth_config) | SQLite SELECT | +| `get_config_value("auth_rules_enabled")` | request_validator.c:220 | Every EVENT (reload_auth_config) | SQLite SELECT | +| `db_count_active_whitelist_rules()` | request_validator.c:536 | Every 5s (cached) | Opens separate SQLite connection | + +**Note:** These run on the **event-worker** thread for async-eligible events, but on **lws-main** for special kinds (14, 1059, 23456) that go through the sync validation path. They also run on lws-main for the `nostr_validate_unified_request()` call in the sync fallback. + +### Per-EVENT — NIP-13 PoW Validation + +| Call | Location | Frequency | Cost | +|------|----------|-----------|------| +| `get_config_bool("pow_enabled")` | nip013.c:27 | Every EVENT | SQLite SELECT | +| `get_config_int("pow_min_difficulty")` | nip013.c:28 | Every EVENT | SQLite SELECT | +| `get_config_value("pow_mode")` | nip013.c:29 | Every EVENT | SQLite SELECT | + +### Per-Broadcast — NIP-40 Expiration Check + +| Call | Location | Frequency | Cost | +|------|----------|-----------|------| +| `get_config_bool("expiration_enabled")` | subscriptions.c:764 | Every broadcast | SQLite SELECT | +| `get_config_bool("expiration_filter")` | subscriptions.c:765 | Every broadcast | SQLite SELECT | + +### Per-NIP-11 Request (HTTP, not WebSocket) + +| Call | Location | Frequency | Cost | +|------|----------|-----------|------| +| 15+ `get_config_value()` calls | nip011.c:96-110 | Every NIP-11 HTTP request | 15 SQLite SELECTs | +| 10+ `get_config_int()`/`get_config_bool()` calls | nip011.c:113-123 | Every NIP-11 HTTP request | 10 SQLite SELECTs | + +### Per-NIP-42 Auth Event + +| Call | Location | Frequency | Cost | +|------|----------|-----------|------| +| `get_config_value("relay_url")` | nip042.c:99 | Every AUTH event | SQLite SELECT | +| `get_config_int("relay_port")` | nip042.c:103 | Every AUTH event (fallback) | SQLite SELECT | + +### Per-NIP-40 Expiration Check (EVENT submission) + +| Call | Location | Frequency | Cost | +|------|----------|-----------|------| +| 5 `get_config_bool()`/`get_config_int()` calls | nip040.c:37-41 | Every EVENT with expiration tag | 5 SQLite SELECTs | + +### Subscription Lifecycle (per sub create/close/disconnect) + +| Call | Location | Frequency | Cost | +|------|----------|-----------|------| +| `db_log_subscription_created()` | subscriptions.c:1043 | Every REQ | SQLite INSERT | +| `db_log_subscription_closed()` | subscriptions.c:1053 | Every CLOSE | SQLite INSERT + UPDATE | +| `db_log_subscription_disconnected()` | subscriptions.c:1060 | Every disconnect | SQLite UPDATE + INSERT | +| `db_update_subscription_events_sent()` | subscriptions.c:1088 | Every broadcast match | SQLite UPDATE | +| `db_cleanup_orphaned_subscriptions()` | subscriptions.c:1100 | Startup only | SQLite DELETE | + +### IP Ban System (per-connection and periodic) + +| Call | Location | Frequency | Cost | +|------|----------|-----------|------| +| `get_config_value("idle_ban_whitelist")` | ip_ban.c:254 | Every ban check | SQLite SELECT | +| `get_config_bool("auth_fail_ban_enabled")` | ip_ban.c:301, 343 | Every ban check + failure | SQLite SELECT | +| `get_config_bool("idle_ban_enabled")` | ip_ban.c:307, 394 | Every ban check + idle failure | SQLite SELECT | +| 6+ `get_config_int()` calls | ip_ban.c:345-399, 464-465 | Every failure recording | SQLite SELECTs | +| `db_prepare()`/`db_step_stmt()` for ip_bans | ip_ban.c:141-238 | Load at startup + periodic save | SQLite reads/writes | + +### Special Kind Sync Path (kinds 14, 1059, 23456) + +| Call | Location | Frequency | Cost | +|------|----------|-----------|------| +| `store_event()` | websockets.c:1548-1629 | Every special-kind EVENT | Full sync store | +| `process_admin_event_in_config()` | websockets.c:1468 | Every kind-23456 | Config DB writes | +| `process_nip17_admin_message()` | websockets.c:1523 | Every kind-1059 when enabled | Decrypt + DB | +| `process_dm_stats_command()` | websockets.c:3240 | Admin DM stats | Decrypt + query + encrypt | +| `generate_stats_json()` | api.c:1167 (via dm_admin.c:805) | Admin stats command | Multiple SQLite queries | + +### DM Admin Path (called from lws-main for kind 1059/14) + +| Call | Location | Frequency | Cost | +|------|----------|-----------|------| +| `get_config_value("relay_pubkey")` | dm_admin.c:358, 451 | Every admin DM | SQLite SELECT | +| `get_config_value("admin_pubkey")` | dm_admin.c:504 | Every admin DM | SQLite SELECT | +| `get_config_int("nip59_timestamp_max_delay_sec")` | dm_admin.c:373 | Every admin DM | SQLite SELECT | +| `get_config_int("wot_enabled")` | dm_admin.c:613, 640, 660 | WoT commands | SQLite SELECT | + +### API/Monitoring (called from lws-main periodic timer) + +| Call | Location | Frequency | Cost | +|------|----------|-----------|------| +| `generate_stats_json()` | api.c:1167 | Status post + admin stats | ~10 SQLite queries | +| `query_time_based_statistics()` | api.c:102 | Monitoring events | SQLite queries | +| `query_subscription_details()` | api.c:197 | Monitoring events | SQLite queries | +| `get_config_value("relay_pubkey")` | api.c:419, 821, 1291 | Every monitoring event | SQLite SELECT | +| `get_config_int("kind_1_status_posts_hours")` | api.c:547 | Status post check | SQLite SELECT | +| `get_config_int("kind_24567_reporting_throttle_sec")` | api.c:60 | Monitoring throttle | SQLite SELECT | + +## Implementation Plan + +### Fix 1: Create Global Config Cache — Eliminate ALL get_config_* SQLite Calls + +**Impact: Very High** — eliminates 50+ distinct `get_config_value/int/bool` call sites across 8 source files + +The audit found `get_config_value/int/bool` calls in: `websockets.c`, `main.c`, `subscriptions.c`, `request_validator.c`, `nip011.c`, `nip013.c`, `nip040.c`, `nip042.c`, `ip_ban.c`, `dm_admin.c`, `api.c`, `config.c`. Every single one does a `SELECT value FROM config WHERE key=?` SQLite query. + +**Approach:** Replace `get_config_value_from_table()` with an in-memory hash map that is loaded once at startup and refreshed periodically (every 5s) or on admin config change events. + +**Changes:** + +1. **New: `config_cache` in config.c** — A simple hash map or fixed array of key-value pairs loaded from the config table: + ```c + typedef struct { + char key[64]; + char value[512]; + } config_cache_entry_t; + + static config_cache_entry_t g_config_cache[256]; + static int g_config_cache_count = 0; + static time_t g_config_cache_last_refresh = 0; + static pthread_mutex_t g_config_cache_mutex; + #define CONFIG_CACHE_TTL_SEC 5 + ``` + +2. **Modify `get_config_value_from_table()`** — Instead of querying SQLite, look up in the in-memory cache. If cache is stale, refresh from SQLite (but only once per TTL period, not per call). + +3. **Add `config_cache_refresh()`** — Loads all rows from `SELECT key, value FROM config` into the hash map. Called: + - Once at startup after config table is populated + - Every 5 seconds from the existing `refresh_hot_config_if_needed()` timer + - Immediately after `process_admin_event_in_config()` modifies config + +4. **Thread safety:** The cache is read from lws-main and event-worker threads. Use a read-write lock or double-buffer pattern. Since config changes are rare, a simple mutex with short hold time is fine. + +5. **Remove the existing `hot_config_cache_t`** in websockets.c — it becomes redundant since the global config cache serves the same purpose with broader coverage. + +This single change eliminates SQLite calls from: +- Per-connection: `trust_proxy_headers`, `nip42_auth_required_*` (websockets.c) +- Per-REQ: `expiration_enabled`, `expiration_filter` (main.c) +- Per-EVENT: `admin_pubkey`, `relay_pubkey`, `nip42_auth_enabled`, `pow_*` (request_validator.c, nip013.c) +- Per-broadcast: `expiration_enabled`, `expiration_filter` (subscriptions.c) +- Per-NIP-11: 25+ config values (nip011.c) +- Per-NIP-42: `relay_url`, `relay_port` (nip042.c) +- Per-NIP-40: 5 expiration config values (nip040.c) +- Per-IP-ban: `idle_ban_*`, `auth_fail_*` config values (ip_ban.c) +- Per-admin-DM: `relay_pubkey`, `admin_pubkey`, `wot_enabled` (dm_admin.c) +- Per-monitoring: `relay_pubkey`, throttle values (api.c) + +### Fix 2: Move Duplicate Check to Event Worker Thread + +**Impact: High** — eliminates the most frequent per-EVENT SQLite call from lws-main + +Currently `event_id_exists_in_db()` runs on lws-main before async submission. Move it into the `async_event_worker_main()` function, which already has its own SQLite connection. + +**Changes:** +- Remove `event_id_exists_in_db()` calls from both EVENT paths in websockets.c (lines 1324 and 2134) +- Add the duplicate check at the start of `async_event_worker_main()` before `nostr_validate_unified_request()` +- If duplicate found, set `completion->success = 1` and `completion->error_message = "duplicate: already have this event"` and skip crypto +- The completion handler already sends OK responses, so this works seamlessly + +**Trade-off:** Without the early dedup check on lws-main, duplicate events will be submitted to the event worker queue and consume a queue slot + thread wakeup before being detected. This is acceptable because: +- The worker thread dedup check is still fast (B-tree index lookup) +- It avoids the much larger cost of running SQLite on lws-main for every event +- Queue depth is 4096, so even under heavy duplicate traffic this won't overflow + +### Fix 3: Make COUNT Queries Async + +**Impact: Medium** — eliminates blocking wait on lws-main for NIP-45 COUNT + +Currently `handle_count_message()` calls `thread_pool_execute_count_sync()` which blocks lws-main waiting for the db-read worker. Convert to the same async pattern used for REQ queries. + +**Changes:** +- Create `count_async_state_t` similar to `req_async_state_t` +- Create `count_async_completion_t` with count result +- Add `submit_count_query_async()` that uses `thread_pool_submit_read()` with a callback +- The callback pushes to a count completion queue +- Add `process_count_async_completions()` to drain the queue on lws-main and send COUNT responses +- Call it from the main event loop alongside `process_req_async_completions()` + +### Fix 4: Cache Auth Rules Check Result + +**Impact: Low-Medium** — eliminates per-REQ SQLite when WoT is enabled + +`check_database_auth_rules()` at websockets.c:1706 runs a SQLite query for every REQ when `wot_enabled == 2`. Cache the result per-session. + +**Changes:** +- Add `wot_checked` and `wot_allowed` fields to `per_session_data` +- On first REQ, call `check_database_auth_rules()` and cache the result +- On subsequent REQs from the same session, use the cached value +- Reset cache when auth state changes (e.g., after NIP-42 AUTH) + +### Fix 5: Move Special-Kind EVENT Store to Event Worker + +**Impact: Low** — special kinds are rare but currently do full sync store on lws-main + +Kinds 14, 1059, and 23456 are currently excluded from async processing because they have special handling. However, the `store_event()` call within those paths still blocks lws-main. + +**Changes:** +- For kind 1059 and kind 14: after special processing completes, submit the store to the event worker instead of calling `store_event()` synchronously +- For kind 23456: admin events are not stored (processed by admin API), so no change needed +- This requires the special processing (decryption, admin check) to still happen on lws-main (it needs `pss` context), but the final DB write goes async + +### Fix 6: Reduce Reader Threads from 4 to 1 + +**Impact: Resource savings** — 3 fewer threads, 3 fewer SQLite connections + +**Changes:** +- Change default `reader_threads` in `thread_pool_init()` from 4 to 1 +- Or make it configurable via config with default 1 +- The single `db-read` thread handles all REQ and COUNT queries sequentially +- If future profiling shows the read thread becoming a bottleneck, increase back to 2+ + +### Fix 7: Move Subscription Logging Off Main Thread + +**Impact: Medium** — eliminates per-REQ INSERT, per-CLOSE UPDATE, per-broadcast UPDATE + +The subscription lifecycle functions in subscriptions.c do synchronous SQLite writes on lws-main: +- `db_log_subscription_created()` — INSERT on every REQ +- `db_log_subscription_closed()` — INSERT + UPDATE on every CLOSE +- `db_log_subscription_disconnected()` — UPDATE + INSERT on every disconnect +- `db_update_subscription_events_sent()` — UPDATE on every broadcast match + +**Changes:** +- Submit these as fire-and-forget write jobs to the db-write thread via `thread_pool_submit_write()` +- Create a new job type `THREAD_POOL_JOB_SUBSCRIPTION_LOG` or simply use a generic callback job +- The main thread doesn't need to wait for these to complete — they're purely observational logging + +### Fix 8: Move Periodic Tasks Off Main Thread + +**Impact: Low** — these run every 60s but can still cause latency spikes + +- `generate_and_post_status_event()`: Submit as an async job to the event worker +- `ip_ban_cleanup()`/`ip_ban_log_stats()`/`ip_ban_save()`: These do SQLite reads/writes. Move to a periodic job on the db-write thread +- Config cache refresh (Fix 1) replaces the old `refresh_hot_config_if_needed()` SQLite queries + +### Fix 9: Cache NIP-11 Response + +**Impact: Low-Medium** — eliminates 25+ SQLite SELECTs per NIP-11 HTTP request + +`generate_relay_info_json()` in nip011.c calls `get_config_value()` 15 times and `get_config_int()`/`get_config_bool()` 10 times. After Fix 1 (global config cache), these become in-memory lookups. But we can go further: + +**Changes:** +- Cache the serialized NIP-11 JSON response string with a TTL (e.g., 60 seconds) +- On NIP-11 request, return the cached string directly without rebuilding +- Invalidate on admin config change events + +## Implementation Order + +| # | Fix | Risk | Complexity | +|---|-----|------|------------| +| 1 | Global config cache (replaces all get_config_* SQLite) | Low | Medium | +| 2 | Move dedup check to event worker | Low | Low | +| 3 | Async COUNT queries | Low | Medium | +| 4 | Cache WoT auth rules per-session | Very Low | Low | +| 5 | Async store for special kinds | Medium | Medium | +| 6 | Reduce reader threads to 1 | Very Low | Trivial | +| 7 | Move subscription logging off main thread | Low | Low-Medium | +| 8 | Move periodic tasks off main thread | Low | Medium | +| 9 | Cache NIP-11 response | Very Low | Low | + +## Expected Impact + +After all 9 fixes, `lws-main` should have **zero direct SQLite calls**. Its work becomes: +- JSON parse incoming messages (~fast) +- In-memory subscription matching (~fast) +- In-memory config lookups (~fast, hash map) +- Message formatting and queuing (~fast) +- `lws_service()` I/O (~fast) +- Draining completion queues (~fast) + +### Impact by fix + +| Fix | SQLite calls eliminated | Frequency | +|-----|------------------------|-----------| +| Fix 1: Global config cache | ~50+ `get_config_*` call sites across 8 files | Per-event, per-connection, per-REQ, per-broadcast, per-NIP-11 | +| Fix 2: Dedup to event worker | 2 `event_id_exists_in_db()` calls | Per-EVENT | +| Fix 3: Async COUNT | 1 `thread_pool_execute_count_sync()` | Per-COUNT message | +| Fix 4: WoT cache per-session | 1 `check_database_auth_rules()` | Per-REQ when WoT enabled | +| Fix 5: Async special-kind store | ~6 `store_event()` calls | Per special-kind EVENT | +| Fix 6: Reduce readers | N/A (resource savings) | N/A | +| Fix 7: Async subscription logging | 4 `db_log_*`/`db_update_*` calls | Per-REQ, per-CLOSE, per-broadcast | +| Fix 8: Async periodic tasks | `generate_stats_json()`, `ip_ban_*` | Every 60s | +| Fix 9: Cache NIP-11 | 25+ config lookups per request | Per NIP-11 HTTP request | + +Estimated main-thread CPU reduction: from **54% to ~5-10%** (mostly WebSocket I/O, subscription matching, and JSON parsing). + +## Thread Model After Changes + +``` +lws-main — WebSocket I/O, JSON parse, subscription match, message queue + NO SQLite. Pure compute + I/O. + +db-read — All SELECT queries: REQ results, COUNT results, config refresh, + auth rule checks, event dedup checks via completion queue + +db-write — All INSERT/UPDATE: event storage, tag inserts, IP ban persistence, + status event generation + +event-worker — EVENT validation: signature verification, then submits store to + db-write via completion queue, results flow back to lws-main +``` + +```mermaid +flowchart LR + CLIENT[Nostr Clients] --> LWS[lws-main
WebSocket I/O
JSON parse
Sub matching
NO SQLite] + + LWS -->|EVENT submit| EW[event-worker
Sig verify
Dedup check] + EW -->|store job| DW[db-write
INSERT events
INSERT tags
IP ban save] + EW -->|completion| LWS + DW -->|completion| LWS + + LWS -->|REQ/COUNT submit| DR[db-read
SELECT queries
Config refresh
Auth checks] + DR -->|completion| LWS + + LWS -->|OK/EVENT/EOSE| CLIENT +``` diff --git a/relay.pid b/relay.pid index fbaa489..f4595fb 100644 --- a/relay.pid +++ b/relay.pid @@ -1 +1 @@ -678119 +694269 diff --git a/src/config.c b/src/config.c index b6ea34a..afc93df 100644 --- a/src/config.c +++ b/src/config.c @@ -251,14 +251,21 @@ const char* get_config_value(const char* key) { if (!key) { return NULL; } - return get_config_value_from_table(key); + + const char* cached = get_config_value_from_table(key); + if (!cached) { + return NULL; + } + + // Public API returns an owned string; callers may free it. + return cached; } int get_config_int(const char* key, int default_value) { if (!key) { return default_value; } - const char* value = get_config_value_from_table(key); + const char* value = get_config_value(key); if (!value) { return default_value; } @@ -271,7 +278,7 @@ int get_config_bool(const char* key, int default_value) { if (!key) { return default_value; } - const char* value = get_config_value_from_table(key); + const char* value = get_config_value(key); if (!value) { return default_value; } @@ -1606,13 +1613,7 @@ int handle_configuration_event(cJSON* event, char* error_message, size_t error_s // Note: Config table is now created via embedded schema in sql_schema.h // Get value from config table -const char* get_config_value_from_table(const char* key) { - if (!db_is_available() || !key) { - return NULL; - } - - return db_get_config_value_dup(key); -} +const char* get_config_value_from_table(const char* key); // Set value in config table int set_config_value_in_table(const char* key, const char* value, const char* data_type, @@ -1621,7 +1622,12 @@ int set_config_value_in_table(const char* key, const char* value, const char* da return -1; } - return db_set_config_value_full(key, value, data_type, description, category, requires_restart); + int rc = db_set_config_value_full(key, value, data_type, description, category, requires_restart); + if (rc == 0) { + invalidate_config_cache(); + } + + return rc; } // Update config in table (simpler version of set_config_value_in_table) @@ -1637,7 +1643,12 @@ int update_config_in_table(const char* key, const char* value) { return -1; } - return db_update_config_value_only(key, value); + int rc = db_update_config_value_only(key, value); + if (rc == 0) { + invalidate_config_cache(); + } + + return rc; } // DEPRECATED: This function is no longer used in the unified startup flow. @@ -4454,6 +4465,108 @@ int populate_all_config_values_atomic(const char* admin_pubkey, const char* rela // CONFIGURATION CACHE MANAGEMENT // ================================ +#define CONFIG_CACHE_MAX_ITEMS 256 + +typedef struct { + char key[128]; + char value[CONFIG_VALUE_MAX_LENGTH + 1]; + int in_use; +} config_cache_entry_t; + +static config_cache_entry_t g_config_cache[CONFIG_CACHE_MAX_ITEMS]; +static pthread_mutex_t g_config_cache_mutex = PTHREAD_MUTEX_INITIALIZER; + +static int find_cache_index_by_key(const char* key) { + if (!key) { + return -1; + } + + for (int i = 0; i < CONFIG_CACHE_MAX_ITEMS; i++) { + if (g_config_cache[i].in_use && strcmp(g_config_cache[i].key, key) == 0) { + return i; + } + } + + return -1; +} + +static int find_empty_cache_index(void) { + for (int i = 0; i < CONFIG_CACHE_MAX_ITEMS; i++) { + if (!g_config_cache[i].in_use) { + return i; + } + } + + return -1; +} + +static void clear_config_cache_locked(void) { + memset(g_config_cache, 0, sizeof(g_config_cache)); +} + +void invalidate_config_cache(void) { + pthread_mutex_lock(&g_config_cache_mutex); + clear_config_cache_locked(); + pthread_mutex_unlock(&g_config_cache_mutex); +} + +void force_config_cache_refresh(void) { + invalidate_config_cache(); +} + +int reload_config_from_table(void) { + force_config_cache_refresh(); + return 0; +} + +const char* get_config_value_from_table(const char* key) { + if (!db_is_available() || !key) { + return NULL; + } + + pthread_mutex_lock(&g_config_cache_mutex); + + int idx = find_cache_index_by_key(key); + if (idx >= 0) { + const char* result = strdup(g_config_cache[idx].value); + pthread_mutex_unlock(&g_config_cache_mutex); + return result; + } + + pthread_mutex_unlock(&g_config_cache_mutex); + + char* db_value = db_get_config_value_dup(key); + if (!db_value) { + return NULL; + } + + pthread_mutex_lock(&g_config_cache_mutex); + + idx = find_cache_index_by_key(key); + if (idx < 0) { + idx = find_empty_cache_index(); + } + + if (idx >= 0) { + g_config_cache[idx].in_use = 1; + strncpy(g_config_cache[idx].key, key, sizeof(g_config_cache[idx].key) - 1); + g_config_cache[idx].key[sizeof(g_config_cache[idx].key) - 1] = '\0'; + strncpy(g_config_cache[idx].value, db_value, sizeof(g_config_cache[idx].value) - 1); + g_config_cache[idx].value[sizeof(g_config_cache[idx].value) - 1] = '\0'; + } + + pthread_mutex_unlock(&g_config_cache_mutex); + + return db_value; +} + +const char* get_admin_pubkey_cached(void) { + return get_config_value_from_table("admin_pubkey"); +} + +const char* get_relay_pubkey_cached(void) { + return get_config_value_from_table("relay_pubkey"); +} // ================================ // HYBRID CONFIG ACCESS FUNCTIONS diff --git a/src/main.c b/src/main.c index 2391ec8..d255571 100644 --- a/src/main.c +++ b/src/main.c @@ -2301,7 +2301,7 @@ int main(int argc, char* argv[]) { if (thread_pool_enabled) { thread_pool_config_t tp_cfg; memset(&tp_cfg, 0, sizeof(tp_cfg)); - tp_cfg.reader_threads = get_config_int("thread_pool_readers", 4); + tp_cfg.reader_threads = get_config_int("thread_pool_readers", 1); tp_cfg.max_queue_depth = get_config_int("thread_pool_max_queue_depth", 4096); tp_cfg.db_path = g_database_path; tp_cfg.wake_loop_cb = wake_event_loop_from_thread_pool; diff --git a/src/main.h b/src/main.h index cc12a14..af3d1ce 100644 --- a/src/main.h +++ b/src/main.h @@ -13,8 +13,8 @@ // Using CRELAY_ prefix to avoid conflicts with nostr_core_lib VERSION macros #define CRELAY_VERSION_MAJOR 2 #define CRELAY_VERSION_MINOR 1 -#define CRELAY_VERSION_PATCH 4 -#define CRELAY_VERSION "v2.1.4" +#define CRELAY_VERSION_PATCH 5 +#define CRELAY_VERSION "v2.1.5" // Relay metadata (authoritative source for NIP-11 information) #define RELAY_NAME "C-Relay" diff --git a/src/nip011.c b/src/nip011.c index 065cc82..ae6ed13 100644 --- a/src/nip011.c +++ b/src/nip011.c @@ -23,6 +23,67 @@ int get_config_bool(const char* key, int default_value); #define HTTP_STATUS_INTERNAL_SERVER_ERROR 500 +#define NIP11_CACHE_TTL_SEC 5 + +static pthread_mutex_t g_nip11_cache_mutex = PTHREAD_MUTEX_INITIALIZER; +static char* g_nip11_cached_json = NULL; +static size_t g_nip11_cached_json_len = 0; +static time_t g_nip11_cache_expires_at = 0; + +cJSON* generate_relay_info_json(); + +static void invalidate_nip11_cache_locked(void) { + if (g_nip11_cached_json) { + free(g_nip11_cached_json); + g_nip11_cached_json = NULL; + } + g_nip11_cached_json_len = 0; + g_nip11_cache_expires_at = 0; +} + +static char* get_nip11_json_cached_dup(size_t* out_len) { + time_t now = time(NULL); + + pthread_mutex_lock(&g_nip11_cache_mutex); + if (g_nip11_cached_json && now < g_nip11_cache_expires_at) { + char* copy = strdup(g_nip11_cached_json); + if (copy && out_len) { + *out_len = g_nip11_cached_json_len; + } + pthread_mutex_unlock(&g_nip11_cache_mutex); + return copy; + } + pthread_mutex_unlock(&g_nip11_cache_mutex); + + cJSON* info_json = generate_relay_info_json(); + if (!info_json) { + return NULL; + } + + char* fresh_json = cJSON_Print(info_json); + cJSON_Delete(info_json); + if (!fresh_json) { + return NULL; + } + + size_t fresh_len = strlen(fresh_json); + + pthread_mutex_lock(&g_nip11_cache_mutex); + invalidate_nip11_cache_locked(); + g_nip11_cached_json = strdup(fresh_json); + if (g_nip11_cached_json) { + g_nip11_cached_json_len = fresh_len; + g_nip11_cache_expires_at = now + NIP11_CACHE_TTL_SEC; + } + pthread_mutex_unlock(&g_nip11_cache_mutex); + + if (out_len) { + *out_len = fresh_len; + } + return fresh_json; +} + + ///////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////// // NIP-11 RELAY INFORMATION DOCUMENT @@ -80,8 +141,9 @@ void init_relay_info() { // Clean up relay information JSON objects void cleanup_relay_info() { - // NIP-11 relay information is now generated dynamically from config table - // No cleanup needed - data is fetched directly from database when requested + pthread_mutex_lock(&g_nip11_cache_mutex); + invalidate_nip11_cache_locked(); + pthread_mutex_unlock(&g_nip11_cache_mutex); } // Generate NIP-11 compliant JSON document @@ -348,9 +410,10 @@ int handle_nip11_http_request(struct lws* wsi, const char* accept_header) { return -1; // Close connection } - // Generate relay information JSON - cJSON* info_json = generate_relay_info_json(); - if (!info_json) { + // Generate (or fetch cached) relay information JSON + size_t json_len = 0; + char* json_string = get_nip11_json_cached_dup(&json_len); + if (!json_string) { DEBUG_ERROR("Failed to generate relay info JSON"); unsigned char buf[LWS_PRE + 256]; unsigned char *p = &buf[LWS_PRE]; @@ -373,34 +436,6 @@ int handle_nip11_http_request(struct lws* wsi, const char* accept_header) { return -1; } - char* json_string = cJSON_Print(info_json); - cJSON_Delete(info_json); - - if (!json_string) { - DEBUG_ERROR("Failed to serialize relay info JSON"); - unsigned char buf[LWS_PRE + 256]; - unsigned char *p = &buf[LWS_PRE]; - unsigned char *start = p; - unsigned char *end = &buf[sizeof(buf) - 1]; - - if (lws_add_http_header_status(wsi, HTTP_STATUS_INTERNAL_SERVER_ERROR, &p, end)) { - return -1; - } - if (lws_add_http_header_by_token(wsi, WSI_TOKEN_HTTP_CONTENT_TYPE, (unsigned char*)"text/plain", 10, &p, end)) { - return -1; - } - if (lws_add_http_header_content_length(wsi, 0, &p, end)) { - return -1; - } - if (lws_finalize_http_header(wsi, &p, end)) { - return -1; - } - lws_write(wsi, start, p - start, LWS_WRITE_HTTP_HEADERS); - return -1; - } - - size_t json_len = strlen(json_string); - // Allocate session data to manage buffer lifetime across callbacks struct nip11_session_data* session_data = malloc(sizeof(struct nip11_session_data)); if (!session_data) { diff --git a/src/websockets.c b/src/websockets.c index 313c5cb..6a0df96 100644 --- a/src/websockets.c +++ b/src/websockets.c @@ -330,6 +330,7 @@ typedef struct async_event_completion { int success; int should_broadcast; int run_post_actions; + char ok_message[128]; char error_message[512]; struct async_event_completion* next; } async_event_completion_t; @@ -346,6 +347,27 @@ static async_event_completion_t* g_async_event_completion_tail = NULL; static pthread_t g_async_event_worker_thread; static int g_async_event_worker_running = 0; +typedef struct count_async_state { + char sub_id[SUBSCRIPTION_ID_MAX_LENGTH]; + struct lws* wsi; + struct per_session_data* pss_token; + int pending_jobs; + int total_count; + int had_error; + char error_message[256]; +} count_async_state_t; + +typedef struct count_async_completion { + count_async_state_t* state; + thread_pool_status_t status; + int count; + struct count_async_completion* next; +} count_async_completion_t; + +static pthread_mutex_t g_count_async_completion_mutex = PTHREAD_MUTEX_INITIALIZER; +static count_async_completion_t* g_count_async_completion_head = NULL; +static count_async_completion_t* g_count_async_completion_tail = NULL; + static void map_validation_error_message(int validation_result, char* out, size_t out_size) { if (!out || out_size == 0) return; @@ -506,38 +528,46 @@ static void* async_event_worker_main(void* arg) { strncpy(completion->event_id, job->event_id, sizeof(completion->event_id) - 1); completion->event_id[sizeof(completion->event_id) - 1] = '\0'; - int validation_result = nostr_validate_unified_request(completion->event_json, strlen(completion->event_json)); - if (validation_result != NOSTR_SUCCESS) { - completion->success = 0; + if (job->event_id[0] != '\0' && event_id_exists_in_db(job->event_id)) { + completion->success = 1; completion->should_broadcast = 0; - map_validation_error_message(validation_result, completion->error_message, sizeof(completion->error_message)); + completion->run_post_actions = 0; + snprintf(completion->ok_message, sizeof(completion->ok_message), + "duplicate: already have this event"); } else { - cJSON* event_obj = cJSON_Parse(completion->event_json); - if (!event_obj || !cJSON_IsObject(event_obj)) { + int validation_result = nostr_validate_unified_request(completion->event_json, strlen(completion->event_json)); + if (validation_result != NOSTR_SUCCESS) { completion->success = 0; completion->should_broadcast = 0; - strncpy(completion->error_message, "error: failed to parse event", sizeof(completion->error_message) - 1); - completion->error_message[sizeof(completion->error_message) - 1] = '\0'; + map_validation_error_message(validation_result, completion->error_message, sizeof(completion->error_message)); } else { - if (job->event_kind >= 20000 && job->event_kind < 30000) { - completion->success = 1; - completion->should_broadcast = 1; - completion->run_post_actions = 0; + cJSON* event_obj = cJSON_Parse(completion->event_json); + if (!event_obj || !cJSON_IsObject(event_obj)) { + completion->success = 0; + completion->should_broadcast = 0; + strncpy(completion->error_message, "error: failed to parse event", sizeof(completion->error_message) - 1); + completion->error_message[sizeof(completion->error_message) - 1] = '\0'; } else { - int core_rc = store_event_core(event_obj); - if (core_rc < 0) { - completion->success = 0; - completion->should_broadcast = 0; - completion->run_post_actions = 0; - strncpy(completion->error_message, "error: failed to store event", sizeof(completion->error_message) - 1); - completion->error_message[sizeof(completion->error_message) - 1] = '\0'; - } else { + if (job->event_kind >= 20000 && job->event_kind < 30000) { completion->success = 1; completion->should_broadcast = 1; - completion->run_post_actions = (core_rc == 0); + completion->run_post_actions = 0; + } else { + int core_rc = store_event_core(event_obj); + if (core_rc < 0) { + completion->success = 0; + completion->should_broadcast = 0; + completion->run_post_actions = 0; + strncpy(completion->error_message, "error: failed to store event", sizeof(completion->error_message) - 1); + completion->error_message[sizeof(completion->error_message) - 1] = '\0'; + } else { + completion->success = 1; + completion->should_broadcast = 1; + completion->run_post_actions = (core_rc == 0); + } } + cJSON_Delete(event_obj); } - cJSON_Delete(event_obj); } } @@ -684,7 +714,9 @@ static void process_async_event_completions(void) { current_pss, completion->event_id, completion->success, - completion->success ? "" : completion->error_message); + completion->success + ? (completion->ok_message[0] ? completion->ok_message : "") + : completion->error_message); } free(completion->event_json); @@ -692,6 +724,195 @@ static void process_async_event_completions(void) { } } +static void free_count_payload_ws(void* payload_void) { + thread_pool_count_payload_t* payload = (thread_pool_count_payload_t*)payload_void; + if (!payload) return; + free(payload->sql); + if (payload->bind_params) { + for (int i = 0; i < payload->bind_param_count; i++) { + free(payload->bind_params[i]); + } + free(payload->bind_params); + } + free(payload); +} + +static void count_async_completion_push(count_async_completion_t* completion) { + if (!completion) return; + + pthread_mutex_lock(&g_count_async_completion_mutex); + completion->next = NULL; + if (!g_count_async_completion_tail) { + g_count_async_completion_head = completion; + g_count_async_completion_tail = completion; + } else { + g_count_async_completion_tail->next = completion; + g_count_async_completion_tail = completion; + } + pthread_mutex_unlock(&g_count_async_completion_mutex); +} + +static count_async_completion_t* count_async_completion_pop(void) { + pthread_mutex_lock(&g_count_async_completion_mutex); + count_async_completion_t* completion = g_count_async_completion_head; + if (completion) { + g_count_async_completion_head = completion->next; + if (!g_count_async_completion_head) { + g_count_async_completion_tail = NULL; + } + } + pthread_mutex_unlock(&g_count_async_completion_mutex); + return completion; +} + +static void count_async_result_cb(const thread_pool_result_t* result, void* user_ctx) { + count_async_state_t* state = (count_async_state_t*)user_ctx; + if (!result || !state) { + if (result && result->result_data) { + free(result->result_data); + } + return; + } + + count_async_completion_t* completion = calloc(1, sizeof(*completion)); + if (!completion) { + if (result->result_data) { + free(result->result_data); + } + return; + } + + completion->state = state; + completion->status = result->status; + if (result->status == THREAD_POOL_STATUS_OK && result->result_data) { + thread_pool_count_result_t* count_result = (thread_pool_count_result_t*)result->result_data; + completion->count = count_result->count; + } + + if (result->result_data) { + free(result->result_data); + } + + count_async_completion_push(completion); + if (ws_context) { + lws_cancel_service(ws_context); + } +} + +static int submit_count_query_async(count_async_state_t* state, + const char* sql, + const char** bind_params, + int bind_param_count) { + if (!state || !sql) { + return -1; + } + + thread_pool_count_payload_t* payload = calloc(1, sizeof(*payload)); + if (!payload) { + return -1; + } + + payload->sql = strdup(sql); + payload->bind_param_count = bind_param_count; + if (!payload->sql) { + free_count_payload_ws(payload); + return -1; + } + + if (bind_param_count > 0) { + payload->bind_params = calloc((size_t)bind_param_count, sizeof(char*)); + if (!payload->bind_params) { + free_count_payload_ws(payload); + return -1; + } + for (int i = 0; i < bind_param_count; i++) { + const char* value = (bind_params && bind_params[i]) ? bind_params[i] : ""; + payload->bind_params[i] = strdup(value); + if (!payload->bind_params[i]) { + free_count_payload_ws(payload); + return -1; + } + } + } + + thread_pool_job_t job; + memset(&job, 0, sizeof(job)); + job.type = THREAD_POOL_JOB_COUNT_QUERY; + job.payload = payload; + job.payload_free = free_count_payload_ws; + job.result_cb = count_async_result_cb; + job.result_cb_ctx = state; + + thread_pool_status_t submit_rc = thread_pool_submit_read(&job, NULL); + if (submit_rc != THREAD_POOL_STATUS_OK) { + free_count_payload_ws(payload); + return -1; + } + + state->pending_jobs++; + return 0; +} + +static void send_count_response(struct lws* wsi, struct per_session_data* pss, + const char* sub_id, int total_count) { + cJSON* count_response = cJSON_CreateArray(); + if (!count_response) { + return; + } + + cJSON_AddItemToArray(count_response, cJSON_CreateString("COUNT")); + cJSON_AddItemToArray(count_response, cJSON_CreateString(sub_id)); + + cJSON* count_obj = cJSON_CreateObject(); + cJSON_AddNumberToObject(count_obj, "count", total_count); + cJSON_AddItemToArray(count_response, count_obj); + + char* count_str = cJSON_Print(count_response); + if (count_str) { + size_t count_len = strlen(count_str); + if (queue_message(wsi, pss, count_str, count_len, LWS_WRITE_TEXT) != 0) { + DEBUG_ERROR("Failed to queue COUNT message"); + } + free(count_str); + } + + cJSON_Delete(count_response); +} + +static void process_count_async_completions(void) { + count_async_completion_t* completion = NULL; + while ((completion = count_async_completion_pop()) != NULL) { + count_async_state_t* state = completion->state; + if (state) { + if (completion->status == THREAD_POOL_STATUS_OK) { + state->total_count += completion->count; + } else { + state->had_error = 1; + if (state->error_message[0] == '\0') { + strncpy(state->error_message, "error: failed to execute count query", sizeof(state->error_message) - 1); + state->error_message[sizeof(state->error_message) - 1] = '\0'; + } + } + + state->pending_jobs--; + if (state->pending_jobs <= 0) { + struct per_session_data* current_pss = (struct per_session_data*)lws_wsi_user(state->wsi); + int target_alive = (current_pss && current_pss == state->pss_token); + if (target_alive) { + if (state->had_error) { + send_notice_message(state->wsi, current_pss, state->error_message[0] ? state->error_message : "error: count query failed"); + } else { + send_count_response(state->wsi, current_pss, state->sub_id, state->total_count); + } + } + free(state); + } + } + + free(completion); + } +} + // Message queue functions for proper libwebsockets pattern /** @@ -1315,27 +1536,6 @@ static int nostr_relay_callback(struct lws *wsi, enum lws_callback_reasons reaso return 0; } - // Early duplicate check: skip expensive crypto for events already in DB. - // The event id is a 64-char hex string — look it up via primary key index (~10μs). - // This must happen AFTER we have the id string but BEFORE signature verification. - cJSON* id_obj_dup = cJSON_GetObjectItemCaseSensitive(event, "id"); - if (id_obj_dup && cJSON_IsString(id_obj_dup)) { - const char* event_id_str = cJSON_GetStringValue(id_obj_dup); - if (event_id_str && event_id_exists_in_db(event_id_str)) { - // Already have this event — send OK true and skip crypto - DEBUG_TRACE("Duplicate event %s — skipping signature verification", event_id_str); - char ok_msg[128]; - snprintf(ok_msg, sizeof(ok_msg), - "[\"OK\",\"%s\",true,\"duplicate: already have this event\"]", - event_id_str); - size_t ok_len = strlen(ok_msg); - queue_message(wsi, pss, ok_msg, ok_len, LWS_WRITE_TEXT); - free(event_json_str); - cJSON_Delete(json); - return 0; - } - } - // Try async EVENT offload first (Phase 1). int async_submit_rc = try_submit_async_event(event, event_json_str, wsi, pss); if (async_submit_rc == 0) { @@ -1888,10 +2088,15 @@ static int nostr_relay_callback(struct lws *wsi, enum lws_callback_reasons reaso return 0; } - handle_count_message(subscription_id, filters, wsi, pss); + int count_result = handle_count_message(subscription_id, filters, wsi, pss); // Clean up the filters array we created cJSON_Delete(filters); + + if (count_result == HANDLE_REQ_ASYNC_PENDING) { + cJSON_Delete(json); + return 0; + } } } else if (strcmp(msg_type, "CLOSE") == 0) { // Handle CLOSE message @@ -2127,25 +2332,6 @@ static int nostr_relay_callback(struct lws *wsi, enum lws_callback_reasons reaso return 0; } - // Early duplicate check: skip expensive crypto for events already in DB. - cJSON* id_obj_dup2 = cJSON_GetObjectItemCaseSensitive(event, "id"); - if (id_obj_dup2 && cJSON_IsString(id_obj_dup2)) { - const char* event_id_str2 = cJSON_GetStringValue(id_obj_dup2); - if (event_id_str2 && event_id_exists_in_db(event_id_str2)) { - DEBUG_TRACE("Duplicate event %s — skipping signature verification", event_id_str2); - char ok_msg2[128]; - snprintf(ok_msg2, sizeof(ok_msg2), - "[\"OK\",\"%s\",true,\"duplicate: already have this event\"]", - event_id_str2); - size_t ok_len2 = strlen(ok_msg2); - queue_message(wsi, pss, ok_msg2, ok_len2, LWS_WRITE_TEXT); - free(event_json_str); - cJSON_Delete(json); - free(message); - return 0; - } - } - // Try async EVENT offload first (Phase 1). int async_submit_rc = try_submit_async_event(event, event_json_str, wsi, pss); if (async_submit_rc == 0) { @@ -2683,10 +2869,16 @@ static int nostr_relay_callback(struct lws *wsi, enum lws_callback_reasons reaso return 0; } - handle_count_message(subscription_id, filters, wsi, pss); + int count_result = handle_count_message(subscription_id, filters, wsi, pss); // Clean up the filters array we created cJSON_Delete(filters); + + if (count_result == HANDLE_REQ_ASYNC_PENDING) { + cJSON_Delete(json); + free(message); + return 0; + } } } else if (strcmp(msg_type, "CLOSE") == 0) { // Handle CLOSE message @@ -3201,6 +3393,9 @@ int start_websocket_relay(int port_override, int strict_port) { // Drain completed async EVENT jobs and emit OK/broadcast on service thread. process_async_event_completions(); + // Drain completed async COUNT jobs and emit COUNT/NOTICE on service thread. + process_count_async_completions(); + // Check if it's time to post status update time_t current_time = time(NULL); int status_post_hours = hot_cfg_kind_1_status_posts_hours(); @@ -3433,7 +3628,16 @@ int handle_count_message(const char* sub_id, cJSON* filters, struct lws *wsi, st int bind_param_count = 0; int bind_param_capacity = 0; - int total_count = 0; + count_async_state_t* async_state = calloc(1, sizeof(*async_state)); + if (!async_state) { + DEBUG_ERROR("Failed to allocate COUNT async state"); + return 0; + } + + strncpy(async_state->sub_id, sub_id ? sub_id : "", sizeof(async_state->sub_id) - 1); + async_state->sub_id[sizeof(async_state->sub_id) - 1] = '\0'; + async_state->wsi = wsi; + async_state->pss_token = pss; // Process each filter in the array for (int i = 0; i < cJSON_GetArraySize(filters); i++) { @@ -3678,68 +3882,34 @@ int handle_count_message(const char* sub_id, cJSON* filters, struct lws *wsi, st remaining = sizeof(sql) - strlen(sql); } - // Execute count query - - // Start query timing - struct timespec query_start, query_end; - clock_gettime(CLOCK_MONOTONIC, &query_start); - - // Execute count query via thread pool helper - int filter_count = 0; - if (thread_pool_execute_count_sync(sql, (const char**)bind_params, bind_param_count, &filter_count) != 0) { - DEBUG_ERROR("Failed to execute COUNT query via db_ops/thread_pool"); - continue; + // Submit COUNT query asynchronously to DB reader pool. + if (submit_count_query_async(async_state, sql, (const char**)bind_params, bind_param_count) != 0) { + DEBUG_ERROR("Failed to submit COUNT query async"); + strncpy(async_state->error_message, "error: failed to submit count query", sizeof(async_state->error_message) - 1); + async_state->error_message[sizeof(async_state->error_message) - 1] = '\0'; + async_state->had_error = 1; + break; } - - // Stop query timing and log - clock_gettime(CLOCK_MONOTONIC, &query_end); - long elapsed_us = (query_end.tv_sec - query_start.tv_sec) * 1000000L + - (query_end.tv_nsec - query_start.tv_nsec) / 1000L; - - log_query_execution("COUNT", sub_id, pss ? pss->client_ip : NULL, - sql, elapsed_us, 1); // COUNT always returns 1 row - - total_count += filter_count; } - // Total count calculated - - // Send COUNT response - NIP-45 format: ["COUNT", , {"count": }] - cJSON* count_response = cJSON_CreateArray(); - cJSON_AddItemToArray(count_response, cJSON_CreateString("COUNT")); - cJSON_AddItemToArray(count_response, cJSON_CreateString(sub_id)); - - // Create count object as per NIP-45 specification - cJSON* count_obj = cJSON_CreateObject(); - cJSON_AddNumberToObject(count_obj, "count", total_count); - cJSON_AddItemToArray(count_response, count_obj); - - char *count_str = cJSON_Print(count_response); - if (count_str) { - size_t count_len = strlen(count_str); - - // DEBUG: Log WebSocket frame details before sending - DEBUG_TRACE("WS_FRAME_SEND: type=COUNT len=%zu data=%.100s%s", - count_len, - count_str, - count_len > 100 ? "..." : ""); - - // Queue message for proper libwebsockets pattern - if (queue_message(wsi, pss, count_str, count_len, LWS_WRITE_TEXT) != 0) { - DEBUG_ERROR("Failed to queue COUNT message"); - } - - free(count_str); - } - cJSON_Delete(count_response); - - // Cleanup bind params + // Cleanup bind params from the final filter iteration. for (int i = 0; i < bind_param_count; i++) { free(bind_params[i]); } free(bind_params); - return total_count; + if (async_state->pending_jobs <= 0) { + if (async_state->had_error) { + send_notice_message(wsi, pss, + async_state->error_message[0] ? async_state->error_message : "error: count query failed"); + } else { + send_count_response(wsi, pss, sub_id, 0); + } + free(async_state); + return 0; + } + + return HANDLE_REQ_ASYNC_PENDING; } diff --git a/thread_profile_runs/20260401_193216/perf.data b/thread_profile_runs/20260401_193216/perf.data new file mode 100644 index 0000000..cae4108 Binary files /dev/null and b/thread_profile_runs/20260401_193216/perf.data differ diff --git a/thread_profile_runs/20260401_193216/perf_report.txt b/thread_profile_runs/20260401_193216/perf_report.txt new file mode 100644 index 0000000..87d231d --- /dev/null +++ b/thread_profile_runs/20260401_193216/perf_report.txt @@ -0,0 +1,1956 @@ +# To display the perf.data header info, please use --header/--header-only options. +# +# +# Total Lost Samples: 0 +# +# Samples: 662K of event 'task-clock:ppp' +# Event count (approx.): 165543000000 +# +# Overhead Samples Command Symbol IPC [IPC Coverage] +# ........ ............ ............ .............................................. .................... +# + 13.06% 86501 lws-main [.] sqlite3BtreeTableMoveto - - + | + ---sqlite3BtreeTableMoveto + | + |--5.83%--0xfdd00007f040000 + | + --5.53%--0xfdd00007f000001 + + 9.25% 61241 lws-main [.] sqlite3VdbeExec - - + | + ---sqlite3VdbeExec + | + --4.34%--0 + + 8.60% 56963 lws-main [.] pcache1Fetch - - + | + ---pcache1Fetch + + 8.16% 54053 lws-main [k] rep_movs_alternative - - + | + ---rep_movs_alternative + | + --8.16%--copy_page_to_iter + filemap_read + generic_file_read_iter + ext4_file_read_iter + vfs_read + __x64_sys_pread64 + x64_sys_call + do_syscall_64 + entry_SYSCALL_64_after_hwframe + sccp + + 7.11% 47112 lws-main [.] sqlite3GetVarint - - + | + ---sqlite3GetVarint + | + |--5.42%--0xfdd00007f040000 + | + --1.37%--0xfdd00007f000001 + + 5.54% 36679 lws-main [.] memcpy - - + | + ---memcpy + + 4.84% 32042 lws-main [.] sccp - - + | + ---sccp + + 4.48% 29695 lws-main [k] do_syscall_64 - - + | + ---do_syscall_64 + entry_SYSCALL_64_after_hwframe + | + --4.48%--sccp + + 3.85% 25512 lws-main [.] pcache1FetchStage2 - - + | + ---pcache1FetchStage2 + + 2.61% 17299 lws-main [k] filemap_get_read_batch - - + | + ---filemap_get_read_batch + | + --2.60%--filemap_get_pages + filemap_read + generic_file_read_iter + ext4_file_read_iter + vfs_read + __x64_sys_pread64 + x64_sys_call + do_syscall_64 + entry_SYSCALL_64_after_hwframe + sccp + + 2.18% 14446 lws-main [.] pcache1Unpin - - + | + ---pcache1Unpin + + 2.06% 13657 lws-main [.] getCellInfo - - + | + ---getCellInfo + | + |--1.05%--0x7983c9b3d5b8 + | + --0.76%--0 + + 1.96% 12992 lws-main [k] __fdget - - + | + ---__fdget + | + --1.94%--__x64_sys_pread64 + x64_sys_call + do_syscall_64 + entry_SYSCALL_64_after_hwframe + sccp + + 1.48% 9824 lws-main [.] pread - - + | + ---pread + + 1.37% 9054 lws-main [.] getAndInitPage - - + | + ---getAndInitPage + | + --0.95%--0x7983c9b3d848 + 0xa02000100010500 + 0x200 + + 1.34% 8848 lws-main [.] sqlite3VdbeIdxRowid - - + | + ---sqlite3VdbeIdxRowid + + 1.32% 8740 lws-main [.] sqlite3BtreeNext.isra.0 - - + | + ---sqlite3BtreeNext.isra.0 + | + --1.18%--0 + + 1.24% 8211 lws-main [.] btreeParseCellPtr - - + | + ---btreeParseCellPtr + | + --0.93%--0 + + 1.03% 6801 lws-main [.] getPageNormal - - + | + ---getPageNormal + + 0.99% 6582 lws-main [.] sqlite3PcacheRelease - - + | + ---sqlite3PcacheRelease + + 0.93% 6189 lws-main [.] moveToChild - - + | + ---moveToChild + | + --0.75%--0xfdd00007f040000 + + 0.91% 6021 lws-main [.] memcmp - - + | + ---memcmp + + 0.90% 5942 lws-main [.] sqlite3VdbeRecordCompareWithSkip - - + | + ---sqlite3VdbeRecordCompareWithSkip + + 0.89% 5871 lws-main [.] readDbPage - - + | + ---readDbPage + | + --0.87%--0xa02000100010500 + 0x200 + + 0.83% 5511 lws-main [.] getPageMMap - - + | + ---getPageMMap + + 0.82% 5460 lws-main [.] sqlite3VdbeSerialGet - - + | + ---sqlite3VdbeSerialGet + + 0.82% 5451 lws-main [k] xas_load - - + | + ---xas_load + | + --0.81%--filemap_get_read_batch + filemap_get_pages + filemap_read + generic_file_read_iter + ext4_file_read_iter + vfs_read + __x64_sys_pread64 + x64_sys_call + do_syscall_64 + entry_SYSCALL_64_after_hwframe + sccp + + 0.82% 5432 lws-main [.] moveToRoot - - + | + ---moveToRoot + + 0.79% 5230 lws-main [k] filemap_read - - + | + ---filemap_read + | + --0.78%--generic_file_read_iter + ext4_file_read_iter + vfs_read + __x64_sys_pread64 + x64_sys_call + do_syscall_64 + entry_SYSCALL_64_after_hwframe + sccp + + 0.74% 4869 lws-main [.] btreeParseCellPtrIndex - - + | + ---btreeParseCellPtrIndex + | + --0.73%--0x7983c9b3d5b8 + + 0.58% 3857 lws-main [.] sqlite3VdbeFinishMoveto - - + | + ---sqlite3VdbeFinishMoveto + 0 + + 0.53% 3529 lws-main [k] rw_verify_area - - + | + ---rw_verify_area + | + --0.52%--vfs_read + __x64_sys_pread64 + x64_sys_call + do_syscall_64 + entry_SYSCALL_64_after_hwframe + sccp + + 0.52% 3445 lws-main [k] aa_file_perm - - + | + ---aa_file_perm + | + --0.51%--apparmor_file_permission + security_file_permission + rw_verify_area + | + --0.51%--vfs_read + __x64_sys_pread64 + x64_sys_call + do_syscall_64 + entry_SYSCALL_64_after_hwframe + sccp + + 0.51% 3397 lws-main [.] vdbeCompareMemString - - + | + ---vdbeCompareMemString + + 0.49% 3274 lws-main [.] decodeFlags - - + 0.46% 3067 lws-main [k] xas_descend - - + 0.43% 2841 lws-main [.] sqlite3MemCompare - - + 0.42% 2810 lws-main [.] unixRead - - + 0.42% 2770 lws-main [k] __fsnotify_parent - - + 0.37% 2478 lws-main [.] sqlite3PagerUnrefNotNull - - + 0.35% 2302 lws-main [.] walFindFrame.constprop.0 - - + 0.28% 1847 lws-main [k] xas_start - - + 0.25% 1658 lws-main [.] btreeInitPage - - + 0.25% 1637 lws-main [.] binCollFunc - - + 0.22% 1461 lws-main [k] vfs_read - - + 0.12% 825 lws-main [k] fput - - + 0.11% 736 lws-main [.] pcacheFetchFinishWithInit - - + 0.09% 624 lws-main [.] btreeNext.constprop.0 - - + 0.09% 607 lws-main [.] walHashGet - - + 0.08% 548 lws-main [k] apparmor_file_permission - - + 0.08% 509 lws-main [.] moveToLeftmost - - + 0.07% 475 lws-main [k] atime_needs_update - - + 0.06% 430 lws-main [k] filemap_get_pages - - + 0.06% 408 lws-main [k] do_user_addr_fault - - + 0.06% 399 lws-main [.] __libc_malloc_impl - - + 0.06% 381 lws-main [k] _copy_to_iter - - + 0.06% 371 lws-main [k] copy_page_to_iter - - + 0.05% 350 lws-main [k] ext4_file_read_iter - - + 0.05% 342 lws-main [k] __x64_sys_pread64 - - + 0.05% 323 lws-main [k] _raw_spin_unlock_irqrestore - - + 0.05% 310 lws-main [k] __xas_next - - + 0.04% 293 lws-main [k] __rcu_read_lock - - + 0.04% 292 lws-main [k] current_time - - + 0.04% 273 lws-main [k] __rcu_read_unlock - - + 0.04% 259 lws-main [k] clear_page_orig - - + 0.04% 251 lws-main [k] generic_file_read_iter - - + 0.03% 231 lws-main [k] ktime_get_coarse_real_ts64 - - + 0.03% 216 lws-main [k] security_file_permission - - + 0.03% 215 lws-main [k] folio_mark_accessed - - + 0.03% 208 lws-main [k] handle_softirqs - - + 0.03% 207 lws-main [k] __x86_indirect_thunk_rax - - + 0.03% 179 lws-main [k] touch_atime - - + 0.03% 177 lws-main [k] syscall_exit_to_user_mode_prepare - - + 0.03% 173 lws-main [k] x64_sys_call - - + 0.02% 152 lws-main [.] print_string_ptr - - + 0.02% 148 lws-main [.] __libc_free - - + 0.02% 148 lws-main [.] sha256_transform - - + 0.02% 139 lws-main [.] btreeParseCellAdjustSizeForOverflow.isra.0 - - + 0.02% 133 lws-main [k] __cond_resched - - + 0.02% 108 db-read-2 [.] sccp - - + 0.02% 102 db-read-2 [k] rep_movs_alternative - - + 0.01% 98 db-read-1 [k] rep_movs_alternative - - + 0.01% 91 db-read-4 [k] rep_movs_alternative - - + 0.01% 89 lws-main [.] remove_subscription_from_kind_index.part.0 - - + 0.01% 87 lws-main [.] alloc_slot - - + 0.01% 83 lws-main [.] __syscall_ret - - + 0.01% 83 lws-main [k] make_vfsgid - - + 0.01% 81 lws-main [k] iowrite16 - - + 0.01% 75 db-read-2 [.] sqlite3VdbeExec - - + 0.01% 71 db-read-1 [k] do_syscall_64 - - + 0.01% 71 db-read-3 [k] rep_movs_alternative - - + 0.01% 66 lws-main [k] make_vfsuid - - + 0.01% 64 lws-main [k] sock_poll - - + 0.01% 61 lws-main [.] __pthread_mutex_unlock - - + 0.01% 60 db-read-1 [.] sqlite3VdbeExec - - + 0.01% 59 db-read-2 [k] do_syscall_64 - - + 0.01% 59 lws-main [.] strlen - - + 0.01% 56 lws-main [.] lengthFunc - - + 0.01% 55 db-read-4 [k] do_syscall_64 - - + 0.01% 54 db-read-3 [.] sccp - - + 0.01% 52 lws-main [.] get_meta - - + 0.01% 51 db-read-1 [.] sccp - - + 0.01% 50 lws-main [.] __syscall_cp - - + 0.01% 49 db-read-4 [.] sccp - - + 0.01% 49 db-read-4 [.] sqlite3VdbeExec - - + 0.01% 48 lws-main [k] mas_walk - - + 0.01% 48 lws-main [k] mem_cgroup_commit_charge - - + 0.01% 47 db-read-3 [.] sqlite3VdbeExec - - + 0.01% 44 lws-main [k] flush_tlb_mm_range - - + 0.01% 44 lws-main [k] syscall_exit_to_user_mode - - + 0.01% 44 lws-main [k] zap_pte_range - - + 0.01% 43 db-read-2 [.] sqlite3BtreeTableMoveto - - + 0.01% 43 lws-main [k] finish_task_switch.isra.0 - - + 0.01% 42 lws-main [k] __lruvec_stat_mod_folio - - + 0.01% 42 lws-main [.] sqlite3MemSize - - + 0.01% 41 db-read-3 [k] do_syscall_64 - - + 0.01% 41 lws-main [k] smp_call_function_many_cond - - + 0.01% 40 db-read-2 [k] filemap_get_read_batch - - + 0.01% 40 db-read-4 [k] filemap_get_read_batch - - + 0.01% 38 lws-main [.] decfloat - - + 0.01% 37 lws-main [.] __lock - - + 0.01% 37 lws-main [k] _raw_spin_unlock_irq - - + 0.01% 37 lws-main [.] printf_core - - + 0.01% 36 lws-main [.] __unlock - - + 0.01% 34 db-read-2 [k] __fdget - - + 0.01% 34 db-read-2 [.] pcache1Fetch - - + 0.01% 34 db-read-3 [k] _raw_spin_unlock_irqrestore - - + 0.01% 34 lws-main [k] __next_zones_zonelist - - + 0.01% 34 lws-main [k] blk_cgroup_congested - - + 0.01% 34 lws-main [k] get_mem_cgroup_from_mm - - + 0.00% 32 db-read-1 [k] filemap_get_read_batch - - + 0.00% 31 db-read-2 [k] do_user_addr_fault - - + 0.00% 31 lws-main [k] __rmqueue_pcplist - - + 0.00% 30 db-read-4 [k] _raw_spin_unlock_irqrestore - - + 0.00% 30 db-read-4 [k] finish_task_switch.isra.0 - - + 0.00% 30 lws-main [k] __raw_callee_save___pv_queued_spin_unlock - - + 0.00% 29 db-read-1 [k] __fdget - - + 0.00% 29 db-read-2 [k] xas_load - - + 0.00% 28 db-read-2 [k] _raw_spin_unlock_irqrestore - - + 0.00% 28 db-read-3 [.] __libc_malloc_impl - - + 0.00% 28 lws-main [.] __pthread_mutex_lock - - + 0.00% 28 lws-main [k] lock_vma_under_rcu - - + 0.00% 27 db-read-1 [.] __libc_malloc_impl - - + 0.00% 27 db-read-1 [.] pcache1FetchStage2 - - + 0.00% 27 lws-main [k] __alloc_pages - - + 0.00% 27 lws-main [.] strcmp - - + 0.00% 26 db-read-1 [k] do_user_addr_fault - - + 0.00% 26 db-read-1 [.] sqlite3BtreeTableMoveto - - + 0.00% 25 db-read-1 [.] pcache1Fetch - - + 0.00% 25 db-read-2 [.] __pthread_mutex_unlock - - + 0.00% 25 db-read-3 [k] filemap_get_read_batch - - + 0.00% 25 lws-main [k] nft_do_chain - - + 0.00% 25 lws-main [.] pcache1Alloc - - + 0.00% 24 db-read-4 [.] sqlite3BtreeTableMoveto - - + 0.00% 24 lws-main [k] down_read_trylock - - + 0.00% 24 lws-main [.] pcache1TruncateUnsafe - - + 0.00% 23 db-read-2 [.] memcpy - - + 0.00% 22 db-read-1 [.] __pthread_mutex_unlock - - + 0.00% 22 db-read-1 [k] _raw_spin_unlock_irqrestore - - + 0.00% 22 db-read-2 [.] sqlite3GetVarint - - + 0.00% 22 db-read-3 [.] __pthread_mutex_unlock - - + 0.00% 22 db-read-3 [k] xas_load - - + 0.00% 21 db-read-2 [.] __libc_malloc_impl - - + 0.00% 21 db-read-2 [k] finish_task_switch.isra.0 - - + 0.00% 21 db-read-3 [k] finish_task_switch.isra.0 - - + 0.00% 21 lws-main [.] countStep - - + 0.00% 20 db-read-1 [k] xas_load - - + 0.00% 20 db-read-3 [k] do_user_addr_fault - - + 0.00% 20 db-read-3 [.] sqlite3BtreeTableMoveto - - + 0.00% 20 lws-main [.] fcntl - - + 0.00% 20 lws-main [k] kmem_cache_free - - + 0.00% 20 lws-main [k] next_uptodate_folio - - + 0.00% 20 lws-main [.] print_value - - + 0.00% 20 lws-main [.] sqlite3DbMallocRawNN - - + 0.00% 19 db-read-1 [.] memcpy - - + 0.00% 19 db-read-2 [.] pread - - + 0.00% 19 db-read-3 [k] __fdget - - + 0.00% 19 db-read-4 [k] __fdget - - + 0.00% 19 db-read-4 [.] __libc_malloc_impl - - + 0.00% 19 db-read-4 [.] pcache1FetchStage2 - - + 0.00% 19 lws-main [.] yy_reduce.isra.0 - - + 0.00% 18 db-read-1 [k] xas_descend - - + 0.00% 18 db-read-2 [k] clear_page_orig - - + 0.00% 18 db-read-4 [.] pcache1Fetch - - + 0.00% 18 db-read-4 [.] pread - - + 0.00% 18 lws-main [k] __mod_memcg_lruvec_state - - + 0.00% 18 lws-main [.] __munmap - - + 0.00% 18 lws-main [k] kmem_cache_alloc - - + 0.00% 18 lws-main [k] percpu_counter_add_batch - - + 0.00% 17 db-read-1 [k] finish_task_switch.isra.0 - - + 0.00% 17 db-read-2 [.] getCellInfo - - + 0.00% 17 db-read-3 [.] pcache1Fetch - - + 0.00% 17 lws-main [k] __handle_mm_fault - - + 0.00% 17 lws-main [k] __pte_offset_map - - + 0.00% 16 db-read-1 [.] sqlite3GetVarint - - + 0.00% 16 db-read-3 [.] memcpy - - + 0.00% 16 db-read-4 [.] sqlite3GetVarint - - + 0.00% 15 db-read-4 [.] __pthread_mutex_timedlock - - + 0.00% 15 lws-main [.] sqlite3VdbeMemFinalize - - + 0.00% 14 db-read-1 [k] clear_page_orig - - + 0.00% 14 db-read-2 [.] pcache1FetchStage2 - - + 0.00% 14 db-read-2 [.] sqlite3VdbeRecordCompareWithSkip - - + 0.00% 14 db-read-3 [.] pcache1FetchStage2 - - + 0.00% 14 db-read-4 [.] __pthread_mutex_unlock - - + 0.00% 14 db-read-4 [k] clear_page_orig - - + 0.00% 14 lws-main [k] count_memcg_events.constprop.0 - - + 0.00% 14 lws-main [.] parse_value - - + 0.00% 14 lws-main [.] sqlite3BtreeIndexMoveto - - + 0.00% 14 lws-main [.] vfprintf - - + 0.00% 14 lws-main [.] walChecksumBytes - - + 0.00% 13 db-read-3 [.] sqlite3BtreeIndexMoveto - - + 0.00% 13 db-read-3 [.] walFindFrame.constprop.0 - - + 0.00% 13 db-read-4 [k] filemap_read - - + 0.00% 13 db-read-4 [.] memcpy - - + 0.00% 13 db-read-4 [.] walFindFrame.constprop.0 - - + 0.00% 13 db-read-4 [k] xas_descend - - + 0.00% 13 lws-main [k] __memcg_slab_free_hook - - + 0.00% 13 lws-main [k] _raw_spin_lock - - + 0.00% 13 lws-main [k] mod_memcg_state - - + 0.00% 13 lws-main [.] sqlite3VdbeMemShallowCopy - - + 0.00% 13 lws-main [.] sqlite3WhereBegin - - + 0.00% 13 lws-main [k] tcp_poll - - + 0.00% 12 db-read-1 [.] sqlite3BtreeIndexMoveto - - + 0.00% 12 db-read-1 [.] walFindFrame.constprop.0 - - + 0.00% 12 db-read-2 [.] __pthread_mutex_timedlock - - + 0.00% 12 db-read-2 [.] btreeParseCellPtr - - + 0.00% 12 db-read-2 [.] readDbPage - - + 0.00% 12 db-read-2 [k] rw_verify_area - - + 0.00% 12 db-read-4 [k] xas_load - - + 0.00% 12 lws-main [k] __mod_node_page_state - - + 0.00% 12 lws-main [k] get_vma_policy - - + 0.00% 12 lws-main [k] handle_pte_fault - - + 0.00% 12 lws-main [k] irqentry_exit_to_user_mode - - + 0.00% 11 db-read-1 [.] decodeFlags - - + 0.00% 11 db-read-2 [.] sqlite3BtreeIndexMoveto - - + 0.00% 11 db-read-3 [.] __libc_free - - + 0.00% 11 db-read-3 [.] __pthread_mutex_timedlock - - + 0.00% 11 db-read-3 [k] clear_page_orig - - + 0.00% 11 db-read-3 [.] pread - - + 0.00% 11 db-read-3 [k] xas_descend - - + 0.00% 11 lws-main [k] __nf_conntrack_find_get - - + 0.00% 11 lws-main [k] alloc_anon_folio - - + 0.00% 11 lws-main [k] do_anonymous_page - - + 0.00% 11 lws-main [k] folio_remove_rmap_ptes - - + 0.00% 11 lws-main [k] get_page_from_freelist - - + 0.00% 11 lws-main [k] update_blocked_averages - - + 0.00% 11 lws-main [.] vsnprintf - - + 0.00% 10 db-read-1 [.] pread - - + 0.00% 10 db-read-4 [.] __libc_free - - + 0.00% 10 lws-main [k] __anon_vma_interval_tree_remove - - + 0.00% 10 lws-main [.] fmt_fp - - + 0.00% 10 lws-main [k] folio_add_lru - - + 0.00% 10 lws-main [.] parse_string - - + 0.00% 10 lws-main [.] sqlite3GetVarint32 - - + 0.00% 10 lws-main [k] tcp_in_window - - + 0.00% 10 lws-main [k] virtqueue_get_buf_ctx_split - - + 0.00% 9 db-read-1 [.] __libc_free - - + 0.00% 9 db-read-1 [k] aa_file_perm - - + 0.00% 9 db-read-1 [k] handle_softirqs - - + 0.00% 9 db-read-1 [k] rw_verify_area - - + 0.00% 9 db-read-2 [.] memcmp - - + 0.00% 9 db-read-2 [k] smp_call_function_many_cond - - + 0.00% 9 db-read-3 [k] blk_cgroup_congested - - + 0.00% 9 db-read-3 [.] pcache1Unpin - - + 0.00% 9 db-read-3 [.] readDbPage - - + 0.00% 9 db-read-3 [.] sqlite3GetVarint - - + 0.00% 9 db-read-3 [.] sqlite3VdbeRecordCompareWithSkip - - + 0.00% 9 db-read-4 [.] getCellInfo - - + 0.00% 9 lws-main [k] ___slab_alloc - - + 0.00% 9 lws-main [k] anon_vma_interval_tree_insert - - + 0.00% 9 lws-main [.] default_malloc - - + 0.00% 9 lws-main [.] ensure - - + 0.00% 9 lws-main [k] nf_conntrack_tcp_packet - - + 0.00% 9 lws-main [k] nf_hook_slow - - + 0.00% 9 lws-main [k] pvclock_clocksource_read_nowd - - + 0.00% 9 lws-main [.] resolveExprStep - - + 0.00% 9 lws-main [.] secp256k1_ecmult_gen - - + 0.00% 9 lws-main [.] sqlite3Malloc - - + 0.00% 9 lws-main [.] sqlite3VdbeMemGrow - - + 0.00% 9 lws-main [k] try_charge_memcg - - + 0.00% 8 db-read-1 [.] getAndInitPage - - + 0.00% 8 db-read-1 [.] readDbPage - - + 0.00% 8 db-read-2 [.] btreeInitPage - - + 0.00% 8 db-read-2 [k] filemap_read - - + 0.00% 8 db-read-2 [.] getAndInitPage - - + 0.00% 8 db-read-2 [.] getPageNormal - - + 0.00% 8 db-read-2 [.] pcache1Unpin - - + 0.00% 8 db-read-4 [k] aa_file_perm - - + 0.00% 8 db-read-4 [k] do_user_addr_fault - - + 0.00% 8 db-read-4 [.] sqlite3BtreeIndexMoveto - - + 0.00% 8 db-read-4 [.] sqlite3VdbeRecordCompareWithSkip - - + 0.00% 8 lws-main [.] __pthread_mutex_timedlock - - + 0.00% 8 lws-main [.] __pthread_mutex_trylock_owner - - + 0.00% 8 lws-main [k] fib_table_lookup - - + 0.00% 8 lws-main [k] filemap_get_entry - - + 0.00% 8 lws-main [k] folio_add_new_anon_rmap - - + 0.00% 8 lws-main [k] get_pfnblock_flags_mask - - + 0.00% 8 lws-main [k] ip_protocol_deliver_rcu - - + 0.00% 8 lws-main [k] ipv4_conntrack_defrag - - + 0.00% 8 lws-main [k] net_rx_action - - + 0.00% 8 lws-main [k] nft_do_chain_ipv4 - - + 0.00% 8 lws-main [.] sqlite3RunParser - - + 0.00% 8 lws-main [k] tcp_rcv_established - - + 0.00% 8 lws-main [k] tcp_v4_early_demux - - + 0.00% 8 lws-main [.] vdbeRecordCompareString - - + 0.00% 7 db-read-1 [.] __pthread_mutex_timedlock - - + 0.00% 7 db-read-1 [.] getCellInfo - - + 0.00% 7 db-read-2 [.] __libc_free - - + 0.00% 7 db-read-2 [.] __pthread_mutex_lock - - + 0.00% 7 db-read-2 [k] aa_file_perm - - + 0.00% 7 db-read-2 [.] alloc_slot - - + 0.00% 7 db-read-2 [.] sqlite3BtreeNext.isra.0 - - + 0.00% 7 db-read-2 [.] sqlite3PcacheRelease - - + 0.00% 7 db-read-2 [.] walFindFrame.constprop.0 - - + 0.00% 7 db-read-2 [k] xas_descend - - + 0.00% 7 db-read-3 [.] __pthread_mutex_lock - - + 0.00% 7 db-read-3 [.] getPageNormal - - + 0.00% 7 db-read-3 [.] unixRead - - + 0.00% 7 db-read-4 [.] btreeParseCellPtr - - + 0.00% 7 db-read-4 [.] decodeFlags - - + 0.00% 7 db-read-4 [.] pcache1Unpin - - + 0.00% 7 db-read-4 [.] readDbPage - - + 0.00% 7 db-read-4 [k] smp_call_function_many_cond - - + 0.00% 7 db-read-4 [.] sqlite3BtreeNext.isra.0 - - + 0.00% 7 db-read-4 [.] sqlite3MemSize - - + 0.00% 7 db-read-4 [.] sqlite3PcacheRelease - - + 0.00% 7 lws-main [.] __mmap - - + 0.00% 7 lws-main [k] _raw_spin_trylock - - + 0.00% 7 lws-main [k] filemap_map_pages - - + 0.00% 7 lws-main [k] kmem_cache_alloc_node - - + 0.00% 7 lws-main [k] mark_buffer_dirty - - + 0.00% 7 lws-main [k] mas_data_end - - + 0.00% 7 lws-main [.] memchr - - + 0.00% 7 lws-main [k] nf_confirm - - + 0.00% 7 lws-main [.] pop_arg - - + 0.00% 7 lws-main [.] secp256k1_fe_mul_inner - - + 0.00% 6 db-read-1 [k] __fsnotify_parent - - + 0.00% 6 db-read-1 [.] btreeInitPage - - + 0.00% 6 db-read-1 [.] getPageNormal - - + 0.00% 6 db-read-1 [.] memcmp - - + 0.00% 6 db-read-1 [.] pcache1TruncateUnsafe - - + 0.00% 6 db-read-1 [.] pcache1Unpin - - + 0.00% 6 db-read-1 [.] resolveExprStep - - + 0.00% 6 db-read-1 [k] smp_call_function_many_cond - - + 0.00% 6 db-read-1 [.] sqlite3MemSize - - + 0.00% 6 db-read-2 [.] sqlite3MemSize - - + 0.00% 6 db-read-2 [.] vdbeCompareMemString - - + 0.00% 6 db-read-2 [k] xas_start - - + 0.00% 6 db-read-3 [.] btreeInitPage - - + 0.00% 6 db-read-3 [.] decodeFlags - - + 0.00% 6 db-read-3 [.] memcmp - - + 0.00% 6 db-read-3 [.] sqlite3BtreeNext.isra.0 - - + 0.00% 6 db-read-3 [.] sqlite3MemSize - - + 0.00% 6 db-read-4 [.] __pthread_mutex_lock - - + 0.00% 6 db-read-4 [.] sqlite3VdbeFinishMoveto - - + 0.00% 6 db-write [k] do_syscall_64 - - + 0.00% 6 lws-main [k] __fdget_raw - - + 0.00% 6 lws-main [k] __memcg_slab_post_alloc_hook - - + 0.00% 6 lws-main [k] __mod_lruvec_state - - + 0.00% 6 lws-main [k] __tcp_transmit_skb - - + 0.00% 6 lws-main [k] alloc_pages_mpol - - + 0.00% 6 lws-main [k] crc32_body - - + 0.00% 6 lws-main [k] free_unref_page_commit - - + 0.00% 6 lws-main [k] handle_mm_fault - - + 0.00% 6 lws-main [k] mas_wr_node_store - - + 0.00% 6 lws-main [.] pwrite - - + 0.00% 6 lws-main [k] refill_stock - - + 0.00% 6 lws-main [.] sqlite3BtreeInsert - - + 0.00% 6 lws-main [.] sqlite3ExprCodeTarget - - + 0.00% 6 lws-main [.] sqlite3GetToken - - + 0.00% 6 lws-main [.] strncmp - - + 0.00% 6 lws-main [.] unixShmLock - - + 0.00% 6 lws-main [k] virtnet_rq_alloc.isra.0 - - + 0.00% 5 db-read-1 [.] btreeParseCellPtrIndex - - + 0.00% 5 db-read-1 [k] filemap_read - - + 0.00% 5 db-read-1 [.] sqlite3BtreeNext.isra.0 - - + 0.00% 5 db-read-2 [k] __lruvec_stat_mod_folio - - + 0.00% 5 db-read-2 [.] decodeFlags - - + 0.00% 5 db-read-2 [k] mem_cgroup_commit_charge - - + 0.00% 5 db-read-2 [k] native_write_msr - - + 0.00% 5 db-read-2 [.] sqlite3DbMallocRawNN - - + 0.00% 5 db-read-3 [k] filemap_read - - + 0.00% 5 db-read-3 [k] handle_softirqs - - + 0.00% 5 db-read-3 [k] mas_walk - - + 0.00% 5 db-read-3 [.] pcache1TruncateUnsafe - - + 0.00% 5 db-read-4 [.] alloc_slot - - + 0.00% 5 db-read-4 [.] btreeParseCellPtrIndex - - + 0.00% 5 db-read-4 [.] getAndInitPage - - + 0.00% 5 db-read-4 [.] getPageNormal - - + 0.00% 5 db-read-4 [.] memcmp - - + 0.00% 5 db-read-4 [k] zap_pte_range - - + 0.00% 5 lws-main [k] __dev_queue_xmit - - + 0.00% 5 lws-main [.] __fwritex - - + 0.00% 5 lws-main [k] __kmalloc - - + 0.00% 5 lws-main [k] __kmem_cache_alloc_bulk - - + 0.00% 5 lws-main [k] __mmap_region - - + 0.00% 5 lws-main [k] __pv_queued_spin_lock_slowpath - - + 0.00% 5 lws-main [k] __raw_spin_lock_irqsave - - + 0.00% 5 lws-main [.] cJSON_Duplicate_rec - - + 0.00% 5 lws-main [k] do_vmi_align_munmap - - + 0.00% 5 lws-main [.] findElementWithHash - - + 0.00% 5 lws-main [k] ip_finish_output2 - - + 0.00% 5 lws-main [k] ip_rcv_core - - + 0.00% 5 lws-main [k] load_balance - - + 0.00% 5 lws-main [.] lws_ws_rx_sm - - + 0.00% 5 lws-main [k] mas_wr_walk - - + 0.00% 5 lws-main [.] memset - - + 0.00% 5 lws-main [k] nf_nat_inet_fn - - + 0.00% 5 lws-main [k] nft_update_chain_stats - - + 0.00% 5 lws-main [.] nontrivial_free - - + 0.00% 5 lws-main [k] ovl_init - - + 0.00% 5 lws-main [.] poll - - + 0.00% 5 lws-main [k] post_alloc_hook - - + 0.00% 5 lws-main [k] rcu_core - - + 0.00% 5 lws-main [k] rmqueue - - + 0.00% 5 lws-main [.] secp256k1_fe_sqr_inner - - + 0.00% 5 lws-main [.] sn_write - - + 0.00% 5 lws-main [.] sqlite3AtoF - - + 0.00% 5 lws-main [.] sqlite3DbNNFreeNN - - + 0.00% 5 lws-main [.] sqlite3MemMalloc - - + 0.00% 5 lws-main [.] sqlite3Select - - + 0.00% 5 lws-main [.] sqlite3_str_vappendf - - + 0.00% 5 lws-main [k] tcp_rbtree_insert - - + 0.00% 5 lws-main [k] up_read - - + 0.00% 5 lws-main [k] virtnet_poll - - + 0.00% 5 lws-main [k] vm_normal_page - - + 0.00% 4 db-read-1 [k] __mod_node_page_state - - + 0.00% 4 db-read-1 [.] btreeParseCellPtr - - + 0.00% 4 db-read-1 [.] moveToRoot - - + 0.00% 4 db-read-1 [.] sqlite3GetVarint32 - - + 0.00% 4 db-read-1 [.] sqlite3VdbeRecordCompareWithSkip - - + 0.00% 4 db-read-1 [.] sqlite3WalkExprNN - - + 0.00% 4 db-read-1 [.] walHashGet - - + 0.00% 4 db-read-2 [k] __fsnotify_parent - - + 0.00% 4 db-read-2 [k] __raw_callee_save___pv_queued_spin_unlock - - + 0.00% 4 db-read-2 [k] apparmor_file_permission - - + 0.00% 4 db-read-2 [k] blk_cgroup_congested - - + 0.00% 4 db-read-2 [k] mas_walk - - + 0.00% 4 db-read-2 [.] moveToRoot - - + 0.00% 4 db-read-2 [.] sqlite3GetVarint32 - - + 0.00% 4 db-read-2 [.] sqlite3VdbeFinishMoveto - - + 0.00% 4 db-read-2 [.] sqlite3VdbeIdxRowid - - + 0.00% 4 db-read-2 [.] unixRead - - + 0.00% 4 db-read-3 [.] btreeParseCellPtr - - + 0.00% 4 db-read-3 [.] getCellInfo - - + 0.00% 4 db-read-3 [.] sqlite3PcacheRelease - - + 0.00% 4 db-read-4 [.] __lock - - + 0.00% 4 db-read-4 [k] apparmor_file_permission - - + 0.00% 4 db-read-4 [.] moveToChild - - + 0.00% 4 db-read-4 [k] rw_verify_area - - + 0.00% 4 db-read-4 [.] sqlite3DbMallocRawNN - - + 0.00% 4 db-read-4 [k] xas_start - - + 0.00% 4 lws-main [k] __block_commit_write - - + 0.00% 4 lws-main [k] __call_rcu_common - - + 0.00% 4 lws-main [k] __inet_lookup_established - - + 0.00% 4 lws-main [k] __ip_dev_find - - + 0.00% 4 lws-main [k] __ip_local_out - - + 0.00% 4 lws-main [k] __netif_receive_skb_list_core - - + 0.00% 4 lws-main [k] __x2apic_send_IPI_mask - - + 0.00% 4 lws-main [.] add_item_to_object.constprop.0 - - + 0.00% 4 lws-main [.] balance_nonroot - - + 0.00% 4 lws-main [.] cJSON_Delete - - + 0.00% 4 lws-main [k] consume_stock - - + 0.00% 4 lws-main [.] countFinalize - - + 0.00% 4 lws-main [k] down_write - - + 0.00% 4 lws-main [.] exprDup - - + 0.00% 4 lws-main [k] ext4_es_lookup_extent - - + 0.00% 4 lws-main [k] folio_lruvec_lock_irqsave - - + 0.00% 4 lws-main [k] futex_wake - - + 0.00% 4 lws-main [k] ip_list_rcv - - + 0.00% 4 lws-main [k] mas_next_slot - - + 0.00% 4 lws-main [k] mas_preallocate - - + 0.00% 4 lws-main [k] mas_rev_awalk - - + 0.00% 4 lws-main [k] memset_orig - - + 0.00% 4 lws-main [k] native_write_msr - - + 0.00% 4 lws-main [k] nf_hook_slow_list - - + 0.00% 4 lws-main [k] nf_nat_ipv4_pre_routing - - + 0.00% 4 lws-main [.] nostr_relay_callback - - + 0.00% 4 lws-main [k] reqsk_timer_handler - - + 0.00% 4 lws-main [.] rops_handle_POLLIN_ws - - + 0.00% 4 lws-main [.] secp256k1_gej_add_ge - - + 0.00% 4 lws-main [.] secp256k1_modinv64 - - + 0.00% 4 lws-main [k] skb_clone - - + 0.00% 4 lws-main [.] sqlite3PcacheDirtyList.isra.0 - - + 0.00% 4 lws-main [.] sqlite3WalkExprNN - - + 0.00% 4 lws-main [k] tcp_ack - - + 0.00% 4 lws-main [k] tcp_clean_rtx_queue.constprop.0 - - + 0.00% 4 lws-main [k] uncharge_folio - - + 0.00% 4 lws-main [k] up_write - - + 0.00% 4 lws-main [k] vm_unmapped_area - - + 0.00% 4 lws-main [k] vma_alloc_folio - - + 0.00% 4 lws-main [.] walIndexAppend - - + 0.00% 4 lws-main [.] whereScanNext - - + 0.00% 3 db-read-1 [.] __pthread_mutex_lock - - + 0.00% 3 db-read-1 [.] alloc_slot - - + 0.00% 3 db-read-1 [k] blk_cgroup_congested - - + 0.00% 3 db-read-1 [k] futex_wake - - + 0.00% 3 db-read-1 [.] get_meta - - + 0.00% 3 db-read-1 [k] kmem_cache_alloc - - + 0.00% 3 db-read-1 [.] moveToChild - - + 0.00% 3 db-read-1 [.] sqlite3BtreeInsert - - + 0.00% 3 db-read-1 [.] sqlite3PcacheRelease - - + 0.00% 3 db-read-1 [.] vdbeCompareMemString - - + 0.00% 3 db-read-1 [k] zap_pte_range - - + 0.00% 3 db-read-2 [k] __memcg_slab_post_alloc_hook - - + 0.00% 3 db-read-2 [k] __mod_node_page_state - - + 0.00% 3 db-read-2 [.] __unlock - - + 0.00% 3 db-read-2 [k] _raw_spin_unlock_irq - - + 0.00% 3 db-read-2 [.] btreeParseCellPtrIndex - - + 0.00% 3 db-read-2 [k] get_mem_cgroup_from_mm - - + 0.00% 3 db-read-2 [.] pcache1TruncateUnsafe - - + 0.00% 3 db-read-2 [.] resolveExprStep - - + 0.00% 3 db-read-2 [.] sqlite3Malloc - - + 0.00% 3 db-read-2 [.] sqlite3VdbeSerialGet - - + 0.00% 3 db-read-2 [k] vfs_read - - + 0.00% 3 db-read-2 [.] whereLoopAddBtreeIndex - - + 0.00% 3 db-read-3 [k] __lruvec_stat_mod_folio - - + 0.00% 3 db-read-3 [.] alloc_slot - - + 0.00% 3 db-read-3 [k] apparmor_file_permission - - + 0.00% 3 db-read-3 [.] getAndInitPage - - + 0.00% 3 db-read-3 [k] iowrite16 - - + 0.00% 3 db-read-3 [.] pcacheManageDirtyList - - + 0.00% 3 db-read-3 [.] sqlite3VdbeFinishMoveto - - + 0.00% 3 db-read-3 [.] vdbeCompareMemString - - + 0.00% 3 db-read-3 [.] walHashGet - - + 0.00% 3 db-read-4 [k] __fsnotify_parent - - + 0.00% 3 db-read-4 [.] __munmap - - + 0.00% 3 db-read-4 [k] __raw_callee_save___pv_queued_spin_unlock - - + 0.00% 3 db-read-4 [k] __rcu_read_lock - - + 0.00% 3 db-read-4 [k] handle_softirqs - - + 0.00% 3 db-read-4 [.] pcache1TruncateUnsafe - - + 0.00% 3 db-read-4 [k] percpu_counter_add_batch - - + 0.00% 3 db-read-4 [.] sqlite3GetVarint32 - - + 0.00% 3 db-read-4 [.] vdbeCompareMemString - - + 0.00% 3 db-read-4 [k] vfs_read - - + 0.00% 3 db-read-4 [.] whereLoopAddBtree - - + 0.00% 3 db-write [k] _raw_spin_unlock_irq - - + 0.00% 3 db-write [k] _raw_spin_unlock_irqrestore - - + 0.00% 3 event-worker [.] secp256k1_fe_sqr_inner - - + 0.00% 3 event-worker [.] secp256k1_ge_from_storage - - + 0.00% 3 lws-main [k] __bitmap_weight - - + 0.00% 3 lws-main [.] __floatscan - - + 0.00% 3 lws-main [.] __intscan - - + 0.00% 3 lws-main [k] __ip_queue_xmit - - + 0.00% 3 lws-main [k] __mem_cgroup_charge - - + 0.00% 3 lws-main [k] __netif_receive_skb_core.constprop.0 - - + 0.00% 3 lws-main [k] __netif_receive_skb_one_core - - + 0.00% 3 lws-main [k] __nf_conntrack_alloc - - + 0.00% 3 lws-main [k] __pte_offset_map_lock - - + 0.00% 3 lws-main [k] __radix_tree_lookup - - + 0.00% 3 lws-main [k] __rq_qos_throttle - - + 0.00% 3 lws-main [k] __slab_free - - + 0.00% 3 lws-main [.] __stdio_write - - + 0.00% 3 lws-main [.] _lws_plat_service_tsi.part.0 - - + 0.00% 3 lws-main [k] _raw_spin_unlock - - + 0.00% 3 lws-main [k] balance_dirty_pages_ratelimited_flags - - + 0.00% 3 lws-main [.] btreeBeginTrans - - + 0.00% 3 lws-main [.] buffer_skip_whitespace - - + 0.00% 3 lws-main [.] cJSON_ParseWithLengthOpts - - + 0.00% 3 lws-main [k] can_vma_merge_before - - + 0.00% 3 lws-main [k] cap_vm_enough_memory - - + 0.00% 3 lws-main [k] cgroup_rstat_updated - - + 0.00% 3 lws-main [k] cond_accept_memory - - + 0.00% 3 lws-main [.] createAggContext - - + 0.00% 3 lws-main [k] current_obj_cgroup - - + 0.00% 3 lws-main [k] do_mmap - - + 0.00% 3 lws-main [k] eth_type_trans - - + 0.00% 3 lws-main [.] free - - + 0.00% 3 lws-main [k] free_unref_page_prepare - - + 0.00% 3 lws-main [k] get_l4proto - - + 0.00% 3 lws-main [.] get_object_item - - + 0.00% 3 lws-main [k] hash_conntrack_raw - - + 0.00% 3 lws-main [k] inet_ehashfn - - + 0.00% 3 lws-main [k] inet_gro_receive - - + 0.00% 3 lws-main [k] ip_finish_output - - + 0.00% 3 lws-main [k] ip_skb_dst_mtu - - + 0.00% 3 lws-main [k] ip_sublist_rcv - - + 0.00% 3 lws-main [k] ipv4_conntrack_local - - + 0.00% 3 lws-main [k] kfree_skbmem - - + 0.00% 3 lws-main [k] kthread_blkcg - - + 0.00% 3 lws-main [k] lruvec_stat_mod_folio - - + 0.00% 3 lws-main [.] lws_issue_raw - - + 0.00% 3 lws-main [.] lws_service_fd_tsi - - + 0.00% 3 lws-main [k] mas_alloc_nodes - - + 0.00% 3 lws-main [k] mas_find - - + 0.00% 3 lws-main [k] mas_update_gap.part.0 - - + 0.00% 3 lws-main [k] memcpy_orig - - + 0.00% 3 lws-main [.] minmaxStep - - + 0.00% 3 lws-main [k] mod_objcg_state - - + 0.00% 3 lws-main [k] napi_complete_done - - + 0.00% 3 lws-main [k] napi_gro_receive - - + 0.00% 3 lws-main [k] netif_receive_skb_list_internal - - + 0.00% 3 lws-main [k] netif_skb_features - - + 0.00% 3 lws-main [k] nf_ct_acct_add - - + 0.00% 3 lws-main [k] nf_ct_get_tuple - - + 0.00% 3 lws-main [k] nft_payload_eval - - + 0.00% 3 lws-main [k] page_frag_free - - + 0.00% 3 lws-main [k] page_to_skb - - + 0.00% 3 lws-main [.] pagerWalFrames - - + 0.00% 3 lws-main [k] part_in_flight - - + 0.00% 3 lws-main [k] policy_nodemask - - + 0.00% 3 lws-main [k] posix_lock_inode - - + 0.00% 3 lws-main [.] pthreadMutexEnter - - + 0.00% 3 lws-main [.] pthreadMutexLeave - - + 0.00% 3 lws-main [.] query_subscription_details - - + 0.00% 3 lws-main [k] rb_erase - - + 0.00% 3 lws-main [k] rb_first - - + 0.00% 3 lws-main [k] release_pages - - + 0.00% 3 lws-main [.] resolveP2Values - - + 0.00% 3 lws-main [.] selectInnerLoop - - + 0.00% 3 lws-main [k] should_fail_alloc_page - - + 0.00% 3 lws-main [.] sqlite3BtreeCommitPhaseTwo - - + 0.00% 3 lws-main [.] sqlite3Insert - - + 0.00% 3 lws-main [.] sqlite3VdbeBooleanValue - - + 0.00% 3 lws-main [.] sqlite3VdbeCreate - - + 0.00% 3 lws-main [.] sqlite3VdbeHalt - - + 0.00% 3 lws-main [.] sscanf - - + 0.00% 3 lws-main [k] start_xmit - - + 0.00% 3 lws-main [k] strlen - - + 0.00% 3 lws-main [k] task_mm_cid_work - - + 0.00% 3 lws-main [k] tcp_check_space - - + 0.00% 3 lws-main [k] tcp_mstamp_refresh - - + 0.00% 3 lws-main [k] tcp_parse_options - - + 0.00% 3 lws-main [k] tcp_rtt_estimator - - + 0.00% 3 lws-main [k] tcp_stream_memory_free - - + 0.00% 3 lws-main [k] tcp_tso_segs - - + 0.00% 3 lws-main [k] tcp_v4_fill_cb - - + 0.00% 3 lws-main [k] tcp_wfree - - + 0.00% 3 lws-main [k] uncharge_batch - - + 0.00% 3 lws-main [k] unmap_page_range - - + 0.00% 3 lws-main [k] virtqueue_kick_prepare - - + 0.00% 3 lws-main [.] walIndexTryHdr - - + 0.00% 3 lws-main [.] walWriteOneFrame.isra.0 - - + 0.00% 3 lws-main [k] xmit_skb - - + 0.00% 3 lws-main [.] yy_destructor.isra.0 - - + 0.00% 2 db-read-1 [k] __futex_unqueue - - + 0.00% 2 db-read-1 [k] __get_user_nocheck_4 - - + 0.00% 2 db-read-1 [.] __pthread_mutex_trylock - - + 0.00% 2 db-read-1 [.] __unlock - - + 0.00% 2 db-read-1 [k] apparmor_file_permission - - + 0.00% 2 db-read-1 [.] binCollFunc - - + 0.00% 2 db-read-1 [k] cgroup_rstat_updated - - + 0.00% 2 db-read-1 [k] copy_page_to_iter - - + 0.00% 2 db-read-1 [k] folio_add_new_anon_rmap - - + 0.00% 2 db-read-1 [k] make_vfsgid - - + 0.00% 2 db-read-1 [.] sqlite3DbMallocRawNN - - + 0.00% 2 db-read-1 [.] sqlite3GetInt32 - - + 0.00% 2 db-read-1 [.] sqlite3KeyInfoAlloc - - + 0.00% 2 db-read-1 [.] sqlite3RunParser - - + 0.00% 2 db-read-1 [.] sqlite3VdbeSerialGet - - + 0.00% 2 db-read-1 [k] tlb_finish_mmu - - + 0.00% 2 db-read-1 [.] unixRead - - + 0.00% 2 db-read-1 [k] vfs_read - - + 0.00% 2 db-read-1 [k] xas_start - - + 0.00% 2 db-read-1 [.] yy_reduce.isra.0 - - + 0.00% 2 db-read-2 [k] __alloc_pages - - + 0.00% 2 db-read-2 [k] __get_user_nocheck_4 - - + 0.00% 2 db-read-2 [.] __pthread_mutex_trylock - - + 0.00% 2 db-read-2 [k] __rcu_read_lock - - + 0.00% 2 db-read-2 [k] __rmqueue_pcplist - - + 0.00% 2 db-read-2 [.] __timedwait_cp - - + 0.00% 2 db-read-2 [k] __x64_sys_futex - - + 0.00% 2 db-read-2 [k] _raw_spin_lock - - + 0.00% 2 db-read-2 [k] count_memcg_events.constprop.0 - - + 0.00% 2 db-read-2 [k] down_read_trylock - - + 0.00% 2 db-read-2 [k] fput - - + 0.00% 2 db-read-2 [k] free_unref_page_prepare - - + 0.00% 2 db-read-2 [k] futex_wake - - + 0.00% 2 db-read-2 [k] generic_file_read_iter - - + 0.00% 2 db-read-2 [.] get_meta - - + 0.00% 2 db-read-2 [k] get_pfnblock_flags_mask - - + 0.00% 2 db-read-2 [.] selectInnerLoop - - + 0.00% 2 db-read-2 [.] strlen - - + 0.00% 2 db-read-2 [.] whereLoopAddBtree - - + 0.00% 2 db-read-2 [.] whereScanNext - - + 0.00% 2 db-read-3 [k] __alloc_pages - - + 0.00% 2 db-read-3 [k] __fsnotify_parent - - + 0.00% 2 db-read-3 [.] __lock - - + 0.00% 2 db-read-3 [.] __mmap - - + 0.00% 2 db-read-3 [k] __rcu_read_lock - - + 0.00% 2 db-read-3 [k] __rmqueue_pcplist - - + 0.00% 2 db-read-3 [.] __timedwait_cp - - + 0.00% 2 db-read-3 [.] __unlock - - + 0.00% 2 db-read-3 [k] __x2apic_send_IPI_mask - - + 0.00% 2 db-read-3 [k] __xas_next - - + 0.00% 2 db-read-3 [k] _raw_spin_lock - - + 0.00% 2 db-read-3 [k] _raw_spin_trylock - - + 0.00% 2 db-read-3 [.] btreeNext.constprop.0 - - + 0.00% 2 db-read-3 [k] count_memcg_events.constprop.0 - - + 0.00% 2 db-read-3 [k] crc32_body - - + 0.00% 2 db-read-3 [k] down_read_trylock - - + 0.00% 2 db-read-3 [.] exprAnalyze - - + 0.00% 2 db-read-3 [k] futex_unqueue - - + 0.00% 2 db-read-3 [k] futex_wake_mark - - + 0.00% 2 db-read-3 [k] kmem_cache_alloc - - + 0.00% 2 db-read-3 [k] lock_vma_under_rcu - - + 0.00% 2 db-read-3 [.] pcacheFetchFinishWithInit - - + 0.00% 2 db-read-3 [k] rw_verify_area - - + 0.00% 2 db-read-3 [.] sqlite3GetToken - - + 0.00% 2 db-read-3 [.] sqlite3Malloc - - + 0.00% 2 db-read-3 [.] sqlite3VdbeIdxRowid - - + 0.00% 2 db-read-3 [.] sqlite3VdbeSerialGet - - + 0.00% 2 db-read-3 [.] sqlite3WhereBegin - - + 0.00% 2 db-read-3 [.] sqlite3_free - - + 0.00% 2 db-read-3 [.] whereLoopAddBtreeIndex - - + 0.00% 2 db-read-3 [k] xas_start - - + 0.00% 2 db-read-4 [k] ___slab_alloc - - + 0.00% 2 db-read-4 [.] __mmap - - + 0.00% 2 db-read-4 [k] __next_zones_zonelist - - + 0.00% 2 db-read-4 [.] __pthread_mutex_trylock - - + 0.00% 2 db-read-4 [.] __syscall_ret - - + 0.00% 2 db-read-4 [.] __timedwait_cp - - + 0.00% 2 db-read-4 [.] applyAffinity - - + 0.00% 2 db-read-4 [.] exprMightBeIndexed - - + 0.00% 2 db-read-4 [k] futex_hash - - + 0.00% 2 db-read-4 [k] futex_wake_mark - - + 0.00% 2 db-read-4 [k] get_mem_cgroup_from_mm - - + 0.00% 2 db-read-4 [k] kmem_cache_alloc - - + 0.00% 2 db-read-4 [k] mas_walk - - + 0.00% 2 db-read-4 [k] mem_cgroup_commit_charge - - + 0.00% 2 db-read-4 [.] memset - - + 0.00% 2 db-read-4 [.] pcache1Alloc - - + 0.00% 2 db-read-4 [.] pcacheFetchFinishWithInit - - + 0.00% 2 db-read-4 [.] sqlite3GetInt32 - - + 0.00% 2 db-read-4 [.] sqlite3RunParser - - + 0.00% 2 db-read-4 [.] sqlite3VdbeIdxRowid - - + 0.00% 2 db-read-4 [.] sqlite3VdbeSerialGet - - + 0.00% 2 db-read-4 [.] sqlite3WalkExprNN - - + 0.00% 2 db-read-4 [.] yy_reduce.isra.0 - - + 0.00% 2 db-write [k] __fdget - - + 0.00% 2 db-write [k] __fdget_raw - - + 0.00% 2 db-write [.] __pthread_mutex_unlock - - + 0.00% 2 db-write [k] fault_in_readable - - + 0.00% 2 db-write [.] fcntl - - + 0.00% 2 db-write [k] finish_task_switch.isra.0 - - + 0.00% 2 db-write [.] memmove - - + 0.00% 2 db-write [k] rep_movs_alternative - - + 0.00% 2 db-write [k] smp_call_function_many_cond - - + 0.00% 2 db-write [.] sqlite3BtreeIndexMoveto - - + 0.00% 2 event-worker [.] __intscan - - + 0.00% 2 event-worker [.] __pthread_mutex_timedlock - - + 0.00% 2 event-worker [.] memcpy - - + 0.00% 2 event-worker [.] secp256k1_fe_mul_inner - - + 0.00% 2 lws-main [k] __anon_vma_interval_tree_augment_rotate - - + 0.00% 2 lws-main [k] __blk_bios_map_sg - - + 0.00% 2 lws-main [k] __blk_mq_alloc_requests - - + 0.00% 2 lws-main [k] __copy_skb_header - - + 0.00% 2 lws-main [k] __filemap_fdatawait_range - - + 0.00% 2 lws-main [k] __folio_throttle_swaprate - - + 0.00% 2 lws-main [k] __free_pages - - + 0.00% 2 lws-main [k] __inet_dev_addr_type - - + 0.00% 2 lws-main [.] __libc_realloc - - + 0.00% 2 lws-main [.] __malloc_alloc_meta - - + 0.00% 2 lws-main [k] __mem_cgroup_uncharge_list - - + 0.00% 2 lws-main [k] __mod_timer - - + 0.00% 2 lws-main [k] __napi_alloc_skb - - + 0.00% 2 lws-main [k] __napi_build_skb - - + 0.00% 2 lws-main [k] __nf_ct_refresh_acct - - + 0.00% 2 lws-main [k] __pollwait - - + 0.00% 2 lws-main [k] __rb_insert_augmented - - + 0.00% 2 lws-main [k] __siphash_unaligned - - + 0.00% 2 lws-main [k] __split_vma - - + 0.00% 2 lws-main [.] __strftime_fmt_1 - - + 0.00% 2 lws-main [k] __sw_hweight64 - - + 0.00% 2 lws-main [k] __tcp_v4_send_check - - + 0.00% 2 lws-main [.] __vdso_clock_gettime - - + 0.00% 2 lws-main [k] __vm_area_free - - + 0.00% 2 lws-main [k] _find_first_bit - - + 0.00% 2 lws-main [k] _find_next_bit - - + 0.00% 2 lws-main [k] _raw_read_unlock - - + 0.00% 2 lws-main [.] add_subscription_to_manager - - + 0.00% 2 lws-main [k] add_transaction_credits - - + 0.00% 2 lws-main [k] alloc_pages - - + 0.00% 2 lws-main [.] allocateCursor - - + 0.00% 2 lws-main [k] anon_vma_clone - - + 0.00% 2 lws-main [k] apparmor_file_lock - - + 0.00% 2 lws-main [k] arch_get_unmapped_area_topdown - - + 0.00% 2 lws-main [k] bio_to_wbt_flags - - + 0.00% 2 lws-main [k] blk_mq_submit_bio - - + 0.00% 2 lws-main [k] blkcg_set_ioprio - - + 0.00% 2 lws-main [k] block_write_end - - + 0.00% 2 lws-main [.] broadcast_event_to_subscriptions - - + 0.00% 2 lws-main [.] btreeEndTransaction - - + 0.00% 2 lws-main [.] btreeOverwriteContent - - + 0.00% 2 lws-main [.] cJSON_AddItemToArray - - + 0.00% 2 lws-main [.] cJSON_GetArraySize - - + 0.00% 2 lws-main [.] cJSON_GetNumberValue - - + 0.00% 2 lws-main [.] cJSON_IsNumber - - + 0.00% 2 lws-main [.] clearSelect - - + 0.00% 2 lws-main [k] copy_page_from_iter_atomic - - + 0.00% 2 lws-main [.] countOfViewOptimization - - + 0.00% 2 lws-main [k] cubictcp_acked - - + 0.00% 2 lws-main [k] dev_gro_receive - - + 0.00% 2 lws-main [k] do_sys_poll - - + 0.00% 2 lws-main [k] dst_release - - + 0.00% 2 lws-main [.] exprMightBeIndexed - - + 0.00% 2 lws-main [.] exprNodeIsConstant - - + 0.00% 2 lws-main [k] ext4_block_write_begin - - + 0.00% 2 lws-main [k] ext4_dirty_inode - - + 0.00% 2 lws-main [k] ext4_fill_raw_inode - - + 0.00% 2 lws-main [k] ext4_meta_trans_blocks - - + 0.00% 2 lws-main [k] ext4_sb_block_valid - - + 0.00% 2 lws-main [k] ext4_writepages - - + 0.00% 2 lws-main [k] fault_in_readable - - + 0.00% 2 lws-main [k] fib_lookup_good_nhc - - + 0.00% 2 lws-main [k] filemap_get_folios_tag - - + 0.00% 2 lws-main [k] folio_add_file_rmap_ptes - - + 0.00% 2 lws-main [k] folio_clear_dirty_for_io - - + 0.00% 2 lws-main [k] folio_memcg_lock - - + 0.00% 2 lws-main [k] fq_codel_dequeue - - + 0.00% 2 lws-main [k] free_unref_page_list - - + 0.00% 2 lws-main [k] get_random_u32 - - + 0.00% 2 lws-main [.] getenv - - + 0.00% 2 lws-main [.] handle_req_message - - + 0.00% 2 lws-main [k] ip_rcv_finish_core.isra.0 - - + 0.00% 2 lws-main [k] ip_route_output_key_hash_rcu - - + 0.00% 2 lws-main [k] ip_sublist_rcv_finish - - + 0.00% 2 lws-main [.] isDate - - + 0.00% 2 lws-main [k] jbd2__journal_start - - + 0.00% 2 lws-main [.] keywordCode.constprop.0 - - + 0.00% 2 lws-main [k] kfree - - + 0.00% 2 lws-main [k] ktime_get - - + 0.00% 2 lws-main [k] ktime_get_ts64 - - + 0.00% 2 lws-main [k] kvm_clock_get_cycles - - + 0.00% 2 lws-main [k] lock_timer_base - - + 0.00% 2 lws-main [k] lookup_bh_lru - - + 0.00% 2 lws-main [.] lws_handle_POLLOUT_event - - + 0.00% 2 lws-main [.] lws_parse_ws - - + 0.00% 2 lws-main [.] lws_ssl_capable_write_no_ssl - - + 0.00% 2 lws-main [.] lws_wsi_user - - + 0.00% 2 lws-main [k] mas_ascend - - + 0.00% 2 lws-main [k] mas_empty_area_rev - - + 0.00% 2 lws-main [k] mas_leaf_max_gap - - + 0.00% 2 lws-main [k] mas_mab_cp - - + 0.00% 2 lws-main [k] mas_store_prealloc - - + 0.00% 2 lws-main [k] mas_wr_walk_index - - + 0.00% 2 lws-main [k] mpage_process_page_bufs - - + 0.00% 2 lws-main [k] mt_find - - + 0.00% 2 lws-main [k] mt_free_rcu - - + 0.00% 2 lws-main [k] neigh_hh_output - - + 0.00% 2 lws-main [k] netif_tx_wake_queue - - + 0.00% 2 lws-main [k] nf_nat_ipv4_local_in - - + 0.00% 2 lws-main [k] nf_nat_ipv4_out - - + 0.00% 2 lws-main [k] nf_nat_setup_info - - + 0.00% 2 lws-main [k] nft_immediate_eval - - + 0.00% 2 lws-main [k] note_gp_changes - - + 0.00% 2 lws-main [k] p4d_offset - - + 0.00% 2 lws-main [.] pad.part.0 - - + 0.00% 2 lws-main [.] pageFindSlot - - + 0.00% 2 lws-main [k] page_counter_cancel - - + 0.00% 2 lws-main [.] pcacheManageDirtyList - - + 0.00% 2 lws-main [k] perf_iterate_ctx - - + 0.00% 2 lws-main [k] proc_misc_d_revalidate - - + 0.00% 2 lws-main [.] process_req_async_completions - - + 0.00% 2 lws-main [k] raw_v4_input - - + 0.00% 2 lws-main [k] receive_mergeable - - + 0.00% 2 lws-main [.] resolveSelectStep - - + 0.00% 2 lws-main [k] resolve_normal_ct - - + 0.00% 2 lws-main [k] sbitmap_get - - + 0.00% 2 lws-main [.] secp256k1_sha256_transform - - + 0.00% 2 lws-main [.] seekAndWriteFd - - + 0.00% 2 lws-main [k] set_ptes.isra.0 - - + 0.00% 2 lws-main [k] sg_init_table - - + 0.00% 2 lws-main [k] siphash_1u32 - - + 0.00% 2 lws-main [k] skb_csum_hwoffload_help - - + 0.00% 2 lws-main [k] skb_free_head - - + 0.00% 2 lws-main [k] skb_release_data - - + 0.00% 2 lws-main [k] skb_release_head_state - - + 0.00% 2 lws-main [k] skb_try_coalesce - - + 0.00% 2 lws-main [k] sock_gen_put - - + 0.00% 2 lws-main [k] sock_put - - + 0.00% 2 lws-main [.] sqlite3BtreeOpen - - + 0.00% 2 lws-main [.] sqlite3ExprAssignVarNumber - - + 0.00% 2 lws-main [.] sqlite3ExprCodeFactorable - - + 0.00% 2 lws-main [.] sqlite3ExprIfTrue - - + 0.00% 2 lws-main [.] sqlite3FindTable - - + 0.00% 2 lws-main [.] sqlite3GenerateIndexKey - - + 0.00% 2 lws-main [.] sqlite3LocateTable - - + 0.00% 2 lws-main [.] sqlite3MemFree - - + 0.00% 2 lws-main [.] sqlite3OpenTableAndIndices - - + 0.00% 2 lws-main [.] sqlite3ResolveExprNames - - + 0.00% 2 lws-main [.] sqlite3SafetyCheckOk - - + 0.00% 2 lws-main [.] sqlite3Update.constprop.0 - - + 0.00% 2 lws-main [.] sqlite3VdbeMemMakeWriteable - - + 0.00% 2 lws-main [.] sqlite3VdbeMemMove - - + 0.00% 2 lws-main [.] sqlite3VdbeTransferError - - + 0.00% 2 lws-main [.] sqlite3WalEndReadTransaction - - + 0.00% 2 lws-main [.] sqlite3_step - - + 0.00% 2 lws-main [.] string_read - - + 0.00% 2 lws-main [k] strnlen - - + 0.00% 2 lws-main [k] strscpy - - + 0.00% 2 lws-main [k] submit_bio_noacct_nocheck - - + 0.00% 2 lws-main [k] tcp_ack_update_window.isra.0 - - + 0.00% 2 lws-main [k] tcp_conn_request - - + 0.00% 2 lws-main [k] tcp_do_parse_auth_options - - + 0.00% 2 lws-main [k] tcp_openreq_init_rwin - - + 0.00% 2 lws-main [k] tcp_rcv_state_process - - + 0.00% 2 lws-main [k] tcp_sacktag_write_queue - - + 0.00% 2 lws-main [k] tcp_synack_options - - + 0.00% 2 lws-main [k] tcp_sync_mss - - + 0.00% 2 lws-main [k] tcp_update_skb_after_send - - + 0.00% 2 lws-main [k] tcp_v4_do_rcv - - + 0.00% 2 lws-main [k] tcp_v4_rcv - - + 0.00% 2 lws-main [k] tcp_validate_incoming - - + 0.00% 2 lws-main [k] tcp_write_xmit - - + 0.00% 2 lws-main [k] trace_rss_stat - - + 0.00% 2 lws-main [k] unmap_region - - + 0.00% 2 lws-main [k] update_sg_lb_stats - - + 0.00% 2 lws-main [.] validate_filter_values - - + 0.00% 2 lws-main [k] validate_xmit_skb - - + 0.00% 2 lws-main [.] valueFromExpr.constprop.0 - - + 0.00% 2 lws-main [.] vdbeColumnFromOverflow - - + 0.00% 2 lws-main [.] vdbeUnbind - - + 0.00% 2 lws-main [k] vfs_write - - + 0.00% 2 lws-main [.] vfscanf - - + 0.00% 2 lws-main [k] virtio_net_hdr_to_skb.constprop.0 - - + 0.00% 2 lws-main [k] virtqueue_add_split - - + 0.00% 2 lws-main [k] vring_unmap_one_split - - + 0.00% 2 lws-main [.] walMerge - - + 0.00% 2 lws-main [.] walWriteToLog - - + 0.00% 2 lws-main [k] wbt_track - - + 0.00% 2 lws-main [.] wherePathSolver.isra.0 - - + 0.00% 2 lws-main [.] 0x0000000000000ae9 - - + 0.00% 1 db-read-1 [k] __alloc_pages - - + 0.00% 1 db-read-1 [k] __handle_mm_fault - - + 0.00% 1 db-read-1 [k] __kmem_cache_alloc_bulk - - + 0.00% 1 db-read-1 [k] __lruvec_stat_mod_folio - - + 0.00% 1 db-read-1 [.] __malloc_allzerop - - + 0.00% 1 db-read-1 [.] __mmap - - + 0.00% 1 db-read-1 [k] __mod_memcg_lruvec_state - - + 0.00% 1 db-read-1 [k] __next_zones_zonelist - - + 0.00% 1 db-read-1 [.] __pthread_cond_timedwait - - + 0.00% 1 db-read-1 [k] __pv_queued_spin_lock_slowpath - - + 0.00% 1 db-read-1 [k] __raw_callee_save___pv_queued_spin_unlock - - + 0.00% 1 db-read-1 [k] __rb_insert_augmented - - + 0.00% 1 db-read-1 [k] __rcu_read_lock - - + 0.00% 1 db-read-1 [k] __rcu_read_unlock - - + 0.00% 1 db-read-1 [.] __syscall_cp - - + 0.00% 1 db-read-1 [.] __timedwait_cp - - + 0.00% 1 db-read-1 [k] __x64_sys_futex - - + 0.00% 1 db-read-1 [k] __x86_indirect_thunk_rax - - + 0.00% 1 db-read-1 [k] _copy_to_iter - - + 0.00% 1 db-read-1 [k] _find_first_bit - - + 0.00% 1 db-read-1 [k] _raw_spin_unlock_irq - - + 0.00% 1 db-read-1 [k] add_transaction_credits - - + 0.00% 1 db-read-1 [k] alloc_anon_folio - - + 0.00% 1 db-read-1 [.] balance - - + 0.00% 1 db-read-1 [.] btreeBeginTrans - - + 0.00% 1 db-read-1 [.] btreeNext.constprop.0 - - + 0.00% 1 db-read-1 [k] call_rcu - - + 0.00% 1 db-read-1 [k] can_vma_merge_before - - + 0.00% 1 db-read-1 [.] computeLimitRegisters - - + 0.00% 1 db-read-1 [k] current_time - - + 0.00% 1 db-read-1 [k] do_anonymous_page - - + 0.00% 1 db-read-1 [k] do_futex - - + 0.00% 1 db-read-1 [k] do_mmap - - + 0.00% 1 db-read-1 [k] do_vmi_align_munmap - - + 0.00% 1 db-read-1 [k] down_read_trylock - - + 0.00% 1 db-read-1 [.] exprIdxCover - - + 0.00% 1 db-read-1 [k] ext4_file_read_iter - - + 0.00% 1 db-read-1 [k] filemap_get_pages - - + 0.00% 1 db-read-1 [.] findElementWithHash - - + 0.00% 1 db-read-1 [k] folio_add_lru - - + 0.00% 1 db-read-1 [k] folio_lruvec_lock_irqsave - - + 0.00% 1 db-read-1 [k] folio_mark_accessed - - + 0.00% 1 db-read-1 [k] folio_remove_rmap_ptes - - + 0.00% 1 db-read-1 [k] fput - - + 0.00% 1 db-read-1 [.] free - - + 0.00% 1 db-read-1 [k] free_swap_cache - - + 0.00% 1 db-read-1 [k] free_unref_page_prepare - - + 0.00% 1 db-read-1 [k] futex_hash - - + 0.00% 1 db-read-1 [k] futex_q_lock - - + 0.00% 1 db-read-1 [k] get_mem_cgroup_from_mm - - + 0.00% 1 db-read-1 [k] handle_pte_fault - - + 0.00% 1 db-read-1 [k] iowrite16 - - + 0.00% 1 db-read-1 [k] irqentry_exit_to_user_mode - - + 0.00% 1 db-read-1 [k] lock_vma_under_rcu - - + 0.00% 1 db-read-1 [k] mas_leaf_max_gap - - + 0.00% 1 db-read-1 [k] mas_prev_node - - + 0.00% 1 db-read-1 [k] mas_rev_awalk - - + 0.00% 1 db-read-1 [k] mas_split.isra.0 - - + 0.00% 1 db-read-1 [k] mas_update_gap.part.0 - - + 0.00% 1 db-read-1 [k] mas_wr_bnode - - + 0.00% 1 db-read-1 [k] mas_wr_walk - - + 0.00% 1 db-read-1 [k] native_write_msr - - + 0.00% 1 db-read-1 [.] nontrivial_free - - + 0.00% 1 db-read-1 [.] pcache1Alloc - - + 0.00% 1 db-read-1 [.] pcacheFetchFinishWithInit - - + 0.00% 1 db-read-1 [.] pcacheManageDirtyList - - + 0.00% 1 db-read-1 [k] percpu_counter_add_batch - - + 0.00% 1 db-read-1 [k] plist_add - - + 0.00% 1 db-read-1 [k] refill_obj_stock - - + 0.00% 1 db-read-1 [k] refill_stock - - + 0.00% 1 db-read-1 [k] security_file_fcntl - - + 0.00% 1 db-read-1 [k] security_file_permission - - + 0.00% 1 db-read-1 [k] should_flush_tlb - - + 0.00% 1 db-read-1 [.] sqlite3CodeSubselect - - + 0.00% 1 db-read-1 [.] sqlite3ExprColUsed.isra.0 - - + 0.00% 1 db-read-1 [.] sqlite3ExprIfFalse - - + 0.00% 1 db-read-1 [.] sqlite3GetToken - - + 0.00% 1 db-read-1 [.] sqlite3LogEst - - + 0.00% 1 db-read-1 [.] sqlite3Malloc - - + 0.00% 1 db-read-1 [.] sqlite3MemCompare - - + 0.00% 1 db-read-1 [.] sqlite3MemMalloc - - + 0.00% 1 db-read-1 [.] sqlite3SrcListDelete - - + 0.00% 1 db-read-1 [.] sqlite3VdbeIdxRowid - - + 0.00% 1 db-read-1 [.] sqlite3WalEndReadTransaction - - + 0.00% 1 db-read-1 [.] sqlite3WhereBegin - - + 0.00% 1 db-read-1 [.] sqlite3_free - - + 0.00% 1 db-read-1 [.] sqlite3_step - - + 0.00% 1 db-read-1 [k] syscall_exit_to_user_mode - - + 0.00% 1 db-read-1 [k] up_read - - + 0.00% 1 db-read-1 [.] vdbeFreeOpArray - - + 0.00% 1 db-read-1 [k] vma_alloc_folio - - + 0.00% 1 db-read-1 [k] wake_q_add_safe - - + 0.00% 1 db-read-1 [.] whereLoopAddBtree - - + 0.00% 1 db-read-1 [.] whereLoopAddBtreeIndex - - + 0.00% 1 db-read-1 [.] whereLoopAddOr - - + 0.00% 1 db-read-1 [.] whereLoopInsert - - + 0.00% 1 db-read-1 [.] whereLoopOutputAdjust - - + 0.00% 1 db-read-1 [.] wherePathSolver.isra.0 - - + 0.00% 1 db-read-1 [.] whereScanInit - - + 0.00% 1 db-read-1 [.] whereScanNext - - + 0.00% 1 db-read-1 [k] x64_sys_call - - + 0.00% 1 db-read-2 [k] __filemap_add_folio - - + 0.00% 1 db-read-2 [k] __handle_mm_fault - - + 0.00% 1 db-read-2 [k] __inet_lookup_established - - + 0.00% 1 db-read-2 [.] __lock - - + 0.00% 1 db-read-2 [k] __memcg_kmem_charge_page - - + 0.00% 1 db-read-2 [k] __mod_memcg_lruvec_state - - + 0.00% 1 db-read-2 [k] __pv_queued_spin_lock_slowpath - - + 0.00% 1 db-read-2 [k] __rcu_read_unlock - - + 0.00% 1 db-read-2 [.] __syscall_ret - - + 0.00% 1 db-read-2 [k] __x2apic_send_IPI_mask - - + 0.00% 1 db-read-2 [k] __x64_sys_fcntl - - + 0.00% 1 db-read-2 [k] __x64_sys_pread64 - - + 0.00% 1 db-read-2 [k] __x86_indirect_thunk_rax - - + 0.00% 1 db-read-2 [k] _raw_spin_trylock - - + 0.00% 1 db-read-2 [.] accessPayload - - + 0.00% 1 db-read-2 [k] alloc_anon_folio - - + 0.00% 1 db-read-2 [k] anon_vma_interval_tree_insert - - + 0.00% 1 db-read-2 [k] atime_needs_update - - + 0.00% 1 db-read-2 [.] binCollFunc - - + 0.00% 1 db-read-2 [k] cap_mmap_addr - - + 0.00% 1 db-read-2 [k] cond_accept_memory - - + 0.00% 1 db-read-2 [k] crc32_body - - + 0.00% 1 db-read-2 [.] default_malloc - - + 0.00% 1 db-read-2 [k] do_futex - - + 0.00% 1 db-read-2 [k] do_vmi_align_munmap - - + 0.00% 1 db-read-2 [.] exprAnalyze - - + 0.00% 1 db-read-2 [.] exprDup - - + 0.00% 1 db-read-2 [.] fcntl - - + 0.00% 1 db-read-2 [.] findConstInWhere - - + 0.00% 1 db-read-2 [k] folio_add_lru - - + 0.00% 1 db-read-2 [k] folio_mark_accessed - - + 0.00% 1 db-read-2 [k] futex_hash - - + 0.00% 1 db-read-2 [k] futex_q_lock - - + 0.00% 1 db-read-2 [k] futex_unqueue - - + 0.00% 1 db-read-2 [k] handle_mm_fault - - + 0.00% 1 db-read-2 [k] handle_softirqs - - + 0.00% 1 db-read-2 [.] insertCell - - + 0.00% 1 db-read-2 [k] jbd2__journal_start - - + 0.00% 1 db-read-2 [k] kmem_cache_free - - + 0.00% 1 db-read-2 [k] lock_vma_under_rcu - - + 0.00% 1 db-read-2 [k] lookup_bh_lru - - + 0.00% 1 db-read-2 [k] mas_data_end - - + 0.00% 1 db-read-2 [k] mas_empty_area_rev - - + 0.00% 1 db-read-2 [k] mas_mab_cp - - + 0.00% 1 db-read-2 [k] mas_topiary_replace - - + 0.00% 1 db-read-2 [.] memmove - - + 0.00% 1 db-read-2 [.] moveToChild - - + 0.00% 1 db-read-2 [.] nontrivial_free - - + 0.00% 1 db-read-2 [k] page_cache_ra_unbounded - - + 0.00% 1 db-read-2 [k] page_counter_cancel - - + 0.00% 1 db-read-2 [.] pcache1Alloc - - + 0.00% 1 db-read-2 [.] pcacheFetchFinishWithInit - - + 0.00% 1 db-read-2 [k] perf_event_mmap - - + 0.00% 1 db-read-2 [k] perf_event_mmap_event - - + 0.00% 1 db-read-2 [k] post_alloc_hook - - + 0.00% 1 db-read-2 [.] propagateConstantExprRewriteOne - - + 0.00% 1 db-read-2 [k] pte_mkwrite - - + 0.00% 1 db-read-2 [.] pthreadMutexAlloc - - + 0.00% 1 db-read-2 [.] pthreadMutexEnter - - + 0.00% 1 db-read-2 [k] security_mmap_addr - - + 0.00% 1 db-read-2 [.] sqlite3BtreeClose.isra.0 - - + 0.00% 1 db-read-2 [.] sqlite3ExprAffinity - - + 0.00% 1 db-read-2 [.] sqlite3MemMalloc - - + 0.00% 1 db-read-2 [.] sqlite3MemRoundup - - + 0.00% 1 db-read-2 [.] sqlite3RunParser - - + 0.00% 1 db-read-2 [.] sqlite3SrcListAppendFromTerm - - + 0.00% 1 db-read-2 [.] sqlite3SrcListAssignCursors - - + 0.00% 1 db-read-2 [.] sqlite3VdbeAddOp3 - - + 0.00% 1 db-read-2 [.] sqlite3VdbeDelete - - + 0.00% 1 db-read-2 [.] sqlite3WalkExprNN - - + 0.00% 1 db-read-2 [.] sqlite3WhereExprUsageNN - - + 0.00% 1 db-read-2 [.] sqlite3_step - - + 0.00% 1 db-read-2 [k] syscall_exit_to_user_mode_prepare - - + 0.00% 1 db-read-2 [k] tlb_batch_pages_flush - - + 0.00% 1 db-read-2 [k] tlb_gather_mmu - - + 0.00% 1 db-read-2 [.] unixShmLock - - + 0.00% 1 db-read-2 [k] unlink_anon_vmas - - + 0.00% 1 db-read-2 [.] walHashGet - - + 0.00% 1 db-read-2 [.] whereLoopInsert - - + 0.00% 1 db-read-2 [k] x64_sys_call - - + 0.00% 1 db-read-2 [.] yy_reduce.isra.0 - - + 0.00% 1 db-read-2 [k] zap_pte_range - - + 0.00% 1 db-read-3 [k] __next_zones_zonelist - - + 0.00% 1 db-read-3 [k] __pte_offset_map - - + 0.00% 1 db-read-3 [.] __pthread_mutex_trylock - - + 0.00% 1 db-read-3 [k] __raw_callee_save___pv_queued_spin_unlock - - + 0.00% 1 db-read-3 [k] __rcu_read_unlock - - + 0.00% 1 db-read-3 [k] __x64_sys_futex - - + 0.00% 1 db-read-3 [k] aa_file_perm - - + 0.00% 1 db-read-3 [k] alloc_pages_mpol - - + 0.00% 1 db-read-3 [k] apparmor_file_lock - - + 0.00% 1 db-read-3 [.] balance_nonroot - - + 0.00% 1 db-read-3 [.] btreeParseCellAdjustSizeForOverflow.isra.0 - - + 0.00% 1 db-read-3 [k] can_vma_merge_before - - + 0.00% 1 db-read-3 [k] cap_vm_enough_memory - - + 0.00% 1 db-read-3 [k] cgroup_rstat_updated - - + 0.00% 1 db-read-3 [.] codeApplyAffinity.isra.0 - - + 0.00% 1 db-read-3 [k] cond_accept_memory - - + 0.00% 1 db-read-3 [k] dequeue_skb - - + 0.00% 1 db-read-3 [k] dev_gro_receive - - + 0.00% 1 db-read-3 [k] do_anonymous_page - - + 0.00% 1 db-read-3 [.] exprDup - - + 0.00% 1 db-read-3 [k] ext4_file_read_iter - - + 0.00% 1 db-read-3 [.] findConstInWhere - - + 0.00% 1 db-read-3 [k] folio_add_lru_vma - - + 0.00% 1 db-read-3 [k] folio_add_new_anon_rmap - - + 0.00% 1 db-read-3 [k] folio_mark_accessed - - + 0.00% 1 db-read-3 [k] fput - - + 0.00% 1 db-read-3 [.] freeP4 - - + 0.00% 1 db-read-3 [.] free_req_payload_main.part.0 - - + 0.00% 1 db-read-3 [k] free_unref_page_commit - - + 0.00% 1 db-read-3 [k] futex_q_lock - - + 0.00% 1 db-read-3 [k] futex_wake - - + 0.00% 1 db-read-3 [.] getOverflowPage - - + 0.00% 1 db-read-3 [.] get_meta - - + 0.00% 1 db-read-3 [k] handle_pte_fault - - + 0.00% 1 db-read-3 [.] keywordCode.constprop.0 - - + 0.00% 1 db-read-3 [k] kfree - - + 0.00% 1 db-read-3 [k] lru_gen_refault - - + 0.00% 1 db-read-3 [k] mas_ascend - - + 0.00% 1 db-read-3 [k] mas_data_end - - + 0.00% 1 db-read-3 [k] mas_find - - + 0.00% 1 db-read-3 [k] mas_mab_cp - - + 0.00% 1 db-read-3 [k] mas_pop_node - - + 0.00% 1 db-read-3 [k] mas_prev_node - - + 0.00% 1 db-read-3 [k] mas_prev_slot - - + 0.00% 1 db-read-3 [k] mas_push_data - - + 0.00% 1 db-read-3 [k] mas_rev_awalk - - + 0.00% 1 db-read-3 [k] mas_topiary_replace - - + 0.00% 1 db-read-3 [k] mast_fill_bnode - - + 0.00% 1 db-read-3 [k] may_expand_vm - - + 0.00% 1 db-read-3 [k] mem_cgroup_commit_charge - - + 0.00% 1 db-read-3 [.] moveToRoot - - + 0.00% 1 db-read-3 [k] native_flush_tlb_multi - - + 0.00% 1 db-read-3 [k] native_write_msr - - + 0.00% 1 db-read-3 [k] nft_do_chain - - + 0.00% 1 db-read-3 [k] page_counter_try_charge - - + 0.00% 1 db-read-3 [.] pager_write - - + 0.00% 1 db-read-3 [.] pcache1Alloc - - + 0.00% 1 db-read-3 [k] percpu_counter_add_batch - - + 0.00% 1 db-read-3 [k] posix_lock_inode - - + 0.00% 1 db-read-3 [.] pthreadMutexEnter - - + 0.00% 1 db-read-3 [.] pthreadMutexLeave - - + 0.00% 1 db-read-3 [.] queue_pop - - + 0.00% 1 db-read-3 [k] rcu_cblist_dequeue - - + 0.00% 1 db-read-3 [.] reader_worker_main - - + 0.00% 1 db-read-3 [k] rebalance_domains - - + 0.00% 1 db-read-3 [.] resolveExprStep - - + 0.00% 1 db-read-3 [k] security_file_permission - - + 0.00% 1 db-read-3 [k] should_flush_tlb - - + 0.00% 1 db-read-3 [k] smp_call_function_many_cond - - + 0.00% 1 db-read-3 [.] sqlite3BtreeInsert - - + 0.00% 1 db-read-3 [.] sqlite3DbMallocRawNN - - + 0.00% 1 db-read-3 [.] sqlite3ExprAffinity - - + 0.00% 1 db-read-3 [.] sqlite3ExprCodeRunJustOnce - - + 0.00% 1 db-read-3 [.] sqlite3ExprCodeTarget - - + 0.00% 1 db-read-3 [.] sqlite3ExprCodeTemp - - + 0.00% 1 db-read-3 [.] sqlite3ExprNeedsNoAffinityChange - - + 0.00% 1 db-read-3 [.] sqlite3LocateTable - - + 0.00% 1 db-read-3 [.] sqlite3PagerWrite - - + 0.00% 1 db-read-3 [.] sqlite3SafetyCheckOk - - + 0.00% 1 db-read-3 [.] sqlite3VdbeAddOp3 - - + 0.00% 1 db-read-3 [.] sqlite3VdbeHalt - - + 0.00% 1 db-read-3 [.] sqlite3WhereExprUsageFull - - + 0.00% 1 db-read-3 [.] strlen - - + 0.00% 1 db-read-3 [k] up_read - - + 0.00% 1 db-read-3 [.] vdbeChangeP4Full - - + 0.00% 1 db-read-3 [.] vdbeRecordCompareInt - - + 0.00% 1 db-read-3 [.] vdbeRecordCompareString - - + 0.00% 1 db-read-3 [k] virtnet_poll - - + 0.00% 1 db-read-3 [.] whereClauseInsert - - + 0.00% 1 db-read-3 [.] whereLoopAddBtree - - + 0.00% 1 db-read-3 [.] whereLoopAddOr - - + 0.00% 1 db-read-3 [.] whereLoopOutputAdjust - - + 0.00% 1 db-read-3 [.] wherePathSolver.isra.0 - - + 0.00% 1 db-read-3 [.] whereScanNext - - + 0.00% 1 db-read-3 [k] zap_pte_range - - + 0.00% 1 db-read-4 [k] __futex_wait - - + 0.00% 1 db-read-4 [k] __lruvec_stat_mod_folio - - + 0.00% 1 db-read-4 [.] __malloc_allzerop - - + 0.00% 1 db-read-4 [k] __mod_lruvec_state - - + 0.00% 1 db-read-4 [k] __rmqueue_pcplist - - + 0.00% 1 db-read-4 [k] __split_vma - - + 0.00% 1 db-read-4 [k] _copy_from_user - - + 0.00% 1 db-read-4 [k] _copy_to_iter - - + 0.00% 1 db-read-4 [k] _find_next_bit - - + 0.00% 1 db-read-4 [k] _raw_spin_unlock_irq - - + 0.00% 1 db-read-4 [k] anon_vma_interval_tree_insert - - + 0.00% 1 db-read-4 [k] anon_vma_name - - + 0.00% 1 db-read-4 [.] binCollFunc - - + 0.00% 1 db-read-4 [k] bio_to_wbt_flags - - + 0.00% 1 db-read-4 [k] blk_cgroup_congested - - + 0.00% 1 db-read-4 [.] btreeInitPage - - + 0.00% 1 db-read-4 [k] copy_page_to_iter - - + 0.00% 1 db-read-4 [k] count_memcg_events.constprop.0 - - + 0.00% 1 db-read-4 [k] crc32_body - - + 0.00% 1 db-read-4 [.] db_finalize_stmt - - + 0.00% 1 db-read-4 [k] do_anonymous_page - - + 0.00% 1 db-read-4 [k] down_write_killable - - + 0.00% 1 db-read-4 [.] exprDup - - + 0.00% 1 db-read-4 [k] ext4_es_lookup_extent - - + 0.00% 1 db-read-4 [k] ext4_file_read_iter - - + 0.00% 1 db-read-4 [k] ext4_mpage_readpages - - + 0.00% 1 db-read-4 [k] filemap_get_pages - - + 0.00% 1 db-read-4 [k] folio_add_new_anon_rmap - - + 0.00% 1 db-read-4 [k] folio_mark_accessed - - + 0.00% 1 db-read-4 [k] folio_remove_rmap_ptes - - + 0.00% 1 db-read-4 [k] fput - - + 0.00% 1 db-read-4 [k] futex_wake - - + 0.00% 1 db-read-4 [k] get_futex_key - - + 0.00% 1 db-read-4 [.] get_meta - - + 0.00% 1 db-read-4 [k] get_vma_policy - - + 0.00% 1 db-read-4 [.] insertCell - - + 0.00% 1 db-read-4 [k] iowrite16 - - + 0.00% 1 db-read-4 [.] keywordCode.constprop.0 - - + 0.00% 1 db-read-4 [k] kmem_cache_alloc_node - - + 0.00% 1 db-read-4 [k] llist_add_batch - - + 0.00% 1 db-read-4 [k] lock_vma_under_rcu - - + 0.00% 1 db-read-4 [k] lru_add_drain_cpu - - + 0.00% 1 db-read-4 [k] make_vfsgid - - + 0.00% 1 db-read-4 [k] mas_empty_area_rev - - + 0.00% 1 db-read-4 [k] mas_prev_slot - - + 0.00% 1 db-read-4 [k] mas_store_gfp - - + 0.00% 1 db-read-4 [k] mas_store_prealloc - - + 0.00% 1 db-read-4 [.] memmove - - + 0.00% 1 db-read-4 [.] moveToRoot - - + 0.00% 1 db-read-4 [k] native_write_msr - - + 0.00% 1 db-read-4 [.] pageFreeArray - - + 0.00% 1 db-read-4 [.] pager_end_transaction - - + 0.00% 1 db-read-4 [.] pcache1Free - - + 0.00% 1 db-read-4 [k] plist_add - - + 0.00% 1 db-read-4 [.] propagateConstantExprRewriteOne - - + 0.00% 1 db-read-4 [.] pthreadMutexLeave - - + 0.00% 1 db-read-4 [k] release_pages - - + 0.00% 1 db-read-4 [.] resolveExprStep - - + 0.00% 1 db-read-4 [k] schedule_debug.isra.0 - - + 0.00% 1 db-read-4 [k] security_file_permission - - + 0.00% 1 db-read-4 [.] selectInnerLoop - - + 0.00% 1 db-read-4 [.] sqlite3BtreeInsert - - + 0.00% 1 db-read-4 [.] sqlite3ExprCodeTarget - - + 0.00% 1 db-read-4 [.] sqlite3ExprCompare.part.0 - - + 0.00% 1 db-read-4 [.] sqlite3ExprListAppendNew - - + 0.00% 1 db-read-4 [.] sqlite3FinishCoding - - + 0.00% 1 db-read-4 [.] sqlite3GetToken - - + 0.00% 1 db-read-4 [.] sqlite3KeyInfoAlloc - - + 0.00% 1 db-read-4 [.] sqlite3Malloc - - + 0.00% 1 db-read-4 [.] sqlite3MemRoundup - - + 0.00% 1 db-read-4 [.] sqlite3PExpr - - + 0.00% 1 db-read-4 [.] sqlite3PagerUnrefNotNull - - + 0.00% 1 db-read-4 [.] sqlite3VdbeMemGrow - - + 0.00% 1 db-read-4 [.] sqlite3WhereClauseClear - - + 0.00% 1 db-read-4 [.] sqlite3WhereExprUsageFull - - + 0.00% 1 db-read-4 [.] sqlite3WindowRewrite - - + 0.00% 1 db-read-4 [.] sqlite3_step - - + 0.00% 1 db-read-4 [.] strlen - - + 0.00% 1 db-read-4 [k] syscall_exit_to_user_mode_prepare - - + 0.00% 1 db-read-4 [k] tcp_clean_rtx_queue.constprop.0 - - + 0.00% 1 db-read-4 [.] unixRead - - + 0.00% 1 db-read-4 [k] up_read - - + 0.00% 1 db-read-4 [k] vm_area_dup - - + 0.00% 1 db-read-4 [.] whereLoopFindLesser - - + 0.00% 1 db-read-4 [.] whereLoopInsert - - + 0.00% 1 db-read-4 [.] wherePathSatisfiesOrderBy - - + 0.00% 1 db-read-4 [.] wherePathSolver.isra.0 - - + 0.00% 1 db-read-4 [.] whereScanNext - - + 0.00% 1 db-read-4 [k] x64_sys_call - - + 0.00% 1 db-write [.] __libc_malloc_impl - - + 0.00% 1 db-write [k] __raw_spin_lock_irqsave - - + 0.00% 1 db-write [.] alloc_slot - - + 0.00% 1 db-write [k] anon_vma_interval_tree_insert - - + 0.00% 1 db-write [.] cJSON_IsArray - - + 0.00% 1 db-write [k] clear_page_orig - - + 0.00% 1 db-write [.] computeCellSize - - + 0.00% 1 db-write [.] computeYMD.part.0 - - + 0.00% 1 db-write [k] do_user_addr_fault - - + 0.00% 1 db-write [.] exprDup - - + 0.00% 1 db-write [k] ext4_do_writepages - - + 0.00% 1 db-write [k] ext4_generic_write_checks - - + 0.00% 1 db-write [k] filemap_alloc_folio - - + 0.00% 1 db-write [k] filemap_get_entry - - + 0.00% 1 db-write [k] filemap_read - - + 0.00% 1 db-write [k] iowrite16 - - + 0.00% 1 db-write [k] lru_add_drain_cpu - - + 0.00% 1 db-write [k] mark_buffer_dirty - - + 0.00% 1 db-write [k] mas_prev_slot - - + 0.00% 1 db-write [.] memcmp - - + 0.00% 1 db-write [.] memcpy - - + 0.00% 1 db-write [k] memset_orig - - + 0.00% 1 db-write [k] mpage_prepare_extent_to_map - - + 0.00% 1 db-write [.] pagerWalFrames - - + 0.00% 1 db-write [.] pcache1FetchStage2 - - + 0.00% 1 db-write [.] pcache1Unpin - - + 0.00% 1 db-write [k] perf_event_mmap_event - - + 0.00% 1 db-write [.] readDbPage - - + 0.00% 1 db-write [k] release_pages - - + 0.00% 1 db-write [k] rw_verify_area - - + 0.00% 1 db-write [k] sbitmap_find_bit - - + 0.00% 1 db-write [.] sccp - - + 0.00% 1 db-write [k] scsi_prepare_cmd - - + 0.00% 1 db-write [.] sqlite3Insert - - + 0.00% 1 db-write [.] sqlite3PagerWrite - - + 0.00% 1 db-write [.] sqlite3RunParser - - + 0.00% 1 db-write [.] sqlite3WalDefaultHook - - + 0.00% 1 db-write [.] sqlite3WhereBegin - - + 0.00% 1 db-write [.] vdbeFreeOpArray - - + 0.00% 1 db-write [.] walChecksumBytes - - + 0.00% 1 db-write [.] walFindFrame.constprop.0 - - + 0.00% 1 db-write [.] walHashGet - - + 0.00% 1 db-write [.] walIndexAppend - - + 0.00% 1 db-write [.] walMerge - - + 0.00% 1 db-write [.] walWriteOneFrame.isra.0 - - + 0.00% 1 db-write [.] walWriteToLog - - + 0.00% 1 db-write [k] xas_descend - - + 0.00% 1 db-write [.] yy_reduce.isra.0 - - + 0.00% 1 event-worker [k] __fdget_raw - - + 0.00% 1 event-worker [.] __lock - - + 0.00% 1 event-worker [k] __mod_memcg_lruvec_state - - + 0.00% 1 event-worker [k] __x64_sys_futex - - + 0.00% 1 event-worker [k] _raw_spin_unlock_irqrestore - - + 0.00% 1 event-worker [k] do_syscall_64 - - + 0.00% 1 event-worker [.] fcntl - - + 0.00% 1 event-worker [k] finish_task_switch.isra.0 - - + 0.00% 1 event-worker [.] pcache1Unpin - - + 0.00% 1 event-worker [k] percpu_counter_add_batch - - + 0.00% 1 event-worker [.] sqlite3RunParser - - + 0.00% 1 event-worker [.] sqlite3VdbeExec - - + 0.00% 1 event-worker [.] sqlite3WhereBegin - - + 0.00% 1 event-worker [.] strlen - - + 0.00% 1 event-worker [.] tolower - - + 0.00% 1 event-worker [.] unixShmBarrier - - + 0.00% 1 lws-main [k] __alloc_skb - - + 0.00% 1 lws-main [k] __blk_flush_plug - - + 0.00% 1 lws-main [k] __blk_rq_map_sg - - + 0.00% 1 lws-main [k] __build_skb_around - - + 0.00% 1 lws-main [k] __d_lookup_rcu - - + 0.00% 1 lws-main [k] __dev_xmit_skb - - + 0.00% 1 lws-main [.] __errno_location - - + 0.00% 1 lws-main [k] __ext4_journal_start_sb - - + 0.00% 1 lws-main [k] __file_remove_privs - - + 0.00% 1 lws-main [k] __filemap_fdatawrite_range - - + 0.00% 1 lws-main [k] __get_free_pages - - + 0.00% 1 lws-main [k] __hrtimer_init - - + 0.00% 1 lws-main [k] __ip_finish_output - - + 0.00% 1 lws-main [.] __lws_header_table_detach - - + 0.00% 1 lws-main [.] __malloc_allzerop - - + 0.00% 1 lws-main [k] __mark_inode_dirty - - + 0.00% 1 lws-main [k] __memcpy - - + 0.00% 1 lws-main [k] __memset - - + 0.00% 1 lws-main [.] __private_cond_signal - - + 0.00% 1 lws-main [k] __sg_alloc_table - - + 0.00% 1 lws-main [.] __shgetc - - + 0.00% 1 lws-main [k] __sk_destruct - - + 0.00% 1 lws-main [k] __sk_mem_raise_allocated - - + 0.00% 1 lws-main [k] __sk_mem_reduce_allocated - - + 0.00% 1 lws-main [k] __skb_clone - - + 0.00% 1 lws-main [k] __skb_to_sgvec - - + 0.00% 1 lws-main [.] __strftime_l - - + 0.00% 1 lws-main [k] __sys_recvfrom - - + 0.00% 1 lws-main [k] __sys_sendto - - + 0.00% 1 lws-main [k] __tcp_ack_snd_check - - + 0.00% 1 lws-main [.] __timedwait_cp - - + 0.00% 1 lws-main [k] __tlb_remove_page_size - - + 0.00% 1 lws-main [k] __virt_addr_valid - - + 0.00% 1 lws-main [k] __vm_enough_memory - - + 0.00% 1 lws-main [.] __vm_wait - - + 0.00% 1 lws-main [k] __wake_up_sync_key - - + 0.00% 1 lws-main [k] __x64_sys_fdatasync - - + 0.00% 1 lws-main [k] __x86_indirect_thunk_r14 - - + 0.00% 1 lws-main [k] __x86_indirect_thunk_rcx - - + 0.00% 1 lws-main [k] __x86_indirect_thunk_rdx - - + 0.00% 1 lws-main [k] _find_first_and_bit - - + 0.00% 1 lws-main [k] _raw_read_lock - - + 0.00% 1 lws-main [k] _raw_spin_rq_lock_irqsave - - + 0.00% 1 lws-main [.] accessPayload - - + 0.00% 1 lws-main [.] add_subscription_to_kind_index - - + 0.00% 1 lws-main [k] add_wait_queue - - + 0.00% 1 lws-main [k] alloc_skb_with_frags - - + 0.00% 1 lws-main [k] apparmor_current_getlsmblob_subj - - + 0.00% 1 lws-main [k] apparmor_socket_recvmsg - - + 0.00% 1 lws-main [k] apparmor_socket_sock_rcv_skb - - + 0.00% 1 lws-main [.] bindText - - + 0.00% 1 lws-main [k] bio_associate_blkg - - + 0.00% 1 lws-main [k] bio_associate_blkg_from_css - - + 0.00% 1 lws-main [k] bio_integrity_prep - - + 0.00% 1 lws-main [k] bio_split_rw - - + 0.00% 1 lws-main [k] bit_waitqueue - - + 0.00% 1 lws-main [k] blk_add_timer - - + 0.00% 1 lws-main [k] blk_insert_flush - - + 0.00% 1 lws-main [k] blk_mq_flush_plug_list - - + 0.00% 1 lws-main [k] blk_mq_get_budget_and_tag - - + 0.00% 1 lws-main [k] blk_mq_sched_bio_merge - - + 0.00% 1 lws-main [k] blk_mq_start_request - - + 0.00% 1 lws-main [k] blk_rq_merge_ok - - + 0.00% 1 lws-main [k] blkcg_maybe_throttle_current - - + 0.00% 1 lws-main [.] btreeCursor - - + 0.00% 1 lws-main [.] btreeGetPage - - + 0.00% 1 lws-main [.] btreeOverwriteOverflowCell - - + 0.00% 1 lws-main [.] cJSON_CreateNumber - - + 0.00% 1 lws-main [.] cJSON_CreateObject - - + 0.00% 1 lws-main [.] cJSON_CreateString - - + 0.00% 1 lws-main [.] cJSON_IsArray - - + 0.00% 1 lws-main [.] cJSON_Parse - - + 0.00% 1 lws-main [k] call_rcu - - + 0.00% 1 lws-main [.] calloc - - + 0.00% 1 lws-main [k] can_vma_merge_after - - + 0.00% 1 lws-main [k] check_sq_full_and_disable.isra.0 - - + 0.00% 1 lws-main [.] columnTypeImpl - - + 0.00% 1 lws-main [k] consume_obj_stock - - + 0.00% 1 lws-main [.] create_subscription - - + 0.00% 1 lws-main [.] create_subscription_filter - - + 0.00% 1 lws-main [k] cubictcp_cwnd_event - - + 0.00% 1 lws-main [k] datagram_poll - - + 0.00% 1 lws-main [.] dbReallocFinish - - + 0.00% 1 lws-main [.] db_get_config_value_dup - - + 0.00% 1 lws-main [k] dequeue_skb - - + 0.00% 1 lws-main [k] destroy_large_folio - - + 0.00% 1 lws-main [k] do_poll.constprop.0 - - + 0.00% 1 lws-main [k] do_softirq.part.0 - - + 0.00% 1 lws-main [k] down_write_killable - - + 0.00% 1 lws-main [k] errseq_check - - + 0.00% 1 lws-main [.] event_matches_filter - - + 0.00% 1 lws-main [k] eventfd_poll - - + 0.00% 1 lws-main [.] exprAnalyze - - + 0.00% 1 lws-main [.] exprINAffinity.isra.0 - - + 0.00% 1 lws-main [.] exprIdxCover - - + 0.00% 1 lws-main [k] ext4_da_map_blocks.constprop.0 - - + 0.00% 1 lws-main [k] ext4_file_write_iter - - + 0.00% 1 lws-main [k] ext4_inode_csum - - + 0.00% 1 lws-main [k] file_close_fd - - + 0.00% 1 lws-main [k] find_exception - - + 0.00% 1 lws-main [.] fmodl - - + 0.00% 1 lws-main [k] folio_add_lru_vma - - + 0.00% 1 lws-main [k] folio_alloc - - + 0.00% 1 lws-main [k] folio_memcg_unlock - - + 0.00% 1 lws-main [k] folio_prep_large_rmappable - - + 0.00% 1 lws-main [k] folio_wait_bit_common - - + 0.00% 1 lws-main [.] freeSpace - - + 0.00% 1 lws-main [k] free_old_xmit_skbs - - + 0.00% 1 lws-main [k] free_pages_and_swap_cache - - + 0.00% 1 lws-main [k] free_pgtables - - + 0.00% 1 lws-main [k] free_swap_cache - - + 0.00% 1 lws-main [.] generate_monitoring_event_for_type - - + 0.00% 1 lws-main [k] generic_write_check_limits - - + 0.00% 1 lws-main [k] generic_write_checks - - + 0.00% 1 lws-main [k] get_futex_key - - + 0.00% 1 lws-main [k] get_mmap_base - - + 0.00% 1 lws-main [k] get_unique_tuple - - + 0.00% 1 lws-main [.] gettimeofday - - + 0.00% 1 lws-main [k] gro_list_prepare - - + 0.00% 1 lws-main [.] growOp3 - - + 0.00% 1 lws-main [.] growOpArray.isra.0 - - + 0.00% 1 lws-main [k] hugetlb_total_pages - - + 0.00% 1 lws-main [k] hystart_update - - + 0.00% 1 lws-main [k] import_iovec - - + 0.00% 1 lws-main [k] init_timer_key - - + 0.00% 1 lws-main [.] ip_ban_cleanup - - + 0.00% 1 lws-main [k] ip_build_and_send_pkt - - + 0.00% 1 lws-main [k] ip_local_deliver - - + 0.00% 1 lws-main [k] ip_local_deliver_finish - - + 0.00% 1 lws-main [k] ip_mc_drop_socket - - + 0.00% 1 lws-main [k] ip_queue_xmit - - + 0.00% 1 lws-main [k] ip_route_input_slow - - + 0.00% 1 lws-main [k] ip_send_check - - + 0.00% 1 lws-main [k] ip_setup_cork.constprop.0 - - + 0.00% 1 lws-main [k] ipv4_conntrack_in - - + 0.00% 1 lws-main [k] ipv4_mtu - - + 0.00% 1 lws-main [k] ipv6_raw_deliver - - + 0.00% 1 lws-main [k] irq_get_next_irq - - + 0.00% 1 lws-main [k] jbd2_journal_dirty_metadata - - + 0.00% 1 lws-main [k] jbd2_journal_stop - - + 0.00% 1 lws-main [k] jbd2_write_access_granted - - + 0.00% 1 lws-main [k] khugepaged_enter_vma - - + 0.00% 1 lws-main [k] kmalloc_reserve - - + 0.00% 1 lws-main [k] kmalloc_trace - - + 0.00% 1 lws-main [k] l3mdev_fib_table_rcu - - + 0.00% 1 lws-main [.] log_subscription_created.part.0 - - + 0.00% 1 lws-main [k] lru_gen_refault - - + 0.00% 1 lws-main [.] lws_add_http_header_by_token - - + 0.00% 1 lws-main [.] lws_buflist_next_segment_len - - + 0.00% 1 lws-main [.] lws_dll2_is_detached - - + 0.00% 1 lws-main [.] lws_dll2_remove - - + 0.00% 1 lws-main [.] lws_handshake_server - - + 0.00% 1 lws-main [.] lws_service_flag_pending - - + 0.00% 1 lws-main [k] make_kuid - - + 0.00% 1 lws-main [k] mas_next - - + 0.00% 1 lws-main [k] mas_node_count_gfp - - + 0.00% 1 lws-main [k] mas_prev_setup.constprop.0 - - + 0.00% 1 lws-main [k] mas_prev_slot - - + 0.00% 1 lws-main [k] mas_split.isra.0 - - + 0.00% 1 lws-main [k] mas_topiary_replace - - + 0.00% 1 lws-main [k] mas_wr_append - - + 0.00% 1 lws-main [k] mas_wr_end_piv - - + 0.00% 1 lws-main [k] mas_wr_store_setup.isra.0 - - + 0.00% 1 lws-main [k] mast_fill_bnode - - + 0.00% 1 lws-main [.] memmove - - + 0.00% 1 lws-main [k] mm_counter - - + 0.00% 1 lws-main [k] mmap_region - - + 0.00% 1 lws-main [.] monitoring_on_subscription_change - - + 0.00% 1 lws-main [k] mpage_prepare_extent_to_map - - + 0.00% 1 lws-main [k] mremap_userfaultfd_complete - - + 0.00% 1 lws-main [k] mtree_load - - + 0.00% 1 lws-main [k] napi_consume_skb - - + 0.00% 1 lws-main [k] napi_skb_cache_get - - + 0.00% 1 lws-main [k] nf_checksum - - + 0.00% 1 lws-main [k] nf_conntrack_handle_packet - - + 0.00% 1 lws-main [k] nf_conntrack_icmp_packet - - + 0.00% 1 lws-main [k] nf_conntrack_in - - + 0.00% 1 lws-main [k] nf_conntrack_tuple_taken - - + 0.00% 1 lws-main [k] nf_ct_invert_tuple - - + 0.00% 1 lws-main [k] nf_nat_ipv4_local_fn - - + 0.00% 1 lws-main [k] nft_match_eval - - + 0.00% 1 lws-main [k] nft_nat_do_chain - - + 0.00% 1 lws-main [.] nostr_create_and_sign_event - - + 0.00% 1 lws-main [.] nostr_secp256k1_ec_seckey_verify - - + 0.00% 1 lws-main [k] obj_cgroup_charge - - + 0.00% 1 lws-main [.] pageInsertArray - - + 0.00% 1 lws-main [k] page_counter_try_charge - - + 0.00% 1 lws-main [k] page_counter_uncharge - - + 0.00% 1 lws-main [.] pagerPagecount - - + 0.00% 1 lws-main [.] pager_unlock - - + 0.00% 1 lws-main [k] passthru_features_check - - + 0.00% 1 lws-main [.] pcache1EnforceMaxPage - - + 0.00% 1 lws-main [.] pcache1Free - - + 0.00% 1 lws-main [.] pcache1ResizeHash - - + 0.00% 1 lws-main [k] perf_event_mmap - - + 0.00% 1 lws-main [k] perf_event_mmap_event - - + 0.00% 1 lws-main [k] pmd_val - - + 0.00% 1 lws-main [k] poll_freewait - - + 0.00% 1 lws-main [.] print.constprop.0 - - + 0.00% 1 lws-main [.] process_message_queue - - + 0.00% 1 lws-main [k] propagate_protected_usage - - + 0.00% 1 lws-main [k] pte_offset_map_nolock - - + 0.00% 1 lws-main [k] pud_val - - + 0.00% 1 lws-main [k] put_dec - - + 0.00% 1 lws-main [k] put_dec_trunc8 - - + 0.00% 1 lws-main [k] qdisc_pkt_len_init - - + 0.00% 1 lws-main [.] querySharedCacheTableLock - - + 0.00% 1 lws-main [k] rcu_cblist_dequeue - - + 0.00% 1 lws-main [k] rcu_core_si - - + 0.00% 1 lws-main [k] rebalance_domains - - + 0.00% 1 lws-main [k] refill_obj_stock - - + 0.00% 1 lws-main [k] remove_vma - - + 0.00% 1 lws-main [.] req_filter_requests_config_events - - + 0.00% 1 lws-main [.] rops_callback_on_writable_ws - - + 0.00% 1 lws-main [.] rops_handle_POLLIN_listen - - + 0.00% 1 lws-main [.] rops_service_flag_pending_ws - - + 0.00% 1 lws-main [.] rops_write_role_protocol_ws - - + 0.00% 1 lws-main [k] rq_qos_wait - - + 0.00% 1 lws-main [k] rq_wait_inc_below - - + 0.00% 1 lws-main [k] run_timer_softirq - - + 0.00% 1 lws-main [k] rwsem_optimistic_spin - - + 0.00% 1 lws-main [k] rwsem_spin_on_owner - - + 0.00% 1 lws-main [k] sch_direct_xmit - - + 0.00% 1 lws-main [k] schedule_debug.isra.0 - - + 0.00% 1 lws-main [k] schedule_hrtimeout_range_clock - - + 0.00% 1 lws-main [k] scsi_initialize_rq - - + 0.00% 1 lws-main [k] scsi_queue_rq - - + 0.00% 1 lws-main [k] scsi_target_queue_ready - - + 0.00% 1 lws-main [k] sd_init_command - - + 0.00% 1 lws-main [.] secp256k1_fe_impl_normalizes_to_zero - - + 0.00% 1 lws-main [.] secp256k1_ge_from_storage - - + 0.00% 1 lws-main [.] secp256k1_schnorrsig_sign32 - - + 0.00% 1 lws-main [k] secure_tcp_seq - - + 0.00% 1 lws-main [k] security_file_truncate - - + 0.00% 1 lws-main [k] security_mmap_file - - + 0.00% 1 lws-main [k] security_sock_rcv_skb - - + 0.00% 1 lws-main [k] security_socket_recvmsg - - + 0.00% 1 lws-main [k] security_vm_enough_memory_mm - - + 0.00% 1 lws-main [.] selectAddSubqueryTypeInfo - - + 0.00% 1 lws-main [.] selectExpander - - + 0.00% 1 lws-main [k] seq_putc - - + 0.00% 1 lws-main [k] set_pte_range - - + 0.00% 1 lws-main [k] set_root - - + 0.00% 1 lws-main [.] setsockopt - - + 0.00% 1 lws-main [k] sg_alloc_table_chained - - + 0.00% 1 lws-main [k] sg_pool_alloc - - + 0.00% 1 lws-main [k] sk_clone_lock - - + 0.00% 1 lws-main [k] sk_filter_trim_cap - - + 0.00% 1 lws-main [k] sk_leave_memory_pressure - - + 0.00% 1 lws-main [k] sk_reset_timer - - + 0.00% 1 lws-main [k] sk_stream_write_space - - + 0.00% 1 lws-main [k] skb_copy_bits - - + 0.00% 1 lws-main [k] skb_defer_rx_timestamp - - + 0.00% 1 lws-main [k] skb_page_frag_refill - - + 0.00% 1 lws-main [k] skb_push - - + 0.00% 1 lws-main [k] skb_put - - + 0.00% 1 lws-main [k] slab_update_freelist.isra.0 - - + 0.00% 1 lws-main [k] sock_def_readable - - + 0.00% 1 lws-main [k] sock_write_iter - - + 0.00% 1 lws-main [.] sqlite3BitvecDestroy - - + 0.00% 1 lws-main [.] sqlite3BlobCompare - - + 0.00% 1 lws-main [.] sqlite3BtreeCount - - + 0.00% 1 lws-main [.] sqlite3CodeRhsOfIN - - + 0.00% 1 lws-main [.] sqlite3CompleteInsertion - - + 0.00% 1 lws-main [.] sqlite3ConnectionUnlocked - - + 0.00% 1 lws-main [.] sqlite3DbFreeNN - - + 0.00% 1 lws-main [.] sqlite3Dequote - - + 0.00% 1 lws-main [.] sqlite3ExprCanBeNull - - + 0.00% 1 lws-main [.] sqlite3ExprCode.part.0 - - + 0.00% 1 lws-main [.] sqlite3ExprCodeIN - - + 0.00% 1 lws-main [.] sqlite3ExprCodeRunJustOnce - - + 0.00% 1 lws-main [.] sqlite3ExprColUsed.isra.0 - - + 0.00% 1 lws-main [.] sqlite3ExprIfFalse - - + 0.00% 1 lws-main [.] sqlite3ExprListAppend - - + 0.00% 1 lws-main [.] sqlite3ExprNeedsNoAffinityChange - - + 0.00% 1 lws-main [.] sqlite3FindFunction - - + 0.00% 1 lws-main [.] sqlite3FinishCoding - - + 0.00% 1 lws-main [.] sqlite3GenerateConstraintChecks - - + 0.00% 1 lws-main [.] sqlite3IsReadOnly - - + 0.00% 1 lws-main [.] sqlite3OpenTable - - + 0.00% 1 lws-main [.] sqlite3PagerClose.isra.0 - - + 0.00% 1 lws-main [.] sqlite3PagerCommitPhaseOne.part.0 - - + 0.00% 1 lws-main [.] sqlite3PagerSharedLock - - + 0.00% 1 lws-main [.] sqlite3PagerWrite - - + 0.00% 1 lws-main [.] sqlite3PcacheMakeClean - - + 0.00% 1 lws-main [.] sqlite3PcacheSetPageSize - - + 0.00% 1 lws-main [.] sqlite3Prepare - - + 0.00% 1 lws-main [.] sqlite3SelectNew - - + 0.00% 1 lws-main [.] sqlite3SrcListAppend - - + 0.00% 1 lws-main [.] sqlite3SrcListDelete - - + 0.00% 1 lws-main [.] sqlite3TriggerColmask - - + 0.00% 1 lws-main [.] sqlite3VdbeAddOp3 - - + 0.00% 1 lws-main [.] sqlite3VdbeAddOp4Int - - + 0.00% 1 lws-main [.] sqlite3VdbeDelete - - + 0.00% 1 lws-main [.] sqlite3VdbeMakeReady - - + 0.00% 1 lws-main [.] sqlite3VdbeReset - - + 0.00% 1 lws-main [.] sqlite3WalCheckpoint - - + 0.00% 1 lws-main [.] sqlite3WalkSelect - - + 0.00% 1 lws-main [.] sqlite3WhereEnd - - + 0.00% 1 lws-main [.] sqlite3WhereSplit - - + 0.00% 1 lws-main [.] sqlite3_free - - + 0.00% 1 lws-main [.] sqlite3_prepare_v2 - - + 0.00% 1 lws-main [.] sqlite3_str_appendf - - + 0.00% 1 lws-main [.] start_websocket_relay - - + 0.00% 1 lws-main [.] strftimeFunc - - + 0.00% 1 lws-main [.] strtok - - + 0.00% 1 lws-main [k] submit_bio - - + 0.00% 1 lws-main [k] submit_bio_noacct - - + 0.00% 1 lws-main [.] sumStep - - + 0.00% 1 lws-main [k] task_state - - + 0.00% 1 lws-main [k] tasklet_action - - + 0.00% 1 lws-main [k] tcp4_gro_receive - - + 0.00% 1 lws-main [k] tcp_check_sack_reordering - - + 0.00% 1 lws-main [k] tcp_cleanup_congestion_control - - + 0.00% 1 lws-main [k] tcp_cong_avoid_ai - - + 0.00% 1 lws-main [k] tcp_current_mss - - + 0.00% 1 lws-main [k] tcp_cwnd_validate - - + 0.00% 1 lws-main [k] tcp_data_queue - - + 0.00% 1 lws-main [k] tcp_delack_max - - + 0.00% 1 lws-main [k] tcp_established_options - - + 0.00% 1 lws-main [k] tcp_fastretrans_alert - - + 0.00% 1 lws-main [k] tcp_filter - - + 0.00% 1 lws-main [k] tcp_newly_delivered - - + 0.00% 1 lws-main [k] tcp_orphan_update - - + 0.00% 1 lws-main [k] tcp_queue_rcv - - + 0.00% 1 lws-main [k] tcp_rack_advance - - + 0.00% 1 lws-main [k] tcp_rate_skb_delivered - - + 0.00% 1 lws-main [k] tcp_schedule_loss_probe - - + 0.00% 1 lws-main [k] tcp_schedule_loss_probe.part.0 - - + 0.00% 1 lws-main [k] tcp_select_initial_window - - + 0.00% 1 lws-main [k] tcp_sendmsg_locked - - + 0.00% 1 lws-main [k] tcp_shift_skb_data - - + 0.00% 1 lws-main [k] tcp_sndbuf_expand - - + 0.00% 1 lws-main [k] tcp_trim_head - - + 0.00% 1 lws-main [k] tcp_try_coalesce - - + 0.00% 1 lws-main [k] tcp_tsq_handler - - + 0.00% 1 lws-main [k] tcp_urg - - + 0.00% 1 lws-main [k] tcp_v4_send_check - - + 0.00% 1 lws-main [k] tcp_v4_send_synack - - + 0.00% 1 lws-main [.] termCanDriveIndex - - + 0.00% 1 lws-main [k] tlb_finish_mmu - - + 0.00% 1 lws-main [.] tokenExpr - - + 0.00% 1 lws-main [.] tops_fake_POLLIN_for_buffered_openssl - - + 0.00% 1 lws-main [k] try_fill_recv - - + 0.00% 1 lws-main [.] unixCurrentTimeInt64 - - + 0.00% 1 lws-main [.] unixFetch - - + 0.00% 1 lws-main [.] unixFileControl - - + 0.00% 1 lws-main [.] unixShmBarrier - - + 0.00% 1 lws-main [.] unixWrite - - + 0.00% 1 lws-main [k] unlink_anon_vmas - - + 0.00% 1 lws-main [k] unmap_vmas - - + 0.00% 1 lws-main [k] update_sd_lb_stats.constprop.0 - - + 0.00% 1 lws-main [k] userfaultfd_unmap_complete - - + 0.00% 1 lws-main [.] validate_subscription_id - - + 0.00% 1 lws-main [k] validate_xmit_xfrm - - + 0.00% 1 lws-main [.] vdbeMemClear - - + 0.00% 1 lws-main [k] vfs_writev - - + 0.00% 1 lws-main [k] virtnet_receive.constprop.0 - - + 0.00% 1 lws-main [k] virtnet_rq_get_buf - - + 0.00% 1 lws-main [k] virtqueue_disable_cb - - + 0.00% 1 lws-main [k] virtqueue_notify - - + 0.00% 1 lws-main [k] virtqueue_poll - - + 0.00% 1 lws-main [k] virtscsi_add_cmd - - + 0.00% 1 lws-main [k] virtscsi_queuecommand - - + 0.00% 1 lws-main [k] vm_area_free_rcu_cb - - + 0.00% 1 lws-main [k] vm_get_page_prot - - + 0.00% 1 lws-main [k] vma_complete - - + 0.00% 1 lws-main [k] vma_dup_policy - - + 0.00% 1 lws-main [k] vma_expand - - + 0.00% 1 lws-main [k] vp_notify - - + 0.00% 1 lws-main [k] vring_map_one_sg - - + 0.00% 1 lws-main [.] vsprintf - - + 0.00% 1 lws-main [.] walIndexWriteHdr - - + 0.00% 1 lws-main [k] wbc_account_cgroup_owner - - + 0.00% 1 lws-main [.] whereClauseInsert - - + 0.00% 1 lws-main [.] whereLoopFindLesser - - + 0.00% 1 lws-main [.] whereLoopInsert - - + 0.00% 1 lws-main [.] whereLoopOutputAdjust - - + 0.00% 1 lws-main [k] xa_load - - + 0.00% 1 lws-main [k] xfrm_lookup_with_ifid - - + 0.00% 1 lws-main [.] 0x0000000000000ab1 - - + 0.00% 1 lws-main [.] 0x0000000000000c4e - - + 0.00% 1 lws-main [.] 0x0000000000000c6c - - + 0.00% 1 lws-main [k] 0x000000000000bb2a - - + + +# +# (Cannot load tips.txt file, please install perf!) +# diff --git a/thread_profile_runs/20260401_193216/run.log b/thread_profile_runs/20260401_193216/run.log new file mode 100644 index 0000000..52a69e4 --- /dev/null +++ b/thread_profile_runs/20260401_193216/run.log @@ -0,0 +1,5 @@ +Profiling PID: 2115498 +CLK_TCK=100 +Starting perf record in background... +perf_pid=2116380 +Done. Artifacts in /tmp/c_relay_thread_profile_20260401_193216 diff --git a/thread_profile_runs/20260401_193216/thread_samples.csv b/thread_profile_runs/20260401_193216/thread_samples.csv new file mode 100644 index 0000000..dbb43a6 --- /dev/null +++ b/thread_profile_runs/20260401_193216/thread_samples.csv @@ -0,0 +1,211 @@ +timestamp,tid,thread_name,cpu_pct,delta_ticks,total_ticks +1775071937,2115498,lws-main,0.00,0,2521 +1775071937,2115501,db-read-1,0.00,0,9 +1775071937,2115502,db-read-2,0.00,0,10 +1775071937,2115503,db-read-3,0.00,0,9 +1775071937,2115504,db-read-4,0.00,0,9 +1775071937,2115505,db-write,0.00,0,0 +1775071937,2115506,event-worker,0.00,0,0 +1775071947,2115498,lws-main,0.10,1,2522 +1775071947,2115501,db-read-1,0.10,1,10 +1775071947,2115502,db-read-2,0.00,0,10 +1775071947,2115503,db-read-3,0.00,0,9 +1775071947,2115504,db-read-4,0.30,3,12 +1775071947,2115505,db-write,0.00,0,0 +1775071947,2115506,event-worker,0.00,0,0 +1775071957,2115498,lws-main,26.80,268,2790 +1775071957,2115501,db-read-1,0.00,0,10 +1775071957,2115502,db-read-2,0.10,1,11 +1775071957,2115503,db-read-3,0.00,0,9 +1775071957,2115504,db-read-4,0.00,0,12 +1775071957,2115505,db-write,0.00,0,0 +1775071957,2115506,event-worker,0.00,0,0 +1775071967,2115498,lws-main,72.10,721,3511 +1775071967,2115501,db-read-1,0.00,0,10 +1775071967,2115502,db-read-2,0.00,0,11 +1775071967,2115503,db-read-3,0.00,0,9 +1775071967,2115504,db-read-4,0.00,0,12 +1775071967,2115505,db-write,0.00,0,0 +1775071967,2115506,event-worker,0.00,0,0 +1775071977,2115498,lws-main,64.40,644,4155 +1775071977,2115501,db-read-1,0.20,2,12 +1775071977,2115502,db-read-2,0.10,1,12 +1775071977,2115503,db-read-3,0.10,1,10 +1775071977,2115504,db-read-4,0.20,2,14 +1775071977,2115505,db-write,0.00,0,0 +1775071977,2115506,event-worker,0.00,0,0 +1775071987,2115498,lws-main,42.60,426,4581 +1775071987,2115501,db-read-1,0.10,1,13 +1775071987,2115502,db-read-2,0.10,1,13 +1775071987,2115503,db-read-3,0.10,1,11 +1775071987,2115504,db-read-4,0.00,0,14 +1775071987,2115505,db-write,0.00,0,0 +1775071987,2115506,event-worker,0.00,0,0 +1775071997,2115498,lws-main,7.20,72,4653 +1775071997,2115501,db-read-1,0.00,0,13 +1775071997,2115502,db-read-2,0.00,0,13 +1775071997,2115503,db-read-3,0.00,0,11 +1775071997,2115504,db-read-4,0.00,0,14 +1775071997,2115505,db-write,0.00,0,0 +1775071997,2115506,event-worker,0.00,0,0 +1775072007,2115498,lws-main,42.90,429,5082 +1775072007,2115501,db-read-1,0.00,0,13 +1775072007,2115502,db-read-2,0.00,0,13 +1775072007,2115503,db-read-3,0.00,0,11 +1775072007,2115504,db-read-4,0.00,0,14 +1775072007,2115505,db-write,0.00,0,0 +1775072007,2115506,event-worker,0.00,0,0 +1775072017,2115498,lws-main,38.10,381,5463 +1775072017,2115501,db-read-1,0.10,1,14 +1775072017,2115502,db-read-2,0.20,2,15 +1775072017,2115503,db-read-3,0.40,4,15 +1775072017,2115504,db-read-4,0.10,1,15 +1775072017,2115505,db-write,0.00,0,0 +1775072017,2115506,event-worker,0.00,0,0 +1775072027,2115498,lws-main,93.20,932,6395 +1775072027,2115501,db-read-1,0.40,4,18 +1775072027,2115502,db-read-2,0.40,4,19 +1775072027,2115503,db-read-3,0.00,0,15 +1775072027,2115504,db-read-4,0.10,1,16 +1775072027,2115505,db-write,0.00,0,0 +1775072027,2115506,event-worker,0.00,0,0 +1775072037,2115498,lws-main,95.10,951,7346 +1775072037,2115501,db-read-1,0.10,1,19 +1775072037,2115502,db-read-2,0.20,2,21 +1775072037,2115503,db-read-3,0.30,3,18 +1775072037,2115504,db-read-4,0.00,0,16 +1775072037,2115505,db-write,0.10,1,1 +1775072037,2115506,event-worker,0.00,0,0 +1775072047,2115498,lws-main,65.00,650,7996 +1775072047,2115501,db-read-1,0.00,0,19 +1775072047,2115502,db-read-2,0.00,0,21 +1775072047,2115503,db-read-3,0.10,1,19 +1775072047,2115504,db-read-4,0.10,1,17 +1775072047,2115505,db-write,0.00,0,1 +1775072047,2115506,event-worker,0.00,0,0 +1775072057,2115498,lws-main,62.80,628,8624 +1775072057,2115501,db-read-1,0.00,0,19 +1775072057,2115502,db-read-2,0.00,0,21 +1775072057,2115503,db-read-3,0.00,0,19 +1775072057,2115504,db-read-4,0.10,1,18 +1775072057,2115505,db-write,0.00,0,1 +1775072057,2115506,event-worker,0.00,0,0 +1775072068,2115498,lws-main,20.80,208,8832 +1775072068,2115501,db-read-1,0.10,1,20 +1775072068,2115502,db-read-2,0.00,0,21 +1775072068,2115503,db-read-3,0.00,0,19 +1775072068,2115504,db-read-4,0.00,0,18 +1775072068,2115505,db-write,0.00,0,1 +1775072068,2115506,event-worker,0.00,0,0 +1775072078,2115498,lws-main,52.30,523,9355 +1775072078,2115501,db-read-1,0.10,1,21 +1775072078,2115502,db-read-2,0.50,5,26 +1775072078,2115503,db-read-3,0.10,1,20 +1775072078,2115504,db-read-4,0.10,1,19 +1775072078,2115505,db-write,0.00,0,1 +1775072078,2115506,event-worker,0.00,0,0 +1775072088,2115498,lws-main,33.40,334,9689 +1775072088,2115501,db-read-1,0.10,1,22 +1775072088,2115502,db-read-2,0.30,3,29 +1775072088,2115503,db-read-3,0.10,1,21 +1775072088,2115504,db-read-4,0.10,1,20 +1775072088,2115505,db-write,0.00,0,1 +1775072088,2115506,event-worker,0.00,0,0 +1775072098,2115498,lws-main,75.30,753,10442 +1775072098,2115501,db-read-1,0.00,0,22 +1775072098,2115502,db-read-2,0.00,0,29 +1775072098,2115503,db-read-3,0.00,0,21 +1775072098,2115504,db-read-4,0.00,0,20 +1775072098,2115505,db-write,0.00,0,1 +1775072098,2115506,event-worker,0.00,0,0 +1775072108,2115498,lws-main,100.20,1002,11444 +1775072108,2115501,db-read-1,0.00,0,22 +1775072108,2115502,db-read-2,0.00,0,29 +1775072108,2115503,db-read-3,0.10,1,22 +1775072108,2115504,db-read-4,0.00,0,20 +1775072108,2115505,db-write,0.00,0,1 +1775072108,2115506,event-worker,0.00,0,0 +1775072118,2115498,lws-main,78.40,784,12228 +1775072118,2115501,db-read-1,0.00,0,22 +1775072118,2115502,db-read-2,0.10,1,30 +1775072118,2115503,db-read-3,0.00,0,22 +1775072118,2115504,db-read-4,0.00,0,20 +1775072118,2115505,db-write,0.00,0,1 +1775072118,2115506,event-worker,0.00,0,0 +1775072128,2115498,lws-main,27.80,278,12506 +1775072128,2115501,db-read-1,0.00,0,22 +1775072128,2115502,db-read-2,0.00,0,30 +1775072128,2115503,db-read-3,0.00,0,22 +1775072128,2115504,db-read-4,0.10,1,21 +1775072128,2115505,db-write,0.00,0,1 +1775072128,2115506,event-worker,0.00,0,0 +1775072138,2115498,lws-main,65.80,658,13164 +1775072138,2115501,db-read-1,0.40,4,26 +1775072138,2115502,db-read-2,0.30,3,33 +1775072138,2115503,db-read-3,0.20,2,24 +1775072138,2115504,db-read-4,0.30,3,24 +1775072138,2115505,db-write,0.00,0,1 +1775072138,2115506,event-worker,0.00,0,0 +1775072148,2115498,lws-main,30.70,307,13471 +1775072148,2115501,db-read-1,0.00,0,26 +1775072148,2115502,db-read-2,0.00,0,33 +1775072148,2115503,db-read-3,0.00,0,24 +1775072148,2115504,db-read-4,0.10,1,25 +1775072148,2115505,db-write,0.00,0,1 +1775072148,2115506,event-worker,0.00,0,0 +1775072158,2115498,lws-main,68.80,688,14159 +1775072158,2115501,db-read-1,0.40,4,30 +1775072158,2115502,db-read-2,0.30,3,36 +1775072158,2115503,db-read-3,0.10,1,25 +1775072158,2115504,db-read-4,0.20,2,27 +1775072158,2115505,db-write,0.00,0,1 +1775072158,2115506,event-worker,0.00,0,0 +1775072168,2115498,lws-main,38.20,382,14541 +1775072168,2115501,db-read-1,0.00,0,30 +1775072168,2115502,db-read-2,0.00,0,36 +1775072168,2115503,db-read-3,0.00,0,25 +1775072168,2115504,db-read-4,0.00,0,27 +1775072168,2115505,db-write,0.00,0,1 +1775072168,2115506,event-worker,0.00,0,0 +1775072178,2115498,lws-main,52.20,522,15063 +1775072178,2115501,db-read-1,0.10,1,31 +1775072178,2115502,db-read-2,0.10,1,37 +1775072178,2115503,db-read-3,0.20,2,27 +1775072178,2115504,db-read-4,0.30,3,30 +1775072178,2115505,db-write,0.00,0,1 +1775072178,2115506,event-worker,0.00,0,0 +1775072188,2115498,lws-main,78.30,783,15846 +1775072188,2115501,db-read-1,0.10,1,32 +1775072188,2115502,db-read-2,0.10,1,38 +1775072188,2115503,db-read-3,0.00,0,27 +1775072188,2115504,db-read-4,0.10,1,31 +1775072188,2115505,db-write,0.00,0,1 +1775072188,2115506,event-worker,0.00,0,0 +1775072198,2115498,lws-main,96.90,969,16815 +1775072198,2115501,db-read-1,0.10,1,33 +1775072198,2115502,db-read-2,0.00,0,38 +1775072198,2115503,db-read-3,0.10,1,28 +1775072198,2115504,db-read-4,0.10,1,32 +1775072198,2115505,db-write,0.00,0,1 +1775072198,2115506,event-worker,0.00,0,0 +1775072208,2115498,lws-main,87.80,878,17693 +1775072208,2115501,db-read-1,0.10,1,34 +1775072208,2115502,db-read-2,0.10,1,39 +1775072208,2115503,db-read-3,0.10,1,29 +1775072208,2115504,db-read-4,0.00,0,32 +1775072208,2115505,db-write,0.00,0,1 +1775072208,2115506,event-worker,0.00,0,0 +1775072218,2115498,lws-main,77.20,772,18465 +1775072218,2115501,db-read-1,0.00,0,34 +1775072218,2115502,db-read-2,0.10,1,40 +1775072218,2115503,db-read-3,0.10,1,30 +1775072218,2115504,db-read-4,0.00,0,32 +1775072218,2115505,db-write,0.00,0,1 +1775072218,2115506,event-worker,0.00,0,0 +1775072228,2115498,lws-main,21.70,217,18682 +1775072228,2115501,db-read-1,0.00,0,34 +1775072228,2115502,db-read-2,0.00,0,40 +1775072228,2115503,db-read-3,0.00,0,30 +1775072228,2115504,db-read-4,0.00,0,32 +1775072228,2115505,db-write,0.00,0,1 +1775072228,2115506,event-worker,0.00,0,0 diff --git a/thread_profile_runs/20260401_193216/thread_summary.txt b/thread_profile_runs/20260401_193216/thread_summary.txt new file mode 100644 index 0000000..d2b4f54 --- /dev/null +++ b/thread_profile_runs/20260401_193216/thread_summary.txt @@ -0,0 +1,14 @@ +========================================== +Thread CPU Summary (avg + max over run) +========================================== +Run timestamp (UTC): 20260401_193216 +Duration: 300s, Interval: 10s + +2115498 lws-main 53.87 100.20 +2115502 db-read-2 0.10 0.50 +2115501 db-read-1 0.08 0.40 +2115504 db-read-4 0.08 0.30 +2115503 db-read-3 0.07 0.40 +2115505 db-write 0.00 0.10 +2115506 event-worker 0.00 0.00 +TID THREAD AVG_CPU% MAX_CPU%