⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 whoqueue.d

📁 Sun Solaris 10 中的 DTrace 组件的源代码。请参看: http://www.sun.com/software/solaris/observability.jsp
💻 D
字号:
#pragma D option quiet#pragma D option nspec=4#pragma D option specsize=100kint maxlen;int spec[int];sched:::enqueue{	this->len = ++qlen[this->cpu = args[2]->cpu_id];	in[args[0]->pr_addr] = timestamp;}sched:::enqueue/this->len > maxlen && spec[this->cpu]/{	/*	 * There is already a speculation for this CPU.  We just set a new	 * record, so we'll discard the old one.	 */	discard(spec[this->cpu]);}sched:::enqueue/this->len > maxlen/{	/*	 * We have a winner.  Set the new maximum length and set the timestamp	 * of the longest length.	 */	maxlen = this->len;	longtime[this->cpu] = timestamp;		/*	 * Now start a new speculation, and speculatively trace the length.	 */	this->spec = spec[this->cpu] = speculation();	speculate(this->spec);	printf("Run queue of length %d:\n", this->len);}sched:::dequeue/(this->in = in[args[0]->pr_addr]) &&    this->in <= longtime[this->cpu = args[2]->cpu_id]/{	speculate(spec[this->cpu]);	printf("  %d/%d (%s)\n", 	    args[1]->pr_pid, args[0]->pr_lwpid,	    stringof(args[1]->pr_fname));}sched:::dequeue/qlen[args[2]->cpu_id]/{	in[args[0]->pr_addr] = 0;	this->len = --qlen[args[2]->cpu_id];}sched:::dequeue/this->len == 0 && spec[this->cpu]/{	/*	 * We just processed the last thread that was enqueued at the time	 * of longest length; commit the speculation, which by now contains	 * each thread that was enqueued when the queue was longest.	 */	commit(spec[this->cpu]);	spec[this->cpu] = 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -