Application programming interface
In our implementation, a pool is an independent region of heap-allocated memory. Our memory allocator ensures that pages belong to exactly one pool (or none) at a time, so that we can use the virtual memory system to classify data into pools, as in Jigsaw. The programmer creates a new memory pool by calling: pool_t pool_create();
117
which returns an id for the newly created pool. To allocate size bytes of memory from the pool, the programmer calls: void* pool_malloc(size_t size, pool_t pool_id); Similarly, other variants like pool_calloc, pool_realloc, etc. augment the standard arguments with pool_id. This API lets the programmer tune the application’s cache performance by providing high-level hints at memory alloca- tion time. At first, it might seem to be a tedious task for the programmer to reason about the access patterns and cache locality of different data. However, we find it often suffices to identify a few prominent data regions and allocate them to different pools. Thus, only a few lines of code need to be modified to port applications manually to Whirlpool. Table 2 shows the applications we have manually ported, their key data structures, and the lines of code changed. Over- all, Whirlpool improves performance on these applications by 7.3% over Jigsaw and reduces data movement energy by 12%. Detailed results are presented in Sec. 4.
Application Pools Data structures LOC
Breadth-first search 4 Vertices, edges, frontier, visited 16 Delaunay triangulation 3 Points, vertices, triangles 11 Maximal matching 3 Vertices, edges, result 13 Delaunay refinement 3 Vertices, triangles, misc 8 Maximal independent set 3 Vertices, edges, flags 13 Spanning forest 3 Union-find parents, output tree, input edges 13 Minimal spanning forest 3 Union-find parents, output tree, input edges 11 Convex hull 2 Points, hull array 10 401.bzip2 4 arr1, arr2, ftab, tt 43 470.lbm 2 Source and destination grids 21 429.mcf 2 Nodes and arcs 14 436.cactusADM 2 Pugh variables, staggered- leapfrog grid data 53
Table 2: Pools found manually in various applications, plus lines of code (LOC) modified while porting to Whirlpool.
3.2 Modifications to baseline system
System calls to manage VCs: We expose VCs to user-level programs with a few additional system calls: sys_vc_alloc allocates a user-level VC, returning its unique id; sys_vc_free deallocates an existing VC; and sys_vc_tag tags a range of pages with a user-level VC. We also modify sys_mmap to op- tionally tag new pages with a specific VC. These system calls perform the adequate checks to ensure safety (e.g., allowing each process to map pages only to its own user-level VCs). Our allocator uses this low-level interface to map each pool to a different VC and tag pages from each pool with the right VC id. Our implementation is built on top of Doug Lea’s malloc [40], but other allocators could be used instead.
Support for more VCs per core: The baseline Jigsaw sys- tem supports 3 VTB entries per core for thread-private, pro- cess, and global VCs. To support user-level VCs, we add extra VTB entries and utility monitors (specifically, GMONs [11]). As we will see, supporting up to 4 pools is enough for most
Application Programming Interface
ในการดำเนินการของเราสระว่ายน้ำเป็นภูมิภาคที่เป็นอิสระของหน่วยความจำกองจัดสรร จัดสรรหน่วยความจำของเราเพื่อให้แน่ใจว่าหน้าเว็บที่อยู่ในสระว่ายน้ำตรงหนึ่ง (หรือไม่มี) ในเวลาเพื่อให้เราสามารถใช้ระบบหน่วยความจำเสมือนการจำแนกข้อมูลลงในสระว่ายน้ำในขณะที่จิ๊กซอว์ โปรแกรมเมอร์สร้างสระว่ายน้ำหน่วยความจำใหม่โดยการโทร: pool_create pool_t ();
117
ซึ่งส่งกลับ id สำหรับสระว่ายน้ำที่สร้างขึ้นใหม่ การจัดสรรไบต์ขนาดของหน่วยความจำจากสระว่ายน้ำ, โปรแกรมเมอร์โทร: void * pool_malloc (ขนาด size_t, pool_id pool_t); ในทำนองเดียวกันสายพันธุ์อื่น ๆ เช่น pool_calloc, pool_realloc ฯลฯ เพิ่มการขัดแย้งกับมาตรฐาน pool_id API นี้จะช่วยให้การปรับแต่งประสิทธิภาพการทำงานของโปรแกรมเมอร์แคชของโปรแกรมประยุกต์โดยการให้คำแนะนำในระดับสูงในช่วงเวลาการจัดสรรหน่วยความจำ ตอนแรกมันอาจดูเหมือนจะเป็นงานที่น่าเบื่อสำหรับโปรแกรมเมอร์ที่จะให้เหตุผลเกี่ยวกับรูปแบบการเข้าถึงและแคชท้องที่ของข้อมูลที่แตกต่างกัน อย่างไรก็ตามเรา fi ครั้งก็มักจะ Suf CES Fi เพื่อแจ้งไม่กี่ภูมิภาคข้อมูลที่โดดเด่นและปันส่วนไปยังสระว่ายน้ำที่แตกต่างกัน ดังนั้นเพียงไม่กี่บรรทัดของรหัสที่จะต้องเอ็ด Fi Modi เพื่อการใช้งานพอร์ตด้วยตนเองเพื่อวังวน ตารางที่ 2 แสดงการใช้งานที่เราได้แจ้งความด้วยตนเองโครงสร้างข้อมูลที่สำคัญของพวกเขาและบรรทัดของรหัสที่มีการเปลี่ยนแปลง เกินทั้งหมด, วังวนช่วยเพิ่มประสิทธิภาพในการใช้งานเหล่านี้ได้โดย 7.3% ในช่วงจิ๊กซอว์และลดพลังงานการเคลื่อนไหวของข้อมูลโดย 12% ผลรายละเอียดจะนำเสนอในวินาที 4.
สระว่ายน้ำการประยุกต์ใช้โครงสร้างข้อมูล LOC
Breadth- Fi ค้นหา RST 4 จุด, ขอบชายแดนเยี่ยม 16 Delaunay สามเหลี่ยม 3 คะแนนจุดสามเหลี่ยม 11 Maximal จับคู่ 3 จุด, ขอบผล 13 เนย์อีกครั้ง Fi nement 3 จุด, สามเหลี่ยมอื่น ๆ 8 ชุดอิสระสูงสุด 3 จุด, ขอบ, FL AGS 13 spanning ป่า 3 Union- Fi ND พ่อแม่เอาท์พุทต้นไม้ใส่ขอบ 13 Minimal ทอดป่า 3 Union- Fi ND พ่อแม่เอาท์พุทต้นไม้ใส่ขอบนูน 11 ฮัลล์ 2 คะแนน, ฮัลล์อาร์เรย์ 10 401.bzip2 4 arr1, arr2, ftab ทีที 43 470.lbm 2 ต้นทางและปลายทางกริด 21 429.mcf 2 โหนดและโค้ง 14 436.cactusADM 2 ตัวแปรพัคห์ staggered- ข้อมูลเกมเสือข้ามห้วยตาราง 53
ตารางที่ 2: สระว่ายน้ำพบด้วยตนเองในการใช้งานต่าง ๆ รวมทั้งสายรหัส . (LOC) Modi Fi เอ็ดในขณะที่การย้ายไปวังวน
3.2 Modi ไพเพอร์ Fi ไปยังระบบพื้นฐาน
สายระบบการจัดการ VCs: เราเปิดเผย VCs กับโปรแกรมระดับผู้ใช้กับระบบไม่กี่เพิ่มเติมโทร: sys_vc_alloc จัดสรรระดับผู้ใช้ VC กลับ ID ที่ไม่ซ้ำกัน; sys_vc_free deallocates ต่อ VC ที่มีอยู่ และแท็ก sys_vc_tag ช่วงของหน้าเว็บที่มีผู้ใช้ VC ระดับ นอกจากนี้เรายังปรับเปลี่ยนการ sys_mmap op- แท็กทีไม่เท่าเทียมหน้าใหม่ที่มี speci Fi C VC เหล่านี้ดำเนินการสายระบบการตรวจสอบที่เพียงพอเพื่อความปลอดภัย (เช่นให้แต่ละกระบวนการ map หน้าเท่านั้นที่จะ VCs ระดับผู้ใช้ของตัวเอง) จัดสรรของเราใช้อินเตอร์เฟซที่ระดับต่ำนี้เพื่อ map สระว่ายน้ำที่แตกต่างกัน VC และแท็กแต่ละหน้าจากแต่ละสระว่ายน้ำกับ VC ID ขวา การดำเนินงานของเราถูกสร้างขึ้นที่ด้านบนของดั๊กทุ่งหญ้า malloc [40] แต่ allocators อื่น ๆ ที่สามารถนำมาใช้แทน.
สนับสนุนสำหรับ VCs มากขึ้นต่อหลัก: จิ๊กซอว์พื้นฐานงานระบบ TEM สนับสนุน 3 รายการ VTB ต่อหลักด้ายส่วนตัว Cess โปรดังกล่าว และ VCs ทั่วโลก เพื่อสนับสนุน VCs ระดับผู้ใช้เราเพิ่มรายการ VTB พิเศษและจอภาพยูทิลิตี้ (ถอนรากถอนโคนระบุไว้, GMONs [11]) ในฐานะที่เราจะได้เห็นการสนับสนุนถึง 4 สระว่ายน้ำก็เพียงพอสำหรับมากที่สุด
การแปล กรุณารอสักครู่..

