1fb726d48Sopenharmony_ci// Copyright (c) 2021 Huawei Device Co., Ltd. 2fb726d48Sopenharmony_ci// Licensed under the Apache License, Version 2.0 (the "License"); 3fb726d48Sopenharmony_ci// you may not use this file except in compliance with the License. 4fb726d48Sopenharmony_ci// You may obtain a copy of the License at 5fb726d48Sopenharmony_ci// 6fb726d48Sopenharmony_ci// http://www.apache.org/licenses/LICENSE-2.0 7fb726d48Sopenharmony_ci// 8fb726d48Sopenharmony_ci// Unless required by applicable law or agreed to in writing, software 9fb726d48Sopenharmony_ci// distributed under the License is distributed on an "AS IS" BASIS, 10fb726d48Sopenharmony_ci// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11fb726d48Sopenharmony_ci// See the License for the specific language governing permissions and 12fb726d48Sopenharmony_ci// limitations under the License. 13fb726d48Sopenharmony_ci 14fb726d48Sopenharmony_ciimport { Args } from './CommonArgs'; 15fb726d48Sopenharmony_ciimport { TraficEnum } from './utils/QueryEnum'; 16fb726d48Sopenharmony_ci 17fb726d48Sopenharmony_ciexport const fileSystemDataGroupBy10MSProtoSql = (args: Args): string => { 18fb726d48Sopenharmony_ci return `SELECT 19fb726d48Sopenharmony_ci startNs, endNs, max( count ) AS size, 20fb726d48Sopenharmony_ci ( startNS / ( ( ${args.endNS} - ${args.startNS} ) / ${args.width} ) ) AS px 21fb726d48Sopenharmony_ci FROM 22fb726d48Sopenharmony_ci ( 23fb726d48Sopenharmony_ci SELECT 24fb726d48Sopenharmony_ci ( A.start_ts - ${args.recordStartNS} ) / 10000000 * 10000000 AS startNs, 25fb726d48Sopenharmony_ci ( A.start_ts - ${args.recordStartNS} + 10000000 ) / 10000000 * 10000000 AS endNs, 26fb726d48Sopenharmony_ci count( dur ) AS count 27fb726d48Sopenharmony_ci FROM 28fb726d48Sopenharmony_ci file_system_sample A 29fb726d48Sopenharmony_ci WHERE 30fb726d48Sopenharmony_ci type = ${args.type} 31fb726d48Sopenharmony_ci and startNs > ${Math.floor(args.startNS)} 32fb726d48Sopenharmony_ci AND startNs + dur >= ${Math.floor(args.startNS)} 33fb726d48Sopenharmony_ci AND startNs < ${Math.floor(args.endNS)} 34fb726d48Sopenharmony_ci GROUP BY 35fb726d48Sopenharmony_ci startNs 36fb726d48Sopenharmony_ci ) 37fb726d48Sopenharmony_ci GROUP BY px 38fb726d48Sopenharmony_ci `; 39fb726d48Sopenharmony_ci}; 40fb726d48Sopenharmony_ciexport const fileSystemDataProtoSql = (args: Args): string => { 41fb726d48Sopenharmony_ci return `select 42fb726d48Sopenharmony_ci (A.start_ts - ${args.recordStartNS}) as startNs, 43fb726d48Sopenharmony_ci (A.end_ts - ${args.recordStartNS}) as endNs, 44fb726d48Sopenharmony_ci dur 45fb726d48Sopenharmony_ci from file_system_sample A 46fb726d48Sopenharmony_ci where type = ${args.type} 47fb726d48Sopenharmony_ci and startNs > 0 48fb726d48Sopenharmony_ci and startNs + dur > ${args.startNS} 49fb726d48Sopenharmony_ci and startNs < ${args.endNS} 50fb726d48Sopenharmony_ci `; 51fb726d48Sopenharmony_ci}; 52fb726d48Sopenharmony_ciexport const diskIoDataGroupBy10MSProtoSql = (args: Args): string => { 53fb726d48Sopenharmony_ci return `SELECT 54fb726d48Sopenharmony_ci startNs, 55fb726d48Sopenharmony_ci endNs, 56fb726d48Sopenharmony_ci max( dur ) AS size, 57fb726d48Sopenharmony_ci ( startNS / ( ( ${args.endNS} - ${args.startNS} ) / ${args.width} ) ) AS px 58fb726d48Sopenharmony_ci FROM 59fb726d48Sopenharmony_ci ( 60fb726d48Sopenharmony_ci SELECT 61fb726d48Sopenharmony_ci ( A.start_ts - ${args.recordStartNS} ) / 10000000 * 10000000 AS startNs, 62fb726d48Sopenharmony_ci ( A.start_ts - ${args.recordStartNS} + 10000000 ) / 10000000 * 10000000 AS endNs, 63fb726d48Sopenharmony_ci max( latency_dur ) AS dur 64fb726d48Sopenharmony_ci FROM bio_latency_sample A 65fb726d48Sopenharmony_ci where type in (${args.typeArr.join(',')}) and startNs > 0 66fb726d48Sopenharmony_ci ${args.all ? '' : 'and ipid = ' + args.ipid} 67fb726d48Sopenharmony_ci and startNs + latency_dur > ${args.startNS} 68fb726d48Sopenharmony_ci and startNs < ${args.endNS} 69fb726d48Sopenharmony_ci GROUP BY startNs 70fb726d48Sopenharmony_ci order by startNs 71fb726d48Sopenharmony_ci ) 72fb726d48Sopenharmony_ci GROUP BY px`; 73fb726d48Sopenharmony_ci}; 74fb726d48Sopenharmony_ciexport const diskIoDataProtoSql = (args: Args): string => { 75fb726d48Sopenharmony_ci return `select 76fb726d48Sopenharmony_ci (A.start_ts - ${args.recordStartNS}) as startNs, 77fb726d48Sopenharmony_ci (A.start_ts - ${args.recordStartNS} + A.latency_dur) as endNs, 78fb726d48Sopenharmony_ci latency_dur as dur 79fb726d48Sopenharmony_ci from bio_latency_sample A 80fb726d48Sopenharmony_ci where type in (${args.typeArr.join(',')}) and startNs > 0 81fb726d48Sopenharmony_ci ${args.all ? '' : 'and ipid = ' + args.ipid} 82fb726d48Sopenharmony_ci and startNs + dur > ${args.startNS} 83fb726d48Sopenharmony_ci and startNs < ${args.endNS} 84fb726d48Sopenharmony_ci order by A.start_ts;`; 85fb726d48Sopenharmony_ci}; 86fb726d48Sopenharmony_ciexport const eBPFVmDataGroupBy10MSProtoSql = (args: unknown): string => { 87fb726d48Sopenharmony_ci return `SELECT startNs, endNs, max( count ) AS size, 88fb726d48Sopenharmony_ci ( startNS / ( ( ${ 89fb726d48Sopenharmony_ci // @ts-ignore 90fb726d48Sopenharmony_ci args.endNS 91fb726d48Sopenharmony_ci } - ${ 92fb726d48Sopenharmony_ci // @ts-ignore 93fb726d48Sopenharmony_ci args.startNS 94fb726d48Sopenharmony_ci } ) / ${ 95fb726d48Sopenharmony_ci // @ts-ignore 96fb726d48Sopenharmony_ci args.width 97fb726d48Sopenharmony_ci } ) ) AS px 98fb726d48Sopenharmony_ci FROM 99fb726d48Sopenharmony_ci ( 100fb726d48Sopenharmony_ci SELECT 101fb726d48Sopenharmony_ci ( A.start_ts - ${ 102fb726d48Sopenharmony_ci // @ts-ignore 103fb726d48Sopenharmony_ci args.recordStartNS 104fb726d48Sopenharmony_ci } ) / 10000000 * 10000000 AS startNs, 105fb726d48Sopenharmony_ci ( A.start_ts - ${ 106fb726d48Sopenharmony_ci // @ts-ignore 107fb726d48Sopenharmony_ci args.recordStartNS 108fb726d48Sopenharmony_ci } + 10000000 ) / 10000000 * 10000000 AS endNs, 109fb726d48Sopenharmony_ci count( dur ) AS count 110fb726d48Sopenharmony_ci FROM 111fb726d48Sopenharmony_ci paged_memory_sample A 112fb726d48Sopenharmony_ci where startNs + dur > ${ 113fb726d48Sopenharmony_ci // @ts-ignore 114fb726d48Sopenharmony_ci args.startNS 115fb726d48Sopenharmony_ci } 116fb726d48Sopenharmony_ci and startNs > 0 117fb726d48Sopenharmony_ci and startNs < ${ 118fb726d48Sopenharmony_ci // @ts-ignore 119fb726d48Sopenharmony_ci args.endNS 120fb726d48Sopenharmony_ci } 121fb726d48Sopenharmony_ci and endNs > ${ 122fb726d48Sopenharmony_ci // @ts-ignore 123fb726d48Sopenharmony_ci args.startNS 124fb726d48Sopenharmony_ci } 125fb726d48Sopenharmony_ci GROUP BY startNs 126fb726d48Sopenharmony_ci order by startNs 127fb726d48Sopenharmony_ci ) 128fb726d48Sopenharmony_ci GROUP BY px`; 129fb726d48Sopenharmony_ci}; 130fb726d48Sopenharmony_ciexport const eBPFVmDataProtoSql = (args: unknown): string => { 131fb726d48Sopenharmony_ci return `select 132fb726d48Sopenharmony_ci (A.start_ts - ${ 133fb726d48Sopenharmony_ci // @ts-ignore 134fb726d48Sopenharmony_ci args.recordStartNS 135fb726d48Sopenharmony_ci }) as startNs, 136fb726d48Sopenharmony_ci (A.end_ts - ${ 137fb726d48Sopenharmony_ci // @ts-ignore 138fb726d48Sopenharmony_ci args.recordStartNS 139fb726d48Sopenharmony_ci }) as endNs, 140fb726d48Sopenharmony_ci dur as dur 141fb726d48Sopenharmony_ci from paged_memory_sample A 142fb726d48Sopenharmony_ci where startNs + dur > ${ 143fb726d48Sopenharmony_ci // @ts-ignore 144fb726d48Sopenharmony_ci args.startNS 145fb726d48Sopenharmony_ci } 146fb726d48Sopenharmony_ci and startNs > 0 147fb726d48Sopenharmony_ci and startNs < ${ 148fb726d48Sopenharmony_ci // @ts-ignore 149fb726d48Sopenharmony_ci args.endNS 150fb726d48Sopenharmony_ci } 151fb726d48Sopenharmony_ci and endNs > ${ 152fb726d48Sopenharmony_ci // @ts-ignore 153fb726d48Sopenharmony_ci args.startNS 154fb726d48Sopenharmony_ci } 155fb726d48Sopenharmony_ci order by A.start_ts;`; 156fb726d48Sopenharmony_ci}; 157fb726d48Sopenharmony_ci 158fb726d48Sopenharmony_ci/** 159fb726d48Sopenharmony_ci * @param data 160fb726d48Sopenharmony_ci * @param proc 161fb726d48Sopenharmony_ci */ 162fb726d48Sopenharmony_ciexport function fileSystemDataReceiver(data: unknown, proc: Function): void { 163fb726d48Sopenharmony_ci let sql: string; 164fb726d48Sopenharmony_ci // @ts-ignore 165fb726d48Sopenharmony_ci if (data.params.scale > 40_000_000) { 166fb726d48Sopenharmony_ci // @ts-ignore 167fb726d48Sopenharmony_ci sql = fileSystemDataGroupBy10MSProtoSql(data.params); 168fb726d48Sopenharmony_ci } else { 169fb726d48Sopenharmony_ci // @ts-ignore 170fb726d48Sopenharmony_ci sql = fileSystemDataProtoSql(data.params); 171fb726d48Sopenharmony_ci } 172fb726d48Sopenharmony_ci let res = proc(sql); 173fb726d48Sopenharmony_ci // @ts-ignore 174fb726d48Sopenharmony_ci arrayBufferHandler(data, res, data.params.trafic !== TraficEnum.SharedArrayBuffer); 175fb726d48Sopenharmony_ci} 176fb726d48Sopenharmony_ciexport function diskIoReceiver(data: unknown, proc: Function): void { 177fb726d48Sopenharmony_ci let sql: string; 178fb726d48Sopenharmony_ci // @ts-ignore 179fb726d48Sopenharmony_ci if (data.params.scale > 40_000_000) { 180fb726d48Sopenharmony_ci // @ts-ignore 181fb726d48Sopenharmony_ci sql = diskIoDataGroupBy10MSProtoSql(data.params); 182fb726d48Sopenharmony_ci } else { 183fb726d48Sopenharmony_ci // @ts-ignore 184fb726d48Sopenharmony_ci sql = diskIoDataProtoSql(data.params); 185fb726d48Sopenharmony_ci } 186fb726d48Sopenharmony_ci let res = proc(sql); 187fb726d48Sopenharmony_ci // @ts-ignore 188fb726d48Sopenharmony_ci arrayBufferHandler(data, res, data.params.trafic !== TraficEnum.SharedArrayBuffer); 189fb726d48Sopenharmony_ci} 190fb726d48Sopenharmony_ciexport function eBPFVmReceiver(data: unknown, proc: Function): void { 191fb726d48Sopenharmony_ci let sql: string; 192fb726d48Sopenharmony_ci // @ts-ignore 193fb726d48Sopenharmony_ci if (data.params.scale > 40_000_000) { 194fb726d48Sopenharmony_ci // @ts-ignore 195fb726d48Sopenharmony_ci sql = eBPFVmDataGroupBy10MSProtoSql(data.params); 196fb726d48Sopenharmony_ci } else { 197fb726d48Sopenharmony_ci // @ts-ignore 198fb726d48Sopenharmony_ci sql = eBPFVmDataProtoSql(data.params); 199fb726d48Sopenharmony_ci } 200fb726d48Sopenharmony_ci let res = proc(sql); 201fb726d48Sopenharmony_ci // @ts-ignore 202fb726d48Sopenharmony_ci arrayBufferHandler(data, res, data.params.trafic !== TraficEnum.SharedArrayBuffer); 203fb726d48Sopenharmony_ci} 204fb726d48Sopenharmony_ci 205fb726d48Sopenharmony_cifunction arrayBufferHandler(data: unknown, res: unknown[], transfer: boolean): void { 206fb726d48Sopenharmony_ci // @ts-ignore 207fb726d48Sopenharmony_ci let startNS = new Float64Array(transfer ? res.length : data.params.sharedArrayBuffers.startNS); 208fb726d48Sopenharmony_ci // @ts-ignore 209fb726d48Sopenharmony_ci let endNS = new Float64Array(transfer ? res.length : data.params.sharedArrayBuffers.endNS); 210fb726d48Sopenharmony_ci // @ts-ignore 211fb726d48Sopenharmony_ci let size = new Float64Array(transfer ? res.length : data.params.sharedArrayBuffers.size); 212fb726d48Sopenharmony_ci // @ts-ignore 213fb726d48Sopenharmony_ci let dur = new Float64Array(transfer ? res.length : data.params.sharedArrayBuffers.dur); 214fb726d48Sopenharmony_ci // @ts-ignore 215fb726d48Sopenharmony_ci let height = new Int32Array(transfer ? res.length : data.params.sharedArrayBuffers.height); 216fb726d48Sopenharmony_ci // @ts-ignore 217fb726d48Sopenharmony_ci let maxSize = Math.max(...res.map((it) => it.size)); 218fb726d48Sopenharmony_ci res.forEach((it, i) => { 219fb726d48Sopenharmony_ci // @ts-ignore 220fb726d48Sopenharmony_ci startNS[i] = it.startNs; 221fb726d48Sopenharmony_ci // @ts-ignore 222fb726d48Sopenharmony_ci endNS[i] = it.endNs; 223fb726d48Sopenharmony_ci // @ts-ignore 224fb726d48Sopenharmony_ci size[i] = it.size; 225fb726d48Sopenharmony_ci // @ts-ignore 226fb726d48Sopenharmony_ci dur[i] = it.dur; 227fb726d48Sopenharmony_ci // @ts-ignore 228fb726d48Sopenharmony_ci height[i] = Math.ceil((it.size / maxSize) * 36); 229fb726d48Sopenharmony_ci }); 230fb726d48Sopenharmony_ci (self as unknown as Worker).postMessage( 231fb726d48Sopenharmony_ci { 232fb726d48Sopenharmony_ci // @ts-ignore 233fb726d48Sopenharmony_ci id: data.id, 234fb726d48Sopenharmony_ci // @ts-ignore 235fb726d48Sopenharmony_ci action: data.action, 236fb726d48Sopenharmony_ci results: transfer 237fb726d48Sopenharmony_ci ? { 238fb726d48Sopenharmony_ci startNS: startNS.buffer, 239fb726d48Sopenharmony_ci endNS: endNS.buffer, 240fb726d48Sopenharmony_ci size: size.buffer, 241fb726d48Sopenharmony_ci height: height.buffer, 242fb726d48Sopenharmony_ci dur: dur.buffer, 243fb726d48Sopenharmony_ci } 244fb726d48Sopenharmony_ci : {}, 245fb726d48Sopenharmony_ci len: res.length, 246fb726d48Sopenharmony_ci transfer: transfer, 247fb726d48Sopenharmony_ci }, 248fb726d48Sopenharmony_ci transfer ? [startNS.buffer, endNS.buffer, size.buffer, height.buffer, dur.buffer] : [] 249fb726d48Sopenharmony_ci ); 250fb726d48Sopenharmony_ci} 251