Example #1
0
File: fsname.cpp Project: alimy/tfs
 string FSName::to_string()
 {
   char buffer[256];
   snprintf(buffer, 256, "block_id: %"PRI64_PREFIX"u, file_id: %"PRI64_PREFIX"u, seq_id: %u, suffix: %u, name: %s",
            get_block_id(), get_file_id(), get_seq_id(), get_suffix(), get_name());
   return string(buffer);
 }
    TEST_FIXTURE(block_blob_test_base, storage_extended_error_verify_xml_with_details)
    {
        const size_t buffer_size = 8 * 1024;
        std::vector<uint8_t> buffer;
        buffer.resize(buffer_size);
        auto md5 = fill_buffer_and_get_md5(buffer);

        auto stream = concurrency::streams::bytestream::open_istream(buffer);
        m_blob.upload_block(get_block_id(0), stream, md5);

        try
        {
            stream.seek(1024, std::ios_base::beg);
            m_blob.upload_block(get_block_id(1), stream, md5);
            CHECK(false);
        }
        catch (azure::storage::storage_exception& ex)
        {
            CHECK_UTF8_EQUAL(U("Md5Mismatch"), ex.result().extended_error().code());
            CHECK(!ex.result().extended_error().message().empty());
            CHECK(ex.result().extended_error().details().size() > 0);
        }
    }
Example #3
0
Address PAEPaging::access(MemReq &req)
{
	Address addr = req.lineAddr;
	bool pbuffer = false;
	unsigned pdp_id = get_page_directory_pointer_off(addr , mode);
	unsigned pd_id = get_page_directory_off(addr,mode);
	//first memory access,get page directory address
	void* ptr = get_next_level_address<void>(page_directory_pointer,pdp_id);
	req.cycle +=10;
	if( !ptr )
		return PAGE_FAULT_SIG;
	if( mode==PAE_Huge )
	{
		pbuffer = point_to_buffer_table((PageTable*)ptr,pd_id);
	}
	//second memory access,get page table address  
	ptr = get_next_level_address<void>((PageTable*)ptr,pd_id);
	req.cycle +=10;
	if(!ptr)
		return PAGE_FAULT_SIG;

	if( mode == PAE_Normal )
	{
		unsigned pg_id = get_pagetable_off(addr,mode);
		pbuffer = point_to_buffer_table( (PageTable*)ptr,pg_id);
		//page or buffer table
		ptr = get_next_level_address<void>((PageTable*)ptr,pg_id);
		req.cycle +=10;
	}
	req.cycle += 10;
	bool set_dirty = false;
	if(req.type==SETDIRTY)
		set_dirty = true;
	uint32_t access_counter = 0;
	bool write_back = false;
	if( req.type == WRITEBACK)
	{
		write_back = true;
		access_counter = req.childId;
	}
	return get_block_id(req, addr,ptr , buffer_table_shift , mode,pbuffer , 
						set_dirty, write_back, access_counter);
}
Example #4
0
Address LongModePaging::access(MemReq &req)
{
	Address addr = req.lineAddr;
	unsigned pml4_id,pdp_id,pd_id,pt_id;
	bool pbuffer = false;
	get_domains(addr,pml4_id,pdp_id,pd_id,pt_id,mode);
	//point to page table pointer table 
	PageTable* pdp_ptr = get_next_level_address<PageTable>( pml4,pml4_id );
	req.cycle +=10;
	if( !pdp_ptr)
	{
		return PAGE_FAULT_SIG;
	}
	if( mode == LongMode_Huge)
	{
		pbuffer = point_to_buffer_table( (PageTable*)pdp_ptr,pdp_id);
	}
	//point to page or page directory
	void* ptr = get_next_level_address<void>(pdp_ptr,pdp_id );
	req.cycle +=10;
	if( !ptr )
	{
		return PAGE_FAULT_SIG;
	}
	if( mode == LongMode_Middle)
	{
		assert( pd_id != (unsigned)(-1) );
		pbuffer = point_to_buffer_table((PageTable*)ptr,pd_id);
		debug_printf("point to dram buffer: %d",pbuffer);
		//point to page
		ptr = get_next_level_address<void>( (PageTable*)ptr,pd_id);
		req.cycle += 10;
		if( !ptr )
		{
			return PAGE_FAULT_SIG;
		}
	}
	else if( mode == LongMode_Normal)
	{
		assert( pd_id != (unsigned)(-1));
		assert( pt_id != (unsigned)(-1));
		//point to page table
		ptr = get_next_level_address<void>((PageTable*)ptr,pd_id);
		req.cycle += 10;
		if( ptr )
			pbuffer = point_to_buffer_table((PageTable*)ptr,pt_id);
		if( !ptr )
		{
			return PAGE_FAULT_SIG;
		}
		//point to page or buffer table 
		ptr = get_next_level_address<void>((PageTable*)ptr,pt_id);
		req.cycle +=10;
		if( !ptr )
		{
			return PAGE_FAULT_SIG;
		}
	}
	bool set_dirty = false;
	if( req.type == SETDIRTY)
		set_dirty = true;
	bool write_back = false;
	uint32_t access_counter = 0;
	if( req.type==WRITEBACK)
	{
		access_counter = req.childId;
		write_back = true;
	}
	return get_block_id(req , addr , ptr, buffer_table_shift,mode,
						pbuffer ,set_dirty, write_back ,access_counter);
}
Example #5
0
/*
 *@function: access page table
 *@req: memory request issued from TLB 
 */
Address NormalPaging::access(MemReq &req )
{
	Address addr = req.lineAddr;
	bool pbuffer = false;
	unsigned pg_dir_off = get_page_directory_off(addr,mode);
	//first access memory get page directory address
	void* ptr = (void*)page_directory;
	//if( page_directory )
	//{
	  //point to page table
	  //ptr = page_directory->get_next_level_address(pg_dir_off);
	//}
	//if( !ptr )
	//{
	//	return PAGE_FAULT_SIG;
	//}
	//else
	//{
		if( mode== Legacy_Normal )
		{
			ptr = page_directory->get_next_level_address(pg_dir_off);
			if( !ptr )
			{
				return PAGE_FAULT_SIG;
			}
			unsigned pg_off = get_pagetable_off(addr,mode);
			//second access memory get page directory address
			pbuffer = point_to_buffer_table( (PageTable*)ptr,pg_off);
			//point to buffer table or page 
			ptr = get_next_level_address<PageTable>((PageTable*)ptr,pg_off);
			req.cycle +=10;
			if( !ptr )
			{
				return PAGE_FAULT_SIG;
			}
		}
		else if( mode==Legacy_Huge)
		{
			pbuffer = point_to_buffer_table((PageTable*)ptr,pg_dir_off);
			ptr = get_next_level_address<PageTable>((PageTable*)ptr,pg_dir_off);
			req.cycle += 10;
			if( !ptr )
			{
				return PAGE_FAULT_SIG;
			}
		}
	//}
	//assume page table walker time is 20cycles
	req.cycle += 10;
	bool set_dirty = false;
	bool write_back = false;  
	if(req.type == SETDIRTY)
		set_dirty = true;
	if( req.type == WRITEBACK)
		write_back = true;
	uint32_t access_counter = 0;
	if( write_back )
	{
		access_counter = req.childId;
	}
	Address result = get_block_id( req ,addr, ptr,buffer_table_shift,
								mode, pbuffer , set_dirty, 
								write_back,access_counter );
	return result;
}