История изменений
Исправление 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