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 IEEE TRANSACTIONS ON COMPUTERS, VOL. 56, NO. 7, JULY 2007 889 The Performance Impact of Kernel Prefetching on Buffer Cache Replacement Algorithms Ali R. Butt, Member, IEEE, Chris Gniady, Member, IEEE, and Y. Charlie Hu, Member, IEEE Abstract—A fundamental challenge in improving file system performance is to design effective block replacement algorithms to minimize buffer cache misses. Despite the well-known interactions between prefetching and caching, almost all buffer cache replacement algorithms have been proposed and studied comparatively, without taking into account file system prefetching, which exists in all modern operating systems. This paper shows that such kernel prefetching can have a significant impact on the relative performance in terms of the number of actual disk I/Os of many well-known replacement algorithms; it can not only narrow the performance gap but also change the relative performance benefits of different algorithms. Moreover, since prefetching can increase the number of blocks clustered for each disk I/O and, hence, the time to complete the I/O, the reduction in the number of disk I/Os may not translate into proportional reduction in the total I/O time. These results demonstrate the importance of buffer caching research taking file system prefetching into consideration and comparing the actual disk I/Os and the execution time under different replacement algorithms. Index Terms—Metrics/measurement, operating systems, file systems management, operating systems performance, measurements, simulation. Ç 1INTRODUCTION fundamental challenge in improving file system blocks need to be stored in the buffer cache, prefetching can Aperformance is to design an effective block replace- potentially compete for buffer cache entries. The close ment algorithm for the buffer cache. Over the years, interactions between prefetching and caching, which exploit developing such algorithms has remained one of the most user-inserted hints, have also been studied [8], [9], [34]. active research areas in operating systems design. The However, such user-inserted hints place a burden on the oldest and yet still widely used replacement algorithm is programmer as the programmer has to accurately identify the Least Recently Used (LRU) replacement policy [10]. The the access patterns of the application. effectiveness of LRU comes from the simple yet powerful The file systems in most modern operating systems principle of locality: Recently accessed blocks are likely to implement prefetching transparently by detecting sequen- be accessed again in the near future. Numerous other tial patterns and issuing asynchronous I/Os. In addition, replacement algorithms have been developed [3], [12], [13], file systems perform synchronous read-ahead processes, [15], [16], [21], [22], [24], [27], [29], [32], [35], [36]. However, where requests are clustered to 64 Kbytes (typically) to although a few of these replacement algorithm studies have amortize seek costs over larger reads. As in the user- been implemented and reported measured results, the vast inserted-hints scenario, such kernel-driven prefetching also majority used trace-driven simulations and used the cache interacts with and potentially affects the performance of the hit ratio as the main performance metric in comparing buffer caching algorithm being used. However, despite the different algorithms. well-known potential interactions between prefetching and Prefetching is another highly effective technique for caching [8], almost all buffer cache replacement algorithms improving the I/O performance. The main motivation of have been proposed and studied comparatively without prefetching is to overlap computation with I/O and, thus, taking into account kernel-driven prefetching [3], [15], [21], reduce the exposed latency of I/Os. One way to induce [22], [27], [29], [32], [35], [36]. prefetching is via user-inserted hints of I/O access patterns, In this paper, we perform a detailed simulation study of the impact of kernel prefetching on the performance of a set which are then used by the file system to perform of representative buffer cache replacement algorithms asynchronous I/Os [8], [9], [34]. Since prefetched disk developed over the last decade. By using a cache simulator that faithfully implements the kernel prefetching of the Linux OS, we compare different replacement algorithms in . A.R. Butt is with the Department of Computer Science, Virginia Polytechnic Institute and State University, McBryde Hall (0106), terms of the miss ratio, the actual number of aggregated Blacksburg, VA 24061. E-mail: [email protected]. synchronous and asynchronous disk I/O requests issued . C. Gniady is with the Department of Computer Science, University of from the kernel to the disk driver, and the ultimate Arizona, Gould-Simpson Building, 1040 E. 4th Street, PO Box 210077, performance measure—the actual running time of applica- Tucson, AZ 85721-0077. E-mail: [email protected]. tions using an accurate disk simulator, DiskSim [17]. Our . Y.C. Hu is with the School of Electrical and Computer Engineering, Purdue University, 465 Northwestern Ave., West Lafayette, IN 47907. study shows that the widely used kernel prefetching can E-mail: [email protected]. indeed have a significant impact on the relative perfor- mance of different replacement algorithms. In particular, Manuscript received 4 Nov. 2005; revised 30 Aug. 2006; accepted 9 Nov. 2006; published online 14 Feb. 2007. the findings and contributions of this paper are: For information on obtaining reprints of this article, please send e-mail to: [email protected], and reference IEEECS Log Number TC-0396-1105. We develop a buffer caching simulator, AccuSim, that Digital Object Identifier no. 10.1109/TC.2007.1029. faithfully implements the Linux kernel prefetching 0018-9340/07/$25.00 ß 2007 IEEE Published by the IEEE Computer Society 890 IEEE TRANSACTIONS ON COMPUTERS, VOL. 56, NO. 7, JULY 2007 and I/O clustering and interfaces with a realistic disk simulator, DiskSim [17], to allow the perfor- mance study of different replacement algorithms in a realistic environment. We show how we can adapt a set of eight representative cache replacement algorithms to exploit kernel prefetching to minimize disk I/Os while preserving the nature of these replacement algorithms. We find that kernel prefetching can not only significantly narrow the performance gap of differ- ent replacement algorithms but also change the relative performance benefits of different algorithms. We present results demonstrating that the hit ratio is far from a definitive metric in comparing different replacement algorithms. The number of aggregated disk I/Os gives much more accurate information on disk I/O load, but the actual application running time is the only definitive performance metric in the Fig. 1. Various kernel components on the path from file system presence of asynchronous kernel prefetching. operations to the disk. Our experimental results clearly demonstrate the impor- tance of future buffer caching research incorporating file system blocks that are stored on the disk contiguously. As system prefetching. To facilitate this, we are making our the cost of reading a block or the whole cluster is simulator publicly available [1]. The simulator implements comparable, the advantage of clustering is that it provides the kernel prefetching and I/O clustering mechanisms of the prefetching at a minimal cost. Linux 2.4 kernel and provides functionalities that allow easy Prefetching in the Linux kernel is beneficial for sequential integration of any cache replacement algorithms into the accesses to a file, that is, accesses to consecutive blocks of simulator for accurately studying and comparing the buffer that file. When a file is not accessed sequentially, prefetch- cache hit ratio, the number of disk requests, and the ing can potentially result in extra I/Os by reading data that application execution time under different replacement is not used. For this reason, it is critical for the kernel to algorithms. make its best guesses on whether future accesses are The outline of this paper is listed as follows: Section 2 sequential and decide whether to perform prefetching. describes kernel prefetching in Linux and in 4.4BSD. The Linux kernel decides on prefetching by examining Section 3 shows the potential impact of kernel prefetching the pattern of accesses to the file and only considers on buffer caching algorithms by using Belady’s algorithm as prefetching for read accesses. To simplify the description, an example. Section 4 summarizes the various buffer cache we assume that an access is to one block only. Although an replacement algorithms that are evaluated in this paper. access (system call) can be to multiple consecutive blocks, Section 5 describes the architecture of our buffer cache the simplification does not change the behavior of the simulator, AccuSim, and how it interfaces with DiskSim to prefetching algorithm. On the first access ðA Þ to a file, the accurately simulate synchronous and asynchronous pre- 1 kernel has no information about the access pattern. In this fetching requests. Section 6 presents trace-driven simulation 1 case, the kernel resorts to conservative prefetching; it reads results of performance evaluation and comparison of the the on-demand accessed block and prefetches a minimum studied replacement algorithms. Finally, Section 7 discusses number of blocks following the on-demand accessed block. additional related work and Section 8 concludes this paper. The minimum
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]