Hello community, here is the log from the commit of package numactl for openSUSE:Factory checked in at 2013-10-20 10:53:03 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/numactl (Old) and /work/SRC/openSUSE:Factory/.numactl.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "numactl" Changes: -------- --- /work/SRC/openSUSE:Factory/numactl/numactl.changes 2013-04-17 23:12:23.000000000 +0200 +++ /work/SRC/openSUSE:Factory/.numactl.new/numactl.changes 2013-10-20 10:53:04.000000000 +0200 @@ -1,0 +2,13 @@ +Wed Oct 9 14:39:00 UTC 2013 - [email protected] + +- Update to version 2.0.9: +- 130207 Add a prototype for numa_bitmask_weight (Cliff W.) +- 130725 Fix hubstats huge pages bug, version number, man page (Bill Gray) +- 130726 Disable the regress-io test (Cliff W.) +- 130730 Fix typos in numactl man page; add short opts to --help + (Petr Holasek) +- 130906 numactl: option --all/-a added for policy settings (Petr Holasek) +- 130906 libnuma: new function numa_run_on_node_mask_all (Petr Holasek) + + +------------------------------------------------------------------- Old: ---- numactl-2.0.8.tar.gz New: ---- numactl-2.0.9.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ numactl.spec ++++++ --- /var/tmp/diff_new_pack.yd0rE5/_old 2013-10-20 10:53:05.000000000 +0200 +++ /var/tmp/diff_new_pack.yd0rE5/_new 2013-10-20 10:53:05.000000000 +0200 @@ -22,7 +22,7 @@ Summary: NUMA Policy Control License: GPL-2.0+ Group: System/Management -Version: 2.0.8 +Version: 2.0.9 Release: 0 # bug437293 %ifarch ppc64 ++++++ numactl-2.0.8.tar.gz -> numactl-2.0.9.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/numactl-2.0.8/CHANGES new/numactl-2.0.9/CHANGES --- old/numactl-2.0.8/CHANGES 2012-10-11 22:52:24.000000000 +0200 +++ new/numactl-2.0.9/CHANGES 2013-10-08 23:34:57.000000000 +0200 @@ -307,7 +307,7 @@ - Fix makefile to remove move_pages on make clean (Andi) - Fix numa_node_to_cpus() (Sharyathi Nagesh) - Rename 'thread' to 'task' (L.S.) -- Remove other trailing spaces (Cliff) +- Remove other trailing spaces (Cliff W.) - Man page correction/clarification for numa_node_to_cpus() (Ian Wienand) - Man page clarification for numactl (Mike MacCana) - Fix numactl --hardware for cpu-less nodes (Thomas Renninger) @@ -383,3 +383,15 @@ - 121011 Allow an install location PREFIX in the Makefile (Frank Tampe) 2.0.8 released Oct, 2012 + +2.0.9-rc1 +- 130207 Add a prototype for numa_bitmask_weight (Cliff W.) +2.0.9-rc2 +- 130725 Fix hubstats huge pages bug, version number, man page (Bill Gray) +- 130726 Disable the regress-io test (Cliff W.) +- 130730 Fix typos in numactl man page; add short opts to --help (Petr Holasek) +2.0.9-rc3 +- 130906 numactl: option --all/-a added for policy settings (Petr Holasek) +- 130906 libnuma: new function numa_run_on_node_mask_all (Petr Holasek) + +2.0.9 released Oct, 2013 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/numactl-2.0.8/Makefile new/numactl-2.0.9/Makefile --- old/numactl-2.0.8/Makefile 2012-10-11 22:52:24.000000000 +0200 +++ new/numactl-2.0.9/Makefile 2013-10-08 23:34:57.000000000 +0200 @@ -35,7 +35,7 @@ test/node-parse rtnetlink.o test/A numastat SOURCES := bitops.c libnuma.c distance.c memhog.c numactl.c numademo.c \ numamon.c shm.c stream_lib.c stream_main.c syscall.c util.c mt.c \ - clearcache.c test/*.c affinity.c sysfs.c rtnetlink.c + clearcache.c test/*.c affinity.c sysfs.c rtnetlink.c numastat.c ifeq ($(strip $(PREFIX)),) prefix := /usr @@ -209,7 +209,9 @@ regress2: cd test ; ./regress2 -regress3: - cd test ; ./regress-io +# regress-io is known not to work +# regress3: +# cd test ; ./regress-io -test: all regress1 regress2 test_numademo regress3 +# test: all regress1 regress2 test_numademo regress3 +test: all regress1 regress2 test_numademo diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/numactl-2.0.8/README new/numactl-2.0.9/README --- old/numactl-2.0.8/README 2012-10-11 22:52:24.000000000 +0200 +++ new/numactl-2.0.9/README 2013-10-08 23:34:57.000000000 +0200 @@ -31,7 +31,7 @@ It also uses a public domain Mersenne Twister implementation from Michael Brundage. -Version 2.0.8: (C)2012 SGI +Version 2.0.9: (C)2013 SGI Author: Andi Kleen, SUSE Labs diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/numactl-2.0.8/diff.Makefile new/numactl-2.0.9/diff.Makefile --- old/numactl-2.0.8/diff.Makefile 2012-10-11 22:52:24.000000000 +0200 +++ new/numactl-2.0.9/diff.Makefile 1970-01-01 01:00:00.000000000 +0100 @@ -1,26 +0,0 @@ -diff -ruN numactl-2.0.8-rc5.orig/Makefile numactl-2.0.8-rc5.new/Makefile ---- numactl-2.0.8-rc5.orig/Makefile 2012-08-23 15:50:37.000000000 -0400 -+++ numactl-2.0.8-rc5.new/Makefile 2012-09-06 13:58:40.056795146 -0400 -@@ -32,7 +32,7 @@ - test/mbind_mig_pages test/migrate_pages \ - migratepages migspeed migspeed.o libnuma.a \ - test/move_pages test/realloc_test sysfs.o affinity.o \ -- test/node-parse rtnetlink.o test/A -+ test/node-parse rtnetlink.o test/A numastat - SOURCES := bitops.c libnuma.c distance.c memhog.c numactl.c numademo.c \ - numamon.c shm.c stream_lib.c stream_main.c syscall.c util.c mt.c \ - clearcache.c test/*.c affinity.c sysfs.c rtnetlink.c -@@ -45,10 +45,12 @@ - test/tshared stream test/mynode test/pagesize test/ftok test/prefered \ - test/randmap test/nodemap test/distance test/tbitmap test/move_pages \ - test/mbind_mig_pages test/migrate_pages test/realloc_test libnuma.a \ -- test/node-parse -+ test/node-parse numastat - - numactl: numactl.o util.o shm.o bitops.o libnuma.so - -+numastat: CFLAGS += -std=gnu99 -+ - migratepages: migratepages.c util.o bitops.o libnuma.so - - migspeed: LDLIBS += -lrt diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/numactl-2.0.8/diff.numastat new/numactl-2.0.9/diff.numastat --- old/numactl-2.0.8/diff.numastat 2012-10-11 22:52:24.000000000 +0200 +++ new/numactl-2.0.9/diff.numastat 1970-01-01 01:00:00.000000000 +0100 @@ -1,95 +0,0 @@ -diff -ruN numactl-2.0.8-rc5.orig/numastat numactl-2.0.8-rc5.new/numastat ---- numactl-2.0.8-rc5.orig/numastat 2012-08-23 15:50:37.000000000 -0400 -+++ numactl-2.0.8-rc5.new/numastat 1969-12-31 19:00:00.000000000 -0500 -@@ -1,91 +0,0 @@ --#!/usr/bin/perl --# Print numa statistics for all nodes --# Copyright (C) 2003,2004 Andi Kleen, SuSE Labs. --# --# numastat is free software; you can redistribute it and/or --# modify it under the terms of the GNU General Public --# License as published by the Free Software Foundation; version --# 2. --# --# numastat is distributed in the hope that it will be useful, --# but WITHOUT ANY WARRANTY; without even the implied warranty of --# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU --# General Public License for more details. -- --# You should find a copy of v2 of the GNU General Public License somewhere --# on your Linux system; if not, write to the Free Software Foundation, --# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ --# --# Example: NUMASTAT_WIDTH=80 watch -n1 numastat --# -- --# output width --$WIDTH=80; --if (defined($ENV{'NUMASTAT_WIDTH'})) { -- $WIDTH=$ENV{'NUMASTAT_WIDTH'}; --} else { -- use POSIX; -- if (POSIX::isatty(fileno(STDOUT))) { -- if (open(R, "resize |")) { -- while (<R>) { -- $WIDTH=$1 if /COLUMNS=(\d+)/; -- } -- close R; -- } -- } else { -- # don't split it up for easier parsing -- $WIDTH=10000000; -- } --} --$WIDTH = 32 if $WIDTH < 32; -- --if (! -d "/sys/devices/system/node" ) { -- print STDERR "sysfs not mounted or system not NUMA aware\n"; -- exit 1; --} -- --%stat = (); --$title = ""; --$mode = 0; --opendir(NODES, "/sys/devices/system/node") || exit 1; --foreach $nd (readdir(NODES)) { -- next unless $nd =~ /node(\d+)/; -- # On newer kernels, readdir may enumerate the 'node(\d+) subdirs -- # in opposite order from older kernels--e.g., node{0,1,2,...} -- # as opposed to node{N,N-1,N-2,...}. Accomodate this by -- # switching to new mode so that the stats get emitted in -- # the same order. -- #print "readdir(NODES) returns $nd\n"; -- if (!$title && $nd =~ /node0/) { -- $mode = 1; -- } -- open(STAT, "/sys/devices/system/node/$nd/numastat") || -- die "cannot open $nd: $!\n"; -- if (! $mode) { -- $title = sprintf("%16s",$nd) . $title; -- } else { -- $title = $title . sprintf("%16s",$nd); -- } -- @fields = (); -- while (<STAT>) { -- ($name, $val) = split; -- if (! $mode) { -- $stat{$name} = sprintf("%16u", $val) . $stat{$name}; -- } else { -- $stat{$name} = $stat{$name} . sprintf("%16u", $val); -- } -- push(@fields, $name); -- } -- close STAT; --} --closedir NODES; -- --$numfields = int(($WIDTH - 16) / 16); --$l = 16 * $numfields; --for ($i = 0; $i < length($title); $i += $l) { -- print "\n" if $i > 0; -- printf "%16s%s\n","",substr($title,$i,$l); -- foreach (@fields) { -- printf "%-16s%s\n",$_,substr($stat{$_},$i,$l); -- } --} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/numactl-2.0.8/diff.numastat.8b new/numactl-2.0.9/diff.numastat.8b --- old/numactl-2.0.8/diff.numastat.8b 2012-10-11 22:52:24.000000000 +0200 +++ new/numactl-2.0.9/diff.numastat.8b 1970-01-01 01:00:00.000000000 +0100 @@ -1,229 +0,0 @@ -diff -ruN numactl-2.0.8-rc5.orig/numastat.8 numactl-2.0.8-rc5.new/numastat.8 ---- numactl-2.0.8-rc5.orig/numastat.8 2012-08-23 15:50:37.000000000 -0400 -+++ numactl-2.0.8-rc5.new/numastat.8 2012-10-07 00:05:46.676484265 -0400 -@@ -1,82 +1,155 @@ --.\" t --.\" Copyright 2004 Andi Kleen, SuSE Labs. --.\" --.\" Permission is granted to make and distribute verbatim copies of this --.\" manual provided the copyright notice and this permission notice are --.\" preserved on all copies. --.\" --.\" Permission is granted to copy and distribute modified versions of this --.\" manual under the conditions for verbatim copying, provided that the --.\" entire resulting derived work is distributed under the terms of a --.\" permission notice identical to this one. --.\" --.\" Since the Linux kernel and libraries are constantly changing, this --.\" manual page may be incorrect or out-of-date. The author(s) assume no --.\" responsibility for errors or omissions, or for damages resulting from --.\" the use of the information contained herein. --.\" --.\" Formatted or processed versions of this manual, if unaccompanied by --.\" the source, must acknowledge the copyright and authors of this work. --.TH NUMACTL 8 "Nov 2004" "SuSE Labs" "Linux Administrator's Manual" --.SH NAME --numastat \- Print statistics about NUMA memory allocation --.SH SYNOPSIS --numastat --.SH DESCRIPTION -+.TH "numastat" "8" "1.0.0" "Bill Gray" "Administration" -+.SH "numastat" -+.LP -+\fBnumastat\fP \- Show per-NUMA-node memory statistics for processes and the operating system -+.SH "SYNTAX" -+.LP -+\fBnumastat\fP -+.br -+.LP -+\fBnumastat\fP [\fI\-V\fP] -+.br -+.LP -+\fBnumastat\fP [\fI\<PID>|<pattern>...\fP] -+.br -+.LP -+\fBnumastat\fP [\fI\-c\fP] [\fI\-m\fP] [\fI\-n\fP] [\fI\-p <PID>|<pattern>\fP] [\fI\-s[<node>]\fP] [\fI\-v\fP] [\fI\-z\fP] [\fI\<PID>|<pattern>...\fP] -+.br -+.SH "DESCRIPTION" -+.LP - .B numastat --displays NUMA allocations statistics from the kernel memory allocator. --Each process has NUMA policies that specifies on which node pages --are allocated. See --.I set_mempolicy(2) --or --.I numactl(8) --on details of the available policies. --The numastat counters keep track on what nodes memory is finally allocated. -- --The counters are separated for each node. Each count event is the allocation --of a page of memory. -- -+with no command options or arguments at all, displays per-node NUMA hit and -+miss system statistics from the kernel memory allocator. This default -+\fBnumastat\fP behavior is strictly compatible with the previous long-standing -+\fBnumastat\fP perl script, written by Andi Kleen. The default \fBnumastat\fP -+statistics shows per-node numbers (in units of pages of memory) in these categories: -+.LP - .B numa_hit --is the number of allocations where an allocation was intended for --that node and succeeded there. -- -+is memory successfully allocated on this node as intended. -+.LP - .B numa_miss --shows how often an allocation was intended for this node, but ended up --on another node due to low memory. -- -+is memory allocated on this node despite the process preferring some different node. Each -+.I numa_miss -+has a -+.I numa_foreign -+on another node. -+.LP - .B numa_foreign --is the number of allocations that were intended for another node, --but ended up on this node. Each -+is memory intended for this node, but actually allocated on some different node. Each - .I numa_foreign --event has a -+has a - .I numa_miss - on another node. -- -+.LP - .B interleave_hit --is the number of interleave policy allocations that were intended for a --specific node and succeeded there. -- -+is interleaved memory successfully allocated on this node as intended. -+.LP - .B local_node --is incremented when a process running on the node allocated --memory on the same node. -- -+is memory allocated on this node while a process was running on it. -+.LP - .B other_node --is incremented when a process running on another node allocated memory on that node. --.SH SEE ALSO --.I numactl(8) --.I set_mempolicy(2) --.I numa(3) -+is memory allocated on this node while a process was running on some other node. -+.LP -+Any supplied options or arguments with the \fBnumastat\fP command will -+significantly change both the content and the format of the display. Specified -+options will cause display units to change to megabytes of memory, and will -+change other specific behaviors of \fBnumastat\fP as described below. -+.SH "OPTIONS" -+.LP -+.TP -+\fB\-c\fR -+Minimize table display width by dynamically shrinking column widths based on -+data contents. With this option, amounts of memory will be rounded to the -+nearest megabyte (rather than the usual display with two decimal places). -+Column width and inter-column spacing will be somewhat unpredictable with this -+option, but the more dense display will be very useful on systems with many -+NUMA nodes. -+.TP -+\fB\-m\fR -+Show the meminfo-like system-wide memory usage information. This option -+produces a per-node breakdown of memory usage information similar to that found -+in /proc/meminfo. -+.TP -+\fB\-n\fR -+Show the original \fBnumastat\fP statistics info. This will show the same -+information as the default \fBnumastat\fP behavior but the units will be megabytes of -+memory, and there will be other formatting and layout changes versus the -+original \fBnumastat\fP behavior. -+.TP -+\fB\-p\fR <\fBPID\fP> or <\fBpattern\fP> -+Show per-node memory allocation information for the specified PID or pattern. -+If the \-p argument is only digits, it is assumed to be a numerical PID. If -+the argument characters are not only digits, it is assumed to be a text -+fragment pattern to search for in process command lines. For example, -+\fBnumastat -p qemu\fP will attempt to find and show information for processes -+with "qemu" in the command line. Any command line arguments remaining after -+\fBnumastat\fP option flag processing is completed, are assumed to be -+additional <\fBPID\fP> or <\fBpattern\fP> process specifiers. In this sense, -+the \fB\-p\fP option flag is optional: \fBnumastat qemu\fP is equivalent to -+\fBnumastat -p qemu\fP -+.TP -+\fB\-s[<node>]\fR -+Sort the table data in descending order before displaying it, so the biggest -+memory consumers are listed first. With no specified <node>, the table will be -+sorted by the total column. If the optional <node> argument is supplied, the -+data will be sorted by the <node> column. Note that <node> must follow the -+\fB\-s\fP immediately with no intermediate white space (e.g., \fBnumastat -+\-s2\fP). -+.TP -+\fB\-v\fR -+Make some reports more verbose. In particular, process information for -+multiple processes will display detailed information for each process. -+Normally when per-node information for multiple processes is displayed, only -+the total lines are shown. -+.TP -+\fB\-V\fR -+Display \fBnumastat\fP version information and exit. -+.TP -+\fB\-z\fR -+Skip display of table rows and columns of only zero valuess. This can be used -+to greatly reduce the amount of uninteresting zero data on systems with many -+NUMA nodes. Note that when rows or columns of zeros are still displayed with -+this option, that probably means there is at least one value in the row or -+column that is actually non-zero, but rounded to zero for display. - .SH NOTES --numastat output is only available on NUMA systems. -- --numastat assumes the output terminal has a width of 80 characters --and tries to format the output accordingly. --.SH EXAMPLES --.I watch -n1 numastat -+\fBnumastat\fP attempts to fold each table display so it will be conveniently -+readable on the output terminal. Normally a terminal width of 80 characters is -+assumed. When the \fBresize\fP command is available, \fBnumastat\fP attempts -+to dynamically determine and fine tune the output tty width from \fBresize\fP -+output. If \fBnumastat\fP output is not to a tty, very long output lines can -+be produced, depending on how many NUMA nodes are present. In all cases, -+output width can be explicitly specified via the \fBNUMASTAT_WIDTH\fP -+environment variable. For example, \fBNUMASTAT_WIDTH=100 numastat\fP. On -+systems with many NUMA nodes, \fBnumastat \-c \-z ....\fP can be very helpful -+to selectively reduce the amount of displayed information. -+.SH "ENVIRONMENT VARIABLES" -+.LP -+.TP -+NUMASTAT_WIDTH -+.SH "FILES" -+.LP -+\fI/proc/*/numa_maps\fP -+.br -+\fI/sys/devices/system/node/node*/meminfo\fP -+.br -+\fI/sys/devices/system/node/node*/numastat\fP -+.SH "EXAMPLES" -+.I numastat \-c \-z \-m \-n -+.br -+.I numastat \-czs libvirt kvm qemu -+.br -+.I watch \-n1 numastat - .br --.I watch -n1 --differences=accumulative numastat --.SH FILES --/sys/devices/system/node/node*/numastat --.SH BUGS --The output formatting on machines with a large number of nodes --could be improved. -+.I watch \-n1 \-\-differences=cumulative numastat -+.SH "AUTHORS" -+.LP -+The original \fBnumastat\fP perl script was written circa 2003 by Andi Kleen -+<[email protected]>. The current \fBnumastat\fP program was written in 2012 -+by Bill Gray <[email protected]> to be compatible by default with the original, -+and to add options to display per-node system memory usage and per-node process -+memory allocation. -+.SH "SEE ALSO" -+.LP -+.BR numactl (8), -+.BR set_mempolicy( 2), -+.BR numa (3) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/numactl-2.0.8/diff_numastat.8 new/numactl-2.0.9/diff_numastat.8 --- old/numactl-2.0.8/diff_numastat.8 2012-10-11 22:52:24.000000000 +0200 +++ new/numactl-2.0.9/diff_numastat.8 1970-01-01 01:00:00.000000000 +0100 @@ -1,218 +0,0 @@ -diff -ruN numactl-2.0.8-rc5.orig/numastat.8 numactl-2.0.8-rc5.new/numastat.8 ---- numactl-2.0.8-rc5.orig/numastat.8 2012-08-23 15:50:37.000000000 -0400 -+++ numactl-2.0.8-rc5.new/numastat.8 2012-10-07 00:05:46.676484265 -0400 -@@ -1,82 +1,155 @@ --.\" t --.\" Copyright 2004 Andi Kleen, SuSE Labs. --.\" --.\" Permission is granted to make and distribute verbatim copies of this --.\" manual provided the copyright notice and this permission notice are --.\" preserved on all copies. --.\" --.\" Permission is granted to copy and distribute modified versions of this --.\" manual under the conditions for verbatim copying, provided that the --.\" entire resulting derived work is distributed under the terms of a --.\" permission notice identical to this one. --.\" --.\" Since the Linux kernel and libraries are constantly changing, this --.\" manual page may be incorrect or out-of-date. The author(s) assume no --.\" responsibility for errors or omissions, or for damages resulting from --.\" the use of the information contained herein. --.\" --.\" Formatted or processed versions of this manual, if unaccompanied by --.\" the source, must acknowledge the copyright and authors of this work. --.TH NUMACTL 8 "Nov 2004" "SuSE Labs" "Linux Administrator's Manual" --.SH NAME --numastat \- Print statistics about NUMA memory allocation --.SH SYNOPSIS --numastat --.SH DESCRIPTION -+.TH "numastat" "8" "1.0.0" "Bill Gray" "Administration" -+.SH "numastat" -+.LP -+\fBnumastat\fP \- Show per-NUMA-node memory statistics for processes and the operating system -+.SH "SYNTAX" -+.LP -+\fBnumastat\fP -+.br -+.LP -+\fBnumastat\fP [\fI\-V\fP] -+.br -+.LP -+\fBnumastat\fP [\fI\<PID>|<pattern>...\fP] -+.br -+.LP -+\fBnumastat\fP [\fI\-c\fP] [\fI\-m\fP] [\fI\-n\fP] [\fI\-p <PID>|<pattern>\fP] [\fI\-s[<node>]\fP] [\fI\-v\fP] [\fI\-z\fP] [\fI\<PID>|<pattern>...\fP] -+.br -+.SH "DESCRIPTION" -+.LP - .B numastat --displays NUMA allocations statistics from the kernel memory allocator. --Each process has NUMA policies that specifies on which node pages --are allocated. See --.I set_mempolicy(2) --or --.I numactl(8) --on details of the available policies. --The numastat counters keep track on what nodes memory is finally allocated. -- --The counters are separated for each node. Each count event is the allocation --of a page of memory. -- -+with no command options or arguments at all, displays per-node NUMA hit and -+miss system statistics from the kernel memory allocator. This default -+\fBnumastat\fP behavior is strictly compatible with the previous long-standing -+\fBnumastat\fP perl script, written by Andi Kleen. The default \fBnumastat\fP -+statistics shows per-node numbers (in units of pages of memory) in these categories: -+.LP .B numa_hit --is the number of allocations where an allocation was intended for --that node and succeeded there. -- -+is memory successfully allocated on this node as intended. -+.LP .B numa_miss --shows how often an allocation was intended for this node, but ended up --on another node due to low memory. -- -+is memory allocated on this node despite the process preferring some different node. Each -+.I numa_miss -+has a -+.I numa_foreign -+on another node. -+.LP .B numa_foreign --is the number of allocations that were intended for another node, --but ended up on this node. Each -+is memory intended for this node, but actually allocated on some different node. Each .I numa_foreign --event has a -+has a .I numa_miss on another node. -- -+.LP .B interleave_hit --is the number of interleave policy allocations that were intended for a --specific node and succeeded there. -- -+is interleaved memory successfully allocated on this node as intended. -+.LP .B local_node --is incremented when a process running on the node allocated --memory on the same node. -- -+is memory allocated on this node while a process was running on it. -+.LP .B other_node --is incremented when a process running on another node allocated memory on that node. --.SH SEE ALSO --.I numactl(8) --.I set_mempolicy(2) --.I numa(3) -+is memory allocated on this node while a process was running on some other node. -+.LP -+Any supplied options or arguments with the \fBnumastat\fP command will -+significantly change both the content and the format of the display. Specified -+options will cause display units to change to megabytes of memory, and will -+change other specific behaviors of \fBnumastat\fP as described below. -+.SH "OPTIONS" -+.LP -+.TP -+\fB\-c\fR -+Minimize table display width by dynamically shrinking column widths based on -+data contents. With this option, amounts of memory will be rounded to the -+nearest megabyte (rather than the usual display with two decimal places). -+Column width and inter-column spacing will be somewhat unpredictable with this -+option, but the more dense display will be very useful on systems with many -+NUMA nodes. -+.TP -+\fB\-m\fR -+Show the meminfo-like system-wide memory usage information. This option -+produces a per-node breakdown of memory usage information similar to that found -+in /proc/meminfo. -+.TP -+\fB\-n\fR -+Show the original \fBnumastat\fP statistics info. This will show the same -+information as the default \fBnumastat\fP behavior but the units will be megabytes of -+memory, and there will be other formatting and layout changes versus the -+original \fBnumastat\fP behavior. -+.TP -+\fB\-p\fR <\fBPID\fP> or <\fBpattern\fP> -+Show per-node memory allocation information for the specified PID or pattern. -+If the \-p argument is only digits, it is assumed to be a numerical PID. If -+the argument characters are not only digits, it is assumed to be a text -+fragment pattern to search for in process command lines. For example, -+\fBnumastat -p qemu\fP will attempt to find and show information for processes -+with "qemu" in the command line. Any command line arguments remaining after -+\fBnumastat\fP option flag processing is completed, are assumed to be -+additional <\fBPID\fP> or <\fBpattern\fP> process specifiers. In this sense, -+the \fB\-p\fP option flag is optional: \fBnumastat qemu\fP is equivalent to -+\fBnumastat -p qemu\fP -+.TP -+\fB\-s[<node>]\fR -+Sort the table data in descending order before displaying it, so the biggest -+memory consumers are listed first. With no specified <node>, the table will be -+sorted by the total column. If the optional <node> argument is supplied, the -+data will be sorted by the <node> column. Note that <node> must follow the -+\fB\-s\fP immediately with no intermediate white space (e.g., \fBnumastat -+\-s2\fP). -+.TP -+\fB\-v\fR -+Make some reports more verbose. In particular, process information for -+multiple processes will display detailed information for each process. -+Normally when per-node information for multiple processes is displayed, only -+the total lines are shown. -+.TP -+\fB\-V\fR -+Display \fBnumastat\fP version information and exit. -+.TP -+\fB\-z\fR -+Skip display of table rows and columns of only zero valuess. This can be used -+to greatly reduce the amount of uninteresting zero data on systems with many -+NUMA nodes. Note that when rows or columns of zeros are still displayed with -+this option, that probably means there is at least one value in the row or -+column that is actually non-zero, but rounded to zero for display. .SH NOTES --numastat output is only available on NUMA systems. -- --numastat assumes the output terminal has a width of 80 characters --and tries to format the output accordingly. --.SH EXAMPLES --.I watch -n1 numastat -+\fBnumastat\fP attempts to fold each table display so it will be conveniently -+readable on the output terminal. Normally a terminal width of 80 characters is -+assumed. When the \fBresize\fP command is available, \fBnumastat\fP attempts -+to dynamically determine and fine tune the output tty width from \fBresize\fP -+output. If \fBnumastat\fP output is not to a tty, very long output lines can -+be produced, depending on how many NUMA nodes are present. In all cases, -+output width can be explicitly specified via the \fBNUMASTAT_WIDTH\fP -+environment variable. For example, \fBNUMASTAT_WIDTH=100 numastat\fP. On -+systems with many NUMA nodes, \fBnumastat \-c \-z ....\fP can be very helpful -+to selectively reduce the amount of displayed information. -+.SH "ENVIRONMENT VARIABLES" -+.LP -+.TP -+NUMASTAT_WIDTH -+.SH "FILES" -+.LP -+\fI/proc/*/numa_maps\fP -+.br -+\fI/sys/devices/system/node/node*/meminfo\fP -+.br -+\fI/sys/devices/system/node/node*/numastat\fP -+.SH "EXAMPLES" -+.I numastat \-c \-z \-m \-n -+.br -+.I numastat \-czs libvirt kvm qemu -+.br -+.I watch \-n1 numastat .br --.I watch -n1 --differences=accumulative numastat --.SH FILES --/sys/devices/system/node/node*/numastat --.SH BUGS --The output formatting on machines with a large number of nodes --could be improved. -+.I watch \-n1 \-\-differences=cumulative numastat -+.SH "AUTHORS" -+.LP -+The original \fBnumastat\fP perl script was written circa 2003 by Andi Kleen -+<[email protected]>. The current \fBnumastat\fP program was written in 2012 -+by Bill Gray <[email protected]> to be compatible by default with the original, -+and to add options to display per-node system memory usage and per-node process -+memory allocation. -+.SH "SEE ALSO" -+.LP -+.BR numactl (8), -+.BR set_mempolicy( 2), -+.BR numa (3) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/numactl-2.0.8/int.h new/numactl-2.0.9/int.h --- old/numactl-2.0.8/int.h 2012-10-11 22:52:24.000000000 +0200 +++ new/numactl-2.0.9/int.h 1970-01-01 01:00:00.000000000 +0100 @@ -1,3 +0,0 @@ -extern int numa_sched_setaffinity_int(pid_t pid, unsigned len, unsigned long *mask); -extern int numa_sched_getaffinity_int(pid_t pid, unsigned len, unsigned long *mask); -extern long get_mempolicy_int(int *policy, unsigned long *nmask, unsigned long maxnode, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/numactl-2.0.8/libnuma.c new/numactl-2.0.9/libnuma.c --- old/numactl-2.0.8/libnuma.c 2012-10-11 22:52:24.000000000 +0200 +++ new/numactl-2.0.9/libnuma.c 2013-10-08 23:34:57.000000000 +0200 @@ -1524,6 +1524,52 @@ make_internal_alias(numa_run_on_node_mask_v2); +/* + * Given a node mask (size of a kernel nodemask_t) (probably populated by + * a user argument list) set up a map of cpus (map "cpus") on those nodes + * without any cpuset awareness. Then set affinity to those cpus. + */ +int +numa_run_on_node_mask_all(struct bitmask *bmp) +{ + int ncpus, i, k, err; + struct bitmask *cpus, *nodecpus; + + cpus = numa_allocate_cpumask(); + ncpus = cpus->size; + nodecpus = numa_allocate_cpumask(); + + for (i = 0; i < bmp->size; i++) { + if (bmp->maskp[i / BITS_PER_LONG] == 0) + continue; + if (numa_bitmask_isbitset(bmp, i)) { + if (!numa_bitmask_isbitset(numa_possible_nodes_ptr, i)) { + numa_warn(W_noderunmask, + "node %d not allowed", i); + continue; + } + if (numa_node_to_cpus_v2_int(i, nodecpus) < 0) { + numa_warn(W_noderunmask, + "Cannot read node cpumask from sysfs"); + continue; + } + for (k = 0; k < CPU_LONGS(ncpus); k++) + cpus->maskp[k] |= nodecpus->maskp[k]; + } + } + err = numa_sched_setaffinity_v2_int(0, cpus); + + numa_bitmask_free(cpus); + numa_bitmask_free(nodecpus); + + /* With possible nodes freedom it can happen easily now */ + if (err < 0) { + numa_error("numa_sched_setaffinity_v2_int() failed; abort\n"); + } + + return err; +} + nodemask_t numa_get_run_node_mask_v1(void) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/numactl-2.0.8/numa.3 new/numactl-2.0.9/numa.3 --- old/numactl-2.0.8/numa.3 2012-10-11 22:52:25.000000000 +0200 +++ new/numactl-2.0.9/numa.3 2013-10-08 23:34:57.000000000 +0200 @@ -99,6 +99,8 @@ .br .BI "int numa_run_on_node_mask(struct bitmask *" nodemask ); .br +.BI "int numa_run_on_node_mask_all(struct bitmask *" nodemask ); +.br .B struct bitmask *numa_get_run_node_mask(void); .sp .BI "void numa_tonode_memory(void *" start ", size_t " size ", int " node ); @@ -233,7 +235,8 @@ .IR numa_node_of_cpu (), .IR numa_bind (), .IR numa_run_on_node (), -.IR numa_run_on_node_mask () +.IR numa_run_on_node_mask (), +.IR numa_run_on_node_mask_all (), and .IR numa_get_run_node_mask (). These functions deal with the CPUs associated with numa nodes. @@ -686,6 +689,13 @@ .I errno is set to indicate the error. +.BR numa_run_on_node_mask_all () +runs the current task and its children only on nodes specified in +.IR nodemask +like +.I numa_run_on_node_mask +but without any cpuset awareness. + .BR numa_get_run_node_mask () returns a mask of CPUs on which the current task is allowed to run. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/numactl-2.0.8/numa.h new/numactl-2.0.9/numa.h --- old/numactl-2.0.8/numa.h 2012-10-11 22:52:25.000000000 +0200 +++ new/numactl-2.0.9/numa.h 2013-10-08 23:34:57.000000000 +0200 @@ -53,6 +53,7 @@ struct bitmask *numa_bitmask_setbit(struct bitmask *, unsigned int); struct bitmask *numa_bitmask_clearbit(struct bitmask *, unsigned int); unsigned int numa_bitmask_nbytes(struct bitmask *); +unsigned int numa_bitmask_weight(const struct bitmask *); struct bitmask *numa_bitmask_alloc(unsigned int); void numa_bitmask_free(struct bitmask *); int numa_bitmask_equal(const struct bitmask *, const struct bitmask *); @@ -237,6 +238,8 @@ /* Run current task only on nodes in mask */ int numa_run_on_node_mask(struct bitmask *mask); +/* Run current task on nodes in mask without any cpuset awareness */ +int numa_run_on_node_mask_all(struct bitmask *mask); /* Run current task only on node */ int numa_run_on_node(int node); /* Return current mask of nodes the task can run on */ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/numactl-2.0.8/numactl.8 new/numactl-2.0.9/numactl.8 --- old/numactl-2.0.8/numactl.8 2012-10-11 22:52:25.000000000 +0200 +++ new/numactl-2.0.9/numactl.8 2013-10-08 23:34:57.000000000 +0200 @@ -23,6 +23,8 @@ .SH SYNOPSIS .B numactl [ +.B \-\-all +] [ .B \-\-interleave nodes ] [ .B \-\-preferred node @@ -107,6 +109,10 @@ .TP Policy settings are: .TP +.B \-\-all, \-a +Unset default cpuset awareness, so user can use all possible CPUs/nodes +for following policy settings. +.TP .B \-\-interleave=nodes, \-i nodes Set a memory interleave policy. Memory will be allocated using round robin on @@ -272,14 +278,14 @@ Run process as above, but with an option (-l) that would be confused with a numactl option. -numactl \-\-nodebind=netdev:eth0 \-\-membind=netdev:eth0 network-server +numactl \-\-cpunodebind=netdev:eth0 \-\-membind=netdev:eth0 network-server Run network-server on the node of network device eth0 with its memory also in the same node. numactl \-\-preferred=1 numactl \-\-show Set preferred node 1 and show the resulting state. -numactl --interleave=all --shmkeyfile /tmp/shmkey +numactl --interleave=all --shm /tmp/shmkey Interleave all of the sysv shared memory region specified by /tmp/shmkey over all nodes. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/numactl-2.0.8/numactl.c new/numactl-2.0.9/numactl.c --- old/numactl-2.0.8/numactl.c 2012-10-11 22:52:25.000000000 +0200 +++ new/numactl-2.0.9/numactl.c 2013-10-08 23:34:57.000000000 +0200 @@ -29,9 +29,13 @@ #include "util.h" #include "shm.h" +#define CPUSET 0 +#define ALL 1 + int exitcode; struct option opts[] = { + {"all", 0, 0, 'a'}, {"interleave", 1, 0, 'i' }, {"preferred", 1, 0, 'p' }, {"cpubind", 1, 0, 'c' }, @@ -60,31 +64,32 @@ void usage(void) { fprintf(stderr, - "usage: numactl [--interleave=nodes] [--preferred=node]\n" - " [--physcpubind=cpus] [--cpunodebind=nodes]\n" - " [--membind=nodes] [--localalloc] command args ...\n" - " numactl [--show]\n" - " numactl [--hardware]\n" - " numactl [--length length] [--offset offset] [--shmmode shmmode]\n" - " [--strict]\n" - " [--shmid id] --shm shmkeyfile | --file tmpfsfile\n" - " [--huge] [--touch] \n" - " memory policy | --dump | --dump-nodes\n" + "usage: numactl [--all | -a] [--interleave= | -i <nodes>] [--preferred= | -p <node>]\n" + " [--physcpubind= | -C <cpus>] [--cpunodebind= | -N <nodes>]\n" + " [--membind= | -m <nodes>] [--localalloc | -l] command args ...\n" + " numactl [--show | -s]\n" + " numactl [--hardware | -H]\n" + " numactl [--length | -l <length>] [--offset | -o <offset>] [--shmmode | -M <shmmode>]\n" + " [--strict | -t]\n" + " [--shmid | -I <id>] --shm | -S <shmkeyfile>\n" + " [--shmid | -I <id>] --file | -f <tmpfsfile>\n" + " [--huge | -u] [--touch | -T] \n" + " memory policy | --dump | -d | --dump-nodes | -D\n" "\n" - "memory policy is --interleave, --preferred, --membind, --localalloc\n" - "nodes is a comma delimited list of node numbers or A-B ranges or all.\n" + "memory policy is --interleave | -i, --preferred | -p, --membind | -m, --localalloc | -l\n" + "<nodes> is a comma delimited list of node numbers or A-B ranges or all.\n" "Instead of a number a node can also be:\n" " netdev:DEV the node connected to network device DEV\n" " file:PATH the node the block device of path is connected to\n" " ip:HOST the node of the network device host routes through\n" " block:PATH the node of block device path\n" " pci:[seg:]bus:dev[:func] The node of a PCI device\n" - "cpus is a comma delimited list of cpu numbers or A-B ranges or all\n" + "<cpus> is a comma delimited list of cpu numbers or A-B ranges or all\n" "all ranges can be inverted with !\n" "all numbers and ranges can be made cpuset-relative with +\n" "the old --cpubind argument is deprecated.\n" "use --cpunodebind or --physcpubind instead\n" - "length can have g (GB), m (MB) or k (KB) suffixes\n"); + "<length> can have g (GB), m (MB) or k (KB) suffixes\n"); exit(1); } @@ -327,6 +332,8 @@ int do_shm = 0; int do_dump = 0; int shmattached = 0; +int did_node_cpu_parse = 0; +int parse_all = 0; char *shmoption; void check_cpubind(int flag) @@ -354,6 +361,12 @@ usage_msg("%s must be after shared memory specification", opt); } +void check_all_parse(int flag) +{ + if (did_node_cpu_parse) + usage_msg("--all/-a option must be before all cpu/node specifications"); +} + void get_short_opts(struct option *o, char *s) { *s++ = '+'; @@ -378,7 +391,7 @@ } } -static struct bitmask *numactl_parse_nodestring(char *s) +static struct bitmask *numactl_parse_nodestring(char *s, int flag) { static char *last; @@ -389,7 +402,11 @@ } else { last = s; } - return numa_parse_nodestring(s); + + if (flag == ALL) + return numa_parse_nodestring_all(s); + else + return numa_parse_nodestring(s); } int main(int ac, char **av) @@ -412,13 +429,17 @@ exit(0); case 'i': /* --interleave */ checknuma(); - mask = numactl_parse_nodestring(optarg); + if (parse_all) + mask = numactl_parse_nodestring(optarg, ALL); + else + mask = numactl_parse_nodestring(optarg, CPUSET); if (!mask) { printf ("<%s> is invalid\n", optarg); usage(); } errno = 0; + did_node_cpu_parse = 1; setpolicy(MPOL_INTERLEAVE); if (shmfd >= 0) numa_interleave_memory(shmptr, shmlen, mask); @@ -430,7 +451,10 @@ case 'c': /* --cpubind */ dontshm("-c/--cpubind/--cpunodebind"); checknuma(); - mask = numactl_parse_nodestring(optarg); + if (parse_all) + mask = numactl_parse_nodestring(optarg, ALL); + else + mask = numactl_parse_nodestring(optarg, CPUSET); if (!mask) { printf ("<%s> is invalid\n", optarg); usage(); @@ -438,14 +462,18 @@ errno = 0; check_cpubind(do_shm); did_cpubind = 1; - numa_run_on_node_mask(mask); + did_node_cpu_parse = 1; + numa_run_on_node_mask_all(mask); checkerror("sched_setaffinity"); break; case 'C': /* --physcpubind */ { struct bitmask *cpubuf; dontshm("-C/--physcpubind"); - cpubuf = numa_parse_cpustring(optarg); + if (parse_all) + cpubuf = numa_parse_cpustring_all(optarg); + else + cpubuf = numa_parse_cpustring(optarg); if (!cpubuf) { printf ("<%s> is invalid\n", optarg); usage(); @@ -453,6 +481,7 @@ errno = 0; check_cpubind(do_shm); did_cpubind = 1; + did_node_cpu_parse = 1; numa_sched_setaffinity(0, cpubuf); checkerror("sched_setaffinity"); free(cpubuf); @@ -461,12 +490,16 @@ case 'm': /* --membind */ checknuma(); setpolicy(MPOL_BIND); - mask = numactl_parse_nodestring(optarg); + if (parse_all) + mask = numactl_parse_nodestring(optarg, ALL); + else + mask = numactl_parse_nodestring(optarg, CPUSET); if (!mask) { printf ("<%s> is invalid\n", optarg); usage(); } errno = 0; + did_node_cpu_parse = 1; numa_set_bind_policy(1); if (shmfd >= 0) { numa_tonodemask_memory(shmptr, shmlen, mask); @@ -479,7 +512,10 @@ case 'p': /* --preferred */ checknuma(); setpolicy(MPOL_PREFERRED); - mask = numactl_parse_nodestring(optarg); + if (parse_all) + mask = numactl_parse_nodestring(optarg, ALL); + else + mask = numactl_parse_nodestring(optarg, CPUSET); if (!mask) { printf ("<%s> is invalid\n", optarg); usage(); @@ -494,6 +530,7 @@ usage(); numa_bitmask_free(mask); errno = 0; + did_node_cpu_parse = 1; numa_set_bind_policy(0); if (shmfd >= 0) numa_tonode_memory(shmptr, shmlen, node); @@ -585,6 +622,10 @@ verify_shm(set_policy, mask); break; + case 'a': /* --all */ + check_all_parse(did_node_cpu_parse); + parse_all = 1; + break; default: usage(); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/numactl-2.0.8/numastat.8 new/numactl-2.0.9/numastat.8 --- old/numactl-2.0.8/numastat.8 2012-10-11 22:52:25.000000000 +0200 +++ new/numactl-2.0.9/numastat.8 2013-10-08 23:34:57.000000000 +0200 @@ -36,26 +36,20 @@ .LP .B numa_foreign is memory intended for this node, but actually allocated on some different node. Each - .I numa_foreign +.I numa_foreign has a - .I numa_miss - on another node. +.I numa_miss +on another node. .LP .B interleave_hit is interleaved memory successfully allocated on this node as intended. .LP -.B interleave_hit -is the number of interleave policy allocations that were intended for a -specific node and succeeded there. - .B local_node is memory allocated on this node while a process was running on it. .LP - .B other_node is memory allocated on this node while a process was running on some other node. .LP - Any supplied options or arguments with the \fBnumastat\fP command will significantly change both the content and the format of the display. Specified options will cause display units to change to megabytes of memory, and will @@ -100,7 +94,10 @@ sorted by the total column. If the optional <node> argument is supplied, the data will be sorted by the <node> column. Note that <node> must follow the \fB\-s\fP immediately with no intermediate white space (e.g., \fBnumastat -\-s2\fP). +\-s2\fP). Because \fB\-s\fP can allow an optional argument, it must always be +the last option character in a compound option character string. For example, +instead of \fBnumastat \-msc\fP (which probably will not work as you expect), +use \fBnumastat \-mcs\fP .TP \fB\-v\fR Make some reports more verbose. In particular, process information for @@ -139,7 +136,6 @@ \fI/sys/devices/system/node/node*/meminfo\fP .br \fI/sys/devices/system/node/node*/numastat\fP - .SH "EXAMPLES" .I numastat \-c \-z \-m \-n .br diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/numactl-2.0.8/numastat.c new/numactl-2.0.9/numastat.c --- old/numactl-2.0.8/numastat.c 2012-10-11 22:52:25.000000000 +0200 +++ new/numactl-2.0.9/numastat.c 2013-10-08 23:34:57.000000000 +0200 @@ -724,7 +724,7 @@ void display_version_and_exit() { - char *version_string = "20120821"; + char *version_string = "20130723"; printf("%s version: %s: %s\n", prog_name, version_string, __DATE__); exit(EXIT_SUCCESS); } @@ -880,7 +880,7 @@ double value = (double)atol(tok[1 + tok_offset]); if (!compatibility_mode) { double multiplier = 1.0; - if (tokens < 5) { + if (tokens < 4) { multiplier = page_size_in_bytes; } else if (!strncmp("HugePages", tok[2], 9)) { multiplier = huge_page_size_in_bytes; Files old/numactl-2.0.8/patches.tar.gz and new/numactl-2.0.9/patches.tar.gz differ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/numactl-2.0.8/test/bind_range new/numactl-2.0.9/test/bind_range --- old/numactl-2.0.8/test/bind_range 1970-01-01 01:00:00.000000000 +0100 +++ new/numactl-2.0.9/test/bind_range 2013-10-08 23:34:59.000000000 +0200 @@ -0,0 +1,105 @@ +#!/bin/bash + +# This simple script checks --all/-a option which is used for +# supressing of default cpuset awareness of options --cpunodebind, +# --physcpubind, --interleave, --preferred and --membind. + +# NOTE: Test needs two nodes and two cpus at least + + +export old_mask + +eval_test() { + # echo "Running $1.." + $1 + if [ $? == 1 ] ; then + echo -e "$1 FAILED!" + reset_mask + exit 1 + fi + echo -e "$1 PASSED" +} + +function check_arg_order +{ + ../numactl --all --physcpubind=$HIGHESTCPU ls > /dev/null 2>&1 + if [ $? == 1 ] ; then + return 1; + fi + ../numactl --physcpubind=$HIGHESTCPU --all ls > /dev/null 2>&1 + if [ $? == 0 ] ; then + return 1; + fi + + return 0 +} + +function check_physcpubind +{ + reset_mask + set_cpu_affinity 0 + ../numactl --physcpubind=$HIGHESTCPU ls > /dev/null 2>&1 + if [ $? == 0 ] ; then # shouldn't pass so easy + return 1; + fi + ../numactl --all --physcpubind=$HIGHESTCPU ls > /dev/null 2>&1 + if [ $? == 1 ] ; then # shouldn't fail + return 1; + fi + + return 0 +} + +function check_cpunodebind +{ + local low_cpu_range + local high_cpu + + reset_mask + low_cpu_range=$(cat /sys/devices/system/node/node$LOWESTNODE/cpulist) + set_cpu_affinity $low_cpu_range + ../numactl --cpunodebind=$HIGHESTNODE ls > /dev/null 2>&1 + if [ $? == 1 ] ; then # should pass + return 1; + fi + ../numactl --all --cpunodebind=$HIGHESTNODE ls > /dev/null 2>&1 + if [ $? == 1 ] ; then # should pass for sure + return 1; + fi + + return 0 +} + +function set_cpu_affinity +{ + taskset -p -c $1 $$ > /dev/null + #echo -e "\taffinity of shell was set to" $1 +} + +function get_mask +{ + old_mask=$(taskset -p $$ | cut -f2 -d: | sed -e 's/^[ \t]*//') +} + +function reset_mask +{ + taskset -p $old_mask $$ > /dev/null + #echo -e "\taffinity of shell was reset to" $old_mask +} + +HIGHESTCPU=$(grep 'processor' /proc/cpuinfo | tail -n1 | cut -f2 -d':') +HIGHESTCPU=$(echo $HIGHESTCPU | cut -f2 -d' ') +HIGHESTNODE=$(numactl -H | grep -e 'node [0-9]* cpus' | tail -n1 | cut -f2 -d' ') +LOWESTNODE=$(numactl -H | grep -e 'node [0-9]* cpus' | head -n1 | cut -f2 -d' ') + +get_mask + +eval_test check_arg_order +eval_test check_physcpubind +eval_test check_cpunodebind + +reset_mask + +exit 0 + + diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/numactl-2.0.8/test/regress2 new/numactl-2.0.9/test/regress2 --- old/numactl-2.0.8/test/regress2 2012-10-11 22:52:26.000000000 +0200 +++ new/numactl-2.0.9/test/regress2 2013-10-08 23:34:58.000000000 +0200 @@ -15,6 +15,7 @@ } # various tests +chmod 755 bind_range # still broken #T ./prefered @@ -23,4 +24,5 @@ T ./checkaffinity T ./checktopology T ./tbitmap +T ./bind_range #T ./randmap diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/numactl-2.0.8/versions.ldscript new/numactl-2.0.9/versions.ldscript --- old/numactl-2.0.8/versions.ldscript 2012-10-11 22:52:26.000000000 +0200 +++ new/numactl-2.0.9/versions.ldscript 2013-10-08 23:34:59.000000000 +0200 @@ -165,3 +165,11 @@ *; } libnuma_1.2; +# New interface with customizable cpuset awareness +# was added into version 1.4 +libnuma_1.4 { + global: + numa_run_on_node_mask_all; + local: + *; +} libnuma_1.3; ++++++ revert_date_in_numastat.patch ++++++ --- /var/tmp/diff_new_pack.yd0rE5/_old 2013-10-20 10:53:05.000000000 +0200 +++ /var/tmp/diff_new_pack.yd0rE5/_new 2013-10-20 10:53:05.000000000 +0200 @@ -9,14 +9,14 @@ numastat.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) -Index: numactl-2.0.8/numastat.c +Index: numactl-2.0.9/numastat.c =================================================================== ---- numactl-2.0.8.orig/numastat.c -+++ numactl-2.0.8/numastat.c +--- numactl-2.0.9.orig/numastat.c ++++ numactl-2.0.9/numastat.c @@ -725,7 +725,7 @@ double huge_page_size_in_bytes = 0; void display_version_and_exit() { - char *version_string = "20120821"; + char *version_string = "20130723"; - printf("%s version: %s: %s\n", prog_name, version_string, __DATE__); + printf("%s version: %s\n", prog_name, version_string); exit(EXIT_SUCCESS); -- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
