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); } }
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); }
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); }
/* *@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; }