static void readlnProc(void)          /* READLN procedure */
{
   int32_t fileNumber;

   TRACE(lstFile, "[readlnProc]");

   /* FORM:  Just like READ */

   getToken();
   if (token == '(')
     fileNumber = readProc();

   /* skip to end-of-line mark in the file (NOTE:  No check is made,
    * but this is meaningful only for a test file).
    */

   pas_GenerateIoOperation(xREADLN, fileNumber);

} /* end readlnProc */
Beispiel #2
0
bool PerfSource::prepare() {
	DynBuf printb;
	DynBuf b1;
	DynBuf b2;
	DynBuf b3;
	long long schedSwitchId;

	// Reread cpuinfo since cores may have changed since startup
	gSessionData->readCpuInfo();

	if (0
			|| !mMonitor.init()
			|| !mUEvent.init()
			|| !mMonitor.add(mUEvent.getFd())

			|| (schedSwitchId = PerfDriver::getTracepointId(SCHED_SWITCH, &printb)) < 0
			|| !sendTracepointFormat(&mBuffer, SCHED_SWITCH, &printb, &b1)

			// Only want RAW but not IP on sched_switch and don't want TID on SAMPLE_ID
			|| !mCountersGroup.add(&mBuffer, 100/**/, PERF_TYPE_TRACEPOINT, schedSwitchId, 1, PERF_SAMPLE_RAW, PERF_GROUP_MMAP | PERF_GROUP_COMM | PERF_GROUP_TASK | PERF_GROUP_SAMPLE_ID_ALL | PERF_GROUP_PER_CPU)

			// Only want TID and IP but not RAW on timer
			|| (gSessionData->mSampleRate > 0 && !gSessionData->mIsEBS && !mCountersGroup.add(&mBuffer, 99/**/, PERF_TYPE_SOFTWARE, PERF_COUNT_SW_CPU_CLOCK, 1000000000UL / gSessionData->mSampleRate, PERF_SAMPLE_TID | PERF_SAMPLE_IP, PERF_GROUP_PER_CPU))

			|| !gSessionData->perf.enable(&mCountersGroup, &mBuffer)
			|| 0) {
		logg->logMessage("%s(%s:%i): perf setup failed, are you running Linux 3.4 or later?", __FUNCTION__, __FILE__, __LINE__);
		return false;
	}

	if (!gSessionData->perf.summary(&mSummary)) {
		logg->logMessage("%s(%s:%i): PerfDriver::summary failed", __FUNCTION__, __FILE__, __LINE__);
		return false;
	}

	{
		// Run prepareCPU in parallel as perf_event_open can take more than 1 sec in some cases
		pthread_t threads[NR_CPUS];
		PrepareParallelArgs args[NR_CPUS];
		for (int cpu = 0; cpu < gSessionData->mCores; ++cpu) {
			args[cpu].pg = &mCountersGroup;
			args[cpu].cpu = cpu;
			if (pthread_create(&threads[cpu], NULL, prepareParallel, &args[cpu]) != 0) {
				logg->logMessage("%s(%s:%i): pthread_create failed", __FUNCTION__, __FILE__, __LINE__);
				return false;
			}
		}
		for (int cpu = 0; cpu < gSessionData->mCores; ++cpu) {
			if (pthread_join(threads[cpu], NULL) != 0) {
				logg->logMessage("%s(%s:%i): pthread_join failed", __FUNCTION__, __FILE__, __LINE__);
				return false;
			}
		}
	}

	int numEvents = 0;
	for (int cpu = 0; cpu < gSessionData->mCores; ++cpu) {
		numEvents += mCountersGroup.onlineCPU(cpu, false, &mBuffer, &mMonitor);
	}
	if (numEvents <= 0) {
		logg->logMessage("%s(%s:%i): PerfGroup::onlineCPU failed on all cores", __FUNCTION__, __FILE__, __LINE__);
		return false;
	}

	// Start events before reading proc to avoid race conditions
	if (!mCountersGroup.start()) {
		logg->logMessage("%s(%s:%i): PerfGroup::start failed", __FUNCTION__, __FILE__, __LINE__);
		return false;
	}

	if (!readProc(&mBuffer, true, &printb, &b1, &b2, &b3)) {
		logg->logMessage("%s(%s:%i): readProc failed", __FUNCTION__, __FILE__, __LINE__);
		return false;
	}

	mBuffer.commit(1);

	return true;
}
void builtInProcedure(void)
{
  TRACE(lstFile, "[builtInProcedure]");

  /* Is the token a procedure? */


  if (token == tPROC)
    {
      /* Yes, process it procedure according to the extended token type */

      switch (tknSubType)
        {
          /* Standard Procedures & Functions */

        case txPAGE :
          fileProc(xWRITE_PAGE);
          break;

        case txREAD :
          getToken();
          (void)readProc();
          break;

        case txREADLN :
          readlnProc();
          break;

        case txRESET  :
          fileProc(xRESET);
          break;

        case txREWRITE :
          fileProc(xREWRITE);
          break;

        case txWRITE :
          getToken();
          (void)writeProc();
          break;

        case txWRITELN :
          writelnProc();
          break;

        case txGET :
        case txNEW :
        case txPACK :
        case txPUT :
        case txUNPACK :
          error(eNOTYET);
          getToken();
          break;

          /* less-than-standard procedures */
        case txVAL :
          valProc();
          break;

          /* Its not a recognized procedure */

        default :
          error(eINVALIDPROC);
          break;

        } /* end switch */
    } /* end if */
} /* end builtInProcedure */
Beispiel #4
0
 void
   socketevent(int socket) {
   readProc(0, (int*)socket, 0);
 }