Skip to content
This repository was archived by the owner on Jan 23, 2023. It is now read-only.

[Arm64/Unix] Add 64K page support #10981

Merged
merged 2 commits into from
Jun 12, 2017
Merged

Conversation

sdmaclea
Copy link

Excludes fixes for crossgen which are being addressed by #10959.
Excludes fix for SOS. An separate issue will be created.

@sdmaclea
Copy link
Author

@jkotas
cc @janvorli based on @jkotas requested review of #10891
cc @Maoni0 @adityamandaleeka @swgillespie for the GC changes

@@ -190,6 +190,11 @@ struct DT_RTL_USER_PROCESS_PARAMETERS

#endif // !FEATURE_PAL

// TODO-ARM64-NYI Support for SOS on target with 64K pages
Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Issue #10982

@@ -1490,6 +1490,15 @@ class CPUGroupInfo
int GetCurrentProcessCpuCount();
DWORD_PTR GetCurrentProcessCpuMask();

size_t GetOsPageSize();

#define PAGE_SIZE GetOsPageSize()
Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Windows build still expects this to be a constant. I will put this in an #ifdef FEATURE_PAL block.

@sdmaclea sdmaclea force-pushed the PR-ARM64-64KPAGES-1of2 branch from b3430c4 to 8391b34 Compare April 14, 2017 22:19
@@ -86,6 +86,10 @@ bool GCToOSInterface::Initialize()

g_logicalCpuCount = cpuCount;

assert(g_helperPage == 0);

g_helperPage = static_cast<uint8_t*>(mmap(0, OS_PAGE_SIZE, PROT_READ | PROT_WRITE, MAP_ANONYMOUS | MAP_PRIVATE, -1, 0));
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

return false if this fails?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

OK

