キモブロ

Please spy check please, Fucking retard

せっかくだしメモリにキャッシュされてるか確認するやつRubyで実装してみたが駄目っぽい

何が駄目なのかわらかないけど諦めた。vecのあたりが駄目な気がする。というかもうInline::Cを使ったほうがよさげ。

#!/bin/env ruby
# encoding: utf-8
# Author: kimoto

path = "test.txt"

size = File.size(path)
fd = File.sysopen(path)
printf("size: #{size}, fd: #{fd}\n")

# call mmap
# 64bit Linux only
# 9 = mmap
# PROT_NONE = 0x0
# MAP_SHARED = 0x01
pa = syscall(9, 0, size, 0x0, 0x1, fd, 0)
printf("mmappd: %X\n", pa)

# sysconf(_SC_PAGESIZE) = 4096
pagesize = 4096

# calc pagenum
pagenum = (size + pagesize - 1) / pagesize
printf("pagesize: %d, pagenum: %d\n", pagesize, pagenum)

# vec
require 'dl'
vec = DL.malloc(pagenum)
printf("malloc: %X\n", vec)

# call mincore
result = syscall(27, pa, size, vec)
printf("result: %d\n", result)

sum = 0
(0 .. (size / pagesize)).each{ |n|
  if (vec[n] & 1) == 1
    sum += 1
  end
}
DL.free(vec)

puts "cached: #{sum}"