- By Edmond Lau
- Highly Recommended 👍
- http://www.theeffectiveengineer.com/
- They are the people who get things done. Effective Engineers produce results.
(gdb) bt | |
#0 0x00007ffff7df2e60 in open64 () from /lib64/ld-linux-x86-64.so.2 | |
#1 0x00007ffff7de0918 in open_verify.constprop () from /lib64/ld-linux-x86-64.so.2 | |
#2 0x00007ffff7de1046 in open_path () from /lib64/ld-linux-x86-64.so.2 | |
#3 0x00007ffff7de26b6 in _dl_map_object () from /lib64/ld-linux-x86-64.so.2 | |
#4 0x00007ffff7de6d80 in openaux () from /lib64/ld-linux-x86-64.so.2 | |
#5 0x00007ffff7de93a4 in _dl_catch_error () from /lib64/ld-linux-x86-64.so.2 | |
#6 0x00007ffff7de7005 in _dl_map_object_deps () from /lib64/ld-linux-x86-64.so.2 | |
#7 0x00007ffff7ddcfc9 in dl_main () from /lib64/ld-linux-x86-64.so.2 | |
#8 0x00007ffff7df14ef in _dl_sysdep_start () from /lib64/ld-linux-x86-64.so.2 |
Original case ( without intercepting ): | |
/------------------------------\ | |
| application | | |
\------------------------------/ | |
| | |
| | |
/------------------------------\ | |
| libc | | |
| | |
Goal: make file operations faster! | |
Assumption: | |
One bottleneck is the block I/O layer in the kernel. | |
We suspect, that pmem file operations can be faster by avoiding said layer ( might turn out to be false, we'll see ). | |
One can implement a file system either using the block IO layer, or above it - the only way | |
to implement it above it is to not use the kernel at all. | |
File operations on a regular rainy Monday morning: | |
/------------\ |
Benchmark: fio write
Command: fio --name=seqwrite --rw=write --bs=128k --size=4g --end_fsync=1 --loops=4 # aggrb tput
Rationale: Measure the performance of a single threaded streaming write of a reasonably large file. The aim is to measure how well the file system and platform can sustain a write workload, which will depend on how well it can group and dispatch writes. It's difficult to benchmark buffered file system writes in both a short duration and in a repeatable way, as performance greatly depends on if and when the pagecache begins to flush dirty data. As a workaround, an fsync() at the end of the benchmark is called to ensure that flushing will always occur, and the benchmark also repeats four times. While this provides a much more reliable measurement, it is somewhat worst-case (applications don't always fsync), providing closer to a minimum rate – rather than a maximum rate – that you should expect.
<?php | |
/** | |
* SplClassLoader implementation that implements the technical interoperability | |
* standards for PHP 5.3 namespaces and class names. | |
* | |
* http://groups.google.com/group/php-standards/web/final-proposal | |
* | |
* // Example which loads classes for the Doctrine Common package in the | |
* // Doctrine\Common namespace. |