singrdk/base/Applications/Eventing/EvStress/EvStress.sg

273 lines
9.0 KiB
Plaintext

// ----------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
// ----------------------------------------------------------------------------
using System;
using System.Diagnostics;
using System.Threading;
using System.Runtime.InteropServices;
using System.Runtime.CompilerServices;
using Microsoft.Singularity;
using Microsoft.Singularity.Io;
using Microsoft.Singularity.V1.Services;
using Microsoft.SingSharp.Reflection;
using Microsoft.Singularity.UnitTest;
using Microsoft.Singularity.Channels;
using Microsoft.Singularity.Applications;
using Microsoft.Singularity.Test.Contracts;
using Microsoft.Singularity.Configuration;
using Microsoft.Singularity.Eventing;
using Microsoft.Singularity.TestEvent;
namespace Microsoft.Singularity
{
[TestClass]
public class EvStress : TestClass
{
internal class StressLauncher
{
static EvStress1 Log;
static uint Loops;
static int Threads;
static AutoResetEvent WaitEvent;
public StressLauncher( string testName,
uint storageSize,
uint storageOptions,
uint sourceOptions,
uint iterations)
{
Console.WriteLine("Launching stress {0}: StorageSize={1} bytes, StorageOptions={2:x}, SourceOptions={3:x}",
testName,
storageSize,
storageOptions,
sourceOptions);
Loops = iterations;
WaitEvent = new AutoResetEvent(false);
Log = EvStress1.Create(testName, storageSize, storageOptions, sourceOptions);
}
public static void ChildThread()
{
if (WaitEvent == null || Log == null) {
return;
}
for (int i = 0; i < Loops; i++) {
Log.Log(100);
}
if (Interlocked.Decrement(ref Threads) == 0) {
WaitEvent.Set();
}
}
public static void StartStress(int threads)
{
if (WaitEvent == null || Log == null) {
Console.WriteLine("Failed to allocate resources");
return;
}
Threads = threads;
Console.WriteLine("Stress started with {0} threads", Threads);
DateTime startTime = DateTime.Now;
for (uint i = 0; i < threads; i++) {
Thread peer = new Thread(new ThreadStart(ChildThread));
if (peer!= null) {
peer.Start();
} else {
WaitEvent.Set();
break;
}
}
WaitEvent.WaitOne();
DateTime endTime = DateTime.Now;
TimeSpan t = endTime-startTime;
Console.WriteLine("Test completed in {0} msec", t.TotalMilliseconds);
}
}
[ClassInitialize]
public void Init()
{
}
[TestMethod]
public void StressNoStacks4k()
{
StressLauncher stress1 = new StressLauncher("StressNoStacks4k",
4096,
QualityOfService.RecyclableEvents,
EventSource.ENABLE_ALL_MASK,
1000000);
if (stress1 != null) {
for (int i = 1; i <= 16; i <<= 1) {
StressLauncher.StartStress(i);
}
}
}
[TestMethod]
public void StressNoStacks1M()
{
StressLauncher stress1 = new StressLauncher("StressNoStacks1M",
1024*1024,
QualityOfService.RecyclableEvents,
EventSource.ENABLE_ALL_MASK,
1000000);
if (stress1 != null) {
for (int i = 1; i <= 16; i <<= 1) {
StressLauncher.StartStress(i);
}
}
}
[TestMethod]
public void StressStacks4k()
{
StressLauncher stress1 = new StressLauncher("StressStacks4k",
4096,
QualityOfService.RecyclableEvents,
EventSource.CAPTURE_STACK_TRACE | EventSource.ENABLE_ALL_MASK,
1000000);
if (stress1 != null) {
for (int i = 1; i <= 16; i <<= 1) {
StressLauncher.StartStress(i);
}
}
}
[TestMethod]
public void StressStacks1M()
{
StressLauncher stress1 = new StressLauncher("StressStacks1M",
1024*1024,
QualityOfService.RecyclableEvents,
EventSource.CAPTURE_STACK_TRACE | EventSource.ENABLE_ALL_MASK,
1000000);
if (stress1 != null) {
for (int i = 1; i <= 16; i <<= 1) {
StressLauncher.StartStress(i);
}
}
}
[TestMethod]
public void StressPermNoStacks4k()
{
StressLauncher stress1 = new StressLauncher("StressPermNoStacks4k",
4096,
QualityOfService.PermanentEvents,
EventSource.ENABLE_ALL_MASK,
1000000);
if (stress1 != null) {
for (int i = 1; i <= 16; i <<= 1) {
StressLauncher.StartStress(i);
}
}
}
[TestMethod]
public void StressPermNoStacks1M()
{
StressLauncher stress1 = new StressLauncher("StressPermNoStacks1M",
1024*1024,
QualityOfService.PermanentEvents,
EventSource.ENABLE_ALL_MASK,
1000000);
if (stress1 != null) {
for (int i = 1; i <= 16; i <<= 1) {
StressLauncher.StartStress(i);
}
}
}
[TestMethod]
public void StressPermStacks4k()
{
StressLauncher stress1 = new StressLauncher("StressPermStacks4k",
4096,
QualityOfService.PermanentEvents,
EventSource.CAPTURE_STACK_TRACE | EventSource.ENABLE_ALL_MASK,
1000000);
if (stress1 != null) {
for (int i = 1; i <= 16; i <<= 1) {
StressLauncher.StartStress(i);
}
}
}
[TestMethod]
public void StressPermStacks1M()
{
StressLauncher stress1 = new StressLauncher("StressPermStacks1M",
1024*1024,
QualityOfService.PermanentEvents,
EventSource.CAPTURE_STACK_TRACE | EventSource.ENABLE_ALL_MASK,
1000000);
if (stress1 != null) {
for (int i = 1; i <= 16; i <<= 1) {
StressLauncher.StartStress(i);
}
}
}
[TestMethod]
public void TestAll()
{
StressNoStacks4k();
StressNoStacks1M();
StressStacks4k();
StressStacks1M();
StressPermNoStacks4k();
StressPermNoStacks1M();
StressPermStacks4k();
StressPermStacks1M();
}
}
}