せっかくだしメモリにキャッシュされてるか確認するやつ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}"