// Get size of an OS memory page
void GCToOSInterface::GetPageSize()
{
static pageSize = (sysconf( _SC_PAGE_SIZE ) != -1) ? sysconf( _SC_PAGE_SIZE ) : 4096;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I believe function local static constructors are a problematic construct. They are not always thread safe, have varying perf characteristics, ... .

I think this should be rather initialize in GCToOSInterface::Inititialize.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Also, it would be nice to call sysconf( _SC_PAGE_SIZE ) just once.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You can use the STL in this file - std::call_once is probably safer and more standard. Though +1 for it going into GCToOSInterface::Initialize instead.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

OK

@@ -3001,6 +3001,8 @@ Return
BOOL
InitializeFlushProcessWriteBuffers()
{
s_helperPage = static_cast<int*>(mmap(0, VIRTUAL_PAGE_SIZE, PROT_READ | PROT_WRITE, MAP_ANONYMOUS | MAP_PRIVATE, -1, 0));
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Check for null.

@@ -517,6 +523,14 @@ void GCToOSInterface::GetMemoryStatus(uint32_t* memory_load, uint64_t* available
*available_page_file = 0;
}

// Get size of an OS memory page
void GCToOSInterface::GetPageSize()
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I am wondering whether this needs to be in .inl file to get inlined.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

With move to GCToOSInterface::Inititialize, this will be moved to header and be inlined.

src/gc/gc.cpp Outdated
@@ -26608,7 +26608,7 @@ void gc_heap::revisit_written_pages (BOOL concurrent_p, BOOL reset_only_p)
card_table [card_word (card_of (background_written_addresses [i]))] = ~0u;
dprintf (3,("Set Cards [%p:%p, %p:%p[",
card_of (background_written_addresses [i]), g_addresses [i],
card_of (background_written_addresses [i]+OS_PAGE_SIZE), background_written_addresses [i]+OS_PAGE_SIZE));
card_of (background_written_addresses [i]+GC_PAGE_SIZE), background_written_addresses [i]+GC_PAGE_SIZE));
#endif //NO_WRITE_BARRIER
uint8_t* page = (uint8_t*)background_written_addresses[i];
dprintf (3, ("looking at page %d at %Ix(h: %Ix)", i,
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think there may need to be more places to flip from OS_PAGE_SIZE to GC_PAGE_SIZE in the GC, for performance reasons. Could you please open an issue on it under area-GC?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Issue #11017

src/gc/gcpriv.h Outdated
@@ -4302,16 +4302,22 @@ dynamic_data* gc_heap::dynamic_data_of (int gen_number)
return &dynamic_data_table [ gen_number ];
}

#ifdef FEATURE_PAL
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This should not be under FEATURE_PAL. We want to avoid having FEATURE_PAL in the GC implementation.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

OK

// Get size of an OS memory page
void GCToOSInterface::GetPageSize()
{
static pageSize = (sysconf( _SC_PAGE_SIZE ) != -1) ? sysconf( _SC_PAGE_SIZE ) : 4096;

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You can use the STL in this file - std::call_once is probably safer and more standard. Though +1 for it going into GCToOSInterface::Initialize instead.

// Get size of an OS memory page
void GCToOSInterface::GetPageSize()
{
return 4096;

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

would be nice to assert that g_SystemInfo.dwPageSize equals 4096 here, our handling of OS write watch is going to be subtly wrong otherwise.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

OK

@sdmaclea
Copy link
Author

The Windows failures appear to be unrelated.

The CentOS7.1, FreeBSD, OSX10.12, Ubuntu x64 Checked failures are due to trying to compile softwarewritewatch.cpp, which is intended to be a windows only file. My best guess is this is due to https://github.com/dotnet/coreclr/blob/master/src/gc/sample/CMakeLists.txt#L21

@jkotas
Copy link
Member

jkotas commented Apr 17, 2017

softwarewritewatch.cpp, which is intended to be a windows only file

softwarewritewatch.cpp is not windows only file. It is AMD64 Unix file only actually. Everything in the file is under FEATURE_USE_SOFTWARE_WRITE_WATCH_FOR_GC_HEAP ifdef. This define is turned on for AMD64 Unix only right now.

@sdmaclea
Copy link
Author

@jkotas Thanks for clarifying. I saw it under if(NOT CLR_CMAKE_PLATFORM_UNIX) in gc/CMakeList.txt and assumed it was only for Windows.

src/gc/gc.cpp Outdated
@@ -26608,7 +26608,7 @@ void gc_heap::revisit_written_pages (BOOL concurrent_p, BOOL reset_only_p)
card_table [card_word (card_of (background_written_addresses [i]))] = ~0u;
dprintf (3,("Set Cards [%p:%p, %p:%p[",
card_of (background_written_addresses [i]), g_addresses [i],
card_of (background_written_addresses [i]+OS_PAGE_SIZE), background_written_addresses [i]+OS_PAGE_SIZE));
card_of (background_written_addresses [i]+GC_PAGE_SIZE), background_written_addresses [i]+GC_PAGE_SIZE));
#endif //NO_WRITE_BARRIER
uint8_t* page = (uint8_t*)background_written_addresses[i];
dprintf (3, ("looking at page %d at %Ix(h: %Ix)", i,
Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Issue #11017

src/gc/gc.cpp Outdated
@@ -26870,7 +26870,7 @@ BOOL gc_heap::create_bgc_thread_support()
}

//needs to have room for enough smallest objects fitting on a page
parr = new (nothrow) (uint8_t* [1 + page_size / MIN_OBJECT_SIZE]);
parr = new (nothrow) uint8_t*[1 + page_size / MIN_OBJECT_SIZE];
Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Note

#define page_size OS_PAGE_SIZE

src/gc/gcpriv.h Outdated
@@ -4302,16 +4302,22 @@ dynamic_data* gc_heap::dynamic_data_of (int gen_number)
return &dynamic_data_table [ gen_number ];
}

#ifdef FEATURE_PAL
Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

OK

@@ -86,6 +86,10 @@ bool GCToOSInterface::Initialize()

g_logicalCpuCount = cpuCount;

assert(g_helperPage == 0);

g_helperPage = static_cast<uint8_t*>(mmap(0, OS_PAGE_SIZE, PROT_READ | PROT_WRITE, MAP_ANONYMOUS | MAP_PRIVATE, -1, 0));
Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

OK

@@ -517,6 +523,14 @@ void GCToOSInterface::GetMemoryStatus(uint32_t* memory_load, uint64_t* available
*available_page_file = 0;
}

// Get size of an OS memory page
void GCToOSInterface::GetPageSize()
Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

With move to GCToOSInterface::Inititialize, this will be moved to header and be inlined.

// Get size of an OS memory page
void GCToOSInterface::GetPageSize()
{
static pageSize = (sysconf( _SC_PAGE_SIZE ) != -1) ? sysconf( _SC_PAGE_SIZE ) : 4096;
Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

OK

// Get size of an OS memory page
void GCToOSInterface::GetPageSize()
{
return 4096;
Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

OK

size_t GetOsPageSize()
{
#ifdef FEATURE_PAL
static size_t pageSize = 0;
Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Need to deal with static here too

@jkotas
Copy link
Member

jkotas commented Apr 17, 2017

BTW: I have opened https://github.com/dotnet/coreclr/issues/11018 to track enabling FEATURE_USE_SOFTWARE_WRITE_WATCH_FOR_GC_HEAP for Linux ARM64. It is important for low GC latency.

//
// However there is a real potential performance cost. This will need to
// be optimized if GetOsPageSize() shows up in profiles.
static const size_t pageSize(GetOsPageSizeUncached());
Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@jkotas This is not intended to ignore your request. Per @swgillespie 's suggestion I looked at the docs for std::call_once here. http://en.cppreference.com/w/cpp/thread/call_once. It was noted that the standard makes
the guarantee noted in 1327-1328. (Needs citation). I recognize the potential performance impact you noted, but I do not know a good/simple way to guarantee this is initialized without using the function-local static guarantee.

//
// However there is a real potential performance cost. This will need to
// be optimized if GetOsPageSize() shows up in profiles.
static const size_t pageSize(GetOsPageSizeUncached());
Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@jkotas It was not obvious how to play the same initialization trick for util.cpp. Therefore I looked at @swgillespie 's call_once suggestion which suggested function-local statics are preferred over call_once.

Based on my understanding of the function-local static requirements the above code is guaranteed to be functionally correct. But as you noted performance may be an issue.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You could use a global Volatile<size_t> s_pageSize;. In this function, you would read it, compare to zero and if it is zero, call the GetOsPageSizeUncached() and assign the result to s_pageSize. Without any locks. I think that you could even use s_pageSize.LoadWithoutBarrier / s_pageSize.StoreWithoutBarrier. The only effect would be that on multiple processors, we could end up calling the GetOsPageSizeUncached few more times.

@sdmaclea
Copy link
Author

Looks like windows errors are related after all. gcwks.cpp is failing to compile with a signed/unsigned mismatch.

@sdmaclea
Copy link
Author

Windows errors are due to "unresolved external symbol "protected: static unsigned int GCToOSInterface::s_pageSize""

@@ -471,7 +486,7 @@ uint64_t GCToOSInterface::GetPhysicalMemoryLimit()
long pages = sysconf(_SC_PHYS_PAGES);
if (pages == -1)
{
return 0;
return 0;SC_PAGE_SIZE
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Accidental change?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@jkotas Yeah. My editor went haywire writing random clipboard strings throughout files. I corrected a few dozen, but this one must have slipped through.

@@ -128,6 +128,9 @@ typedef void (*GCThreadFunction)(void* param);
// Interface that the GC uses to invoke OS specific functionality
class GCToOSInterface
{
protected:
static size_t s_pageSize;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would prefer keeping it here as a pure static interface without any static data members and implementations of methods. Could you please rather create a g_pageSize variable in the src/gc/unix/gcenv.unix.cpp? The Windows implementation of the GetPageSize (in src/gc/windows/gcenv.windows.cpp) can directly return g_SystemInfo.dwPageSize.
Btw, you were missing the s_pageSize setting in the src/vm/gcenv.os.cpp, this is the interface implementation for CoreCLR with GC embedded in the coreclr shared library, which is the default.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@janvorli I did this to address @jkotas request that GCToOSInterface::GetPageSize() be inlined to address his performance concerns.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think we need to add gcenv.windows.inl and gcenv.unix.inl files to allow inlining of the OS specific implementation details.

I think we will likely end up with number of these perf critical cases where inlining is important.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@jkotas that makes sense.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@janvorli and @jkotas While I understand the concept, I do not understand how it would be implemented. Which files would include the new inl files. How would they determine which one to include?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Which files would include the new inl files.

gcenv.h

How would they determine which one to include?

Ifdefs.

@@ -300,7 +300,7 @@ typedef DPTR(uint8_t) PTR_uint8_t;

#define DECLSPEC_ALIGN(x) __declspec(align(x))

#define OS_PAGE_SIZE 4096
#define OS_PAGE_SIZE GCToOSInterface::GetPageSize()
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would prefer replacing all usages of OS_PAGE_SIZE by the GCToOSInterface::GetPageSize() instead. Seeing a macro in the source gives me a false feeling that it is a constant. I would also prefer the same for the PAGE_SIZE.

//
// However there is a real potential performance cost. This will need to
// be optimized if GetOsPageSize() shows up in profiles.
static const size_t pageSize(GetOsPageSizeUncached());
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You could use a global Volatile<size_t> s_pageSize;. In this function, you would read it, compare to zero and if it is zero, call the GetOsPageSizeUncached() and assign the result to s_pageSize. Without any locks. I think that you could even use s_pageSize.LoadWithoutBarrier / s_pageSize.StoreWithoutBarrier. The only effect would be that on multiple processors, we could end up calling the GetOsPageSizeUncached few more times.

BOUNDARY_64K = 0xffff
};

#define VIRTUAL_PAGE_SIZE getpagesize()
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would also replace the VIRTUAL_PAGE_SIZE macro usages with a function call (e.g. GetVirtualPageSize) and cache the getpagesize call.
All of the VIRTUAL_PAGE_MASK usages are for alignment purposes and using ALIGN_UP / ALIGN_DOWN / IS_ALIGNED with the virtual page size as the parameter would eliminate the need for this macro.

@sdmaclea
Copy link
Author

@janvorli @jkotas @swgillespie @Maoni0 @adityamandaleeka I have attempted to address all of the review feedback.

@sdmaclea
Copy link
Author

Windows build failure is

src\inc\pedecoder.inl(116): warning C4267: '=': conversion from 'size_t' to 'COUNT_T', possible loss of data

I will address tomorrow.

@@ -493,11 +493,11 @@ void
CrashInfo::InsertMemoryRegion(uint64_t address, size_t size)
{
// Round to page boundary
uint64_t start = address & PAGE_MASK;
uint64_t start = ROUND_DOWN_TO_PAGE(address);
Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@janvorli The changes to the files in this directory are causing the Ubuntu x64 failures. I had removed all references to PAGE_SIZE and PAGE_MASK from the source tree. Since these ROUND_*_TO_PAGE macros were defined next to them I assumed they were safe to use....

In any case these macros must be coming indirectly from the host include files.

Reverting all the changes in this directory allows Ubuntu compile.

My plan is to add these to the list of fixes in the SOS debugger issue.

@Maoni0
Copy link
Member

Maoni0 commented Apr 20, 2017

I just got back from vacation - I'll take a look at this tomorrow.

@sdmaclea
Copy link
Author

4 builds timed out. Trying again

@dotnet-bot
test CentOS7.1 x64 Debug Build and Test
test FreeBSD x64 Checked Build
test OSX10.12 x64 Checked Build and Test
test Ubuntu x64 Checked Build and Test

Copy link
Author

@sdmaclea sdmaclea left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The timeouts have apparently recurred. I have reviewed the code and do not see huge differences which would explain the timeouts. I will fix all the functional changes I observed while reviewing the code.

It is not obvious to me that this will fix the timeouts. If anyone sees something I am missing. Please let me know.

@@ -885,10 +889,8 @@ static LPVOID VIRTUALReserveMemory(
// First, figure out where we're trying to reserve the memory and
// how much we need. On most systems, requests to mmap must be
// page-aligned and at multiples of the page size.
StartBoundary = (UINT_PTR)lpAddress & ~BOUNDARY_64K;
Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is a functional change on 4K systems.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think this needs to stay to be compatible with Windows. I am not sure, but I think there was some code in the VM or JIT that relies on that.

MemSize = ( ((UINT_PTR)lpAddress + dwSize + VIRTUAL_PAGE_MASK) & ~VIRTUAL_PAGE_MASK ) -
StartBoundary;
StartBoundary = (UINT_PTR) ALIGN_DOWN(lpAddress, GetVirtualPageSize());
MemSize = ALIGN_UP((UINT_PTR)lpAddress + dwSize, GetVirtualPageSize()) - StartBoundary;
Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This code is not quite functionally identical. On first glance looks like off by one. Also all similar lines in this file

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I am not sure I understand why would it be functionally different.
The ALIGN_UP does result = (val + (alignment - 1)) & ~(alignment - 1);
The ALIGN_DOWN does result = val & ~(alignment - 1);

So ALIGN_DOWN(lpAddress, GetVirtualPageSize()) gets lpAddress & ~(GetVirtualPageSize() - 1)
And ALIGN_UP((UINT_PTR)lpAddress + dwSize, GetVirtualPageSize()) gets (lpAddress + dwSize + (GetVirtualPageSize() - 1)) & ~(GetVirtualPageSize() - 1)

Using the previous state and replacing VIRTUAL_PAGE_MASK by (GetVirtualPageSize() - 1) yields the same expressions.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@janvorli The original expression was missing a -1

So to match exactly.... The code needs to be

ALIGN_UP((UINT_PTR)lpAddress + dwSize + 1, GetVirtualPageSize()) - StartBoundary

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@janvorli I will try restoring the 64K boundary first as it seem more likely the cause of the regression

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I am still not sure I understand where was the missing -1. The original expression was
MemSize = ( ((UINT_PTR)lpAddress + dwSize + VIRTUAL_PAGE_MASK) & ~VIRTUAL_PAGE_MASK ) - StartBoundary;
VIRTUAL_PAGE_MASK is PAGE_SIZE - 1
So just substituting (GetVirtualPageSize() - 1) for VIRTUAL_PAGE_MASK:
MemSize = ( ((UINT_PTR)lpAddress + dwSize + (GetVirtualPageSize() - 1)) & ~(GetVirtualPageSize() - 1)) - StartBoundary;
And your new expression is
MemSize = ALIGN_UP((UINT_PTR)lpAddress + dwSize, GetVirtualPageSize()) - StartBoundary;
Expanding the macro yields
MemSize = (((UINT_PTR)lpAddress + dwSize + (GetVirtualPageSize() - 1)) & ~(GetVirtualPageSize() - 1)) - StartBoundary;
Which is exactly the same thing.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@janvorli Yes you are right. I had been reading the first VIRTUAL_PAGE_MASK as VIRTUAL_PAGE_SIZE. Sometimes you are so blind, you cannot see something even if someone shows you. Thanks for insisting..

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@sdmaclea no problem, similar things happen to me quite often too.

@sdmaclea
Copy link
Author

@dotnet-bot help

@dotnet-bot
Copy link

Welcome to the dotnet/coreclr Repository

The following is a list of valid commands on this PR. To invoke a command, comment the indicated phrase on the PR

The following commands are valid for all PRs and repositories.

Click to expand
Comment Phrase Action
@dotnet-bot test this please Re-run all legs. Use sparingly
@dotnet-bot test ci please Generates (but does not run) jobs based on changes to the groovy job definitions in this branch
@dotnet-bot help Print this help message

The following jobs are launched by default for each PR against dotnet/coreclr:master.

Click to expand
Comment Phrase Job Launched
@dotnet-bot test Windows_NT arm64 Cross Debug Build Windows_NT arm64 Cross Debug Build
@dotnet-bot test Ubuntu16.04 arm Cross Debug Build Ubuntu16.04 arm Cross Debug Build
@dotnet-bot test Windows_NT arm Cross Debug Build Windows_NT arm Cross Debug Build
@dotnet-bot test Ubuntu arm Cross Release Build Ubuntu arm Cross Release Build
@dotnet-bot test Windows_NT arm Cross Release Build Windows_NT arm Cross Release Build
@dotnet-bot test Tizen armel Cross Debug Build Tizen armel Cross Debug Build
@dotnet-bot test Tizen armel Cross Release Build Tizen armel Cross Release Build
@dotnet-bot test FreeBSD x64 Checked Build FreeBSD x64 Checked Build
@dotnet-bot test OSX10.12 x64 Checked Build and Test OSX10.12 x64 Checked Build and Test
@dotnet-bot test Ubuntu x64 Checked Build and Test Ubuntu x64 Checked Build and Test
@dotnet-bot test CentOS7.1 x64 Debug Build and Test CentOS7.1 x64 Debug Build and Test
@dotnet-bot test Windows_NT x64 Debug Build and Test Windows_NT x64 Debug Build and Test
@dotnet-bot test CentOS7.1 x64 Release Priority 1 Build and Test CentOS7.1 x64 Release Priority 1 Build and Test
@dotnet-bot test Windows_NT x64 Release Priority 1 Build and Test Windows_NT x64 Release Priority 1 Build and Test
@dotnet-bot test Ubuntu x64 Formatting Ubuntu x64 Formatting
@dotnet-bot test Windows_NT x64 Formatting Windows_NT x64 Formatting
@dotnet-bot test Windows_NT x86 Checked Build and Test Windows_NT x86 Checked Build and Test

The following optional jobs are available in PRs against dotnet/coreclr:master.

Click to expand
Comment Phrase Job Launched
@dotnet-bot test Windows_NT arm64 Checked pri1r2r Queues Windows_NT arm64 Cross Checked pri1r2r Build and Test
@dotnet-bot test Windows_NT arm64 Checked Queues Windows_NT arm64 Cross Checked Build and Test
@dotnet-bot test Windows_NT arm64 Release pri1r2r Queues Windows_NT arm64 Cross Release pri1r2r Build and Test
@dotnet-bot test Windows_NT arm64 Release Queues Windows_NT arm64 Cross Release Build and Test
@dotnet-bot test Ubuntu16.04 arm Cross Checked Build Queues Ubuntu16.04 arm Cross Checked Build
@dotnet-bot test Ubuntu arm Cross Checked Build Queues Ubuntu arm Cross Checked Build
@dotnet-bot test Ubuntu arm Cross Debug Build Queues Ubuntu arm Cross Debug Build
@dotnet-bot test Ubuntu16.04 arm Cross Release Build Queues Ubuntu16.04 arm Cross Release Build
@dotnet-bot test Tizen armel Cross Checked Build Queues Tizen armel Cross Checked Build
@dotnet-bot test Debian8.4 Queues Debian8.4 x64 Checked Build
@dotnet-bot test Fedora24 Queues Fedora24 x64 Checked Build
@dotnet-bot test OpenSUSE42.1 Queues OpenSUSE42.1 x64 Checked Build
@dotnet-bot test RHEL7.2 Queues RHEL7.2 x64 Checked Build
@dotnet-bot test Ubuntu16.04 x64 Queues Ubuntu16.04 x64 Checked Build
@dotnet-bot test Ubuntu16.10 Queues Ubuntu16.10 x64 Checked Build
@dotnet-bot test Debian8.4 Queues Debian8.4 x64 Debug Build
@dotnet-bot test Fedora24 Queues Fedora24 x64 Debug Build
@dotnet-bot test OpenSUSE42.1 Queues OpenSUSE42.1 x64 Debug Build
@dotnet-bot test RHEL7.2 Queues RHEL7.2 x64 Debug Build
@dotnet-bot test Ubuntu16.04 x64 Queues Ubuntu16.04 x64 Debug Build
@dotnet-bot test Ubuntu16.10 Queues Ubuntu16.10 x64 Debug Build
@dotnet-bot test Ubuntu x64 Checked illink Queues Ubuntu x64 Checked via ILLink
@dotnet-bot test Ubuntu x64 Checked illink Queues Ubuntu x64 Checked via ILLink
@dotnet-bot test Windows_NT x64 Checked illink Queues Windows_NT x64 Checked via ILLink
@dotnet-bot test Ubuntu x64 Debug illink Queues Ubuntu x64 Debug via ILLink
@dotnet-bot test Ubuntu x64 Debug illink Queues Ubuntu x64 Debug via ILLink
@dotnet-bot test Windows_NT x64 Debug illink Queues Windows_NT x64 Debug via ILLink
@dotnet-bot test Ubuntu x64 Release illink Queues Ubuntu x64 Release via ILLink
@dotnet-bot test Ubuntu x64 Release illink Queues Ubuntu x64 Release via ILLink
@dotnet-bot test Windows_NT x64 Release illink Queues Windows_NT x64 Release via ILLink
@dotnet-bot test Windows_NT x86 Checked illink Queues Windows_NT x86 Checked via ILLink
@dotnet-bot test Windows_NT x86 Debug illink Queues Windows_NT x86 Debug via ILLink
@dotnet-bot test Windows_NT x86 Release illink Queues Windows_NT x86 Release via ILLink
@dotnet-bot test Windows_NT arm64 Checked gcstress0x3 Queues Windows_NT arm64 Cross Checked gcstress0x3 Build and Test
@dotnet-bot test Windows_NT arm64 Checked gcstress0xc Queues Windows_NT arm64 Cross Checked gcstress0xc Build and Test
@dotnet-bot test CentOS7.1 forcerelocs Queues CentOS7.1 x64 Checked Build and Test (Jit - ForceRelocs=1)
@dotnet-bot test CentOS7.1 gcstress0x3 Queues CentOS7.1 x64 Checked Build and Test (Jit - GCStress=0x3)
@dotnet-bot test CentOS7.1 gcstress0xc Queues CentOS7.1 x64 Checked Build and Test (Jit - GCStress=0xC)
@dotnet-bot test CentOS7.1 gcstress0xc_jitstress1 Queues CentOS7.1 x64 Checked Build and Test (Jit - GCStress=0xC JitStress=1)
@dotnet-bot test CentOS7.1 gcstress0xc_jitstress2 Queues CentOS7.1 x64 Checked Build and Test (Jit - GCStress=0xC JitStress=2)
@dotnet-bot test CentOS7.1 gcstress0xc_minopts_heapverify1 Queues CentOS7.1 x64 Checked Build and Test (Jit - GCStress=0xC JITMinOpts=1 HeapVerify=1)
@dotnet-bot test CentOS7.1 gcstress0xc_zapdisable Queues CentOS7.1 x64 Checked Build and Test (Jit - GCStress=0xC ZapDisable=1 ReadyToRun=0)
@dotnet-bot test CentOS7.1 gcstress0xc_zapdisable_heapverify1 Queues CentOS7.1 x64 Checked Build and Test (Jit - GCStress=0xC ZapDisable=1 ReadyToRun=0 HeapVerify=1)
@dotnet-bot test CentOS7.1 gcstress0xc_zapdisable_jitstress2 Queues CentOS7.1 x64 Checked Build and Test (Jit - GCStress=0xC ZapDisable=1 ReadyToRun=0 JitStress=2)
@dotnet-bot test CentOS7.1 heapverify1 Queues CentOS7.1 x64 Checked Build and Test (Jit - HeapVerify=1)
@dotnet-bot test CentOS7.1 jitsse2only Queues CentOS7.1 x64 Checked Build and Test (Jit - EnableAVX=0 EnableSSE3_4=0)
@dotnet-bot test CentOS7.1 jitstress1 Queues CentOS7.1 x64 Checked Build and Test (Jit - JitStress=1)
@dotnet-bot test CentOS7.1 jitstress2 Queues CentOS7.1 x64 Checked Build and Test (Jit - JitStress=2)
@dotnet-bot test CentOS7.1 jitstress2_jitstressregs0x1000 Queues CentOS7.1 x64 Checked Build and Test (Jit - JitStress=2 JitStressRegs=0x1000)
@dotnet-bot test CentOS7.1 jitstress2_jitstressregs0x10 Queues CentOS7.1 x64 Checked Build and Test (Jit - JitStress=2 JitStressRegs=0x10)
@dotnet-bot test CentOS7.1 jitstress2_jitstressregs0x80 Queues CentOS7.1 x64 Checked Build and Test (Jit - JitStress=2 JitStressRegs=0x80)
@dotnet-bot test CentOS7.1 jitstress2_jitstressregs1 Queues CentOS7.1 x64 Checked Build and Test (Jit - JitStress=2 JitStressRegs=1)
@dotnet-bot test CentOS7.1 jitstress2_jitstressregs2 Queues CentOS7.1 x64 Checked Build and Test (Jit - JitStress=2 JitStressRegs=2)
@dotnet-bot test CentOS7.1 jitstress2_jitstressregs3 Queues CentOS7.1 x64 Checked Build and Test (Jit - JitStress=2 JitStressRegs=3)
@dotnet-bot test CentOS7.1 jitstress2_jitstressregs4 Queues CentOS7.1 x64 Checked Build and Test (Jit - JitStress=2 JitStressRegs=4)
@dotnet-bot test CentOS7.1 jitstress2_jitstressregs8 Queues CentOS7.1 x64 Checked Build and Test (Jit - JitStress=2 JitStressRegs=8)
@dotnet-bot test CentOS7.1 jitstressregs0x1000 Queues CentOS7.1 x64 Checked Build and Test (Jit - JitStressRegs=0x1000)
@dotnet-bot test CentOS7.1 jitstressregs0x10 Queues CentOS7.1 x64 Checked Build and Test (Jit - JitStressRegs=0x10)
@dotnet-bot test CentOS7.1 jitstressregs0x80 Queues CentOS7.1 x64 Checked Build and Test (Jit - JitStressRegs=0x80)
@dotnet-bot test CentOS7.1 jitstressregs1 Queues CentOS7.1 x64 Checked Build and Test (Jit - JitStressRegs=1)
@dotnet-bot test CentOS7.1 jitstressregs2 Queues CentOS7.1 x64 Checked Build and Test (Jit - JitStressRegs=2)
@dotnet-bot test CentOS7.1 jitstressregs3 Queues CentOS7.1 x64 Checked Build and Test (Jit - JitStressRegs=3)
@dotnet-bot test CentOS7.1 jitstressregs4 Queues CentOS7.1 x64 Checked Build and Test (Jit - JitStressRegs=4)
@dotnet-bot test CentOS7.1 jitstressregs8 Queues CentOS7.1 x64 Checked Build and Test (Jit - JitStressRegs=8)
@dotnet-bot test CentOS7.1 minopts Queues CentOS7.1 x64 Checked Build and Test (Jit - JITMinOpts=1)
@dotnet-bot test CentOS7.1 Checked r2r_jitforcerelocs Queues CentOS7.1 x64 Checked jitforcerelocs R2R Build & Test
@dotnet-bot test CentOS7.1 Checked r2r_jitminopts Queues CentOS7.1 x64 Checked jitminopts R2R Build & Test
@dotnet-bot test CentOS7.1 Checked r2r_jitstress1 Queues CentOS7.1 x64 Checked jitstress1 R2R Build & Test
@dotnet-bot test CentOS7.1 Checked r2r_jitstress2 Queues CentOS7.1 x64 Checked jitstress2 R2R Build & Test
@dotnet-bot test CentOS7.1 Checked r2r_jitstressregs0x1000 Queues CentOS7.1 x64 Checked jitstressregs0x1000 R2R Build & Test
@dotnet-bot test CentOS7.1 Checked r2r_jitstressregs0x10 Queues CentOS7.1 x64 Checked jitstressregs0x10 R2R Build & Test
@dotnet-bot test CentOS7.1 Checked r2r_jitstressregs0x80 Queues CentOS7.1 x64 Checked jitstressregs0x80 R2R Build & Test
@dotnet-bot test CentOS7.1 Checked r2r_jitstressregs1 Queues CentOS7.1 x64 Checked jitstressregs1 R2R Build & Test
@dotnet-bot test CentOS7.1 Checked r2r_jitstressregs2 Queues CentOS7.1 x64 Checked jitstressregs2 R2R Build & Test
@dotnet-bot test CentOS7.1 Checked r2r_jitstressregs3 Queues CentOS7.1 x64 Checked jitstressregs3 R2R Build & Test
@dotnet-bot test CentOS7.1 Checked r2r_jitstressregs4 Queues CentOS7.1 x64 Checked jitstressregs4 R2R Build & Test
@dotnet-bot test CentOS7.1 Checked r2r_jitstressregs8 Queues CentOS7.1 x64 Checked jitstressregs8 R2R Build & Test
@dotnet-bot test CentOS7.1 tailcallstress Queues CentOS7.1 x64 Checked Build and Test (Jit - TailcallStress=1)
@dotnet-bot test CentOS7.1 zapdisable Queues CentOS7.1 x64 Checked Build and Test (Jit - ZapDisable=1 ReadyToRun=0)
@dotnet-bot test OSX10.12 forcerelocs Queues OSX10.12 x64 Checked Build and Test (Jit - ForceRelocs=1)
@dotnet-bot test OSX10.12 gcstress0x3 Queues OSX10.12 x64 Checked Build and Test (Jit - GCStress=0x3)
@dotnet-bot test OSX10.12 gcstress0xc Queues OSX10.12 x64 Checked Build and Test (Jit - GCStress=0xC)
@dotnet-bot test OSX10.12 gcstress0xc_jitstress1 Queues OSX10.12 x64 Checked Build and Test (Jit - GCStress=0xC JitStress=1)
@dotnet-bot test OSX10.12 gcstress0xc_jitstress2 Queues OSX10.12 x64 Checked Build and Test (Jit - GCStress=0xC JitStress=2)
@dotnet-bot test OSX10.12 gcstress0xc_minopts_heapverify1 Queues OSX10.12 x64 Checked Build and Test (Jit - GCStress=0xC JITMinOpts=1 HeapVerify=1)
@dotnet-bot test OSX10.12 gcstress0xc_zapdisable Queues OSX10.12 x64 Checked Build and Test (Jit - GCStress=0xC ZapDisable=1 ReadyToRun=0)
@dotnet-bot test OSX10.12 gcstress0xc_zapdisable_heapverify1 Queues OSX10.12 x64 Checked Build and Test (Jit - GCStress=0xC ZapDisable=1 ReadyToRun=0 HeapVerify=1)
@dotnet-bot test OSX10.12 gcstress0xc_zapdisable_jitstress2 Queues OSX10.12 x64 Checked Build and Test (Jit - GCStress=0xC ZapDisable=1 ReadyToRun=0 JitStress=2)
@dotnet-bot test OSX10.12 heapverify1 Queues OSX10.12 x64 Checked Build and Test (Jit - HeapVerify=1)
@dotnet-bot test OSX10.12 jitsse2only Queues OSX10.12 x64 Checked Build and Test (Jit - EnableAVX=0 EnableSSE3_4=0)
@dotnet-bot test OSX10.12 jitstress1 Queues OSX10.12 x64 Checked Build and Test (Jit - JitStress=1)
@dotnet-bot test OSX10.12 jitstress2 Queues OSX10.12 x64 Checked Build and Test (Jit - JitStress=2)
@dotnet-bot test OSX10.12 jitstress2_jitstressregs0x1000 Queues OSX10.12 x64 Checked Build and Test (Jit - JitStress=2 JitStressRegs=0x1000)
@dotnet-bot test OSX10.12 jitstress2_jitstressregs0x10 Queues OSX10.12 x64 Checked Build and Test (Jit - JitStress=2 JitStressRegs=0x10)
@dotnet-bot test OSX10.12 jitstress2_jitstressregs0x80 Queues OSX10.12 x64 Checked Build and Test (Jit - JitStress=2 JitStressRegs=0x80)
@dotnet-bot test OSX10.12 jitstress2_jitstressregs1 Queues OSX10.12 x64 Checked Build and Test (Jit - JitStress=2 JitStressRegs=1)
@dotnet-bot test OSX10.12 jitstress2_jitstressregs2 Queues OSX10.12 x64 Checked Build and Test (Jit - JitStress=2 JitStressRegs=2)
@dotnet-bot test OSX10.12 jitstress2_jitstressregs3 Queues OSX10.12 x64 Checked Build and Test (Jit - JitStress=2 JitStressRegs=3)
@dotnet-bot test OSX10.12 jitstress2_jitstressregs4 Queues OSX10.12 x64 Checked Build and Test (Jit - JitStress=2 JitStressRegs=4)
@dotnet-bot test OSX10.12 jitstress2_jitstressregs8 Queues OSX10.12 x64 Checked Build and Test (Jit - JitStress=2 JitStressRegs=8)
@dotnet-bot test OSX10.12 jitstressregs0x1000 Queues OSX10.12 x64 Checked Build and Test (Jit - JitStressRegs=0x1000)
@dotnet-bot test OSX10.12 jitstressregs0x10 Queues OSX10.12 x64 Checked Build and Test (Jit - JitStressRegs=0x10)
@dotnet-bot test OSX10.12 jitstressregs0x80 Queues OSX10.12 x64 Checked Build and Test (Jit - JitStressRegs=0x80)
@dotnet-bot test OSX10.12 jitstressregs1 Queues OSX10.12 x64 Checked Build and Test (Jit - JitStressRegs=1)
@dotnet-bot test OSX10.12 jitstressregs2 Queues OSX10.12 x64 Checked Build and Test (Jit - JitStressRegs=2)
@dotnet-bot test OSX10.12 jitstressregs3 Queues OSX10.12 x64 Checked Build and Test (Jit - JitStressRegs=3)
@dotnet-bot test OSX10.12 jitstressregs4 Queues OSX10.12 x64 Checked Build and Test (Jit - JitStressRegs=4)
@dotnet-bot test OSX10.12 jitstressregs8 Queues OSX10.12 x64 Checked Build and Test (Jit - JitStressRegs=8)
@dotnet-bot test OSX10.12 minopts Queues OSX10.12 x64 Checked Build and Test (Jit - JITMinOpts=1)
@dotnet-bot test OSX10.12 Checked r2r_jitforcerelocs Queues OSX10.12 x64 Checked jitforcerelocs R2R Build & Test
@dotnet-bot test OSX10.12 Checked r2r_jitminopts Queues OSX10.12 x64 Checked jitminopts R2R Build & Test
@dotnet-bot test OSX10.12 Checked r2r_jitstress1 Queues OSX10.12 x64 Checked jitstress1 R2R Build & Test
@dotnet-bot test OSX10.12 Checked r2r_jitstress2 Queues OSX10.12 x64 Checked jitstress2 R2R Build & Test
@dotnet-bot test OSX10.12 Checked r2r_jitstressregs0x1000 Queues OSX10.12 x64 Checked jitstressregs0x1000 R2R Build & Test
@dotnet-bot test OSX10.12 Checked r2r_jitstressregs0x10 Queues OSX10.12 x64 Checked jitstressregs0x10 R2R Build & Test
@dotnet-bot test OSX10.12 Checked r2r_jitstressregs0x80 Queues OSX10.12 x64 Checked jitstressregs0x80 R2R Build & Test
@dotnet-bot test OSX10.12 Checked r2r_jitstressregs1 Queues OSX10.12 x64 Checked jitstressregs1 R2R Build & Test
@dotnet-bot test OSX10.12 Checked r2r_jitstressregs2 Queues OSX10.12 x64 Checked jitstressregs2 R2R Build & Test
@dotnet-bot test OSX10.12 Checked r2r_jitstressregs3 Queues OSX10.12 x64 Checked jitstressregs3 R2R Build & Test
@dotnet-bot test OSX10.12 Checked r2r_jitstressregs4 Queues OSX10.12 x64 Checked jitstressregs4 R2R Build & Test
@dotnet-bot test OSX10.12 Checked r2r_jitstressregs8 Queues OSX10.12 x64 Checked jitstressregs8 R2R Build & Test
@dotnet-bot test OSX10.12 tailcallstress Queues OSX10.12 x64 Checked Build and Test (Jit - TailcallStress=1)
@dotnet-bot test OSX10.12 zapdisable Queues OSX10.12 x64 Checked Build and Test (Jit - ZapDisable=1 ReadyToRun=0)
@dotnet-bot test Ubuntu x64 corefx_baseline Queues Ubuntu x64 Checked Build and Test (Jit - CoreFx)
@dotnet-bot test Ubuntu x64 corefx_jitstress1 Queues Ubuntu x64 Checked Build and Test (Jit - CoreFx JitStress=1)
@dotnet-bot test Ubuntu x64 corefx_jitstress2 Queues Ubuntu x64 Checked Build and Test (Jit - CoreFx JitStress=2)
@dotnet-bot test Ubuntu x64 corefx_jitstressregs0x1000 Queues Ubuntu x64 Checked Build and Test (Jit - CoreFx JitStressRegs=0x1000)
@dotnet-bot test Ubuntu x64 corefx_jitstressregs0x10 Queues Ubuntu x64 Checked Build and Test (Jit - CoreFx JitStressRegs=0x10)
@dotnet-bot test Ubuntu x64 corefx_jitstressregs0x80 Queues Ubuntu x64 Checked Build and Test (Jit - CoreFx JitStressRegs=0x80)
@dotnet-bot test Ubuntu x64 corefx_jitstressregs1 Queues Ubuntu x64 Checked Build and Test (Jit - CoreFx JitStressRegs=1)
@dotnet-bot test Ubuntu x64 corefx_jitstressregs2 Queues Ubuntu x64 Checked Build and Test (Jit - CoreFx JitStressRegs=2)
@dotnet-bot test Ubuntu x64 corefx_jitstressregs3 Queues Ubuntu x64 Checked Build and Test (Jit - CoreFx JitStressRegs=3)
@dotnet-bot test Ubuntu x64 corefx_jitstressregs4 Queues Ubuntu x64 Checked Build and Test (Jit - CoreFx JitStressRegs=4)
@dotnet-bot test Ubuntu x64 corefx_jitstressregs8 Queues Ubuntu x64 Checked Build and Test (Jit - CoreFx JitStressRegs=8)
@dotnet-bot test Ubuntu x64 corefx_minopts Queues Ubuntu x64 Checked Build and Test (Jit - CoreFx JITMinOpts=1)
@dotnet-bot test Ubuntu forcerelocs Queues Ubuntu x64 Checked Build and Test (Jit - ForceRelocs=1)
@dotnet-bot test Ubuntu gcstress0x3 Queues Ubuntu x64 Checked Build and Test (Jit - GCStress=0x3)
@dotnet-bot test Ubuntu gcstress0xc Queues Ubuntu x64 Checked Build and Test (Jit - GCStress=0xC)
@dotnet-bot test Ubuntu gcstress0xc_jitstress1 Queues Ubuntu x64 Checked Build and Test (Jit - GCStress=0xC JitStress=1)
@dotnet-bot test Ubuntu gcstress0xc_jitstress2 Queues Ubuntu x64 Checked Build and Test (Jit - GCStress=0xC JitStress=2)
@dotnet-bot test Ubuntu gcstress0xc_minopts_heapverify1 Queues Ubuntu x64 Checked Build and Test (Jit - GCStress=0xC JITMinOpts=1 HeapVerify=1)
@dotnet-bot test Ubuntu gcstress0xc_zapdisable Queues Ubuntu x64 Checked Build and Test (Jit - GCStress=0xC ZapDisable=1 ReadyToRun=0)
@dotnet-bot test Ubuntu gcstress0xc_zapdisable_heapverify1 Queues Ubuntu x64 Checked Build and Test (Jit - GCStress=0xC ZapDisable=1 ReadyToRun=0 HeapVerify=1)
@dotnet-bot test Ubuntu gcstress0xc_zapdisable_jitstress2 Queues Ubuntu x64 Checked Build and Test (Jit - GCStress=0xC ZapDisable=1 ReadyToRun=0 JitStress=2)
@dotnet-bot test Ubuntu heapverify1 Queues Ubuntu x64 Checked Build and Test (Jit - HeapVerify=1)
@dotnet-bot test Ubuntu jitsse2only Queues Ubuntu x64 Checked Build and Test (Jit - EnableAVX=0 EnableSSE3_4=0)
@dotnet-bot test Ubuntu jitstress1 Queues Ubuntu x64 Checked Build and Test (Jit - JitStress=1)
@dotnet-bot test Ubuntu jitstress2 Queues Ubuntu x64 Checked Build and Test (Jit - JitStress=2)
@dotnet-bot test Ubuntu jitstress2_jitstressregs0x1000 Queues Ubuntu x64 Checked Build and Test (Jit - JitStress=2 JitStressRegs=0x1000)
@dotnet-bot test Ubuntu jitstress2_jitstressregs0x10 Queues Ubuntu x64 Checked Build and Test (Jit - JitStress=2 JitStressRegs=0x10)
@dotnet-bot test Ubuntu jitstress2_jitstressregs0x80 Queues Ubuntu x64 Checked Build and Test (Jit - JitStress=2 JitStressRegs=0x80)
@dotnet-bot test Ubuntu jitstress2_jitstressregs1 Queues Ubuntu x64 Checked Build and Test (Jit - JitStress=2 JitStressRegs=1)
@dotnet-bot test Ubuntu jitstress2_jitstressregs2 Queues Ubuntu x64 Checked Build and Test (Jit - JitStress=2 JitStressRegs=2)
@dotnet-bot test Ubuntu jitstress2_jitstressregs3 Queues Ubuntu x64 Checked Build and Test (Jit - JitStress=2 JitStressRegs=3)
@dotnet-bot test Ubuntu jitstress2_jitstressregs4 Queues Ubuntu x64 Checked Build and Test (Jit - JitStress=2 JitStressRegs=4)
@dotnet-bot test Ubuntu jitstress2_jitstressregs8 Queues Ubuntu x64 Checked Build and Test (Jit - JitStress=2 JitStressRegs=8)
@dotnet-bot test Ubuntu jitstressregs0x1000 Queues Ubuntu x64 Checked Build and Test (Jit - JitStressRegs=0x1000)
@dotnet-bot test Ubuntu jitstressregs0x10 Queues Ubuntu x64 Checked Build and Test (Jit - JitStressRegs=0x10)
@dotnet-bot test Ubuntu jitstressregs0x80 Queues Ubuntu x64 Checked Build and Test (Jit - JitStressRegs=0x80)
@dotnet-bot test Ubuntu jitstressregs1 Queues Ubuntu x64 Checked Build and Test (Jit - JitStressRegs=1)
@dotnet-bot test Ubuntu jitstressregs2 Queues Ubuntu x64 Checked Build and Test (Jit - JitStressRegs=2)
@dotnet-bot test Ubuntu jitstressregs3 Queues Ubuntu x64 Checked Build and Test (Jit - JitStressRegs=3)
@dotnet-bot test Ubuntu jitstressregs4 Queues Ubuntu x64 Checked Build and Test (Jit - JitStressRegs=4)
@dotnet-bot test Ubuntu jitstressregs8 Queues Ubuntu x64 Checked Build and Test (Jit - JitStressRegs=8)
@dotnet-bot test Ubuntu minopts Queues Ubuntu x64 Checked Build and Test (Jit - JITMinOpts=1)
@dotnet-bot test Ubuntu Checked r2r_jitforcerelocs Queues Ubuntu x64 Checked jitforcerelocs R2R Build & Test
@dotnet-bot test Ubuntu Checked r2r_jitminopts Queues Ubuntu x64 Checked jitminopts R2R Build & Test
@dotnet-bot test Ubuntu Checked r2r_jitstress1 Queues Ubuntu x64 Checked jitstress1 R2R Build & Test
@dotnet-bot test Ubuntu Checked r2r_jitstress2 Queues Ubuntu x64 Checked jitstress2 R2R Build & Test
@dotnet-bot test Ubuntu Checked r2r_jitstressregs0x1000 Queues Ubuntu x64 Checked jitstressregs0x1000 R2R Build & Test
@dotnet-bot test Ubuntu Checked r2r_jitstressregs0x10 Queues Ubuntu x64 Checked jitstressregs0x10 R2R Build & Test
@dotnet-bot test Ubuntu Checked r2r_jitstressregs0x80 Queues Ubuntu x64 Checked jitstressregs0x80 R2R Build & Test
@dotnet-bot test Ubuntu Checked r2r_jitstressregs1 Queues Ubuntu x64 Checked jitstressregs1 R2R Build & Test
@dotnet-bot test Ubuntu Checked r2r_jitstressregs2 Queues Ubuntu x64 Checked jitstressregs2 R2R Build & Test
@dotnet-bot test Ubuntu Checked r2r_jitstressregs3 Queues Ubuntu x64 Checked jitstressregs3 R2R Build & Test
@dotnet-bot test Ubuntu Checked r2r_jitstressregs4 Queues Ubuntu x64 Checked jitstressregs4 R2R Build & Test
@dotnet-bot test Ubuntu Checked r2r_jitstressregs8 Queues Ubuntu x64 Checked jitstressregs8 R2R Build & Test
@dotnet-bot test Ubuntu tailcallstress Queues Ubuntu x64 Checked Build and Test (Jit - TailcallStress=1)
@dotnet-bot test Ubuntu zapdisable Queues Ubuntu x64 Checked Build and Test (Jit - ZapDisable=1 ReadyToRun=0)
@dotnet-bot test Windows_NT x64 corefx_baseline Queues Windows_NT x64 Checked Build and Test (Jit - CoreFx)
@dotnet-bot test Windows_NT x64 corefx_jitstress1 Queues Windows_NT x64 Checked Build and Test (Jit - CoreFx JitStress=1)
@dotnet-bot test Windows_NT x64 corefx_jitstress2 Queues Windows_NT x64 Checked Build and Test (Jit - CoreFx JitStress=2)
@dotnet-bot test Windows_NT x64 corefx_jitstressregs0x1000 Queues Windows_NT x64 Checked Build and Test (Jit - CoreFx JitStressRegs=0x1000)
@dotnet-bot test Windows_NT x64 corefx_jitstressregs0x10 Queues Windows_NT x64 Checked Build and Test (Jit - CoreFx JitStressRegs=0x10)
@dotnet-bot test Windows_NT x64 corefx_jitstressregs0x80 Queues Windows_NT x64 Checked Build and Test (Jit - CoreFx JitStressRegs=0x80)
@dotnet-bot test Windows_NT x64 corefx_jitstressregs1 Queues Windows_NT x64 Checked Build and Test (Jit - CoreFx JitStressRegs=1)
@dotnet-bot test Windows_NT x64 corefx_jitstressregs2 Queues Windows_NT x64 Checked Build and Test (Jit - CoreFx JitStressRegs=2)
@dotnet-bot test Windows_NT x64 corefx_jitstressregs3 Queues Windows_NT x64 Checked Build and Test (Jit - CoreFx JitStressRegs=3)
@dotnet-bot test Windows_NT x64 corefx_jitstressregs4 Queues Windows_NT x64 Checked Build and Test (Jit - CoreFx JitStressRegs=4)
@dotnet-bot test Windows_NT x64 corefx_jitstressregs8 Queues Windows_NT x64 Checked Build and Test (Jit - CoreFx JitStressRegs=8)
@dotnet-bot test Windows_NT x64 corefx_minopts Queues Windows_NT x64 Checked Build and Test (Jit - CoreFx JITMinOpts=1)
@dotnet-bot test Windows_NT forcerelocs Queues Windows_NT x64 Checked Build and Test (Jit - ForceRelocs=1)
@dotnet-bot test Windows_NT gcstress0x3 Queues Windows_NT x64 Checked Build and Test (Jit - GCStress=0x3)
@dotnet-bot test Windows_NT gcstress0xc_jitstress1 Queues Windows_NT x64 Checked Build and Test (Jit - GCStress=0xC JitStress=1)
@dotnet-bot test Windows_NT gcstress0xc_jitstress2 Queues Windows_NT x64 Checked Build and Test (Jit - GCStress=0xC JitStress=2)
@dotnet-bot test Windows_NT gcstress0xc_minopts_heapverify1 Queues Windows_NT x64 Checked Build and Test (Jit - GCStress=0xC JITMinOpts=1 HeapVerify=1)
@dotnet-bot test Windows_NT gcstress0xc Queues Windows_NT x64 Checked Build and Test (Jit - GCStress=0xC)
@dotnet-bot test Windows_NT gcstress0xc_zapdisable_heapverify1 Queues Windows_NT x64 Checked Build and Test (Jit - GCStress=0xC ZapDisable=1 ReadyToRun=0 HeapVerify=1)
@dotnet-bot test Windows_NT gcstress0xc_zapdisable_jitstress2 Queues Windows_NT x64 Checked Build and Test (Jit - GCStress=0xC ZapDisable=1 ReadyToRun=0 JitStress=2)
@dotnet-bot test Windows_NT gcstress0xc_zapdisable Queues Windows_NT x64 Checked Build and Test (Jit - GCStress=0xC ZapDisable=1 ReadyToRun=0)
@dotnet-bot test Windows_NT heapverify1 Queues Windows_NT x64 Checked Build and Test (Jit - HeapVerify=1)
@dotnet-bot test Windows_NT jitsse2only Queues Windows_NT x64 Checked Build and Test (Jit - EnableAVX=0 EnableSSE3_4=0)
@dotnet-bot test Windows_NT jitstress1 Queues Windows_NT x64 Checked Build and Test (Jit - JitStress=1)
@dotnet-bot test Windows_NT jitstress2_jitstressregs0x1000 Queues Windows_NT x64 Checked Build and Test (Jit - JitStress=2 JitStressRegs=0x1000)
@dotnet-bot test Windows_NT jitstress2_jitstressregs0x10 Queues Windows_NT x64 Checked Build and Test (Jit - JitStress=2 JitStressRegs=0x10)
@dotnet-bot test Windows_NT jitstress2_jitstressregs0x80 Queues Windows_NT x64 Checked Build and Test (Jit - JitStress=2 JitStressRegs=0x80)
@dotnet-bot test Windows_NT jitstress2_jitstressregs1 Queues Windows_NT x64 Checked Build and Test (Jit - JitStress=2 JitStressRegs=1)
@dotnet-bot test Windows_NT jitstress2_jitstressregs2 Queues Windows_NT x64 Checked Build and Test (Jit - JitStress=2 JitStressRegs=2)
@dotnet-bot test Windows_NT jitstress2_jitstressregs3 Queues Windows_NT x64 Checked Build and Test (Jit - JitStress=2 JitStressRegs=3)
@dotnet-bot test Windows_NT jitstress2_jitstressregs4 Queues Windows_NT x64 Checked Build and Test (Jit - JitStress=2 JitStressRegs=4)
@dotnet-bot test Windows_NT jitstress2_jitstressregs8 Queues Windows_NT x64 Checked Build and Test (Jit - JitStress=2 JitStressRegs=8)
@dotnet-bot test Windows_NT jitstress2 Queues Windows_NT x64 Checked Build and Test (Jit - JitStress=2)
@dotnet-bot test Windows_NT jitstressregs0x1000 Queues Windows_NT x64 Checked Build and Test (Jit - JitStressRegs=0x1000)
@dotnet-bot test Windows_NT jitstressregs0x10 Queues Windows_NT x64 Checked Build and Test (Jit - JitStressRegs=0x10)
@dotnet-bot test Windows_NT jitstressregs0x80 Queues Windows_NT x64 Checked Build and Test (Jit - JitStressRegs=0x80)
@dotnet-bot test Windows_NT jitstressregs1 Queues Windows_NT x64 Checked Build and Test (Jit - JitStressRegs=1)
@dotnet-bot test Windows_NT jitstressregs2 Queues Windows_NT x64 Checked Build and Test (Jit - JitStressRegs=2)
@dotnet-bot test Windows_NT jitstressregs3 Queues Windows_NT x64 Checked Build and Test (Jit - JitStressRegs=3)
@dotnet-bot test Windows_NT jitstressregs4 Queues Windows_NT x64 Checked Build and Test (Jit - JitStressRegs=4)
@dotnet-bot test Windows_NT jitstressregs8 Queues Windows_NT x64 Checked Build and Test (Jit - JitStressRegs=8)
@dotnet-bot test Windows_NT minopts Queues Windows_NT x64 Checked Build and Test (Jit - JITMinOpts=1)
@dotnet-bot test Windows_NT Checked r2r_jitforcerelocs Queues Windows_NT x64 Checked jitforcerelocs R2R Build & Test
@dotnet-bot test Windows_NT Checked r2r_jitminopts Queues Windows_NT x64 Checked jitminopts R2R Build & Test
@dotnet-bot test Windows_NT Checked r2r_jitstress1 Queues Windows_NT x64 Checked jitstress1 R2R Build & Test
@dotnet-bot test Windows_NT Checked r2r_jitstress2 Queues Windows_NT x64 Checked jitstress2 R2R Build & Test
@dotnet-bot test Windows_NT Checked r2r_jitstressregs0x1000 Queues Windows_NT x64 Checked jitstressregs0x1000 R2R Build & Test
@dotnet-bot test Windows_NT Checked r2r_jitstressregs0x10 Queues Windows_NT x64 Checked jitstressregs0x10 R2R Build & Test
@dotnet-bot test Windows_NT Checked r2r_jitstressregs0x80 Queues Windows_NT x64 Checked jitstressregs0x80 R2R Build & Test
@dotnet-bot test Windows_NT Checked r2r_jitstressregs1 Queues Windows_NT x64 Checked jitstressregs1 R2R Build & Test
@dotnet-bot test Windows_NT Checked r2r_jitstressregs2 Queues Windows_NT x64 Checked jitstressregs2 R2R Build & Test
@dotnet-bot test Windows_NT Checked r2r_jitstressregs3 Queues Windows_NT x64 Checked jitstressregs3 R2R Build & Test
@dotnet-bot test Windows_NT Checked r2r_jitstressregs4 Queues Windows_NT x64 Checked jitstressregs4 R2R Build & Test
@dotnet-bot test Windows_NT Checked r2r_jitstressregs8 Queues Windows_NT x64 Checked jitstressregs8 R2R Build & Test
@dotnet-bot test Windows_NT tailcallstress Queues Windows_NT x64 Checked Build and Test (Jit - TailcallStress=1)
@dotnet-bot test Windows_NT zapdisable Queues Windows_NT x64 Checked Build and Test (Jit - ZapDisable=1 ReadyToRun=0)
@dotnet-bot test Windows_NT x86 corefx_baseline Queues Windows_NT x86 Checked Build and Test (Jit - CoreFx)
@dotnet-bot test Windows_NT x86 corefx_jitstress1 Queues Windows_NT x86 Checked Build and Test (Jit - CoreFx JitStress=1)
@dotnet-bot test Windows_NT x86 corefx_jitstress2 Queues Windows_NT x86 Checked Build and Test (Jit - CoreFx JitStress=2)
@dotnet-bot test Windows_NT x86 corefx_jitstressregs0x1000 Queues Windows_NT x86 Checked Build and Test (Jit - CoreFx JitStressRegs=0x1000)
@dotnet-bot test Windows_NT x86 corefx_jitstressregs0x10 Queues Windows_NT x86 Checked Build and Test (Jit - CoreFx JitStressRegs=0x10)
@dotnet-bot test Windows_NT x86 corefx_jitstressregs0x80 Queues Windows_NT x86 Checked Build and Test (Jit - CoreFx JitStressRegs=0x80)
@dotnet-bot test Windows_NT x86 corefx_jitstressregs1 Queues Windows_NT x86 Checked Build and Test (Jit - CoreFx JitStressRegs=1)
@dotnet-bot test Windows_NT x86 corefx_jitstressregs2 Queues Windows_NT x86 Checked Build and Test (Jit - CoreFx JitStressRegs=2)
@dotnet-bot test Windows_NT x86 corefx_jitstressregs3 Queues Windows_NT x86 Checked Build and Test (Jit - CoreFx JitStressRegs=3)
@dotnet-bot test Windows_NT x86 corefx_jitstressregs4 Queues Windows_NT x86 Checked Build and Test (Jit - CoreFx JitStressRegs=4)
@dotnet-bot test Windows_NT x86 corefx_jitstressregs8 Queues Windows_NT x86 Checked Build and Test (Jit - CoreFx JitStressRegs=8)
@dotnet-bot test Windows_NT x86 corefx_minopts Queues Windows_NT x86 Checked Build and Test (Jit - CoreFx JITMinOpts=1)
@dotnet-bot test Windows_NT x86 Checked forcerelocs Queues Windows_NT x86 Checked Build and Test (Jit - ForceRelocs=1)
@dotnet-bot test Windows_NT x86 Checked gcstress0x3 Queues Windows_NT x86 Checked Build and Test (Jit - GCStress=0x3)
@dotnet-bot test Windows_NT x86 Checked gcstress0xc_jitstress1 Queues Windows_NT x86 Checked Build and Test (Jit - GCStress=0xC JitStress=1)
@dotnet-bot test Windows_NT x86 Checked gcstress0xc_jitstress2 Queues Windows_NT x86 Checked Build and Test (Jit - GCStress=0xC JitStress=2)
@dotnet-bot test Windows_NT x86 Checked gcstress0xc_minopts_heapverify1 Queues Windows_NT x86 Checked Build and Test (Jit - GCStress=0xC JITMinOpts=1 HeapVerify=1)
@dotnet-bot test Windows_NT x86 Checked gcstress0xc Queues Windows_NT x86 Checked Build and Test (Jit - GCStress=0xC)
@dotnet-bot test Windows_NT x86 Checked gcstress0xc_zapdisable_heapverify1 Queues Windows_NT x86 Checked Build and Test (Jit - GCStress=0xC ZapDisable=1 ReadyToRun=0 HeapVerify=1)
@dotnet-bot test Windows_NT x86 Checked gcstress0xc_zapdisable_jitstress2 Queues Windows_NT x86 Checked Build and Test (Jit - GCStress=0xC ZapDisable=1 ReadyToRun=0 JitStress=2)
@dotnet-bot test Windows_NT x86 Checked gcstress0xc_zapdisable Queues Windows_NT x86 Checked Build and Test (Jit - GCStress=0xC ZapDisable=1 ReadyToRun=0)
@dotnet-bot test Windows_NT x86 Checked heapverify1 Queues Windows_NT x86 Checked Build and Test (Jit - HeapVerify=1)
@dotnet-bot test Windows_NT x86 Checked jitsse2only Queues Windows_NT x86 Checked Build and Test (Jit - EnableAVX=0 EnableSSE3_4=0)
@dotnet-bot test Windows_NT x86 Checked jitstress1 Queues Windows_NT x86 Checked Build and Test (Jit - JitStress=1)
@dotnet-bot test Windows_NT x86 Checked jitstress2_jitstressregs0x1000 Queues Windows_NT x86 Checked Build and Test (Jit - JitStress=2 JitStressRegs=0x1000)
@dotnet-bot test Windows_NT x86 Checked jitstress2_jitstressregs0x10 Queues Windows_NT x86 Checked Build and Test (Jit - JitStress=2 JitStressRegs=0x10)
@dotnet-bot test Windows_NT x86 Checked jitstress2_jitstressregs0x80 Queues Windows_NT x86 Checked Build and Test (Jit - JitStress=2 JitStressRegs=0x80)
@dotnet-bot test Windows_NT x86 Checked jitstress2_jitstressregs1 Queues Windows_NT x86 Checked Build and Test (Jit - JitStress=2 JitStressRegs=1)
@dotnet-bot test Windows_NT x86 Checked jitstress2_jitstressregs2 Queues Windows_NT x86 Checked Build and Test (Jit - JitStress=2 JitStressRegs=2)
@dotnet-bot test Windows_NT x86 Checked jitstress2_jitstressregs3 Queues Windows_NT x86 Checked Build and Test (Jit - JitStress=2 JitStressRegs=3)
@dotnet-bot test Windows_NT x86 Checked jitstress2_jitstressregs4 Queues Windows_NT x86 Checked Build and Test (Jit - JitStress=2 JitStressRegs=4)
@dotnet-bot test Windows_NT x86 Checked jitstress2_jitstressregs8 Queues Windows_NT x86 Checked Build and Test (Jit - JitStress=2 JitStressRegs=8)
@dotnet-bot test Windows_NT x86 Checked jitstress2 Queues Windows_NT x86 Checked Build and Test (Jit - JitStress=2)
@dotnet-bot test Windows_NT x86 Checked jitstressregs0x1000 Queues Windows_NT x86 Checked Build and Test (Jit - JitStressRegs=0x1000)
@dotnet-bot test Windows_NT x86 Checked jitstressregs0x10 Queues Windows_NT x86 Checked Build and Test (Jit - JitStressRegs=0x10)
@dotnet-bot test Windows_NT x86 Checked jitstressregs0x80 Queues Windows_NT x86 Checked Build and Test (Jit - JitStressRegs=0x80)
@dotnet-bot test Windows_NT x86 Checked jitstressregs1 Queues Windows_NT x86 Checked Build and Test (Jit - JitStressRegs=1)
@dotnet-bot test Windows_NT x86 Checked jitstressregs2 Queues Windows_NT x86 Checked Build and Test (Jit - JitStressRegs=2)
@dotnet-bot test Windows_NT x86 Checked jitstressregs3 Queues Windows_NT x86 Checked Build and Test (Jit - JitStressRegs=3)
@dotnet-bot test Windows_NT x86 Checked jitstressregs4 Queues Windows_NT x86 Checked Build and Test (Jit - JitStressRegs=4)
@dotnet-bot test Windows_NT x86 Checked jitstressregs8 Queues Windows_NT x86 Checked Build and Test (Jit - JitStressRegs=8)
@dotnet-bot test Windows_NT x86 Checked minopts Queues Windows_NT x86 Checked Build and Test (Jit - JITMinOpts=1)
@dotnet-bot test Windows_NT x86 Checked tailcallstress Queues Windows_NT x86 Checked Build and Test (Jit - TailcallStress=1)
@dotnet-bot test Windows_NT x86 Checked zapdisable Queues Windows_NT x86 Checked Build and Test (Jit - ZapDisable=1 ReadyToRun=0)
@dotnet-bot test Debian8.4 Queues Debian8.4 x64 Release Build
@dotnet-bot test Fedora24 Queues Fedora24 x64 Release Build
@dotnet-bot test OpenSUSE42.1 Queues OpenSUSE42.1 x64 Release Build
@dotnet-bot test RHEL7.2 Queues RHEL7.2 x64 Release Build
@dotnet-bot test Ubuntu16.04 x64 Queues Ubuntu16.04 x64 Release Build
@dotnet-bot test Ubuntu16.10 Queues Ubuntu16.10 x64 Release Build
@dotnet-bot test CentOS7.1 Checked gcstress15_pri1r2r Queues CentOS7.1 x64 Checked GCStress 15 R2R pri1 Build & Test
@dotnet-bot test CentOS7.1 Checked pri1r2r Queues CentOS7.1 x64 Checked R2R pri1 Build & Test
@dotnet-bot test CentOS7.1 Checked r2r Queues CentOS7.1 x64 Checked R2R pri0 Build & Test
@dotnet-bot test OSX10.12 Checked gcstress15_pri1r2r Queues OSX10.12 x64 Checked GCStress 15 R2R pri1 Build & Test
@dotnet-bot test OSX10.12 jitdiff Queues OSX10.12 x64 Checked Jit Diff Build and Test
@dotnet-bot test OSX10.12 Checked pri1r2r Queues OSX10.12 x64 Checked R2R pri1 Build & Test
@dotnet-bot test OSX10.12 Checked r2r Queues OSX10.12 x64 Checked R2R pri0 Build & Test
@dotnet-bot test Ubuntu Checked gcstress15_pri1r2r Queues Ubuntu x64 Checked GCStress 15 R2R pri1 Build & Test
@dotnet-bot test Ubuntu jitdiff Queues Ubuntu x64 Checked Jit Diff Build and Test
@dotnet-bot test Ubuntu Checked pri1r2r Queues Ubuntu x64 Checked R2R pri1 Build & Test
@dotnet-bot test Ubuntu Checked r2r Queues Ubuntu x64 Checked R2R pri0 Build & Test
@dotnet-bot test Windows_NT Checked gcstress15_pri1r2r Queues Windows_NT x64 Checked GCStress 15 R2R pri1 Build & Test
@dotnet-bot test Windows_NT jitdiff Queues Windows_NT x64 Checked Jit Diff Build and Test
@dotnet-bot test Windows_NT Checked pri1r2r Queues Windows_NT x64 Checked R2R pri1 Build & Test
@dotnet-bot test Windows_NT Checked r2r Queues Windows_NT x64 Checked R2R pri0 Build & Test
@dotnet-bot test Windows_NT Checked standalone_gc Queues Windows_NT x64 Checked Standalone GC
@dotnet-bot test CentOS7.1 Release gcstress15_pri1r2r Queues CentOS7.1 x64 Release GCStress 15 R2R pri1 Build & Test
@dotnet-bot test CentOS7.1 Release pri1r2r Queues CentOS7.1 x64 Release R2R pri1 Build & Test
@dotnet-bot test CentOS7.1 Release r2r Queues CentOS7.1 x64 Release R2R pri0 Build & Test
@dotnet-bot test Debian8.4 pri1 Queues Debian8.4 x64 Release Pri 1 Build & Test
@dotnet-bot test OSX10.12 Release gcsimulator Queues OSX10.12 x64 Release GC Simulator
@dotnet-bot test OSX10.12 Release gcstress15_pri1r2r Queues OSX10.12 x64 Release GCStress 15 R2R pri1 Build & Test
@dotnet-bot test OSX10.12 ilrt Queues OSX10.12 x64 Release IL RoundTrip Build and Test
@dotnet-bot test OSX10.12 Release longgc Queues OSX10.12 x64 Release Long-Running GC Build & Test
@dotnet-bot test OSX10.12 pri1 Queues OSX10.12 x64 Release Priority 1 Build and Test
@dotnet-bot test OSX10.12 Release pri1r2r Queues OSX10.12 x64 Release R2R pri1 Build & Test
@dotnet-bot test OSX10.12 Release r2r Queues OSX10.12 x64 Release R2R pri0 Build & Test
@dotnet-bot test RHEL7.2 pri1 Queues RHEL7.2 x64 Release Pri 1 Build & Test
@dotnet-bot test Ubuntu Release gcsimulator Queues Ubuntu x64 Release GC Simulator
@dotnet-bot test Ubuntu Release gcstress15_pri1r2r Queues Ubuntu x64 Release GCStress 15 R2R pri1 Build & Test
@dotnet-bot test Ubuntu ilrt Queues Ubuntu x64 Release IL RoundTrip Build and Test
@dotnet-bot test Ubuntu Release longgc Queues Ubuntu x64 Release Long-Running GC Build & Test
@dotnet-bot test Ubuntu pri1 Queues Ubuntu x64 Release Priority 1 Build and Test
@dotnet-bot test Ubuntu Release pri1r2r Queues Ubuntu x64 Release R2R pri1 Build & Test
@dotnet-bot test Ubuntu Release r2r Queues Ubuntu x64 Release R2R pri0 Build & Test
@dotnet-bot test Windows_NT Release gcsimulator Queues Windows_NT x64 Release GC Simulator
@dotnet-bot test Windows_NT Release gcstress15_pri1r2r Queues Windows_NT x64 Release GCStress 15 R2R pri1 Build & Test
@dotnet-bot test Windows_NT ilrt Queues Windows_NT x64 Release IL RoundTrip Build and Test
@dotnet-bot test Windows_NT Release longgc Queues Windows_NT x64 Release Long-Running GC Build & Test
@dotnet-bot test Windows_NT Release pri1r2r Queues Windows_NT x64 Release R2R pri1 Build & Test
@dotnet-bot test Windows_NT Release r2r Queues Windows_NT x64 Release R2R pri0 Build & Test
@dotnet-bot test Windows_NT Release standalone_gc Queues Windows_NT x64 Release Standalone GC
@dotnet-bot test Ubuntu x86 Checked Queues Ubuntu x86 Checked Build
@dotnet-bot test Ubuntu x86 Debug Queues Ubuntu x86 Debug Build
@dotnet-bot test Ubuntu x86 Release Queues Ubuntu x86 Release Build
@dotnet-bot test Windows_NT x86 Release Queues Windows_NT x86 Release Build and Test

Have a nice day!

@sdmaclea
Copy link
Author

Failing Ubuntu test are PAL tests. I will try to reproduce on Ubuntu x64 16.04.

@@ -609,7 +610,7 @@ PAL_ProbeMemory(
}

// Round to the beginning of the next page
pBuffer = (PVOID)(((SIZE_T)pBuffer & ~VIRTUAL_PAGE_MASK) + VIRTUAL_PAGE_SIZE);
pBuffer = ALIGN_UP(pBuffer, GetVirtualPageSize());
Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is the bug.

@sdmaclea
Copy link
Author

@janvorli paltest_pal_sxs_test1 is failing on CentOS7.1 x64 Debug and FreeBSD x64. The problem does not reproduce on Ubuntu 16.04 Debug or Checked. Can you take a look?

@jashook
Copy link

jashook commented May 28, 2017

@sdmaclea the windows jobs are publicly defined but can only be launched by whitelisted users.

@sdmaclea
Copy link
Author

@swgillespie @Maoni0

I made another full arm64 Ubuntu run. This time it looks like it completed successfully. After 15h there was an entry in the log

May 28 18:25:29 Reached time limit, exiting: ran 1238 tests out of 2147483647
May 28 18:25:29 Waiting for tests to finish running:   16

It took many more hours for the running tests to finish. And the logs ended with

12Pass 1
...
1220000 DLinkNodes finalized
Test Passed
Test Passed
10Pass 2
10Pass 3
10

Regarding

The Ubuntu Arm64 Reliability framework ran for at least 10 hours (I observed it running), but seg faulted before finishing

The last several pages of the first runs logs did not start any new tests. Therefore I will assert that the failure occurred > 15h into the run while it was in a shutdown phase.

@swgillespie
Copy link

@sdmaclea

The "Ubuntu x64 Release GC Reliability Framework" has never successfully run before...

Yeah, that's no good - I noticed this too the last time I tried to run this job. I'll see if I can get that fixed soon.

@sdmaclea
Copy link
Author

sdmaclea commented Jun 5, 2017

@dotnet-bot
test Windows_NT x86 Checked Build and Test
test Windows_NT x64 Release Priority 1 Build and Test
test Windows_NT x64 Debug Build and Test
test Windows_NT arm Cross Debug Build
test Ubuntu x64 Checked Build and Test
test OSX10.12 x64 Checked Build and Test
test Windows_NT Release gc_reliability_framework

@sdmaclea
Copy link
Author

sdmaclea commented Jun 5, 2017

Please remove the "No-Merge" label. I believe this can and should be merged.

Retriggered jobs which never completed due to a Jenkins restart while they were triggered.

@jashook jashook removed the * NO MERGE * The PR is not ready for merge yet (see discussion for detailed reasons) label Jun 5, 2017
@sdmaclea sdmaclea force-pushed the PR-ARM64-64KPAGES-1of2 branch from 9f29d53 to 0fee73a Compare June 9, 2017 18:16
@sdmaclea
Copy link
Author

sdmaclea commented Jun 9, 2017

I just rebased to tip, squashed and forced update. No code changes. I just wanted it to be easier for final review.

@sdmaclea
Copy link
Author

sdmaclea commented Jun 9, 2017

There are seg faults on the tip. The order of operations during startup has changed since this code was written.

The GCHandleManager::Initialize() is now being run before GCToOSInterface::Initialize () is called from SVR::GCHeap::Initialize()

@jkotas How do you want me to handle it?

  • Move call from SVR::GCHeap::Initialize() to GCHandleManager::Initialize()+
  • Or call GCToOSInterface::Initialize () from both places (with a guard if needed)?

@jkotas
Copy link
Member

jkotas commented Jun 9, 2017

I think that the call to GCToOSInterface::Initialize should move to InitializeGarbageCollector.

@swgillespie
Copy link

I think that the call to GCToOSInterface::Initialize should move to InitializeGarbageCollector.

+1 to that, in particular I think it makes sense for it to go after GCConfig::Initialize here.

@sdmaclea
Copy link
Author

sdmaclea commented Jun 9, 2017

OK. I moved it as suggested. It fixed it on arm64. Presumably it will fix it for x64 & arm/armel as well.

@sdmaclea
Copy link
Author

Now that all tests are passing again. Can this be merged?

@sdmaclea
Copy link
Author

Ping

@Maoni0
Copy link
Member

Maoni0 commented Jun 12, 2017

sorry, I can't tell if you were able to run gc_reliability_framework on arm64. Could you please clarify?

@sdmaclea
Copy link
Author

sdmaclea commented Jun 12, 2017

@Maoni0 I was able to successfully run it once on [Arm64/Unix]. It took 28 hrs to run. (I manually ran it on a 64K page system).

@Maoni0
Copy link
Member

Maoni0 commented Jun 12, 2017

ok great. I'll merge it. thanks for all the work!

@Maoni0 Maoni0 merged commit 0ee3b5e into dotnet:master Jun 12, 2017
@sdmaclea sdmaclea deleted the PR-ARM64-64KPAGES-1of2 branch June 12, 2017 21:23
@sdmaclea
Copy link
Author

Thanks. It is a relief to have this merged.

@karelz karelz modified the milestone: 2.1.0 Aug 28, 2017
sdmaclea added a commit to sdmaclea/coreclr that referenced this pull request Sep 29, 2017
* [Arm64/Unix] Support 64K pages

* GC move GCToOSInterface::Initialize() into InitializeGarbageCollector()
@xiangzhai
Copy link

:mips-interest

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.