Commit 17db029e authored by Jakob Luettgau's avatar Jakob Luettgau
Browse files

Isolate stdio-segfault/could not inflate issue. Update examples and notebook.

parent 615f7363
......@@ -48,7 +48,7 @@ docs: ## generate Sphinx HTML documentation, including API docs
$(MAKE) -C docs clean
$(MAKE) -C docs html
open-docs: docs
docs-show: docs
xdg-open docs/_build/html/index.html
servedocs: docs ## compile the docs watching for changes
......
......@@ -28,7 +28,6 @@ print(r)
print('-'*80)
# fails, symbol not found => fixed with pull request
print('log_get_modules:')
darshan.log_get_modules(log)
print(r)
......@@ -60,6 +59,19 @@ print(r)
print('-'*80)
print('log_get_mpiio_record:')
r = darshan.log_get_mpiio_record(log)
print(r)
print('-'*80)
print('log_get_stdio_record:')
r = darshan.log_get_stdio_record(log)
print(r)
print('-'*80)
print('dict(zip(names, values):')
d = dict(zip(darshan.counter_names('posix'), darshan.log_get_posix_record(log)['counters']))
print(d)
......
%% Cell type:markdown id: tags:
## Darshan Utils for Python
This notebook inlcudes a few examples how to use the darshan-utils bindings for python.
%% Cell type:code id: tags:
``` python
import darshan
log = darshan.log_open("example.darshan")
```
%% Cell type:code id: tags:
``` python
darshan.log_get_job(log)
```
%%%% Output: execute_result
{'jobid': 4478544,
'uid': 69615,
'start_time': 1490000867,
'end_time': 1490000983,
'metadata': {'lib_ver': '3.1.3', 'h': 'romio_no_indep_rw=true;cb_nodes=4'}}
%% Cell type:code id: tags:
``` python
darshan.log_get_exe(log)
```
%%%% Output: execute_result
'/global/project/projectdirs/m888/glock/tokio-abc-results/bin.edison/vpicio_uni /scratch2/scratchdirs/glock/tokioabc-s.4478544/vpicio/vpicio.hdf5 32'
%% Cell type:code id: tags:
``` python
```
%% Cell type:code id: tags:
``` python
darshan.log_get_mounts(log)
```
%%%% Output: execute_result
[('/.shared/base/default/etc/dat.conf', 'dvs'),
('/usr/lib64/libibverbs.so.1.0.0', 'dvs'),
('/usr/lib64/libibumad.so.3.0.2', 'dvs'),
('/usr/lib64/librdmacm.so.1.0.0', 'dvs'),
('/usr/lib64/libibgni.so.1.0.0', 'dvs'),
('/global/cscratch1', 'lustre'),
('/global/projectb', 'dvs'),
('/global/projecta', 'dvs'),
('/usr/sbin/ibstat', 'dvs'),
('/global/project', 'dvs'),
('/global/common', 'dvs'),
('/global/syscom', 'dvs'),
('/global/dna', 'dvs'),
('/opt/slurm', 'dvs'),
('/global/u1', 'dvs'),
('/global/u2', 'dvs'),
('/scratch1', 'lustre'),
('/scratch2', 'lustre'),
('/scratch3', 'lustre'),
('/etc', 'dvs'),
('/', 'rootfs'),
('/', 'dvs')]
%% Cell type:code id: tags:
``` python
darshan.log_get_modules(log)
```
%%%% Output: execute_result
{'POSIX': {'len': 186, 'ver': 3, 'idx': 1},
'MPI-IO': {'len': 154, 'ver': 2, 'idx': 2},
'LUSTRE': {'len': 87, 'ver': 1, 'idx': 6},
'STDIO': {'len': 3234, 'ver': 1, 'idx': 7}}
%% Cell type:code id: tags:
``` python
```
%% Cell type:markdown id: tags:
### Exploring Available Counters
Each Darshan module comes with it's own counters which can be easily listed using the `counter_names()` and `counterf_names()` functions.
%% Cell type:code id: tags:
``` python
darshan.counter_names("posix")
# also note f counters: darshan.fcounter_names("posix")
```
%%%% Output: execute_result
['POSIX_OPENS',
'POSIX_FILENOS',
'POSIX_DUPS',
'POSIX_READS',
'POSIX_WRITES',
'POSIX_SEEKS',
'POSIX_STATS',
'POSIX_MMAPS',
'POSIX_FSYNCS',
'POSIX_FDSYNCS',
'POSIX_RENAME_SOURCES',
'POSIX_RENAME_TARGETS',
'POSIX_RENAMED_FROM',
'POSIX_MODE',
'POSIX_BYTES_READ',
'POSIX_BYTES_WRITTEN',
'POSIX_MAX_BYTE_READ',
'POSIX_MAX_BYTE_WRITTEN',
'POSIX_CONSEC_READS',
'POSIX_CONSEC_WRITES',
'POSIX_SEQ_READS',
'POSIX_SEQ_WRITES',
'POSIX_RW_SWITCHES',
'POSIX_MEM_NOT_ALIGNED',
'POSIX_MEM_ALIGNMENT',
'POSIX_FILE_NOT_ALIGNED',
'POSIX_FILE_ALIGNMENT',
'POSIX_MAX_READ_TIME_SIZE',
'POSIX_MAX_WRITE_TIME_SIZE',
'POSIX_SIZE_READ_0_100',
'POSIX_SIZE_READ_100_1K',
'POSIX_SIZE_READ_1K_10K',
'POSIX_SIZE_READ_10K_100K',
'POSIX_SIZE_READ_100K_1M',
'POSIX_SIZE_READ_1M_4M',
'POSIX_SIZE_READ_4M_10M',
'POSIX_SIZE_READ_10M_100M',
'POSIX_SIZE_READ_100M_1G',
'POSIX_SIZE_READ_1G_PLUS',
'POSIX_SIZE_WRITE_0_100',
'POSIX_SIZE_WRITE_100_1K',
'POSIX_SIZE_WRITE_1K_10K',
'POSIX_SIZE_WRITE_10K_100K',
'POSIX_SIZE_WRITE_100K_1M',
'POSIX_SIZE_WRITE_1M_4M',
'POSIX_SIZE_WRITE_4M_10M',
'POSIX_SIZE_WRITE_10M_100M',
'POSIX_SIZE_WRITE_100M_1G',
'POSIX_SIZE_WRITE_1G_PLUS',
'POSIX_STRIDE1_STRIDE',
'POSIX_STRIDE2_STRIDE',
'POSIX_STRIDE3_STRIDE',
'POSIX_STRIDE4_STRIDE',
'POSIX_STRIDE1_COUNT',
'POSIX_STRIDE2_COUNT',
'POSIX_STRIDE3_COUNT',
'POSIX_STRIDE4_COUNT',
'POSIX_ACCESS1_ACCESS',
'POSIX_ACCESS2_ACCESS',
'POSIX_ACCESS3_ACCESS',
'POSIX_ACCESS4_ACCESS',
'POSIX_ACCESS1_COUNT',
'POSIX_ACCESS2_COUNT',
'POSIX_ACCESS3_COUNT',
'POSIX_ACCESS4_COUNT',
'POSIX_FASTEST_RANK',
'POSIX_FASTEST_RANK_BYTES',
'POSIX_SLOWEST_RANK',
'POSIX_SLOWEST_RANK_BYTES']
%% Cell type:code id: tags:
``` python
darshan.counter_names("mpiio")
# also note f counters: darshan.fcounter_names("mpiio")
```
%%%% Output: execute_result
['MPIIO_INDEP_OPENS',
'MPIIO_COLL_OPENS',
'MPIIO_INDEP_READS',
'MPIIO_INDEP_WRITES',
'MPIIO_COLL_READS',
'MPIIO_COLL_WRITES',
'MPIIO_SPLIT_READS',
'MPIIO_SPLIT_WRITES',
'MPIIO_NB_READS',
'MPIIO_NB_WRITES',
'MPIIO_SYNCS',
'MPIIO_HINTS',
'MPIIO_VIEWS',
'MPIIO_MODE',
'MPIIO_BYTES_READ',
'MPIIO_BYTES_WRITTEN',
'MPIIO_RW_SWITCHES',
'MPIIO_MAX_READ_TIME_SIZE',
'MPIIO_MAX_WRITE_TIME_SIZE',
'MPIIO_SIZE_READ_AGG_0_100',
'MPIIO_SIZE_READ_AGG_100_1K',
'MPIIO_SIZE_READ_AGG_1K_10K',
'MPIIO_SIZE_READ_AGG_10K_100K',
'MPIIO_SIZE_READ_AGG_100K_1M',
'MPIIO_SIZE_READ_AGG_1M_4M',
'MPIIO_SIZE_READ_AGG_4M_10M',
'MPIIO_SIZE_READ_AGG_10M_100M',
'MPIIO_SIZE_READ_AGG_100M_1G',
'MPIIO_SIZE_READ_AGG_1G_PLUS',
'MPIIO_SIZE_WRITE_AGG_0_100',
'MPIIO_SIZE_WRITE_AGG_100_1K',
'MPIIO_SIZE_WRITE_AGG_1K_10K',
'MPIIO_SIZE_WRITE_AGG_10K_100K',
'MPIIO_SIZE_WRITE_AGG_100K_1M',
'MPIIO_SIZE_WRITE_AGG_1M_4M',
'MPIIO_SIZE_WRITE_AGG_4M_10M',
'MPIIO_SIZE_WRITE_AGG_10M_100M',
'MPIIO_SIZE_WRITE_AGG_100M_1G',
'MPIIO_SIZE_WRITE_AGG_1G_PLUS',
'MPIIO_ACCESS1_ACCESS',
'MPIIO_ACCESS2_ACCESS',
'MPIIO_ACCESS3_ACCESS',
'MPIIO_ACCESS4_ACCESS',
'MPIIO_ACCESS1_COUNT',
'MPIIO_ACCESS2_COUNT',
'MPIIO_ACCESS3_COUNT',
'MPIIO_ACCESS4_COUNT',
'MPIIO_FASTEST_RANK',
'MPIIO_FASTEST_RANK_BYTES',
'MPIIO_SLOWEST_RANK',
'MPIIO_SLOWEST_RANK_BYTES']
%% Cell type:code id: tags:
``` python
darshan.counter_names("stdio")
# also note f counters: darshan.fcounter_names("stdio")
```
%%%% Output: execute_result
['STDIO_OPENS',
'STDIO_FDOPENS',
'STDIO_READS',
'STDIO_WRITES',
'STDIO_SEEKS',
'STDIO_FLUSHES',
'STDIO_BYTES_WRITTEN',
'STDIO_BYTES_READ',
'STDIO_MAX_BYTE_READ',
'STDIO_MAX_BYTE_WRITTEN',
'STDIO_FASTEST_RANK',
'STDIO_FASTEST_RANK_BYTES',
'STDIO_SLOWEST_RANK',
'STDIO_SLOWEST_RANK_BYTES']
%% Cell type:code id: tags:
``` python
posix_record = darshan.log_get_posix_record(log)
posix_record
```
%%%% Output: execute_result
{'counters': array([ 2049, 18446744073709551615, 18446744073709551615,
0, 16402, 16404,
0, 0, 0,
0, 18446744073709551615, 18446744073709551615,
0, 0, 0,
2199023259968, 0, 2199023261831,
0, 0, 0,
16384, 0, 0,
8, 16401, 1048576,
0, 134217728, 0,
0, 0, 0,
0, 0, 0,
0, 0, 0,
4, 14, 0,
0, 0, 0,
0, 0, 16384,
0, 274743689216, 274743691264,
0, 0, 10240,
4096, 0, 0,
134217728, 272, 544,
328, 16384, 8,
2], dtype=uint64),
'fcounters': array([ 2.04900000e+03, -1.00000000e+00, -1.00000000e+00, 0.00000000e+00,
1.64020000e+04, 1.64040000e+04, 0.00000000e+00, 0.00000000e+00,
0.00000000e+00, 0.00000000e+00, -1.00000000e+00, -1.00000000e+00,
0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 2.19902326e+12,
0.00000000e+00, 2.19902326e+12, 0.00000000e+00, 0.00000000e+00,
0.00000000e+00, 1.63840000e+04, 0.00000000e+00, 0.00000000e+00,
8.00000000e+00, 1.64010000e+04, 1.04857600e+06, 0.00000000e+00,
1.34217728e+08, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 4.00000000e+00,
1.40000000e+01, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 1.63840000e+04,
0.00000000e+00, 2.74743689e+11, 2.74743691e+11, 0.00000000e+00,
0.00000000e+00, 1.02400000e+04, 4.09600000e+03, 0.00000000e+00,
0.00000000e+00, 1.34217728e+08, 2.72000000e+02, 5.44000000e+02,
3.28000000e+02, 1.63840000e+04, 8.00000000e+00, 2.00000000e+00])}
%% Cell type:code id: tags:
``` python
# access a single field
posix_record['counters'][darshan.counter_names("POSIX").index('POSIX_WRITES')]
```
%%%% Output: execute_result
16402
%% Cell type:code id: tags:
``` python
dict(zip(darshan.counter_names("POSIX"), posix_record['counters']))
```
%%%% Output: execute_result
{'POSIX_OPENS': 2049,
'POSIX_FILENOS': 18446744073709551615,
'POSIX_DUPS': 18446744073709551615,
'POSIX_READS': 0,
'POSIX_WRITES': 16402,
'POSIX_SEEKS': 16404,
'POSIX_STATS': 0,
'POSIX_MMAPS': 0,
'POSIX_FSYNCS': 0,
'POSIX_FDSYNCS': 0,
'POSIX_RENAME_SOURCES': 18446744073709551615,
'POSIX_RENAME_TARGETS': 18446744073709551615,
'POSIX_RENAMED_FROM': 0,
'POSIX_MODE': 0,
'POSIX_BYTES_READ': 0,
'POSIX_BYTES_WRITTEN': 2199023259968,
'POSIX_MAX_BYTE_READ': 0,
'POSIX_MAX_BYTE_WRITTEN': 2199023261831,
'POSIX_CONSEC_READS': 0,
'POSIX_CONSEC_WRITES': 0,
'POSIX_SEQ_READS': 0,
'POSIX_SEQ_WRITES': 16384,
'POSIX_RW_SWITCHES': 0,
'POSIX_MEM_NOT_ALIGNED': 0,
'POSIX_MEM_ALIGNMENT': 8,
'POSIX_FILE_NOT_ALIGNED': 16401,
'POSIX_FILE_ALIGNMENT': 1048576,
'POSIX_MAX_READ_TIME_SIZE': 0,
'POSIX_MAX_WRITE_TIME_SIZE': 134217728,
'POSIX_SIZE_READ_0_100': 0,
'POSIX_SIZE_READ_100_1K': 0,
'POSIX_SIZE_READ_1K_10K': 0,
'POSIX_SIZE_READ_10K_100K': 0,
'POSIX_SIZE_READ_100K_1M': 0,
'POSIX_SIZE_READ_1M_4M': 0,
'POSIX_SIZE_READ_4M_10M': 0,
'POSIX_SIZE_READ_10M_100M': 0,
'POSIX_SIZE_READ_100M_1G': 0,
'POSIX_SIZE_READ_1G_PLUS': 0,
'POSIX_SIZE_WRITE_0_100': 4,
'POSIX_SIZE_WRITE_100_1K': 14,
'POSIX_SIZE_WRITE_1K_10K': 0,
'POSIX_SIZE_WRITE_10K_100K': 0,
'POSIX_SIZE_WRITE_100K_1M': 0,
'POSIX_SIZE_WRITE_1M_4M': 0,
'POSIX_SIZE_WRITE_4M_10M': 0,
'POSIX_SIZE_WRITE_10M_100M': 0,
'POSIX_SIZE_WRITE_100M_1G': 16384,
'POSIX_SIZE_WRITE_1G_PLUS': 0,
'POSIX_STRIDE1_STRIDE': 274743689216,
'POSIX_STRIDE2_STRIDE': 274743691264,
'POSIX_STRIDE3_STRIDE': 0,
'POSIX_STRIDE4_STRIDE': 0,
'POSIX_STRIDE1_COUNT': 10240,
'POSIX_STRIDE2_COUNT': 4096,
'POSIX_STRIDE3_COUNT': 0,
'POSIX_STRIDE4_COUNT': 0,
'POSIX_ACCESS1_ACCESS': 134217728,
'POSIX_ACCESS2_ACCESS': 272,
'POSIX_ACCESS3_ACCESS': 544,
'POSIX_ACCESS4_ACCESS': 328,
'POSIX_ACCESS1_COUNT': 16384,
'POSIX_ACCESS2_COUNT': 8,
'POSIX_ACCESS3_COUNT': 2}
%% Cell type:raw id: tags:
record = darshan.log_get_stdio_record(log)
record['counters']
dict(zip(darshan.counter_names("STDIO"), record['counters']))
%% Cell type:markdown id: tags:
## Plotting
In addition to darshan log access, a number of functions to generate plots commonly found in darshan reports are provided in the plots submodule. To render a plot import from `darshan.plots` and generate the desired chart as follows:
%% Cell type:code id: tags:
``` python
```
%% Cell type:code id: tags:
``` python
```
%% Cell type:code id: tags:
``` python
%matplotlib inline
```
%% Cell type:code id: tags:
``` python
# OP COUNTS
import darshan
log = darshan.log_open("example.darshan")
from darshan.plots import plot_opcounts
plot_opcounts(log)
```
%%%% Output: display_data
![](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAagAAAEYCAYAAAAJeGK1AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAgAElEQVR4nO3deXhU1fnA8e9LAgSJ7IsxYQkSZBc0gNhascjmAgooKEpULK0gblVE+7PggsVqa90tVQpaEZVqQaBSEHEBWYIiBFCWgJAQIYRFA4QsvL8/7kmcJJMQIDOZxPfzPPNk7lnuPWfmzrxzzz25V1QVY4wxJtRUq+gGGGOMMf5YgDLGGBOSLEAZY4wJSRagjDHGhCQLUMYYY0KSBShjjDEhyQKUMZWQiDwkIq9WdDuMCSQLUKZSE5EdInJZkbS/i8ho9zxGRN4UkQwROSwiq0TkyhOss6aI/ElEdorIURHZIiL3i4gEsi+ltKeXiKT4pqnqE6p6W4C2FyUir4lImoj8KCLfiMgjIlI7ENvz2e4kEflXILdhKhcLUKYqGgAsEJEGwOdANtABaAQ8A8wUkaGl1H8X6A1cDpwJ3ASMBp4t74aKJ2Q+h+41+wKoBfRU1TOBPkA94JyKbJv5GVJVe9ij0j6AHcBlPsudgXXu+WNAElCtSJ0HgO8A8bO+3kAW0KxIeg8gD2jtlpcCfwJWAT8Ac4AGPuUvBJYDB4GvgV4+eUuBycAy4CjQGrgF2AT8CCQDv3Vla7syx4FM9zgbmAT8y2edA4ENbntLgXZFXqP7gHXAIeBtIKKE1/NxYH3R16xImYuA1W5dq4GLSnk/CtoJtAQUSAB2AvuAP7i8/ng/JHJcH7926Te71+NHYDswoqL3OXsE7xEyv9yMKSeXA/Pd8z7Av1X1eJEy7wDNgTZ+6vcBVqrqLt9EVV0JpOAFsHwjgVuBKCAXeA5ARKJdGx4HGuAFh3+LSGOfuvlHZWfiBcu9wJVAHbxg9YyInK+qh/GOCHeraqR77PZtm4i0Ad4C7gYaAwuAD0Skhk+x6/CCQCxeEL/ZT98BLgPe8/Oa5W+rgevbc0BD4K/AfBFpWML6/PklcC7ea/lHEWmnqh8CTwBvuz6e54YUnwMGqHckdxGw9iS2Yyo5C1CmqrkC7wsavCG9ND9l0nzyiyqpTn493zpvqGqSCyIPA9eJSBhwI7BAVReo6nFVXQQk4gXPfNNVdYOq5qpqjqrOV9Vt6vkE+B9wcRn6CzAMmK+qi1Q1B3gab4juIp8yz6nqblXdD3wAdClhXQ1L6T94r+8WVX3Dtf0t4BvgqjK2FeARVT2qql/jHV2eV0rZ40BHEamlqmmquuEktmMqOQtQpsoQkXpAW7yhNfCGkKL8FI3yyS+qpDr59Xzr+B5lfQdUxwtgLYBrReRg/gPvqCGqhLqIyAARWSEi+135y/EfQP05220fAHf0swuI9inzvc/zI0BkCevKoOT+F9uW812RbZ1ImdriAv8w4HdAmojMF5G2J7EdU8lZgDJVST9giarmueXFwGA/kxCuw/sC3+xnHYuBHiLSzDdRRHoAzYAlPsm+ZZrjnT/Z59b9hqrW83nUVtUpPuULbiMgIjWBf+Md+TRV1Xp4R4FStGwJduMFxfz1iWtb6gnq+bMYuKaUiRuFtuU099nWYeAMn7yzTmLbxfqpqgtVtQ9e0PwG+MdJrM9UchagTFXie/4JvBl7dYHXROQsEYkQkeuBPwD3q6q/L8TFwEd454w6iEiYiFwI/At4WVW3+BS/UUTai8gZwKPAbBcc/wVcJSL9XP0IN1U8poR21wBqAulArogMAPr65O8BGopI3RLqvwNcISK9RaQ68HvgGD8dSZ6Mv+KdB5shIi3AO6cmIn8Vkc54gbONiNwgIuEiMgxoD8xz9dcCw0WkuojEA6XNlixqD9AyPziKSFMRGeTORR3Dmzzh99yYqZosQJkqwR019AM+zE9T1Qy8obUIYCPe8NW9wE2q+nYpqxsCfOzWlYkXcF4DxhUp9wYwHW/IKgK40213FzAIeAgv6OwC7qeEz5uq/ujqvgMcAG4A5vrkf4M3CSLZDRmeXaT+t3jnvZ7HO4K7CrhKVbNL6aNf7hzVRXhHgytF5Ee8gH0I2Ope0yvxgmAGMB64UlXzhz4fxpuOfgB4BJh5Ept/1/3NEJEv8V6ve/GO2vYDlwC3n2yfTOUlfn5EGlPpiEh34AVV7R6k7S3Fmz5tV3MwJkDsCMpUJRMrugHGmPITXtENMKY8qOqqim6DMaZ82RCfMcaYkGRDfJWMiEwTkb0iklQkfZy7qOcGEflzkbzmIpIpIvf5pPUXkW9FZKuITPBJf9OlJ7ltVS+hHQnuIqpbRCShvPtpgiPQ+5NP/nMikllKOx50db8VkX7l0TdT+f3sjqAaNWqkLVu2rOhmnLIff/yRsLAwtm/fTocOHQrS0tLSaN26NdWqVSMnJ4fq1X+KK9u2bQMgOzub7OxswsPDOX78OG3atKF69eokJSUhIlSrVo2IiAhatWrF4cOH2bp1K9WqVSM8PJyoqCjq168PQFpaGmlpadSsWZOIiAgOHz5M+/btCQ/3Rox37txJRkYGXbt29duHtLQ0MjIyAGjWrBl165Y0e9oE2unsT7Vr1+ass85CVUlKSirYn7755htiY2OpVasWAIcPH2bv3r0cPHjQ7z5x9OhRtm/fTtu2bcnJyWHz5s107NgRqZiLx5sKsGbNmn2q2rhYRkVfDDDYjwsuuEAru+3bt2uHDh0Klq+99lpdtGiR37Lvv/++3nfffTpx4kS9/fbbdc2aNRobG6t9+/ZVVdUlS5boOeeco48++qiqqu7Zs0dVVQ8fPqxPPfWUPvTQQ7p7925t3Lix5uTkaEpKijZu3FhvvfXWgm1fcsklOnPmTFVVXb16td54441au3Ztv+3ZsGGDdu7cWbOysjQ5OVlbtWqlubm55fPCmFNyqvvTU089paqqy5cvL9ifVFWfeOIJfeKJJ1RVNTc3V3v16qW7d+8ucZ/wLa+q2rdvX12+fPlp98tUHkCi2sViq6bNmzfz2Wef0aNHDy655BJWr14NQGZmJk8++SQTJ3qT21q1akWDBg3Izc2lWTPvIggvv/wyQ4YMYc+ePQA0adIEgOrVqzNz5kz69+9PVlZWoV+z2dnZNG3alNzcXI4cOUKLFi1ITU0lLy+P+++/nz//udCIUCFz5sxh+PDh1KxZk9jYWFq3bs2qVTa/IZSUdX/Kl5qaWrA/AcTExJCa6l1Y4oUXXmDgwIFERZV89aTS6pufNwtQVUBubi779+9nxYoVPPXUU1x33XWoKpMmTeKee+4hMrKky655X0abN2/m3XffLfRlNGbMGNq0acPvfvc7OnXqxCuvvEJ4eDjR0dFccskl/OUvfyEqKoq6devSunVrwL6MqorT2Z987d69m3fffZdx44r+f7MxZWPTzKuAmJgYBg8ejIjQvXt3qlWrxr59+1i5ciWzZ89m/PjxHDx4kGrVqnH48GHCw8PZtcu7Vmlubi7ff/89d911F5dddhnXXXcdCQkJpKen895771GtWjU2bdpEQkICAwYM4OjRo2zdupVhw4bx2muvce211/Lxxx8zdOhQZs6cydKlSyv2xTCn7WT2p4iICC644IKC/QkgJSWF6OhovvrqK7Zu3VrwA+bIkSO0bt2arVu3FtpedHS03/rGWICqAq6++mo+/vhjLr30UjZv3kx2djaNGjXis88+KygzadIkIiMjGTp0KO+++y5btmxh+/btnH322Wzbto1BgwbRoUMHDh8+zPz58/n000+pVs07wG7Xrh2RkZEkJSWxfft2unbtymeffUZmZib9+vXjgQceYPTo0fZlVEWczP50xx13kJubW7A/RUdHM2vWLGbOnEmHDh34/vufLlweGRlZbH8AGDhwIDfccAP33nsvu3fvZsuWLXTvfnoXBMnJySElJYWsrKzTWo8pXxEREcTExBSadFMqfyemqvKjsk+SGD58uJ511lkaHh6u0dHR+uqrr+qxY8d0xIgR2qFDB+3atat+9NFHxerln9TOPyE+f/58jYuL00aNGmmvXr1UVfXbb79VQGNjY7Vt27bauXNnfeSRR3THjh3aqFEjHTFihK5YsULbt2+vL730krZq1UojIyP1hhtuKLa9kk6IJyUlFZokERsba5MkKtDp7k/58venVq1a6eOPP+53W777xJw5c/Thhx8uWH788ce1VatW2qZNG12wYMFp9ys5OVnT09P1+PHjp70uUz6OHz+u6enpmpycXCyPEiZJVHjACPajsgeo03EyX0avv/66tm/fXs877zzt2rWrvv/++wXr+eMf/6jnnnuudujQQW+88UbNysoqtq1gfhkZU9TGjRstOIWg48eP68aNG4ullxSgfnb/BxUfH6+JiYkV3QxjTABt2rSJdu3aVXQzjB/+3hsRWaOq8UXL2iw+Y4wxIckmSRhjqryWE+afuNBJ2DHlihOWCQsLo1OnTuTm5tKuXTtmzJjBGWecQUpKCmPHjmXjxo0cP36cK6+8kqeeeooaNWpw5MgRfvOb37Bu3TpUlXr16vHhhx8SGRlJZGQkmZmZJCYmkpCQwFdffUWNGjXYtm0bffr0Ye3atdSpU6dc+1nR7AjKGGMCoFatWqxdu5akpCRq1KjBK6+8gqoyePBgrr76arZs2cLmzZvJzMzkD3/4AwDPPvssTZs2Zf369SQlJfHaa68Vm/EWHx/PJZdcwtNPPw3A2LFjmTx5cpULTmBHUD9LJ/o1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)
%% Cell type:code id: tags:
``` python
# HIST POSIX
import darshan
log = darshan.log_open("example.darshan")
from darshan.plots import plot_access_histogram
plot_access_histogram(log, filter="posix")
```
%%%% Output: stream
log: <cdata 'void *' 0x55a3e09b8e40>
log: <cdata 'void *' 0x556ab7dc8710>
filter: posix
data: None
%%%% Output: display_data
![](data:image/png;base64,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HMdxnILEDZTjOI5TkLiBchzHcQoSN1CO4zhOQeIGahN59tlnad++PW3btuXGG2/8wfaVK1dywgkn0LZtW/bZZx9mz55Nt27dOOKIIzaad968eVnRYciQIdSsWZMaNWr84Li33norkli8eHHGY48aNYp27drRrl07Ro0alTFPZfVInl/79u1p06ZNpa9btq5F+eOOGjVqk/KnoYdfi/T1KAQdNkePeV+uqdRxN4VCuRabhZltU0uPHj1scyktLbU2bdrY7NmzbeXKldalSxebPn36ennuvPNOO/vss83MbPTo0da1a1cbPHiwHX744T84Xvm8xx9/fFZ0uPDCC+3YY4+1jh07rnfcTz75xA455BBr2bKlLVq06AfHLikpsdatW1tJSYktWbLEWrdubUuWLNnia1FaWmo77bSTHXbYYZW+btm6Fsnj/vWvf7XatWtv0v3Lth5+LdLXoxB02Bw9Ro8ebcd3LDK7um7llyzrkNa12BjAFMvwvvYW1CYwefJk2rZtS5s2bahRowYnnngiY8aMWS/PmDFjGDIkDIjRu3dvpk+fztChQzMeL5l30KBBjBs3jnCvtkyHDz74gJ///Oc/OO5FF13E73//e8JgHj/kueee4+CDD6Zhw4Y0aNCAgw8+mGeffXaLr8XkyZPp2rUrb7zxBtWrV9/odcvmtUget0WLFqxatYrWrVtXKn8aevi1SF+PQtBhc/QYNGgQ4+Z8v9HjbgqFci02FzdQm8CCBQto0WLd8H/NmzdnwYIFFeb51a9+xc4778zXX3+90eMVFRVRr149SkpKsqJD06ZN1zvuww8/TLNmzejatesWHXtT9WjRogULFiygZcuWa89vY9ct29eiLM8XX3xBzZo11x43H3r4tUhfj0LQYXP0KCoqol5NKPkuey/7QrkWm0s+hjraJnjqqafYaaed2H777fOtCmvWrOH222/nxRdfzLcqjuM4lcZbUJtAs2bNmD9/3RRUxcXFNGvWLGOeCRMmMHbsWObNm8fZZ5/Niy++yMknn1zh8UpLS1m2bBmNGjXKig6fffbZ2uMuXbqU+fPn07VrV1q1akVxcTHdu3fn888/3+Rjb861aNasGZ988sna89tQ3jSuRVmenXfemRUrVqw9bj708GuRvh6FoMPm6FFaWsqyFdBoh4pGgtt0CuVabDaZOqa25mVLgiRWr15trVu3tjlz5qztQJw2bdp6ee644471OhCPO+44Gz9+fMYgiUx5s6XDSSedtDZIovxxd9tttwqDJFq1amVLliyxJUuWWKtWraykpGSLr8Xq1at/EBhQmeuWrWtRdtyHH37Yateuvcn3L5t6+LVIX49C0GFz9Bg9erQd1yG7QRKFci02BhUESeTdYOR62RIDZWb29NNPW7t27axNmzb2u9/9zszMrrzyShszZoyZmX333Xc2aNAg23333W3vvfe22bNnr2egNpY3Gzocd9xxVrNmTQOsevXqdsMNN6y3f9JAvfnmmzZ06NC12+6//37bfffdbffdd7eRI0dm7Vq0a9fOWrVqtUnXLRvXovxx77vvvk2+f9nWw69F+noUgg6bo8fsX9bJqoEqpGuxISoyUArbth169uxpU6ZMybcajuM4P+SaepuYf1k6euQYSW+ZWc/y8irfByVpgKT/Spol6bJ86+M4juNkhyptoCRVA+4EDgU6AIMldcivVo7jOE42qNIGCugFzDKzOWa2CngEGJhnnRzHcZwsUNUNVDNgfiJdHGWO4zhOFWeb+FBX0jBgWEx+Lem/OSy+MZB5ZNZtSwcoDD0KQQcoDD0KQQdwPTZfh2uz983UFumx5eyWSVjVDdQCoEUi3TzK1sPMRgAjcqVUEklTMkWnbGs6FIoehaBDoehRCDq4HoWnQyHpUdVdfG8C7SS1llQDOBEYm2edHMdxnCxQpVtQZlYq6TzgOaAaMNLMpudZLcdxHCcLVGkDBWBmzwDP5FuPDZAX12I5CkEHKAw9CkEHKAw9CkEHcD2SFIIOUCB6bHMjSTiO4zhVg6reB+U4juNspbiBchwnNVTR9M2OUwncQGUJSX4tHeeH1AU3VM7m4S/VzUTS/pKOk3QMgJmtycefMA6We2yuyy2nw6GSzsinDlGPvpKOyrMOP8pn+WVIqlUAOhwIvCGpn5lZvoyUpN0kNcxH2eX0qJZvHaoabqA2A0kHAaOAzsD/SBorqShPf8IDgXzPK989nzpIqiapCLiYPEamStoT+EDSdfnSIepxGHCfpC751IPwXOwB3CnpwHz8PyT1AGYAZ0tqmsuyy+mxH3CFpE7xWXUqgRuozeMo4HYzu8rMDgG+B/4mabv4J8zldW0cl3zSJN86mFkpsCKfOhD+T8XA+ZKuyqMehxAGTf4fSb3zqMefgN8B/wZul3RoHozUIoKBak2Y7aDFRvJnHUmHEq5FCbBDfFZzWb7KpavnsvwtwQ3U5jEFqF/mRjGzYwgtiH/E9Jo0C5e0r6Q7Y7IEWB3l28Xf1F8AkvokdFgCrIzyamW65EiPHwGXxuRyYMdclp8kfiT+K+BBwsvwD7ksP8EDwFPATOBkSX1yVbCk7gk35/dxWQhcCNwkqX+OjdQS4D1gZ2AH4DhJORtQWtI+wHDgPDO708zejPK9JTXJhQ5l11vSiTFd9r7YIxflbwluoCqJpBaSimLz/B3gJ0CPsu1mNhDYXtJPc6DONOB4SdfH9fnRxbgm6mI58Hd/CBwi6bfAPGCRpHpAmQ5rSNHtF/9wIriQ9pR0AVCbUGPGzNZYDj7yi32AlyRq5u8TxoP8KdBH0m1p6xD1aC2peUx+CBjQMepzanxRpq1De0Ll7Z/xZdgX+D0wAPgW+C1wg6Qj0rw3sX/4ZEktzexr4DrgS4KxbA6cKGnXtMovR1vgYTN7NaHfvcA9wLE5NJYtgF/G/wmSbgZOzlHZm41/qFsJJB0JXE1wFSwGbif8+W8EzgHeMbOvJd0NPG1mT+VApwbA64QX9LuEl+IawpBPXxEM143ZdifEcrc3s8+jQfo30DuWtwQoBQSsIlyvy80s6643SbXN7Ju4fjDQHygL1HgU2B34GvgcKDGzK1PQoR5h7MdewMOxvP8ltGBeirJxwNtm9otsl5/QoxvwFqHidAUwkdCSHAa8RqhItQD+ZmYT0tIj6nIncALw/wiVuFlAdWCemd0Tg2mGEtyQ32bbUEnaEZgAtAHeJhinrwgTmr4H1Ij6LQbuN7PPsll+Bn0GAwPMbEj0cLQltPifJUy0+i8zG5OmDgld2gA3AY2Ar2KluqDxzrqNEGs4twBnAUuBHwP/BI4Hfk0wXO9IWkP406VSY4414CYEA2hmtlTS3oQX4HaEl3MboB3wHTA9BeM0CDgfqCXpcWA0cADwBFAH+DlQjzB0/veEl1Iaxukw4GJJbwCfm9mfJH0HtARqAX+LejSJeryRbR0AzGyZpGuAc4EPgJ6E5+Fz4FRCLflw4O+SdjKzhWnoEcu+HziS8Fx2BvYEviFUGu6POv5M0lvZvifxP7Kjmc0ws3Pjf2Eg4RqcRnhGWkq638xGSnqirHKRbczsK0lnEloH+wB7E56FkwkG6nDCc9Gb6JZOA0nVzOx7wrPQUlIjMyuRNM/Mzop5+hAGu1YKhrqo7P8f+8bXmNkcScuAfUm8p8q2Z7P8rGFmvmxgIbiNRgBFCdlphNpqK6A9cAxwPfCjlHQ4mNA6egg4jtjyjdvqAXOB61O+DrsQ3DddgS6EVuQthNr5DnHbDTm4H3sRauUDCa2m/xBcKBAiGv8EnJe8Xyno0LBc+gjgL8DPCLXiQYRWVKu4fbuU9OgANI/rtYCbCa2n3YBrgY+B2+L2tuX1zpIOgwhuxIkEQ7hflN8PjAHqxXSblJ+L3sB+QJ+Y7gHcBfyBUHm6nvBS3iVur52SHgcC+5ST3U/wcjQpey4JBnNCGtclXoergbbl5DcTWvydCV6Ga9K8J1k5l3wrUMgLoWVSRGiO31lu2/nADWm9fBLlVCO4an4FnB4NQ3kj1YDQurspRT1aRiPUMJG+PD70OxMM5RyCWzHN6/EjgmsmKZsAPBjXfxqNwwUxrSyXfyQwGzihnHwgwaV3BsGNlKzQZFWHeMxdCa3Da4H2UbYDMDK+fLYjVCraZrvshA51CTMJdIvpywkVhEExPZLgAq6b8rXoT5hZ+1aCW+/6KO8JPAL8JqaL0vy/RuO0Ji4Hldv2Z+AFgtH+I/AR0DEFHQYQWornJXUguPVuA6rHdFeCpyHrlZasnk++FSjEheAmq5FI1wUmk2ilEFwHD+VIn/qEfp1awC+jkToh+WeLRiq1l1Es4ybgKqB+TLck1FIvjul6QOsc3Jtx5f/cwPMEQy5CK2bnFMreg9Ba+D0wKYOROjIaqXOBJlGW9RdyPG5NwnxoIwmVlzIjVYvQ4n8y+QynpENdQj/ogQmdhhKi1vaJsrFRlzQMkwj9W6OBU6KsCaE/rsxIdQf+Cvwh5WtRBPyGYCwPI0SU/rRcnt6EisxRafxP4vFnAfuWk3cvr2v8TfX5yMo55VuBQlviw7OA0CyvmZC3JrQg7o5/zCGEDugGOdavDnBBNFI/AX4BHJtSWc1Yv/b7U0It9eyEkepBCAhIrSZGqAycmngJD433qFUiz8+AK1O+9tsTXFrbRWP0dgYjNTA+O/Vy8CxcFe//A4RgnSMJkXO1gMeAR2O+VIxkPPbphBZB2b2pCVxDopUL7JpCuUkPwsXxP7F9TDcBpgK/i+k+wL3ESkOK16IesWJEmDx1OXBIYntqbufEvbi+nOweQhfAybl+V2XlnPKtQKEshNpYI0KN8AqC++7eckaqDiFA4h6CT7lLjnXcLqHHScCrhE7wrimUdTShg/fM5B8bGEzoe/o/YCdCp/zzhA8Q0zjnIwiuw5EEl8TdhBblLwgfxe4V851PcJ/USOOFTAbXEKHD/W3gxJhe24pJ+TmoFn+vIBjmIoIrbVWZwSQY06YplL0H0DKR7kLo37mC2AdLcEu/TKICkYIejRPr/YGngd0Ssl0IrdzO8frUTEuXDeg4OBqpzoRAkbPjeyatVvVgwgACZfegM6EieyzBFXtorq/Bli4exRexcFdLYhjsYsLICOcBf5R0kZl9ayGUvGzcu7pm9mVa+iQjexJRNkXAqqjHLoRIrR+b2QdZLrsJcAqh760XsErSs2a20MxGS1pA8HU/SWhNnGdm32VThwT9CH0Ij0vqTHDf3U/o61kJ/F+MTNoLOM7MVqWhhGWIcjKzp+O3WJfFTxF2lfQzM1uShg6Jcr+Pq88QIrI6xuUloJmktmY2C8hqCHU8xycJ1/yvZvaRmb0XPz04GLhQ0j8IFYgdCd8eZR1JhwOXS3qP0JK+lfAyfkjSqYTIzs8lTSO0qkoJnz+kQvkouBhOTvyvLCRUZhcC+5f9p7NY9h5m9lFMfgUcLekWMyuW9DFwkZlZjAL+UfwfZ1WHVMm3hSyUhQy1GoIBuBO4N6b3IlF7TEGH7sQoqPI6EWpga92OBJdOt5T0qMW6ju9jCT7+UylXI6ecCzAlXW4D/phINyWE9/8xplsS3K/NUyj7ACrRkU1oUX9BCi3ZDZQpoBPh5VcMHEQInLiTROsii+XtSOhbuin+Xgbskdi+J8GN9B9CS7Z7tnWI5bQjfBh+IMHlfEMssxZwCfAvwrdolxFa3qn0icZn4yzWeTWqlf1fSbh3CYb7C6BDCjocQfgAenRCdgshiKdFQnYKwTOUaiRlKtc53woU8hIfug4Ed9bU+CLIuj89lnUooZZ3H+Wa4oSPTicSo6NydO7JIJG1Riqmf5JDPZoS+vrOSci6A4+TcOmkUG71WEa/hKzsZdQe6BnX+xGipjqn+FzcmkiL9YNjzgQOS6RTcWXF/0KZC7MzIaz+MmDPcvnqpqVDPP7OrKswbhf1up4QIVczGo5fxP9RGkZBsZwF0QCeT3S5xu29CW7oJtFoXk460Xq1CR6OYYQ+yPJGalaU301KEYO5WPKuQF5PPrxo+sSXUZlfvyzCJfnQXUcIY03rJVSdEAF0JSEC7NakkSLUTjvH9bT81xsMv41GagQhSm1hWsaB4LI6i/VfwgcQXEvnJmSPkVJwSKKM5wn9G0ldfkJotZS1MGsCzVIqvyahYrCG4KpJbjuIYLjLglW2S+vZyPSMEPqeHohGqjbhW8BUKm/J8gmu97eAsxPyIkLL7pJMuqaky1BCdOAN0QhVIwyjtKjcfzfNsPZdCf3RjQkfy/+t3HN6GKGPMtXI2lSvc74VyNuJhxfuDELI8oOEKKAGcVsPQjTf9oQhYt4k5YAIgt++GiHw4HJCLejwcnnS+uBzP2BgXFdFZRE+FC4GOqWkx0GEfqXHgYtYV2moHf9wEwkurEsJNcRWKejQFzgjrj9ODNkl1JyLCJWVn0VZKlFZrO/aPYTQQitmXVRaU0L4duot6kznmHhGuhAi+J4mDFrcPiUdmpdL9yAMhHtqQnYUMDzla1E/sf5jQhDGeYQR238Vn5GyQJFUKwsZdGsE/B14JKa7kmJ3RK6WbXKwWIXh5k8AhprZQYQ/ezNCJ+9BhNr6cjNbaWbzCR+8vZeCHvvEgS17mtmXZva9heFw/kKIzjtQYXToUyTtY1kejiR28AP8D8ElgVkY+djCBIz9JB0Q8+5KqCEeYWbTsqlHgsaEaLARBLfmBXHImG/M7GVCZOEXhJbFMWY2LwUdagNXSjoJmE7s6LdAqYUpVv4eZWl1vJcN+oqZPU/4+PUi4GBJtxA+yr7AzJ5I3MOsEp/NWmZWqjh/UaLz3+Lve4TIwbK+0/+moMeRwHhJV5fJzOwtgmvrGknnRHEjQhBA7TSuiaRDgAmSrpdUx8xeI/TFtSW4//cgfKM4M9tlVwYzKyFECX4n6b8EY1WYwxdtAttyFF9dQofrBIJBWkiITPspcKaZvZSIzvkq24UrzBEzHBgP7CSpxMyGAliIQBpJ+KbmNqAboa8j29QkjNtXShiVgFi+SepOcOFcFMULgSMtjA6dFk8Qw3AJrosDCZWG2xPGO5XJAONLTWb2gqSzCCNkdAV+Imk2sIwQwv4toUX997IXdZb12JswC+0dhEFmHyCMTL4noaX7KuF7rytgnbHIsg5tCZ3q70rqa2bfSaphZqsk7U/oz7gzRu81JvSBTU9BjxaEj6L/CrSQdJWZXQdgZuMl/Qy4Q2FSwh8TWpSpjPFHeCbrEfq3VsTxBj8nBGw8TXg+fk5w0Q9P475sDDNbHCMbDwUONrPiXOuQdfLdhMvXQoiuGcs6F041QqTayESetPp7qhGGYCn7+r0uwVA+US7flYQ/QRqdvZ0JfT3VCH70Ml12IFRczid+ZJjWdUjoksmdWJPghv1TvC+/ILreUih/IKHV+pfE87AvoQX1Ulw/neDKuYoUO5wJrsxXCcMVPRZ16k5wR/cgtBRmA9emqENtQmVhOaF1UCfKexDcjccm8m6f8rPxY0Lrvh+hP+6qctvrxf/PTimVvzYoJeoyMT6T/eK1WUH4KLcaob8y6yOYbIKuDQjBIjn9PjPVc8q3Anm8mTUJ/uMRrB/a/SLx48+Uy/9NmVFIyF4lRijF9LWkF657NGGCxUGED2DPjPJqGfKmZag3GBoe71HfaLzT+iC5a3z5HxaN4DRCTbhmNEzvknIwRtQjGbLdHxhF+Aj6ekJF4gvgwri9MekPKbUPoWJwXzSItQkBRQfE7WkHIWxXLl0tPgtrjRShVdkoRR0yVVz2i4bpUEJl7khSCp7aTJ1z/kFyqueTbwXyfDMbEJrk/yb4tIcQas2p1ILKvYROji/D5Ff5ZdE4adbQkzocE1+E8+JL6FlCx+8/CN+y3EUcXDIFPToRZn3dgXU11ORIGWUBEhcQ3ItZb0XG4/cH/plID4jPw+CYPhj4BDgpxXtS9j3LownZzwjfvQ2Jz8We0ZimFSjTn9Bia09ope0a040Jn1l8QBwhI61nohI6bh+N1AiCa/wDUhq+iIorLjUIwTzvEUcQ8SW9ZVvug8LCnEp/JjzoZxOa6yeb2RfZLkvSEcBjksaa2Ylm9rDCDKQTJPUzs08s+JBLCS/orJPQ4V9mdoKZ/UPScoKhnkkIW14cy28KjLc4PXQK1CG86L6LnfBrLARmHEAYJeJ8QoDCQqC/ZXm0jARTgeXxS/s3zezZ2B91q6SPLfRJnUL4zCDrSKpNaMlfCPSV9DczO8nM/i7JCG7O6gQjujglHUSoMA0iBGBsT/jU4QXgZjM7XVJd4BNJu1lK/Tyxz2mZmS1P6IXZ2sCdlcDEOJpLO0Lf16I0dCEMlTTDzJ6JuswjVJbWWBgh4hLg/thP/beUdNjm2aYNFICFoXHGS3olJLM/cVeGl9BoMxtsZlfG/+C/JN1FqK12IbyU09ah7EU4TlItQo29DvCimS3LdvkJPdoQQqbXBlvYuonVWhCmBb/d4jBSZjY6BR32IbjwvjGzKfHlcwLwhaT5ZvbvGCgwCJhoIYIwFczsG4XhtZYTgnXuSdybJxUmYhxGiM561LI/CeW+hD6cswjBGBDc3LcSRvDvpzDZ4nmSVhFe3LOzqUPUoxuhf+dXChMafkFwLa+R1AloIGkioYV3BOFbo/ezrUeCvFZcnIBP+Z4jYpj2csKL8R5gtZkNjtuOIfzxexBezqmEcWfQYZWZnRS3HUZ4ST1BcO2UWpYfDkmNCSNdLyC4aC4xs+PKoiWjfjua2X9jSLOloEMyenIXYJaZXSzpHoKb7R9m9qqk8whuxXM2cLisI6kRwYW1yswGS2pF6At5zLI4PXm8vrUIsw1XJ0zR/gzhQ+zxBGNRM5b9VzN7J1tlV6BPZ8J3Z5MIQxeNM7PPJPUlBIwcZ2aTYt7GabQmM1RcriNU2oYD883se0nnE/r/Ls52+c4PcQOVBzK8hDoCX5vZx3nUoRUpvAjLlVmDEMa/P2HImnaEyLgVwH8JL8qGZvZ2SuVXI4QsP21mD0W31fPA+2Z2lqQrCTX0xoQPtE8ys3fT0GUjejYmhLmXfVrwkxTvya8Jnxj0AJ6JruenCa2oEWaW9U8sKtCjiPA8diJMazOZ4GI8AFhqYWDesmnU0yi/oCsu2ypuoPJE4iXUlxChtL/l+LuFXL0IY820FlBiYfTrAwgDe+4PvENw95UNY7MGONrMFmRbj6jLb4BPzeyhhGwiMMHMLo3f9nQC5ub6fpTT8yJCpOfBabqyJF1MGHD3X4R+2HcII6PXJbivrrLwEWgaZR9ICBN/38xmSWpGGFvwS8IcYOOAFyyMzL22PyoFPapExWVbZJvvg8oXVgAf1WXQIQ3jlKyZ7ixpgZmdE/szZhP622628BFoPYLr89ss65CckmABYXqMl83skyg7ChghqUMMxng1m+VvKtFIHkb4Di3NfhYI0ZrHxb7IvQjfxN1gZldLegjSGW0mnuMfCKNmzJB0K/AxIZz9UcJ4e2cBO0h6PMVgCKLr7p1EejnQW9JESTcXUsVlW2ObHOqoEMjxSygvOsSa6RDgOjMbRhj2v1sMAphAmPxxF8LQQjXMbFkKxukIYKqkRwDM7GFCGP0ESS2jbDFhyJ5Uoic3FTNbShi1I+vDa2XgO6C9wugZvyB8d9VL0iBgSIqGYTlh/LoHCUEzRxFaTccBdxD6wMYSgoZSmeNL0h6J5ALgN2XPROQoYPdYcVlqZq+6ccot3oLKExZC3I80sxVbqw4V1Ez7SJogabiZ/VJSHcIX+jsSBhzNGpsRPZlaLX1TydVzYWafSppPHEnfzP4VXW8zLZ2I1jJ37xIz+49CKP0BhO+LnieMGtGEMKfV3yU9ZykMr6XKf/ZRMBWXbRHvg3KyTtKlJulkwpQMh5W51GLf1wjCqOSfEOaeSuvbmrxHTxY6CuH9O1kYhPUHM8RmsZz13L1Ambt3f8KoGTPMbLik7QnBO6m8nGLF5e+EsP6+hOGayp6J3xJaTmUVl58TZhWYm4YuzoZxA+VklbKaKTDWzE6Mst8CpxEm/yszUo8QjMKkHOqW9+jJQkaSUjQKmQIRngPmmNnPo5E6jvCh+O8svQ/Ey/TxiksVwPugnKxRzqW2QtJoADO7FEoDZAAAAV9JREFUkjAy+r8knS3pCoJLLesjdmwIWzclwQqFKQnGkBjFfVsnLeMUj/09IUKwLL3czPoAraK79yXCUFs1CRGEqWJmn5rZ17H/8WygRtnzSpiB9hkzO9ONU35xA+VkjeimO4Mw+OyvgOrljNQ1hGeuNXB8Ptwm8YX0HiG8+Rjv9E6XSgQiDASaS9qdYKCuSyusvSK84lK4uIFyskqh10wLIXpyW2ETIyibmNnqtPoiN4ZXXAoT74NyUqUQPkjOoFPNfEZPbgtUtUCEWHF5jDD8Vi7C+51K4AbKSZ1cjYrgFBZVLRDBKy6FhxsoJ1W8ZuqAR1A6m4cbKCd1vGbqQGG6e53CxoMknNRx4+SAByI4m44bKMdxcoJHUDqbirv4HMfJGe7udTYFN1CO4zhOQeIuPsdxHKcgcQPlOI7jFCRuoBzHcZyCxA2U4ziOU5C4gXIcx3EKEjdQjuM4TkHy/wHQReRB24nyCAAAAABJRU5ErkJggg==)
%% Cell type:code id: tags:
``` python
# HIST MPIIO
import darshan
log = darshan.log_open("example.darshan")
from darshan.plots import plot_access_histogram
plot_access_histogram(log, filter="mpiio")
```
%%%% Output: stream
log: <cdata 'void *' 0x55a3e0c31930>
log: <cdata 'void *' 0x556ab7db8f50>
filter: mpiio
data: None
%%%% Output: display_data
![](data:image/png;base64,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)
%% Cell type:markdown id: tags:
### Close logs to release resources
Closing log files helps the system to free memory especially when many log files are analysed and memory can become a constraint.
%% Cell type:code id: tags:
``` python
darshan.log_close(log)
```
%% Cell type:code id: tags:
``` python
```
......
darshan=/home/pq/ANL/darshan-decaf/testbed/spack/opt/spack/linux-fedora29-x86_64/gcc-8.3.1/darshan-util-fork-onw37xwcivjmpw44onzryhuonj34l7db
all:
gcc -g -o program stdio_segfault.c -ldarshan-util
#include <stdio.h>
#include <stdlib.h>
#include <darshan-logutils.h>
int main(int argc, char const* argv[])
{
darshan_fd fd = darshan_log_open("example.darshan");
// get modules
/* * /
int count;
struct darshan_mod_info* mods = malloc(sizeof(struct darshan_mod_info));
// darshan-logutils.h:259:void darshan_log_get_modules (darshan_fd fd, struct darshan_mod_info **mods, int* count);
darshan_log_get_modules (fd, &mods, &count);
printf("get_modules(): count=%d, &mod_info=%p\n", count, &mods);
/* */
// get stdio record
void * buf = NULL; // important to initialize as NULL, as internal check relies on this!
//int mod_idx = 1; // POSIX: known for this example.darshan
int mod_idx = 7; // STDIO: known for this example.darshan
// darshan-logutils.h:260:int darshan_log_get_record (darshan_fd fd, int mod_idx, void **buf);
printf("get_record(): buf=%p\n", buf);
darshan_log_get_record(fd, mod_idx, &buf);
printf("get_record(): buf=%p\n", buf);
// get stdio record
void * buf2= NULL; // important to initialize as NULL, as internal check relies on this!
printf("get_record(): buf2=%p\n", buf2);
darshan_log_get_record(fd, mod_idx, &buf2);
printf("get_record(): buf2=%p\n", buf2);