LINUX.ORG.RU

История изменений

Исправление annulen, (текущая версия) :

Придумал такой костыль: мапить файл в левый процесс, после чего смотреть Swap в /proc/PID/smaps. Демонстрация технологии:

#!/usr/bin/env perl

use File::Spec;
use Sys::Mmap;

use strict;
use warnings;

my $filename = shift @ARGV;
open my $fh, '<', $filename or die "Failed to open file '$filename': $!";
mmap my $mh, 0, PROT_READ, MAP_SHARED, $fh or die "Failed mmap: $!";

$filename = File::Spec->rel2abs($filename);

open my $smaps, '<', "/proc/$$/smaps";
my $curObject;
my $swapped = 0;
while (<$smaps>) {
    my @F = split ' ';
    if (@F == 6) {
        $curObject = $F[5];
    }
    if ($curObject eq $filename && $F[0] eq 'Swap:') {
        print "$curObject found\n";
        $swapped += $F[1];
    }
}
print "$filename swapped $swapped kB\n";
$ ./mmap.pl /home/scratch/cfour_w9_4ring.mp2.nmr_IIII 
/home/scratch/cfour_w9_4ring.mp2.nmr_IIII found
/home/scratch/cfour_w9_4ring.mp2.nmr_IIII swapped 4194296 kB

Исправление annulen, :

Придумал такой костыль: мапить файл в левый процесс, после чего смотреть Swap в /proc/PID/smaps. Демонстрация технологии:

#!/usr/bin/env perl

use File::Spec;
use Sys::Mmap;

use strict;
use warnings;

my $filename = shift @ARGV;
open my $fh, '<', $filename or die "Failed to open file '$filename': $!";
mmap my $mh, 0, PROT_READ, MAP_SHARED, $fh or die "Failed mmap: $!";

$filename = File::Spec->rel2abs($filename);

open my $sh, '<', "/proc/$$/smaps";
my $curObject;
my $swapped = 0;
while (<$sh>) {
    my @F = split ' ';
    if (@F == 6) {
        $curObject = $F[5];
    }
    if ($curObject eq $filename && $F[0] eq 'Swap:') {
        print "$curObject found\n";
        $swapped += $F[1];
    }
}
print "$filename swapped $swapped kB\n";
$ ./mmap.pl /home/scratch/cfour_w9_4ring.mp2.nmr_IIII 
/home/scratch/cfour_w9_4ring.mp2.nmr_IIII found
/home/scratch/cfour_w9_4ring.mp2.nmr_IIII swapped 4194296 kB

Исходная версия annulen, :

Придумал такой костыль: мапить файл в левый процесс, после чего смотреть Swap в /proc/PID/smaps. Демонстрация технологии:

#!/usr/bin/env perl

use Sys::Mmap;

use strict;
use warnings;

my $filename = shift @ARGV;
open my $fh, '<', $filename or die "Failed to open file '$filename': $!";
mmap my $mh, 0, PROT_READ, MAP_SHARED, $fh or die "Failed mmap: $!";

open my $sh, '<', "/proc/$$/smaps";
my $pattern = qr/$filename$/;
my $curObject;
my $swapped = 0;
while (<$sh>) {
    my @F = split ' ';
    if (@F == 6) {
        $curObject = $F[5];
    }
    if ($curObject =~ $pattern && $F[0] eq 'Swap:') {
        print "$curObject found\n";
        $swapped += $F[1];
    }
}
print "$filename swapped $swapped kB\n";
$ ./mmap.pl /home/scratch/cfour_w9_4ring.mp2.nmr_IIII 
/home/scratch/cfour_w9_4ring.mp2.nmr_IIII found
/home/scratch/cfour_w9_4ring.mp2.nmr_IIII swapped 4194296 kB