The Performance Impact of Kernel Prefetching on Buffer Cache Replacement Algorithms∗

Total Page:16

File Type:pdf, Size:1020Kb

The Performance Impact of Kernel Prefetching on Buffer Cache Replacement Algorithms∗ The Performance Impact of Kernel Prefetching on Buffer Cache Replacement Algorithms∗ Ali R. Butt, Chris Gniady, and Y.Charlie Hu Purdue Univeristy West Lafayette, IN 47907 fbutta, gniady, [email protected] ABSTRACT future. Numerous other replacement algorithms have been A fundamental challenge in improving the file system perfor- developed [2, 11, 12, 13, 14, 18, 19, 21, 25, 27, 30, 33, 34]. mance is to design effective block replacement algorithms to However, the vast majority of these replacement algorithm minimize buffer cache misses. Despite the well-known inter- studies used trace-driven simulations and used the cache hit actions between prefetching and caching, almost all buffer ratio as the sole performance metric in comparing different cache replacement algorithms have been proposed and stud- algorithms. ied comparatively without taking into account file system Prefetching is another highly effective technique for im- prefetching which exists in all modern operating systems. proving the I/O performance. The main motivation for This paper shows that such kernel prefetching can have a prefetching is to overlap computation with I/O and thus significant impact on the relative performance in terms of reduce the exposed latency of I/Os. One way to induce the number of actual disk I/Os of many well-known replace- prefetching is via user-inserted hints of I/O access patterns ment algorithms; it can not only narrow the performance which are then used by the file system to perform asyn- gap but also change the relative performance benefits of chronous I/Os [7, 8, 32]. Since prefetched disk blocks need different algorithms. These results demonstrate the impor- to be stored in the buffer cache, prefetching can potentially tance for buffer caching research to take file system prefetch- compete for buffer cache entries. The close interactions ing into consideration. between prefetching and caching that exploit user-inserted hints have also been studied [7, 8, 32]. However, such user- inserted hints place a burden on the programmer as the Categories and Subject Descriptors programmer has to accurately identify the access patterns D.4.8 [Operating Systems]: Performance|Measurements, of the application. Simulation File systems in most modern operating systems imple- ment prefetching transparently by detecting sequential pat- General Terms terns and issuing asynchronous I/Os. In addition, file sys- Design, Experimentation, Measurement, Performance tems perform synchronous read-ahead where requests are Keywords clustered to 64KB (typically) to amortize seek costs over larger reads. As in the user-inserted hints scenario, such Buffer caching, prefetching, replacement algorithms kernel-driven prefetching also interacts with and potentially affects the performance of the buffer caching algorithm be- 1. INTRODUCTION ing used. However, despite the well-known potential interac- A critical problem in improving file system performance tions between prefetching and caching [7], almost all buffer is to design an effective block replacement algorithm for the cache replacement algorithms have been proposed and stud- buffer cache. Over the years, developing such algorithms ied comparatively without taking into account the kernel- has remained one of the most active research areas in oper- driven prefetching [2, 13, 18, 19, 25, 27, 30, 33, 34]. ating systems design. The oldest and yet still widely used In this paper, we perform a detailed simulation study of replacement algorithm is the Least Recently Used (LRU) re- the impact of kernel prefetching on the performance of a set placement policy [9]. The effectiveness of LRU comes from of representative buffer cache replacement algorithms devel- the simple yet powerful principle of locality: recently ac- oped over the last decade. Using a cache simulator that cessed blocks are likely to be accessed again in the near faithfully implements the kernel prefetching of the Linux operating system, we compare different replacement algo- ∗This work is supported in part by the U.S. National Science rithms in terms of the miss ratio, the actual number of ag- Foundation under CAREER award ACI-0238379. gregated synchronous and asynchronous disk I/O requests issued from the kernel to the disk driver, as well as the ul- Permission to make digital or hard copies of all or part of this work for timate performance measure { the actual running time of personal or classroom use is granted without fee provided that copies are applications using an accurate disk simulator, DiskSim [15]. not made or distributed for profit or commercial advantage and that copies bear this notice and the full citation on the first page. To copy otherwise, to Our study shows that the widely used kernel prefetching can republish, to post on servers or to redistribute to lists, requires prior specific indeed have a significant impact on the relative performance permission and/or a fee. of different replacement algorithms. In particular, the find- SIGMETRICS'05, June 6–10, 2005, Banff, Alberta, Canada. ings and contributions of this paper are: Copyright 2005 ACM 1-59593-022-1/05/0006 ...$5.00. File system access through various kernel subsystems that a file system access has to go through before issued as a disk request. The first critical component is the buffer cache, which can significantly reduce the number of on-demand I/O Buffer Cache requests that are issued to the components below. For se- check for hits Cache quentially accessed files, the kernel also attempts to prefetch cached buffers misses consecutive blocks from the disk to amortize the cost of on- Kernel I/O demand I/Os. Moreover, the kernel has a clustering facility + that attempts to increase the size of a disk I/O to the size Prefetching of a cluster { a cluster is a set of file system blocks that are I/O requests stored on the disk contiguously. As the cost of reading a Kernel I/O Clustering block or the whole cluster is comparable, the advantage of clustering is that it provides prefetching at minimal cost. disk requests Prefetching in the Linux kernel is beneficial for sequential Disk Driver accesses to a file, i.e., accesses to consecutive blocks of that file. When a file is not accessed sequentially, prefetching can potentially result in extra I/Os by reading data that is not Disk used. For this reason, it is critical for the kernel to make its best guesses of whether future accesses are sequential, and decide whether to perform prefetching. Figure 1: Various kernel components on the path from The Linux kernel decides on prefetching by examining the file system operations to the disk. pattern of accesses to the file, and only considers prefetching for read accesses. To simplify the description, we assume an access is to one block only. Although an access (system call) • We develop a buffer caching simulator that faithfully can be to multiple consecutive blocks, the simplification does implements the Linux kernel prefetching to allow the not change the behavior of the prefetching algorithm. On performance study of different replacement algorithms the first access (A1) to a file, the kernel has no information in a realistic environment; about the access pattern. In this case, the kernel resorts to 1 • We show how to adapt different cache replacement al- conservative prefetching ; it reads the on-demand accessed gorithms to exploit kernel prefetching to minimize disk block and prefetches a minimum number of blocks follow- I/Os while preserving the nature of these replacement ing the on-demand accessed block. The minimum number algorithms; of blocks prefetched is at least one, and is typically three. This prefetching is called synchronous prefetching, as the • We find that kernel prefetching can not only signif- prefetched blocks are read along with the on-demand ac- icantly narrow the performance gap of different re- cessed block. The blocks that are prefetched are also re- placement algorithms, it can even change the relative ferred to as a read-ahead group. The kernel remembers the performance benefits of different algorithms; current read-ahead group per file and updates it on each ac- cess to the file. Note that as A1 was the first access, no • We present results demonstrating that the hit ratio blocks were previously prefetched for this file, and thus the is far from a definitive metric in comparing different previous read-ahead group was empty. replacement algorithms, the number of aggregated disk The next access (A2) may or may not be sequential with I/Os gives much more accurate information of disk I/O respect to A1. If A2 accesses a block that the kernel has not load, but the actual application running time is the already prefetched, i.e., the block is not in A1's read-ahead only definitive performance metric in the presence of group, the kernel decides that prefetching was not useful asynchronous kernel prefetching. and resorts to conservative prefetching as described above. The outline of the paper is as follows. Section 2 describes However, if the block accessed by A2 is in the previous read- kernel prefetching in Linux and in 4.4BSD. Section 3 shows ahead group, showing that prefetching was beneficial, the the potential impact of kernel prefetching on buffer caching kernel decides that the file is being accessed sequentially and algorithms using Belady's algorithm as an example. Sec- performs more aggressive prefetching. The size of the pre- tion 4 summarizes the various buffer cache replacement al- vious read-ahead group, i.e., the number of blocks that were gorithms that are evaluated in this paper. Section 5 presents previously prefetched, is doubled to determine the number trace-driven simulation results of performance evaluation of blocks (N) to be prefetched on this access. However, N is and comparison of the studied replacement algorithms. Fi- never increased beyond a pre-specified maximum (usually 32 nally, Section 6 discusses additional related work, and Sec- blocks).
Recommended publications
  • Practical C Programming, 3Rd Edition
    Practical C Programming, 3rd Edition By Steve Oualline 3rd Edition August 1997 ISBN: 1-56592-306-5 This new edition of "Practical C Programming" teaches users not only the mechanics or programming, but also how to create programs that are easy to read, maintain, and debug. It features more extensive examples and an introduction to graphical development environments. Programs conform to ANSI C. 0 TEAM FLY PRESENTS Table of Contents Preface How This Book is Organized Chapter by Chapter Notes on the Third Edition Font Conventions Obtaining Source Code Comments and Questions Acknowledgments Acknowledgments to the Third Edition I. Basics 1. What Is C? How Programming Works Brief History of C How C Works How to Learn C 2. Basics of Program Writing Programs from Conception to Execution Creating a Real Program Creating a Program Using a Command-Line Compiler Creating a Program Using an Integrated Development Environment Getting Help on UNIX Getting Help in an Integrated Development Environment IDE Cookbooks Programming Exercises 3. Style Common Coding Practices Coding Religion Indentation and Code Format Clarity Simplicity Summary 4. Basic Declarations and Expressions Elements of a Program Basic Program Structure Simple Expressions Variables and Storage 1 TEAM FLY PRESENTS Variable Declarations Integers Assignment Statements printf Function Floating Point Floating Point Versus Integer Divide Characters Answers Programming Exercises 5. Arrays, Qualifiers, and Reading Numbers Arrays Strings Reading Strings Multidimensional Arrays Reading Numbers Initializing Variables Types of Integers Types of Floats Constant Declarations Hexadecimal and Octal Constants Operators for Performing Shortcuts Side Effects ++x or x++ More Side-Effect Problems Answers Programming Exercises 6.
    [Show full text]
  • Cscope Security Update (RHSA-2009-1101)
    cscope security update (RHSA-2009-1101) Original Release Date: June 16, 2009 Last Revised: June 16, 2009 Number: ASA-2009-236 Risk Level: None Advisory Version: 1.0 Advisory Status: Final 1. Overview: cscope is a mature, ncurses-based, C source-code tree browsing tool. Multiple buffer overflow flaws were found in cscope. An attacker could create a specially crafted source code file that could cause cscope to crash or, possibly, execute arbitrary code when browsed with cscope. The Common Vulnerabilities and Exposures project (cve.mitre.org) has assigned the names CVE-2004-2541, CVE-2006-4262, CVE-2009- 0148 and CVE-2009-1577 to these issues. Note: This advisory is specific to RHEL3 and RHEL4. No Avaya system products are vulnerable, as cscope is not installed by default. More information about these vulnerabilities can be found in the security advisory issued by RedHat Linux: · https://rhn.redhat.com/errata/RHSA-2009-1101.html 2. Avaya System Products using RHEL3 or RHEL4 with cscope installed: None 3. Avaya Software-Only Products: Avaya software-only products operate on general-purpose operating systems. Occasionally vulnerabilities may be discovered in the underlying operating system or applications that come with the operating system. These vulnerabilities often do not impact the software-only product directly but may threaten the integrity of the underlying platform. In the case of this advisory Avaya software-only products are not affected by the vulnerability directly but the underlying Linux platform may be. Customers should determine on which Linux operating system the product was installed and then follow that vendor's guidance.
    [Show full text]
  • Linux Kernel and Driver Development Training Slides
    Linux Kernel and Driver Development Training Linux Kernel and Driver Development Training © Copyright 2004-2021, Bootlin. Creative Commons BY-SA 3.0 license. Latest update: October 9, 2021. Document updates and sources: https://bootlin.com/doc/training/linux-kernel Corrections, suggestions, contributions and translations are welcome! embedded Linux and kernel engineering Send them to [email protected] - Kernel, drivers and embedded Linux - Development, consulting, training and support - https://bootlin.com 1/470 Rights to copy © Copyright 2004-2021, Bootlin License: Creative Commons Attribution - Share Alike 3.0 https://creativecommons.org/licenses/by-sa/3.0/legalcode You are free: I to copy, distribute, display, and perform the work I to make derivative works I to make commercial use of the work Under the following conditions: I Attribution. You must give the original author credit. I Share Alike. If you alter, transform, or build upon this work, you may distribute the resulting work only under a license identical to this one. I For any reuse or distribution, you must make clear to others the license terms of this work. I Any of these conditions can be waived if you get permission from the copyright holder. Your fair use and other rights are in no way affected by the above. Document sources: https://github.com/bootlin/training-materials/ - Kernel, drivers and embedded Linux - Development, consulting, training and support - https://bootlin.com 2/470 Hyperlinks in the document There are many hyperlinks in the document I Regular hyperlinks: https://kernel.org/ I Kernel documentation links: dev-tools/kasan I Links to kernel source files and directories: drivers/input/ include/linux/fb.h I Links to the declarations, definitions and instances of kernel symbols (functions, types, data, structures): platform_get_irq() GFP_KERNEL struct file_operations - Kernel, drivers and embedded Linux - Development, consulting, training and support - https://bootlin.com 3/470 Company at a glance I Engineering company created in 2004, named ”Free Electrons” until Feb.
    [Show full text]
  • NSWI 0138: Advanced Unix Programming
    NSWI 0138: Advanced Unix programming (c) 2011-2016 Vladim´ırKotal (c) 2009-2010 Jan Pechanec, Vladim´ırKotal SISAL MFF UK, Malostransk´en´am.25, 118 00 Praha 1 Charles University Czech Republic Vladim´ırKotal [email protected] March 10, 2016 1 Vladim´ırKotal NSWI 0138 (Advanced Unix programming) Contents 1 Overview 5 1.1 What is this lecture about? . .5 1.2 The lecture will cover... .5 1.3 A few notes on source code files . .6 2 Testing 6 2.1 Why?...........................................6 2.2 When ? . .6 2.3 Types of testing . .7 3 Debugging 8 3.1 Debuging in general . .8 3.2 Observing . .9 3.3 Helper tools . .9 3.3.1 ctags . .9 3.3.2 cscope . 10 3.3.3 OpenGrok . 11 3.3.4 Other tools . 11 3.4 Debugging data . 11 3.4.1 stabs . 11 3.4.2 DWARF . 12 3.4.3 CTF (Compact C Type Format) . 12 3.5 Resource leaks . 13 3.6 libumem . 13 3.6.1 How does libumem work . 14 3.6.2 Using libumem+mdb to find memory leaks . 14 3.6.3 How does ::findleaks work . 16 3.7 watchmalloc . 17 3.8 Call tracing . 18 3.9 Using /proc . 19 3.10 Debugging dynamic libraries . 20 3.11 Debuggers . 20 3.12 Symbol search and interposition . 20 3.13 dtrace . 21 4 Terminals 21 4.1 Terminal I/O Overview . 21 4.2 Terminal I/O Overview (cont.) . 22 4.3 Physical (Hardware) Terminal . 24 4.4 stty(1) command . 24 4.5 TTY Driver Connected To a Phy Terminal .
    [Show full text]
  • Pipenightdreams Osgcal-Doc Mumudvb Mpg123-Alsa Tbb
    pipenightdreams osgcal-doc mumudvb mpg123-alsa tbb-examples libgammu4-dbg gcc-4.1-doc snort-rules-default davical cutmp3 libevolution5.0-cil aspell-am python-gobject-doc openoffice.org-l10n-mn libc6-xen xserver-xorg trophy-data t38modem pioneers-console libnb-platform10-java libgtkglext1-ruby libboost-wave1.39-dev drgenius bfbtester libchromexvmcpro1 isdnutils-xtools ubuntuone-client openoffice.org2-math openoffice.org-l10n-lt lsb-cxx-ia32 kdeartwork-emoticons-kde4 wmpuzzle trafshow python-plplot lx-gdb link-monitor-applet libscm-dev liblog-agent-logger-perl libccrtp-doc libclass-throwable-perl kde-i18n-csb jack-jconv hamradio-menus coinor-libvol-doc msx-emulator bitbake nabi language-pack-gnome-zh libpaperg popularity-contest xracer-tools xfont-nexus opendrim-lmp-baseserver libvorbisfile-ruby liblinebreak-doc libgfcui-2.0-0c2a-dbg libblacs-mpi-dev dict-freedict-spa-eng blender-ogrexml aspell-da x11-apps openoffice.org-l10n-lv openoffice.org-l10n-nl pnmtopng libodbcinstq1 libhsqldb-java-doc libmono-addins-gui0.2-cil sg3-utils linux-backports-modules-alsa-2.6.31-19-generic yorick-yeti-gsl python-pymssql plasma-widget-cpuload mcpp gpsim-lcd cl-csv libhtml-clean-perl asterisk-dbg apt-dater-dbg libgnome-mag1-dev language-pack-gnome-yo python-crypto svn-autoreleasedeb sugar-terminal-activity mii-diag maria-doc libplexus-component-api-java-doc libhugs-hgl-bundled libchipcard-libgwenhywfar47-plugins libghc6-random-dev freefem3d ezmlm cakephp-scripts aspell-ar ara-byte not+sparc openoffice.org-l10n-nn linux-backports-modules-karmic-generic-pae
    [Show full text]
  • Using Cscope in Vim
    How to incorporate Cscope functionality into VIM. It also supports the use of the cursor to select source code symbols in VIM where you can type custom keystrokes to invoke powerful Cscope functionality. Not only that, it will allow you to invoke Cscope symbols from within any directory in your source code tree. That is because the Cscope database will be built from source- code file path-names referenced from your root directory instead of the standard present directory if you built the Cscope file without the necessary trickery. OS/ program requirements Cscope must be installed on your system. If you don’t have it, then install it be typing in the Terminal ‘yum install cscope’ if running Fedora or ‘sudo apt-get cscope’ if you are running Ubuntu. Note: You must have at least VIM 6.x for this to work correctly. Setting it up You must have cscope_maps.vim. This file should be located in ~/.vim/plugin. If this directory does not exist, then create it. Step 1) Add the .vim plugin directory to your $PATH. Add these lines to the end of your ~/.bash_profile or ~/.bashrc file. PATH=$PATH:$HOME/.vim/plugin EDITOR="vim" Step 2) Add the following code to the bottom of your ~/.bashrc file. This is the function and alias which builds the cscope database. This one is setup to find .c and .h files. Change for the file extensions that are in your source code. function build_cscope_db_func() { local PROJDIR=$PWD cd / find $PROJDIR –name ‘*.c’ –o –name ‘*.h’ > $PROJDIR/cscope.files cd $PROJDIR cscope –Rbkq } alias csbuild=‘build_cscope_db_func’ Step 3) Launch another bash session by typing ‘bash’ at the command prompt.
    [Show full text]
  • Spack a flexible Package Manager for HPC
    Spack A flexible package manager for HPC Overview & Introduc0on to Basic Spack Concepts Todd Gamblin Center for Applied Scien0fic Compu0ng LLNL-PRES-806064 This work was performed under the auspices of the U.S. Department of Energy by Lawrence Livermore National Laboratory github.com/LLNL/spack under contract DE-AC52-07NA27344. Lawrence Livermore National Security, LLC Spack is a flexible package manager for HPC § How to install Spack: $ git clone https://github.com/scalability-llnl/spack.git § How to install a package: $ cd spack/bin $ ./spack install hdf5 § HDF5 and its dependencies are installed Get Spack! within the Spack directory. hp://github.com/LLNL/spack § No addi0onal setup required! 2 LLNL-PRES-806064 github.com/LLNL/spack What is the proDucon environment for HPC? § Someone’s home directory? § LLNL? LANL? Sandia? ANL? LBL? TACC? — Environments at large-scale sites are very different. § Which MPI implementaon? § Which compiler? § Which dependencies? § Which versions of dependencies? — Many applicaons require specific dependency versions. Real answer: there isn’t a single production environment or a standard way to build. 3 LLNL-PRES-806064 github.com/LLNL/spack HPC soware is becoming increasingly complex § Not much standardizaon in HPC — every machine/applicaon has a different so[ware stack § Sites share unique hardware among teams with very different requirements — Users want to experiment with many exo0c architectures, compilers, MPI versions — All of this is necessary to get the best performance § Example environment for some LLNL codes: 48 third party packages x 3 MPI versions x 3-ish Platforms mvapich mvapich2 OpenMPI Linux BlueGene Cray Up to 7 compilers Oh, and 2-3 versions of x Intel GCC XLC Clang x each package = ~7,500 combinations PGI Cray Pathscale We want an easy way to quickly sample the space, to build configurations on demand! 4 LLNL-PRES-806064 github.com/LLNL/spack Most exisEng tools Do not support combinatorial versioning § Tradi0onal binary package managers — RPM, yum, APT, yast, etc.
    [Show full text]
  • C User's Guide
    C User’s Guide SunSoft, Inc. A Sun Microsystems, Inc. Business 2550 Garcia Avenue Mountain View, CA 94043 USA 415 960-1300 fax 415 969-9131 Part No.: 802-5777-10 Revision A, December 1996 Copyright 1996 Sun Microsystems, Inc., 2550 Garcia Avenue, Mountain View, California 94043-1100 U.S.A. All rights reserved. This product or document is protected by copyright and distributed under licenses restricting its use, copying, distribution, and decompilation. No part of this product or document may be reproduced in any form by any means without prior written authorization of Sun and its licensors, if any. Portions of this product may be derived from the UNIX® system, licensed from Novell, Inc., and from the Berkeley 4.3 BSD system, licensed from the University of California. UNIX is a registered trademark in the United States and other countries and is exclusively licensed by X/Open Company Ltd. Third-party software, including font technology in this product, is protected by copyright and licensed from Sun’s suppliers. RESTRICTED RIGHTS: Use, duplication, or disclosure by the U.S. Government is subject to restrictions of FAR 52.227- 14(g)(2)(6/87) and FAR 52.227-19(6/87), or DFAR 252.227-7015(b)(6/95) and DFAR 227.7202-3(a). Sun, Sun Microsystems, the Sun logo, SunSoft, Solaris, OpenWindows, and Sun WorkShop are trademarks or registered trademarks of Sun Microsystems, Inc. in the United States and other countries. All SPARC trademarks are used under license and are trademarks or registered trademarks of SPARC International, Inc. in the United States and other countries.
    [Show full text]
  • The Vim Tutorial and Reference the Vim Tutorial and Reference by Steve Oualline
    The Vim Tutorial and Reference The Vim Tutorial and Reference By Steve Oualline vim-1.0.odt (28. Sep. 2007) The Vim Book Page 1 The Vim Tutorial and Reference Table of Contents Introduction..............................................................................................26 Chapter 1:Basic Editing............................................................................28 Chapter 2:Editing a Little Faster..............................................................42 Chapter 3:Searching.................................................................................59 Chapter 4:Text Blocks and Multiple Files.................................................69 Chapter 5:Windows and Tabs....................................................................83 Chapter 6:Basic Visual Mode....................................................................99 Chapter 7:Commands for Programmers.................................................111 Chapter 8:Basic Abbreviations, Keyboard Mapping, and Initialization Files.........................................................................................................148 Chapter 9:Basic Command-Mode Commands.........................................159 Chapter 10:Basic GUI Usage...................................................................168 Chapter 11:Dealing with Text Files.........................................................175 Chapter 12:Automatic Completion.........................................................192 Chapter 13:Autocommands.....................................................................202
    [Show full text]
  • Download Vim Tutorial (PDF Version)
    Vim About the Tutorial Vi IMproved (henceforth referred to as Vim) editor is one of the popular text editors. It is clone of Vi editor and written by Bram Moolenaar. It is cross platform editor and available on most popular platforms like Windows, Linux, Mac and other UNIX variants. It is command-centric editor, so beginners might find it difficult to work with it. But once you master it, you can solve many complex text-related tasks with few Vim commands. After completing this tutorial, readers should be able to use Vim fluently. Audience This tutorial is targeted for both beginners and intermediate users. After completing this tutorial, beginners will be able to use Vim effectively whereas intermediate users will take their knowledge to the next level. Prerequisites This tutorial assumes that reader has basic knowledge of computer system. Additionally, reader should be able to install, uninstall and configure software packages on given system. Conventions Following conventions are followed in entire tutorial: $ command execute this command in terminal as a non-root user 10j execute this command in Vim’s command mode :set nu execute this command in Vim’s command line mode Copyright & Disclaimer Copyright 2018 by Tutorials Point (I) Pvt. Ltd. All the content and graphics published in this e-book are the property of Tutorials Point (I) Pvt. Ltd. The user of this e-book is prohibited to reuse, retain, copy, distribute or republish any contents or a part of contents of this e-book in any manner without written consent of the publisher. We strive to update the contents of our website and tutorials as timely and as precisely as possible, however, the contents may contain inaccuracies or errors.
    [Show full text]
  • Vim for C Programmers
    Vim for C Programmers http://interactive.linuxjournal.com/node/8289/print Vim for C Programmers By Girish Venkatachalam Created 2005-10-31 02:00 Thank you for subscribing to Linux Journal. You don't have to move to an integrated development environment to get luxury coding features. From variable autocompletions all the way up to integration with ctags and make, Vim makes a C programmer's life easier and more productive. Vim is an extremely powerful editor with a user interface based on Bill Joy's almost 30-year-old vi, but with many new features. The features that make Vim so versatile also sometimes make it intimidating for beginners. This article attempts to level the learning curve with a specific focus on C programming. make and the Compile-Test-Edit Cycle A typical programmer's routine involves compiling and editing programs until the testing proves that the program correctly does the job it is supposed to do. Any mechanism that reduces the rigor of this cycle obviously makes any programmer's life easier. Vim does exactly that by integrating make with Vim in such a way that you don't have to leave the editor to compile and test the program. Running :make from inside of Vim does the job for you, provided a makefile is in the current directory. You can change the directory from inside of Vim by running :cd. To verify where you are, use :pwd. In case you are using FreeBSD and want to invoke gmake instead of make from the command line, all you have to do is enter :set makeprg=gmake.
    [Show full text]
  • Spack Overview and State of the Project HPC U
    Spack Overview and State of the Project HPC U. Ghent Todd Gamblin Center for Applied Scientific Computing, LLNL February 2, 2018 LLNL-PRES-745858 This work was performed under the auspices of the U.S. Department of Energy by Lawrence Livermore National Laboratory under contract DE-AC52-07NA27344. Lawrence Livermore National Security, LLC Goals — Facilitate experimenting with performance options. — Flexibility. — Make these things easy: • Build the software in arbitrarily many different configurations • Swapping a new compiler into a build • Swapping implementations of libraries – e.g., MPI, BLAS, LAPACK, others like jpeg/jpeg-turbo, etc. • Injecting compiler flags into builds — Build all the things you need for scientific analysis — Run on laptops, Linux clusters, and the largest supercomputers 2 LLNL-PRES-745858 github.com/spack Spack @spackpm A flexible package manager for HPC Easy installation Spack is used worldwide $ git clone https://github.com/spack/spack $ . spack/share/spack/setup-env.sh $ spack install hdf5 Easily experiment with build options $ spack install [email protected] $ spack install [email protected] %[email protected] +threads $ spack install [email protected] cppflags="-O3 –g3" $ spack install [email protected] target=haswell $ spack install [email protected] ^[email protected] Easily share package recipes from spack import * class Kripke(Package): """A simple, scalable 3D Sn transport proxy app.""" 12,343 web visits since May Over 200 contributors from depends_on('mpi', when="+mpi") Over 500 downloads per day labs, academia, industry. def install(self,
    [Show full text]