  Large pages are commonly deployed to reduce address translation overheads for
big-memory workloads. Modern x86-64 processors from Intel and AMD support two
large page sizes -- 1GB and 2MB. However, previous works on large pages have
primarily focused on 2MB pages, partly due to lack of substantial evidence on
the profitability of 1GB pages to real-world applications. We argue that in
fact, inadequate system software support is responsible for a decade of
underutilized hardware support for 1GB pages.
  Through extensive experimentation on a real system, we demonstrate that 1GB
pages can improve performance over 2MB pages, and when used in tandem with 2MB
pages for an important set of applications; the support for the latter is
crucial but missing in current systems. Our design and implementation of
\trident{} in Linux fully exploit hardware supported large pages by dynamically
and transparently allocating 1GB, 2MB, and 4KB pages as deemed suitable.
\trident{} speeds up eight memory-intensive applications by {$18\%$}, on
average, over Linux's use of 2MB pages. We also propose \tridentpv{}, an
extension to \trident{} that effectively virtualizes 1GB pages via copy-less
promotion and compaction in the guest OS. Overall, this paper shows that even
GB-sized pages have considerable practical significance with adequate software
enablement, in turn motivating architects to continue investing/innovating in
large pages.
