1*bbb1b6f9SApple OSS Distributions#!/usr/local/bin/luatrace -s 2*bbb1b6f9SApple OSS Distributions 3*bbb1b6f9SApple OSS Distributionstrace_codename = function(codename, callback) 4*bbb1b6f9SApple OSS Distributions local debugid = trace.debugid(codename) 5*bbb1b6f9SApple OSS Distributions if debugid ~= 0 then 6*bbb1b6f9SApple OSS Distributions trace.single(debugid,callback) 7*bbb1b6f9SApple OSS Distributions else 8*bbb1b6f9SApple OSS Distributions printf("WARNING: Cannot locate debugid for '%s'\n", codename) 9*bbb1b6f9SApple OSS Distributions end 10*bbb1b6f9SApple OSS Distributionsend 11*bbb1b6f9SApple OSS Distributions 12*bbb1b6f9SApple OSS Distributionsinitial_timestamp = 0 13*bbb1b6f9SApple OSS Distributionspid_map = {}; 14*bbb1b6f9SApple OSS Distributionsget_prefix = function(buf) 15*bbb1b6f9SApple OSS Distributions if initial_timestamp == 0 then 16*bbb1b6f9SApple OSS Distributions initial_timestamp = buf.timestamp 17*bbb1b6f9SApple OSS Distributions end 18*bbb1b6f9SApple OSS Distributions local secs = trace.convert_timestamp_to_nanoseconds(buf.timestamp - initial_timestamp) / 1000000000 19*bbb1b6f9SApple OSS Distributions 20*bbb1b6f9SApple OSS Distributions local prefix 21*bbb1b6f9SApple OSS Distributions if trace.debugid_is_start(buf.debugid) then 22*bbb1b6f9SApple OSS Distributions prefix = "→" 23*bbb1b6f9SApple OSS Distributions elseif trace.debugid_is_end(buf.debugid) then 24*bbb1b6f9SApple OSS Distributions prefix = "←" 25*bbb1b6f9SApple OSS Distributions else 26*bbb1b6f9SApple OSS Distributions prefix = "↔" 27*bbb1b6f9SApple OSS Distributions end 28*bbb1b6f9SApple OSS Distributions 29*bbb1b6f9SApple OSS Distributions local proc 30*bbb1b6f9SApple OSS Distributions if buf.pid == buf[1] then 31*bbb1b6f9SApple OSS Distributions proc = buf.command 32*bbb1b6f9SApple OSS Distributions if pid_map[buf[1]] == nil then 33*bbb1b6f9SApple OSS Distributions pid_map[buf[1]] = buf.command 34*bbb1b6f9SApple OSS Distributions end 35*bbb1b6f9SApple OSS Distributions elseif pid_map[buf[1]] ~= nil then 36*bbb1b6f9SApple OSS Distributions proc = pid_map[buf[1]] 37*bbb1b6f9SApple OSS Distributions else 38*bbb1b6f9SApple OSS Distributions proc = "UNKNOWN" 39*bbb1b6f9SApple OSS Distributions end 40*bbb1b6f9SApple OSS Distributions 41*bbb1b6f9SApple OSS Distributions return string.format("%s %6.9f %-17s [%05d.%06x] %-24s", 42*bbb1b6f9SApple OSS Distributions prefix, secs, proc, buf.pid, buf.threadid, buf.debugname) 43*bbb1b6f9SApple OSS Distributionsend 44*bbb1b6f9SApple OSS Distributions 45*bbb1b6f9SApple OSS Distributionsparse_pthread_priority = function(pri) 46*bbb1b6f9SApple OSS Distributions pri = pri & 0xffffffff 47*bbb1b6f9SApple OSS Distributions if (pri & 0x02000000) == 0x02000000 then 48*bbb1b6f9SApple OSS Distributions return "Manager" 49*bbb1b6f9SApple OSS Distributions end 50*bbb1b6f9SApple OSS Distributions local qos = (pri & 0x00ffff00) >> 8 51*bbb1b6f9SApple OSS Distributions if qos == 0x20 then 52*bbb1b6f9SApple OSS Distributions return string.format("UI[%x]", pri); 53*bbb1b6f9SApple OSS Distributions elseif qos == 0x10 then 54*bbb1b6f9SApple OSS Distributions return string.format("IN[%x]", pri); 55*bbb1b6f9SApple OSS Distributions elseif qos == 0x08 then 56*bbb1b6f9SApple OSS Distributions return string.format("DF[%x]", pri); 57*bbb1b6f9SApple OSS Distributions elseif qos == 0x04 then 58*bbb1b6f9SApple OSS Distributions return string.format("UT[%x]", pri); 59*bbb1b6f9SApple OSS Distributions elseif qos == 0x02 then 60*bbb1b6f9SApple OSS Distributions return string.format("BG[%x]", pri); 61*bbb1b6f9SApple OSS Distributions elseif qos == 0x01 then 62*bbb1b6f9SApple OSS Distributions return string.format("MT[%x]", pri); 63*bbb1b6f9SApple OSS Distributions elseif qos == 0x00 then 64*bbb1b6f9SApple OSS Distributions return string.format("--[%x]", pri); 65*bbb1b6f9SApple OSS Distributions else 66*bbb1b6f9SApple OSS Distributions return string.format("??[%x]", pri); 67*bbb1b6f9SApple OSS Distributions end 68*bbb1b6f9SApple OSS Distributionsend 69*bbb1b6f9SApple OSS Distributions 70*bbb1b6f9SApple OSS Distributionsparse_thread_qos = function(pri) 71*bbb1b6f9SApple OSS Distributions if pri == 7 then 72*bbb1b6f9SApple OSS Distributions return string.format("MG", pri); 73*bbb1b6f9SApple OSS Distributions elseif pri == 6 then 74*bbb1b6f9SApple OSS Distributions return string.format("UI", pri); 75*bbb1b6f9SApple OSS Distributions elseif pri == 5 then 76*bbb1b6f9SApple OSS Distributions return string.format("IN", pri); 77*bbb1b6f9SApple OSS Distributions elseif pri == 4 then 78*bbb1b6f9SApple OSS Distributions return string.format("DF", pri); 79*bbb1b6f9SApple OSS Distributions elseif pri == 3 then 80*bbb1b6f9SApple OSS Distributions return string.format("UT", pri); 81*bbb1b6f9SApple OSS Distributions elseif pri == 2 then 82*bbb1b6f9SApple OSS Distributions return string.format("BG", pri); 83*bbb1b6f9SApple OSS Distributions elseif pri == 1 then 84*bbb1b6f9SApple OSS Distributions return string.format("MT", pri); 85*bbb1b6f9SApple OSS Distributions elseif pri == 0 then 86*bbb1b6f9SApple OSS Distributions return string.format("--", pri); 87*bbb1b6f9SApple OSS Distributions else 88*bbb1b6f9SApple OSS Distributions return string.format("??[%x]", pri); 89*bbb1b6f9SApple OSS Distributions end 90*bbb1b6f9SApple OSS Distributionsend 91*bbb1b6f9SApple OSS Distributions 92*bbb1b6f9SApple OSS Distributionsparse_thactive_req_qos = function(pri) 93*bbb1b6f9SApple OSS Distributions if pri ~= 0 then 94*bbb1b6f9SApple OSS Distributions return parse_thread_qos(pri) 95*bbb1b6f9SApple OSS Distributions end 96*bbb1b6f9SApple OSS Distributions return "None" 97*bbb1b6f9SApple OSS Distributionsend 98*bbb1b6f9SApple OSS Distributions 99*bbb1b6f9SApple OSS Distributionsget_thactive = function(low, high) 100*bbb1b6f9SApple OSS Distributions return string.format("req: %s, MG: %d, UI: %d, IN: %d, DE: %d, UT: %d, BG: %d, MT: %d", 101*bbb1b6f9SApple OSS Distributions parse_thactive_req_qos(high >> (16 * 3)), (high >> (2 * 16)) & 0xffff, 102*bbb1b6f9SApple OSS Distributions (high >> (1 * 16)) & 0xffff, (high >> (0 * 16)) & 0xffff, 103*bbb1b6f9SApple OSS Distributions (low >> (3 * 16)) & 0xffff, (low >> (2 * 16)) & 0xffff, 104*bbb1b6f9SApple OSS Distributions (low >> (1 * 16)) & 0xffff, (low >> (0 * 16)) & 0xffff) 105*bbb1b6f9SApple OSS Distributionsend 106*bbb1b6f9SApple OSS Distributions 107*bbb1b6f9SApple OSS Distributions-- workqueue lifecycle 108*bbb1b6f9SApple OSS Distributions 109*bbb1b6f9SApple OSS Distributionstrace_codename("wq_pthread_exit", function(buf) 110*bbb1b6f9SApple OSS Distributions local prefix = get_prefix(buf) 111*bbb1b6f9SApple OSS Distributions if trace.debugid_is_start(buf.debugid) then 112*bbb1b6f9SApple OSS Distributions printf("%s\tprocess is exiting\n",prefix) 113*bbb1b6f9SApple OSS Distributions else 114*bbb1b6f9SApple OSS Distributions printf("%s\tworkqueue marked as exiting and timer is complete\n",prefix) 115*bbb1b6f9SApple OSS Distributions end 116*bbb1b6f9SApple OSS Distributionsend) 117*bbb1b6f9SApple OSS Distributions 118*bbb1b6f9SApple OSS Distributionstrace_codename("wq_workqueue_exit", function(buf) 119*bbb1b6f9SApple OSS Distributions local prefix = get_prefix(buf) 120*bbb1b6f9SApple OSS Distributions if trace.debugid_is_start(buf.debugid) then 121*bbb1b6f9SApple OSS Distributions printf("%s\tall threads have exited, cleaning up\n",prefix) 122*bbb1b6f9SApple OSS Distributions else 123*bbb1b6f9SApple OSS Distributions printf("%s\tclean up complete\n",prefix) 124*bbb1b6f9SApple OSS Distributions end 125*bbb1b6f9SApple OSS Distributionsend) 126*bbb1b6f9SApple OSS Distributions 127*bbb1b6f9SApple OSS Distributionstrace_codename("wq_start_add_timer", function(buf) 128*bbb1b6f9SApple OSS Distributions local prefix = get_prefix(buf) 129*bbb1b6f9SApple OSS Distributions printf("%s\tarming timer to fire in %d us (flags: %x, reqcount: %d)\n", 130*bbb1b6f9SApple OSS Distributions prefix, buf.arg4, buf.arg3, buf.arg2) 131*bbb1b6f9SApple OSS Distributionsend) 132*bbb1b6f9SApple OSS Distributions 133*bbb1b6f9SApple OSS Distributionstrace_codename("wq_add_timer", function(buf) 134*bbb1b6f9SApple OSS Distributions local prefix = get_prefix(buf) 135*bbb1b6f9SApple OSS Distributions if trace.debugid_is_start(buf.debugid) then 136*bbb1b6f9SApple OSS Distributions printf("%s\tadd_timer fired (flags: %x, nthreads: %d, thidlecount: %d)\n", 137*bbb1b6f9SApple OSS Distributions prefix, buf.arg2, buf.arg3, buf.arg4) 138*bbb1b6f9SApple OSS Distributions elseif trace.debugid_is_end(buf.debugid) then 139*bbb1b6f9SApple OSS Distributions printf("%s\tadd_timer completed (start_timer: %x, nthreads: %d, thidlecount: %d)\n", 140*bbb1b6f9SApple OSS Distributions prefix, buf.arg2, buf.arg3, buf.arg4) 141*bbb1b6f9SApple OSS Distributions end 142*bbb1b6f9SApple OSS Distributionsend) 143*bbb1b6f9SApple OSS Distributions 144*bbb1b6f9SApple OSS Distributionstrace_codename("wq_select_threadreq", function(buf) 145*bbb1b6f9SApple OSS Distributions local prefix = get_prefix(buf) 146*bbb1b6f9SApple OSS Distributions if buf[2] == 0 then 147*bbb1b6f9SApple OSS Distributions printf("%s\tSelection failed: process exiting\n", prefix) 148*bbb1b6f9SApple OSS Distributions elseif buf[2] == 1 then 149*bbb1b6f9SApple OSS Distributions printf("%s\tSelection failed: no request\n", prefix) 150*bbb1b6f9SApple OSS Distributions elseif buf[2] == 2 then 151*bbb1b6f9SApple OSS Distributions printf("%s\tSelection failed: throttled\n", prefix) 152*bbb1b6f9SApple OSS Distributions elseif buf[2] == 3 then 153*bbb1b6f9SApple OSS Distributions printf("%s\tSelection failed: scheduler would preempt\n", prefix) 154*bbb1b6f9SApple OSS Distributions end 155*bbb1b6f9SApple OSS Distributionsend) 156*bbb1b6f9SApple OSS Distributions 157*bbb1b6f9SApple OSS Distributionstrace_codename("wq_creator_select", function(buf) 158*bbb1b6f9SApple OSS Distributions local prefix = get_prefix(buf) 159*bbb1b6f9SApple OSS Distributions if buf[2] == 1 then 160*bbb1b6f9SApple OSS Distributions printf("%s\t\tcreator %x overridden at %s\n", prefix, buf[3], 161*bbb1b6f9SApple OSS Distributions parse_thread_qos(buf[4])) 162*bbb1b6f9SApple OSS Distributions elseif buf[2] == 2 then 163*bbb1b6f9SApple OSS Distributions printf("%s\t\tcreator %x selected at %s\n", prefix, buf[3], 164*bbb1b6f9SApple OSS Distributions parse_thread_qos(buf[4])) 165*bbb1b6f9SApple OSS Distributions elseif buf[2] == 3 then 166*bbb1b6f9SApple OSS Distributions printf("%s\t\tcreator idled (%d yields)\n", prefix, buf[4]) 167*bbb1b6f9SApple OSS Distributions elseif buf[2] == 4 then 168*bbb1b6f9SApple OSS Distributions printf("%s\t\tcreator removed (%d yields)\n", prefix, buf[4]) 169*bbb1b6f9SApple OSS Distributions end 170*bbb1b6f9SApple OSS Distributionsend) 171*bbb1b6f9SApple OSS Distributions 172*bbb1b6f9SApple OSS Distributionstrace_codename("wq_creator_yield", function(buf) 173*bbb1b6f9SApple OSS Distributions local prefix = get_prefix(buf) 174*bbb1b6f9SApple OSS Distributions local reason = "unknown" 175*bbb1b6f9SApple OSS Distributions if buf[2] == 1 then 176*bbb1b6f9SApple OSS Distributions reason = "fast steal rate" 177*bbb1b6f9SApple OSS Distributions elseif buf[2] == 2 then 178*bbb1b6f9SApple OSS Distributions reason = "above ncpu scheduled" 179*bbb1b6f9SApple OSS Distributions end 180*bbb1b6f9SApple OSS Distributions printf("%s\t\tcreator yielded (%s, current:%d snapshot:%d)\n", 181*bbb1b6f9SApple OSS Distributions prefix, reason, buf[3], buf[4]) 182*bbb1b6f9SApple OSS Distributionsend) 183*bbb1b6f9SApple OSS Distributions 184*bbb1b6f9SApple OSS Distributionstrace_codename("wq_thread_logical_run", function(buf) 185*bbb1b6f9SApple OSS Distributions local prefix = get_prefix(buf) 186*bbb1b6f9SApple OSS Distributions if trace.debugid_is_start(buf.debugid) then 187*bbb1b6f9SApple OSS Distributions printf("%s\tthread unparking (request %x)\n", prefix, buf[2]) 188*bbb1b6f9SApple OSS Distributions else 189*bbb1b6f9SApple OSS Distributions printf("%s\tthread parking\n", prefix) 190*bbb1b6f9SApple OSS Distributions end 191*bbb1b6f9SApple OSS Distributionsend) 192*bbb1b6f9SApple OSS Distributions 193*bbb1b6f9SApple OSS Distributionstrace.enable_thread_cputime() 194*bbb1b6f9SApple OSS Distributionsrunthread_time_map = {} 195*bbb1b6f9SApple OSS Distributionsrunthread_cputime_map = {} 196*bbb1b6f9SApple OSS Distributionstrace_codename("wq_runthread", function(buf) 197*bbb1b6f9SApple OSS Distributions local prefix = get_prefix(buf) 198*bbb1b6f9SApple OSS Distributions if trace.debugid_is_start(buf.debugid) then 199*bbb1b6f9SApple OSS Distributions printf("%s\tSTART running thread\n", prefix) 200*bbb1b6f9SApple OSS Distributions runthread_time_map[buf.threadid] = buf.timestamp; 201*bbb1b6f9SApple OSS Distributions runthread_cputime_map[buf.threadid] = trace.cputime_for_thread(buf.threadid); 202*bbb1b6f9SApple OSS Distributions elseif runthread_time_map[buf.threadid] then 203*bbb1b6f9SApple OSS Distributions local time = buf.timestamp - runthread_time_map[buf.threadid] 204*bbb1b6f9SApple OSS Distributions local cputime = trace.cputime_for_thread(buf.threadid) - runthread_cputime_map[buf.threadid] 205*bbb1b6f9SApple OSS Distributions 206*bbb1b6f9SApple OSS Distributions local time_ms = trace.convert_timestamp_to_nanoseconds(time) / 1000000 207*bbb1b6f9SApple OSS Distributions local cputime_ms = trace.convert_timestamp_to_nanoseconds(cputime) / 1000000 208*bbb1b6f9SApple OSS Distributions 209*bbb1b6f9SApple OSS Distributions printf("%s\tDONE running thread: time = %6.6f ms, cputime = %6.6f ms\n", 210*bbb1b6f9SApple OSS Distributions prefix, time_ms, cputime_ms) 211*bbb1b6f9SApple OSS Distributions 212*bbb1b6f9SApple OSS Distributions runthread_time_map[buf.threadid] = 0 213*bbb1b6f9SApple OSS Distributions runthread_cputime_map[buf.threadid] = 0 214*bbb1b6f9SApple OSS Distributions elseif trace.debugid_is_end(buf.debugid) then 215*bbb1b6f9SApple OSS Distributions printf("%s\tDONE running thread\n", prefix) 216*bbb1b6f9SApple OSS Distributions end 217*bbb1b6f9SApple OSS Distributionsend) 218*bbb1b6f9SApple OSS Distributions 219*bbb1b6f9SApple OSS Distributionstrace_codename("wq_thactive_update", function(buf) 220*bbb1b6f9SApple OSS Distributions local prefix = get_prefix(buf) 221*bbb1b6f9SApple OSS Distributions local thactive = get_thactive(buf[2], buf[3]) 222*bbb1b6f9SApple OSS Distributions printf("%s\tthactive updated (%s)\n", prefix, thactive) 223*bbb1b6f9SApple OSS Distributionsend) 224*bbb1b6f9SApple OSS Distributions 225*bbb1b6f9SApple OSS Distributionstrace_codename("wq_thread_block", function(buf) 226*bbb1b6f9SApple OSS Distributions local prefix = get_prefix(buf) 227*bbb1b6f9SApple OSS Distributions local req_pri = parse_thread_qos(buf[3] >> 8) 228*bbb1b6f9SApple OSS Distributions if trace.debugid_is_start(buf.debugid) then 229*bbb1b6f9SApple OSS Distributions printf("%s\tthread blocked (activecount: %d, priority: %s, req_pri: %s, reqcount: %d, start_timer: %d)\n", 230*bbb1b6f9SApple OSS Distributions prefix, buf[2], parse_thread_qos(buf[3] & 0xff), req_pri, buf[4] >> 1, buf[4] & 0x1) 231*bbb1b6f9SApple OSS Distributions else 232*bbb1b6f9SApple OSS Distributions printf("%s\tthread unblocked (activecount: %d, priority: %s, req_pri: %s, threads_scheduled: %d)\n", 233*bbb1b6f9SApple OSS Distributions prefix, buf[2], parse_thread_qos(buf[3] & 0xff), req_pri, buf[4]) 234*bbb1b6f9SApple OSS Distributions end 235*bbb1b6f9SApple OSS Distributionsend) 236*bbb1b6f9SApple OSS Distributions 237*bbb1b6f9SApple OSS Distributionstrace_codename("wq_thread_create_failed", function(buf) 238*bbb1b6f9SApple OSS Distributions local prefix = get_prefix(buf) 239*bbb1b6f9SApple OSS Distributions if buf[3] == 0 then 240*bbb1b6f9SApple OSS Distributions printf("%s\tfailed to create new workqueue thread, kern_return: 0x%x\n", 241*bbb1b6f9SApple OSS Distributions prefix, buf[2]) 242*bbb1b6f9SApple OSS Distributions elseif buf[3] == 1 then 243*bbb1b6f9SApple OSS Distributions printf("%s\tfailed to vm_map workq thread stack: 0x%x\n", prefix, buf[2]) 244*bbb1b6f9SApple OSS Distributions elseif buf[3] == 2 then 245*bbb1b6f9SApple OSS Distributions printf("%s\tfailed to vm_protect workq thread guardsize: 0x%x\n", prefix, buf[2]) 246*bbb1b6f9SApple OSS Distributions end 247*bbb1b6f9SApple OSS Distributionsend) 248*bbb1b6f9SApple OSS Distributions 249*bbb1b6f9SApple OSS Distributionstrace_codename("wq_thread_create", function(buf) 250*bbb1b6f9SApple OSS Distributions printf("%s\tcreated new workqueue thread\n", get_prefix(buf)) 251*bbb1b6f9SApple OSS Distributionsend) 252*bbb1b6f9SApple OSS Distributions 253*bbb1b6f9SApple OSS Distributionstrace_codename("wq_thread_terminate", function(buf) 254*bbb1b6f9SApple OSS Distributions local prefix = get_prefix(buf) 255*bbb1b6f9SApple OSS Distributions local what 256*bbb1b6f9SApple OSS Distributions if trace.debugid_is_start(buf.debugid) then 257*bbb1b6f9SApple OSS Distributions what = "try to terminate thread" 258*bbb1b6f9SApple OSS Distributions else 259*bbb1b6f9SApple OSS Distributions what = "terminated thread" 260*bbb1b6f9SApple OSS Distributions end 261*bbb1b6f9SApple OSS Distributions printf("%s\t%s: currently idle %d\n", prefix, what, buf[2]) 262*bbb1b6f9SApple OSS Distributionsend) 263*bbb1b6f9SApple OSS Distributions 264*bbb1b6f9SApple OSS Distributionstrace_codename("wq_wqops_reqthreads", function(buf) 265*bbb1b6f9SApple OSS Distributions local prefix = get_prefix(buf) 266*bbb1b6f9SApple OSS Distributions printf("%s\tlegacy thread request made for %d threads at %s\n", prefix, buf[2], parse_pthread_priority(buf[3])); 267*bbb1b6f9SApple OSS Distributionsend) 268*bbb1b6f9SApple OSS Distributions 269*bbb1b6f9SApple OSS Distributionstrace_codename("wq_thread_request_initiate", function(buf) 270*bbb1b6f9SApple OSS Distributions local prefix = get_prefix(buf) 271*bbb1b6f9SApple OSS Distributions printf("%s\tthread request %x made at %s (count:%d)\n", prefix, buf[2], parse_thread_qos(buf[3]), buf[4]); 272*bbb1b6f9SApple OSS Distributionsend) 273*bbb1b6f9SApple OSS Distributions 274*bbb1b6f9SApple OSS Distributionstrace_codename("wq_thread_request_modify", function(buf) 275*bbb1b6f9SApple OSS Distributions local prefix = get_prefix(buf) 276*bbb1b6f9SApple OSS Distributions printf("%s\tthread request %x priorty updated to %s\n", prefix, buf[2], parse_thread_qos(buf[3])); 277*bbb1b6f9SApple OSS Distributionsend) 278*bbb1b6f9SApple OSS Distributions 279*bbb1b6f9SApple OSS Distributionstrace_codename("wq_thread_request_cancel", function(buf) 280*bbb1b6f9SApple OSS Distributions local prefix = get_prefix(buf) 281*bbb1b6f9SApple OSS Distributions printf("%s\tthread request %x canceled\n", prefix, buf[2], parse_thread_qos(buf[3])); 282*bbb1b6f9SApple OSS Distributionsend) 283*bbb1b6f9SApple OSS Distributions 284*bbb1b6f9SApple OSS Distributionstrace_codename("wq_constrained_admission", function(buf) 285*bbb1b6f9SApple OSS Distributions local prefix = get_prefix(buf) 286*bbb1b6f9SApple OSS Distributions if buf[2] == 1 then 287*bbb1b6f9SApple OSS Distributions printf("fail: %s\twq_constrained_threads_scheduled=%d >= wq_max_constrained_threads=%d\n", 288*bbb1b6f9SApple OSS Distributions prefix, buf[3], buf[4]) 289*bbb1b6f9SApple OSS Distributions elseif (buf[2] == 2) or (buf[2] == 3) then 290*bbb1b6f9SApple OSS Distributions local success = nil; 291*bbb1b6f9SApple OSS Distributions if buf[2] == 2 then success = "success" 292*bbb1b6f9SApple OSS Distributions else success = "fail" end 293*bbb1b6f9SApple OSS Distributions printf("%s\t%s\tthactive_count=%d + busycount=%d >= wq->wq_max_concurrency\n", 294*bbb1b6f9SApple OSS Distributions prefix, success, buf[3], buf[4]) 295*bbb1b6f9SApple OSS Distributions end 296*bbb1b6f9SApple OSS Distributionsend) 297*bbb1b6f9SApple OSS Distributions 298*bbb1b6f9SApple OSS Distributionstrace_codename("wq_cooperative_admission", function(buf) 299*bbb1b6f9SApple OSS Distributions local prefix = get_prefix(buf) 300*bbb1b6f9SApple OSS Distributions if (buf[4] == 1) then 301*bbb1b6f9SApple OSS Distributions printf("%s\tsuccess at qos %s\t wq_cooperative_threads_scheduled=%d >= wq_max_cooperative_threads\n", 302*bbb1b6f9SApple OSS Distributions prefix, parse_thread_qos(buf[2]), buf[1]) 303*bbb1b6f9SApple OSS Distributions elseif (buf[4] == 2) then 304*bbb1b6f9SApple OSS Distributions printf("%s\tsuccess at qos %s\t due to empty bucket, wq_cooperative_threads_scheduled=%d\n", 305*bbb1b6f9SApple OSS Distributions prefix, parse_thread_qos(buf[2]), buf[1]) 306*bbb1b6f9SApple OSS Distributions elseif (buf[4] == 3) then 307*bbb1b6f9SApple OSS Distributions success = "success" 308*bbb1b6f9SApple OSS Distributions if (buf[3] == 0) then 309*bbb1b6f9SApple OSS Distributions success = "fail" 310*bbb1b6f9SApple OSS Distributions end 311*bbb1b6f9SApple OSS Distributions printf("%s\t%s at qos %s\twq_cooperative_threads_scheduled_up_to_qos=%d\n", 312*bbb1b6f9SApple OSS Distributions prefix, success, parse_thread_qos(buf[2]), buf[1]) 313*bbb1b6f9SApple OSS Distributions end 314*bbb1b6f9SApple OSS Distributionsend) 315*bbb1b6f9SApple OSS Distributions 316*bbb1b6f9SApple OSS Distributionstrace_codename("wq_death_call", function(buf) 317*bbb1b6f9SApple OSS Distributions local prefix = get_prefix(buf) 318*bbb1b6f9SApple OSS Distributions if trace.debugid_is_start(buf.debugid) then 319*bbb1b6f9SApple OSS Distributions printf("%s\tentering death call\n", prefix); 320*bbb1b6f9SApple OSS Distributions elseif trace.debugid_is_end(buf.debugid) then 321*bbb1b6f9SApple OSS Distributions printf("%s\tleaving death call\n", prefix); 322*bbb1b6f9SApple OSS Distributions else 323*bbb1b6f9SApple OSS Distributions printf("%s\tscheduling death call\n", prefix); 324*bbb1b6f9SApple OSS Distributions end 325*bbb1b6f9SApple OSS Distributionsend) 326*bbb1b6f9SApple OSS Distributions-- 327*bbb1b6f9SApple OSS Distributions-- vim:ts=4:sw=4:noet: 328