โปรแกรมในการดำเนินงานของเรา สระว่ายน้ำเป็นเขตอิสระ กองจัดสรรหน่วยความจำ การจัดสรรหน่วยความจำของเราเพื่อให้แน่ใจว่าหน้าอยู่ตรงสระว่ายน้ำ ( หรือไม่มี ) หนึ่งครั้ง ดังนั้น เราสามารถใช้ระบบหน่วยความจำเสมือนเพื่อจำแนกประเภทของข้อมูลลงในสระว่ายน้ำ เป็น จิ๊กซอว์ โปรแกรมเมอร์สร้างสระหน่วยความจำใหม่โทร : pool_t pool_create() ;117ซึ่งส่งกลับ ID เพื่อสร้างใหม่ สระ จัดสรรขนาดไบต์ของหน่วยความจำจากสระน้ำ โปรแกรมเมอร์โทร : โมฆะ * pool_malloc ( size_t ขนาด pool_t pool_id ) ; และตัวแปรอื่น ๆเช่น pool_calloc pool_realloc , ฯลฯ เพิ่มอาร์กิวเมนต์มาตรฐานกับ pool_id API ซึ่งช่วยให้โปรแกรมปรับแต่งของโปรแกรมแคชประสิทธิภาพโดยการให้คำแนะนำพื้นฐานที่ alloca - หน่วยความจำเวลา tion . ที่จึงตัดสินใจเดินทางไป มันอาจจะดูเหมือนเป็นงานที่น่าเบื่อสำหรับโปรแกรมเมอร์ให้เหตุผลเกี่ยวกับการเข้าถึงรูปแบบและแคชท้องถิ่นของข้อมูลที่แตกต่างกัน อย่างไรก็ตาม เราจึงหาบ่อยๆ ซุฟจึง CES เพื่อระบุไม่กี่ที่โดดเด่นข้อมูลพื้นที่และจัดสรรให้สระต่างกัน ดังนั้นเพียงไม่กี่บรรทัดของรหัสต้องโมดิจึงเอ็ดพอร์ตการใช้งานด้วยตนเองกับน้ำวน ตารางที่ 2 แสดงโปรแกรมที่เราได้ด้วยตนเอง ported , คีย์ข้อมูลโครงสร้างและบรรทัดของรหัสที่เปลี่ยนไป มาช่วยเพิ่มประสิทธิภาพในการใช้งาน , วังวนเหล่านี้โดย 7.3 % กว่า จิ๊กซอว์ และช่วยลดพลังงานเคลื่อนไหวข้อมูล 12 % ผลการค้นหารายละเอียดจะนำเสนอในวินาที 4 .สระว่ายน้ำการประยุกต์ใช้โครงสร้างข้อมูล ล็กว้าง - จึงค้นหาแรก 4 จุด ขอบ ชายแดน ครั้งที่ 16 เนย์สามเส้า จุด 3 จุด , สามเหลี่ยม 11 สูงสุดที่ตรงกัน 3 จุด , ขอบ , ผล 13 เนย์อีกครั้งจึง nement 3 จุด , สามเหลี่ยม , Misc 8 สูงสุดอิสระ 3 จุด , ขอบ , fl AGS 13 ครอบคลุมป่า 3 สหภาพจึง ND พ่อแม่ , ต้นไม้ ผลผลิต ใส่ขอบ 13 น้อยที่สุดครอบคลุมป่า 3 สหภาพจึง ND พ่อแม่ , ต้นไม้ออก , ใส่ขอบนูนฮัลล์ 11 2 แต้ม ฮัลล์ เรย์ 10 401.bzip2 4 arr1 arr2 ftab , , , TT 43 470.lbm 2 แหล่งที่มาและปลายทางกริด 21 429.mcf 2 โหนดและโค้ง 14 436.cactusadm 2 พูตัวโงนเงน - leapfrog 53 ตารางข้อมูลตารางที่ 2 : พบด้วยตนเองในการใช้งานต่าง ๆสระ บวกกับสายรหัส ( loc ) โมดิจึงเอ็ดขณะใส่กับน้ำวน3.2 อนุรักษ์สิ่งแวดล้อมจึง ทำให้ระบบพื้นฐานโทรระบบจะจัดการ vcs เราเปิดเผย VCS ไปยังผู้ใช้ระดับโปรแกรมกับระบบไม่กี่เพิ่มเติมโทร : sys_vc_alloc จัดสรรระดับผู้ใช้ VC กลับมาของรหัสเฉพาะ ; sys_vc_free deallocates เป็น VC ที่มีอยู่ และ sys_vc_tag แท็กช่วงของหน้าเว็บที่มีระดับผู้ใช้ VC . เรายังแก้ไข sys_mmap กับ OP - tionally แท็กหน้าเว็บใหม่ด้วยกาจึง C VC . เหล่านี้ระบบโทรศัพท์การตรวจสอบเพียงพอเพื่อความปลอดภัย เช่น การอนุญาตให้แต่ละกระบวนการแผนที่หน้าเว็บเพียงใน VCs ระดับผู้ใช้ของตัวเอง ) การจัดสรรของเราใช้อินเตอร์เฟซระดับนี้ในแผนที่แต่ละสระว่ายน้ำ VC ที่แตกต่างกันและแท็กหน้าเว็บจากแต่ละสระกับ VC ใช้งาน ID ของเราถูกสร้างขึ้นที่ด้านบนของดั๊กทุ่งหญ้า malloc [ 40 ] แต่ allocators อื่นๆสามารถใช้แทนการสนับสนุนสำหรับ VCs ต่อหลัก : พื้นฐานแบบจิ๊กซอว์ sys - รองรับ 3 จำนวนรายการต่อหลักในกระทู้ส่วนตัว โปรเซส และระดับโลก VCs เพื่อสนับสนุน VCs ระดับผู้ใช้ที่เราเพิ่มรายการพิเศษและตรวจสอบจำนวนสาธารณูปโภค ( กาจึงคอลลี่ gmons , [ 11 ] ) เท่าที่เราเห็น สนับสนุนได้ถึง 4 สระ ก็เพียงพอสำหรับมากที่สุด
การแปล กรุณารอสักครู่..
