]>
Commit | Line | Data |
---|---|---|
a4b75251 TL |
1 | Wed Oct 28 2020 Piotr Balcer <piotr.balcer@intel.com> |
2 | ||
3 | * Version 1.10 | |
4 | ||
5 | This release introduces a new stable PMDK library, libpmem2, which | |
6 | is the next major release of libpmem. | |
7 | This library has an entirely new, but familiar, API that addresses many | |
8 | shortcomings of the previous version, while retaining all of its | |
9 | functionality. To learn more, see https://pmem.io/pmdk/libpmem2/ or | |
10 | libpmem2(7). | |
11 | The old library, libpmem, is still going to be maintained for the | |
12 | foreseeable future, but we'd like to encourage any new applications to | |
13 | leverage libpmem2. | |
14 | ||
15 | Wed Sep 16 2020 Piotr Balcer <piotr.balcer@intel.com> | |
16 | ||
17 | * Version 1.9.1 | |
18 | ||
19 | Detailed list of bug fixes: | |
20 | - common: fix LIBFABRIC flags | |
21 | - common: Add runtime SDS check and disable | |
22 | - pool: disable SDS check if not supported | |
23 | - obj: fix failure atomicity bug in huge allocs | |
24 | - obj: add missing drain after ulog processing | |
25 | ||
26 | Fri Jul 3 2020 Piotr Balcer <piotr.balcer@intel.com> | |
27 | ||
28 | * Version 1.9 | |
29 | ||
30 | This release: | |
31 | - Switches the default instruction set for memcpy, memmove and memset | |
32 | implementations on x86 to AVX512, and introduces numerous performance | |
33 | improvements for those operations on AVX and SSE2 fallback paths. | |
34 | - Optimizes transactional allocations in libpmemobj by avoiding one | |
35 | extraneous cache miss and reducing the amount of work required to perform | |
36 | a reservation. | |
37 | - Introduces a new API in libpmemobj, pmemobj_tx_set_failure_behavior, | |
38 | that enables the application to control the behavior of aborting | |
39 | transactions. | |
40 | - Improves performance of pool creation on Windows by avoiding expensive | |
41 | physical page allocation during file allocation. | |
42 | - Stabilizes support for ppc64. | |
43 | ||
44 | Other changes: | |
45 | - pmem: mem[cpy|set] optimization when eADR is available | |
46 | - obj: detect msync failures in non-pmem variants of mem[cpy|move|set] | |
47 | ||
48 | Notable bug fixes: | |
49 | - core: fix Last_errormsg_get when NO_LIBPTHREAD is defined | |
50 | - pmem: read Unsafe Shutdown Count from region instead of interleave set | |
51 | - common: fix deep_flushes failing on platforms that don't need them | |
52 | - pmem: fix data cache flush on ppc64 | |
53 | - obj: fix run allocated recalculation | |
54 | ||
55 | Fri Jan 31 2020 Marcin Ślusarz <marcin.slusarz@intel.com> | |
56 | ||
57 | * Version 1.8 | |
58 | ||
59 | This release: | |
60 | - Introduces new API in libpmemobj for user-assisted defragmentation | |
61 | (see pmemobj_defrag man page for details). | |
62 | - Introduces experimental support for PPC64LE architecture. | |
63 | - Introduces new flag in libpmemobj for opting-out of transaction aborts | |
64 | on failure (POBJ_TX_NO_ABORT), along with new variants of existing APIs | |
65 | that didn't accept flags (pmemobj_tx_xfree, pmemobj_tx_xpublish, | |
66 | pmemobj_tx_xlock, pmemobj_tx_xlog_append_buffer, pmemobj_tx_xstrdup, | |
67 | pmemobj_tx_xwcsdup). | |
68 | - Moves out libvmem and libvmmalloc to the new repository | |
69 | (https://github.com/pmem/vmem). | |
70 | ||
71 | Other changes: | |
72 | - obj: introduce new statistics useful for defrag | |
73 | - obj: introduce transient/persistent statistics enabling | |
74 | - obj: introduce pmemobj_tx_(set/get)_user_data funcs | |
75 | - obj: introduce pmemobj_(set/get)_user_data funcs | |
76 | - obj: disable workaround for offsetof() since VS 15.5 in public header | |
77 | - common: drop support for libndctl < 63 on Linux | |
78 | - pool: rename -N --no-exec to -d --dry-run | |
79 | ||
80 | Notable bug fixes: | |
81 | - obj: fix zone size calculations | |
82 | - obj: fix potential NULL-dereference in ulog_store | |
83 | - obj: fix unintended recursive locking during palloc | |
84 | - obj: fix lock release order in palloc publish | |
85 | - obj: fix transient redo log of more than 64 entries | |
86 | - obj: fix capacity ulog calculation | |
87 | - obj: fix check of unaligned capacity size | |
88 | - rpmem: add a missing case for GPSPM + FLUSH_STRICT | |
89 | - pmem: fix pmemcheck support on platforms with eADR | |
90 | - pool: fix possible memory leak | |
91 | - rpmem: fix possible memory leak in rpmemd_config_read | |
92 | - rpmem: fix possible memory leak in rpmemd_log_init | |
93 | - rpmem: fix possible use-after-free | |
94 | ||
95 | Mon Sep 30 2019 Marcin Ślusarz <marcin.slusarz@intel.com> | |
96 | ||
97 | * Version 1.7 | |
98 | ||
99 | This release: | |
100 | - Introduces new APIs in libpmemobj for managing space used by transactions. | |
101 | (see pmemobj_tx_log_append_buffer man page for details) | |
102 | - Introduces new APIs in librpmem, splitting rpmem_persist into rpmem_flush | |
103 | and rpmem_drain, allowing applications to use the flush + drain model | |
104 | already known from libpmem. (libpmemobj does not use this feature yet) | |
105 | - Optimizes large libpmemobj transactions by significantly reducing | |
106 | the amount of memory modified at the commit phase. | |
107 | - Optimizes tracking of libpmemobj reservations. | |
108 | - Adds new flags for libpmemobj's pmemobj_tx_xadd_range[_direct] API: | |
109 | POBJ_XADD_NO_SNAPSHOT and POBJ_XADD_ASSUME_INITIALIZED, allowing | |
110 | applications to optimize how memory is tracked by the library. | |
111 | ||
112 | To support some of the above changes the libpmemobj on-media layout had | |
113 | to be changed, which means that old pools have to be converted using | |
114 | pmdk-convert >= 1.7. | |
115 | ||
116 | Other changes: | |
117 | - obj: fix merging of ranges when NOFLUSH flag is used (pmem/issues#1100) | |
118 | - rpmem: fix closing of ssh connection (pmem/issues#995, pmem/issues#1060) | |
119 | - obj: abort transaction on pmemobj_tx_publish failure | |
120 | ||
121 | Internal changes: | |
122 | - test: fault injection tests for pmemblk, pmemlog, and pmemobj | |
123 | - test: improved Python testing framework | |
124 | - test: support real pmem in bad blocks tests | |
125 | - common: allow not building examples and benchmarks | |
126 | ||
127 | Tue Aug 27 2019 Marcin Ślusarz <marcin.slusarz@intel.com> | |
128 | ||
129 | * Version 1.6.1 | |
130 | ||
131 | This release fixes possible pool corruptions on Windows | |
132 | (see https://github.com/pmem/pmdk/pull/3728 for details), | |
133 | improves compatibility with newer Linux kernels with | |
134 | respect to Device DAX detection, fixes pmemobj space management | |
135 | for large pools, improves compatibility with newer toolchains, | |
136 | incorporates build fixes for FreeBSD and fixes a number of | |
137 | smaller bugs. | |
138 | ||
139 | Detailed list of bug fixes: | |
140 | - common: (win) fix possible pool file coruption (pmem/issues#972, | |
141 | pmem/issues#715, pmem/issues#603) | |
142 | - common: implement correct / robust device_dax_alignment | |
143 | (pmem/issues#1071) | |
144 | - obj: fix recycler not locating unused chunks | |
145 | - doc: update pmemobj_tx_lock documentation wrt behavior on fail | |
146 | - common: fix persistent domain detection (pmem/issues#1093) | |
147 | - common: vecq: fix a pointer-to-struct aliasing violation | |
148 | (crash on arm64) | |
149 | - common: fix minor issues related to ndctl linking | |
150 | - obj: drop recursion from pmemobj_next | |
151 | - common: fix bug in badblock file error handling | |
152 | - obj: fix handling of malloc failures | |
153 | - common: fix handling of malloc failures (ctl) | |
154 | - jemalloc: fix build with gcc 9 | |
155 | - obj: don't overwrite errno when palloc_heap_check_remote fails | |
156 | - doc: fix pmreorder emit log macro | |
157 | - rpmem: change order of rpmem init (pmem/issues#1043) | |
158 | - common: Fix build failure due to unused macro PAGE_SIZE | |
159 | - common: support older versions of pkg-config | |
160 | - tools: link with release variant of pmemcommon | |
161 | - common: add PMDK prefix to local copy of queue.h (pmem/issues#990) | |
162 | - rpmem: switch to using an open coded basename (FreeBSD) | |
163 | - common: posix_fallocate: guard against integer underflow in | |
164 | check (FreeBSD) | |
165 | - test: support Valgrind 3.15 | |
166 | - test: skip if fi_info is missing | |
167 | - test: (win) fix sparsefile error handling | |
168 | - test: fix libpmempool_feature tests that match logs | |
169 | - test: remove vmem_delete test (pmem/issues#1074) | |
170 | - test: adjust matchfiles in vmem_valgrind_region test (pmem/issues#1087) | |
171 | - test: remove old log files for windows (pmem/issues#1013) | |
172 | - test: remove invalid expect_normal_exit (pmem/issues#1092) | |
173 | - test: suppress ld leak (pmem/issues#1098) | |
174 | - test: Expose necessary symbols in libvmmalloc_dummy_funcs | |
175 | (FreeBSD) | |
176 | - test: fix tests failing because `tput` fails (FreeBSD) | |
177 | - test: avoid obj_critnib_mt taking very long on many-core machines | |
178 | - test: deal with libndctl's path without build system | |
179 | - test: overwrite old log in pmempool_create/TEST14.PS1 | |
180 | - test: fix match files in tests which use dax devices | |
181 | - test: fix match file in rpmem_addr_ext test | |
182 | - test: fix pmempool_check test | |
183 | ||
184 | Wed Aug 28 2019 Marcin Ślusarz <marcin.slusarz@intel.com> | |
185 | ||
186 | * Version 1.5.2 | |
187 | ||
188 | This release fixes possible pool corruptions on Windows | |
189 | (see https://github.com/pmem/pmdk/pull/3728 for details), | |
190 | improves compatibility with newer Linux kernels with | |
191 | respect to Device DAX detection, fixes pmemobj space management | |
192 | for large pools, improves compatibility with newer toolchains | |
193 | and fixes a number of smaller bugs. | |
194 | ||
195 | Detailed list of bug fixes: | |
196 | - common: (win) fix possible pool file coruption (pmem/issues#972, | |
197 | pmem/issues#715, pmem/issues#603) | |
198 | - common: implement correct / robust device_dax_alignment | |
199 | (pmem/issues#1071) | |
200 | - obj: fix crash after large undo log recovery | |
201 | - obj: fix recycler not locating unused chunks | |
202 | - doc: update pmemobj_tx_lock documentation wrt behavior on fail | |
203 | - common: fix build of rpm packages on suse (pmem/issues#1023) | |
204 | - common: fix persistent domain detection (pmem/issues#1093) | |
205 | - common: vecq: fix a pointer-to-struct aliasing violation | |
206 | (crash on arm64) | |
207 | - rpmem: lock file prior to unlink (pmem/issues#833) | |
208 | - common: fix for pool_set error handling (pmem/issues#1036) | |
209 | - pmreorder: fix handling of store drain flush drain pattern | |
210 | - obj: fix possible memory leak in tx_add_lock | |
211 | - pool: free bad_block vector | |
212 | - common: fix bug in badblock file error handling | |
213 | - obj: fix handling of malloc failures | |
214 | - common: fix handling of malloc failures (ctl) | |
215 | - jemalloc: fix build with gcc 9 | |
216 | - obj: don't overwrite errno when palloc_heap_check_remote fails | |
217 | - doc: fix typos in pmreorder configuration | |
218 | - doc: fix pmreorder emit log macro | |
219 | - tools: link with release variant of pmemcommon | |
220 | - test: support Valgrind 3.15 | |
221 | - test: skip if fi_info is missing | |
222 | - test: split test obj_tx_lock into two test cases (pmem/issues#1027) | |
223 | - test: (win) fix sparsefile error handling | |
224 | - test: fix libpmempool_feature tests that match logs | |
225 | - test: remove vmem_delete test (pmem/issues#1074) | |
226 | - test: adjust matchfiles in vmem_valgrind_region test (pmem/issues#1087) | |
227 | - test: remove old log files for windows (pmem/issues#1013) | |
228 | - test: remove invalid expect_normal_exit (pmem/issues#1092) | |
229 | - test: suppress ld leak (pmem/issues#1098) | |
230 | - test: fix failing pmemdetect on Windows | |
231 | - test: fix match files in tests which use dax devices | |
232 | - test: fix pmempool_check test | |
233 | ||
234 | Fri Aug 30 2019 Marcin Ślusarz <marcin.slusarz@intel.com> | |
235 | ||
236 | * Version 1.4.3 | |
237 | ||
238 | This release fixes possible pool corruptions on Windows | |
239 | (see https://github.com/pmem/pmdk/pull/3728 for details) | |
240 | and improves compatibility with newer Linux kernels with | |
241 | respect to Device DAX detection. | |
242 | ||
243 | Bug fixes: | |
244 | - common: (win) fix possible pool file coruption (pmem/issues#972, | |
245 | pmem/issues#715, pmem/issues#603) | |
246 | - common: implement correct / robust device_dax_alignment | |
247 | (pmem/issues#1071) | |
248 | - common: fix device dax detection | |
249 | - obj: fix pmemobj_check for pools with some sizes (pmem/issues#975) | |
250 | - obj: fix type numbers for pmemobj_list_insert_new | |
251 | - obj: fix pmemobj_tx_lock error handling | |
252 | - obj: fix possible memory leak in tx_add_lock | |
253 | - common: fix ctl_load_config during libpmemobj initialization | |
254 | (pmem/issues#917) | |
255 | - common: win: fix getopt returning "option is ambiguous" | |
256 | - common: fix persistent domain detection (pmem/issues#1093) | |
257 | - pool: do not copy same regions in update_uuids | |
258 | - test: split test obj_tx_lock into two test cases | |
259 | - test: remove checking errno in obj_tx_add_range_direct | |
260 | - test: remove invalid expect_normal_exit | |
261 | - test: fix int overflow in pmem_deep_persist test | |
262 | - test: fix pmempool_check test | |
263 | - test: (win) fix a few issues related to long paths | |
264 | ||
265 | Tue Aug 27 2019 Marcin Ślusarz <marcin.slusarz@intel.com> | |
266 | ||
267 | * Version 1.3.3 | |
268 | Bug fixes: | |
269 | - pmem: fix clflush bit position | |
270 | - common: implement correct / robust device_dax_alignment | |
271 | - common: fix device dax detection | |
272 | - common: fix library dependencies (pmem/issues#767) | |
273 | - common: use rpm-config CFLAGS/LDFLAGS when building packages | |
274 | (pmem/issues#768) | |
275 | - test: fix vmmalloc_malloc_hooks (pmem/issues#773) | |
276 | - test: fix compilation with clang-5.0 (pmem/issues#783) | |
277 | - pool: fix set convert of v3 -> v4 | |
278 | - common: generate pkg-config files on make install | |
279 | (pmem/issues#610) | |
280 | - common: fix dependencies for Debian's dev packages | |
281 | - test: add missing include in unittest.h | |
282 | - common: (win) fix timed locks | |
283 | - common: provide src version in GitHub tarballs | |
284 | - common: fix free function in tls | |
285 | ||
286 | Tue Aug 27 2019 Marcin Ślusarz <marcin.slusarz@intel.com> | |
287 | ||
288 | * Version 1.2.4 | |
289 | Bug fixes: | |
290 | - common: fix device dax detection (compatibility with newer kernels) | |
291 | ||
292 | Tue Mar 26 2019 Marcin Ślusarz <marcin.slusarz@intel.com> | |
293 | ||
294 | * Version 1.6 | |
295 | ||
296 | This release: | |
297 | - Enables unsafe shutdown and bad block detection on Linux | |
298 | on systems with libndctl >= 63. It is expected that systems with | |
299 | libndctl >= 63 has necessary kernel support (Linux >= 4.20). | |
300 | However, due to bugs in libndctl = 63 and Linux = 4.20, it is | |
301 | recommended to use libndctl >= 64.1 and Linux >= 5.0.4. | |
302 | On systems with libndctl < 63, PMDK uses old superuser-only | |
303 | interfaces. Support for old or new interfaces is chosen at BUILD | |
304 | time. | |
305 | - Introduces arena control interface in pmemobj, allowing applications | |
306 | to tweak performance and scalability of heap operations. See | |
307 | pmemobj_ctl_get man page ("heap" namespace) for details. | |
308 | - Introduces copy_on_write mode, which allows testing applications | |
309 | using pmemobj with pmreorder. See pmemobj_ctl_get man page | |
310 | ("copy_on_write" namespace) for details. | |
311 | ||
312 | Other changes: | |
313 | - allocate file space when creating a pool on existing file | |
314 | (pmem/issues#167) | |
315 | - initial support for testing using fault injection | |
316 | - initial Python test framework | |
317 | - improve performance of pmemobj_pool_by_ptr | |
318 | ||
319 | Bug fixes: | |
320 | - common: work around tmpfs bug during pool creation | |
321 | (pmem/issues#1018) | |
322 | - pool: race-free pmempool create --max-size | |
323 | - obj: don't modify remote pools in pmemobj_check | |
324 | ||
325 | Tue Feb 19 2019 Marcin Ślusarz <marcin.slusarz@intel.com> | |
326 | ||
327 | * Version 1.5.1 | |
328 | ||
329 | This release fixes minor bugs and improves compatibility with newer | |
330 | tool chains. | |
331 | ||
332 | Notable bug fixes: | |
333 | - common: make detection of device-dax instances more robust | |
334 | - obj: fix pmemobj_check for pools with some sizes | |
335 | - obj: don't use anon struct in an union (public header) | |
336 | - obj: fix pmemobj_tx_lock error handling | |
337 | - obj: don't use braces in an expression with clang (public header) | |
338 | - obj: suppress pmemcheck warnings for statistics | |
339 | - pmreorder: fix markers nontype issue | |
340 | ||
341 | Fri Oct 26 2018 Marcin Ślusarz <marcin.slusarz@intel.com> | |
342 | ||
343 | * Version 1.5 | |
344 | ||
345 | This release has had two major focus areas - performance and RAS | |
346 | (Reliability, Availability and Serviceability). Beyond that, it introduces | |
347 | new APIs, new tools and many other improvements. As a side effect | |
348 | of performance optimizations, the libpmemobj on-media layout had to be | |
349 | changed, which means that old pools have to be converted using pmdk-convert. | |
350 | libpmemcto experiment has been finished and removed from the tree. | |
351 | ||
352 | For more details, please see https://pmem.io/2018/10/22/release-1-5.html. | |
353 | ||
354 | New features: | |
355 | - common: unsafe shutdown detection (SDS) | |
356 | - common: detection and repair of uncorrectable memory errors (bad blocks) | |
357 | - pool: new "feature" subcommand for enabling and disabling detection of | |
358 | unsafe shutdown and uncorrectable memory errors | |
359 | - common: auto flush detection on Windows (on Linux since 1.4) | |
360 | - pmreorder: new tool for verification of persistent memory algorithms | |
361 | - obj: new on media layout | |
362 | - pmem/obj: new flexible memcpy|memmove|memset API | |
363 | - obj: new flushing APIs: pmemobj_xpersist, pmemobj_xflush | |
364 | (PMEMOBJ_F_RELAXED) | |
365 | - rpmem: new flag RPMEM_PERSIST_RELAXED for rpmem_persist | |
366 | - obj: lazily initialized volatile variables (pmemobj_volatile) | |
367 | (EXPERIMENTAL) | |
368 | - obj: allocation classes with alignment | |
369 | - obj: new action APIs: pmemobj_defer_free, POBJ_XRESERVE_NEW, | |
370 | POBJ_XRESERVE_ALLOC | |
371 | - blk/log: new "ctl" API | |
372 | ||
373 | Optimizations: | |
374 | - obj: major performance improvements for AEP NVDIMMs | |
375 | - obj: better space utilization for small allocations | |
376 | - common: call msync only on one page for deep drain | |
377 | ||
378 | Other changes: | |
379 | - cto: removed | |
380 | - obj: remove actions limit | |
381 | - common: new dependency on libndctl on Linux | |
382 | - pmempool: "convert" subcommand is now a wrapper around pmdk-convert | |
383 | (please see https://github.com/pmem/pmdk-convert) | |
384 | - obj: C++ bindings have been moved to a new repository | |
385 | (please see https://github.com/pmem/libpmemobj-cpp) | |
386 | ||
387 | Bug fixes: | |
388 | - obj: fix type numbers for pmemobj_list_insert_new | |
389 | - pmem: fix inconsistency in pmem_is_pmem | |
390 | - common: fix windows mmap destruction | |
391 | - daxio: fix checking and adjusting length | |
392 | - common: fix long paths support on Windows | |
393 | ||
394 | Thu Aug 16 2018 Marcin Ślusarz <marcin.slusarz@intel.com> | |
395 | ||
396 | * Version 1.4.2 | |
397 | ||
398 | This release fixes the way PMDK reports its version via | |
399 | pkg-config files. | |
400 | ||
401 | Bug fixes: | |
402 | - common: fix reported version | |
403 | - doc: use single "-" in NAME section (pmem/issues#914) | |
404 | ||
405 | Fri Jun 29 2018 Marcin Ślusarz <marcin.slusarz@intel.com> | |
406 | ||
407 | * Version 1.4.1 | |
408 | ||
409 | In 1.4 development cycle, we created new daxio utility | |
410 | (command line tool for performing I/O on Device-DAX), but due | |
411 | to some complications we had to disable it just before | |
412 | the 1.4 release. | |
413 | In 1.4.1 we finally enable it. Daxio depends on ndctl v60.1. | |
414 | ||
415 | Bug fixes: | |
416 | - pmem: fix clflush bit position | |
417 | - obj: fix invalid OOMs when zones are fully packed | |
418 | - obj: don't register undo logs twice in memcheck | |
419 | - pool: fix bash completion script | |
420 | - pool: fix incorrect errno after transform | |
421 | - obj: fix clang-7 compilation | |
422 | - obj: test for msync failures in non-pmem path | |
423 | - doc: add missing field to alloc class entry point | |
424 | - common: (win) fix timed locks | |
425 | - common: provide src version in GitHub tarballs | |
426 | - common: fix free function in tls | |
427 | - common: fix double close | |
428 | - test: allow testing installed libraries | |
429 | - test: fix Valgrind vs stripped libraries issue | |
430 | - test: fix dependencies between tests and tools | |
431 | - test: fix races on make pcheck -jN | |
432 | - test: use libvmmalloc.so.1 | |
433 | - test: fix incorrect number of required dax devices | |
434 | - test: add suppression for leak in ld.so | |
435 | - test: fail if memcheck detects overlapping chunks | |
436 | - test: simplify time measurements in obj_sync | |
437 | - benchmark: check lseek() return value | |
438 | - examples: catch exceptions in map_cli | |
439 | ||
440 | Thu Mar 29 2018 Krzysztof Czurylo <krzysztof.czurylo@intel.com> | |
441 | ||
442 | * Version 1.4 | |
443 | This is the first release of PMDK under a new name. | |
444 | The NVML project has been renamed to PMDK (Persistent Memory | |
445 | Development Kit). This is only the project/repo name change | |
446 | and it does not affect the names of the PMDK packages. | |
447 | See this blog article for more details on the reasons and | |
448 | impact of the name change: | |
449 | https://pmem.io/2017/12/11/NVML-is-now-PMDK.html | |
450 | ||
451 | New features: | |
452 | - common: support for concatenated Device-DAX devices | |
453 | with 2M/1G alignment | |
454 | - common: add support for MAP_SYNC flag | |
455 | - common: always enable Valgrind instrumentation (pmem/issues#292) | |
456 | - common: pool set options / headerless pools | |
457 | - pmem: add support for "deep flush" operation | |
458 | - rpmem: add rpmem_deep_persist | |
459 | - doc: split man pages and add per-function aliases (pmem/issues#385) | |
460 | ||
461 | Optimizations: | |
462 | - pmem: skip CPU cache flushing when eADR is available | |
463 | (no Windows support yet) | |
464 | - pmem: add AVX512F support in pmem_memcpy/memset (pmem/issues#656) | |
465 | ||
466 | Bug fixes: | |
467 | - common: fix library dependencies (pmem/issues#767, RHBZ #1539564) | |
468 | - common: use rpm-config CFLAGS/LDFLAGS when building packages | |
469 | (pmem/issues#768, RHBZ #1539564) | |
470 | - common: do not unload librpmem on close (pmem/issues#776) | |
471 | - common: fix NULL check in os_fopen (pmem/issues#813) | |
472 | - common: fix missing version in .pc files | |
473 | - obj: fix cancel of huge allocations (pmem/issues#726) | |
474 | - obj: fix error handling in pmemobj_open (pmem/issues#750) | |
475 | - obj: validate pe_offset in pmemobj_list_* APIs (pmem/issues#772) | |
476 | - obj: fix add_range with size == 0 (pmem/issues#781) | |
477 | - log: add check for negative iovcnt (pmem/issues#690) | |
478 | - rpmem: limit maximum number of lanes (pmem/issues#609) | |
479 | - rpmem: change order of memory registration (pmem/issues#655) | |
480 | - rpmem: fix removing remote pools (pmem/issues#721) | |
481 | - pool: fix error handling (pmem/issues#643) | |
482 | - pool: fix sync with switched parts (pmem/issues#730) | |
483 | - pool: fix sync with missing replica (pmem/issues#731) | |
484 | - pool: fix detection of Device DAX size (pmem/issues#805) | |
485 | - pool: fail pmempool_sync if there are no replicas (pmem/issues#816) | |
486 | - benchmark: fix calculating standard deviation (pmem/issues#318) | |
487 | - doc: clarify pmem_is_pmem behavior (pmem/issues#719) | |
488 | - doc: clarify pmemobj_root behavior (pmem/issues#733) | |
489 | ||
490 | Experimental features: | |
491 | - common: port PMDK to FreeBSD | |
492 | - common: add experimental support for aarch64 | |
493 | - obj: introduce allocation classes | |
494 | - obj: introduce two-phase heap ops (reserve/publish) | |
495 | (pmem/issues#380, pmem/issues#415) | |
496 | - obj: provide basic heap statistics (pmem/issues#676) | |
497 | - obj: implement run-time pool extending (pmem/issues#382) | |
498 | - cto: add close-to-open persistence library (pmem/issues#192) | |
499 | ||
500 | The following features are disabled by default, until | |
501 | ndctl v60.0 is available: | |
502 | - daxio: add utility to perform I/O on Device-DAX | |
503 | - RAS: unsafe shutdown detection/handling | |
504 | ||
505 | Wed Dec 20 2017 Krzysztof Czurylo <krzysztof.czurylo@intel.com> | |
506 | ||
507 | * Version 1.3.1 | |
508 | Bug fixes: | |
509 | - rpmem: fix issues reported by Coverity | |
510 | - rpmem: fix read error handling | |
511 | - rpmem: add fip monitor (pmem/issues#597) | |
512 | - test: add rpmemd termination handling test | |
513 | - cpp: fix pop.persist function in obj_cpp_ptr | |
514 | - rpmem: return failure for a failed allocation | |
515 | - rpmem: fix potential memory leak | |
516 | - common: fix available rm options msg (pmem/issues#651) | |
517 | - pool: fix pmempool_get_max_size | |
518 | - obj: fix potential deadlock during realloc | |
519 | (pmem/issues#635, pmem/issues#636, pmem/issues#637) | |
520 | - obj: initialize TLS data | |
521 | - rpmem: fix cleanup if fork() failed (pmem/issues#634) | |
522 | - obj: fix bogus OOM after exhausting first zone | |
523 | ||
524 | Thu Jul 13 2017 Krzysztof Czurylo <krzysztof.czurylo@intel.com> | |
525 | ||
526 | * Version 1.3 | |
527 | This release introduces some useful features and optimizations | |
528 | in libpmemobj. Most of them are experimental and controlled by | |
529 | the new pmemobj_ctl APIs. For details, please check the feature | |
530 | requests identified by the issue numbers listed next to the items below. | |
531 | ||
532 | Other important changes are related to performance tuning and | |
533 | stabilization of librpmem library, which is used by libpmemobj to get | |
534 | remote access to persistent memory and to provide basic data replication | |
535 | over RDMA. The librpmem is still considered experimental. | |
536 | ||
537 | NVML for Windows is feature complete (except for libvmmalloc). | |
538 | This release includes the support for Unicode, long paths and | |
539 | the NVML installer. | |
540 | ||
541 | New features: | |
542 | - common: add support for concatenated DAX Devices | |
543 | - common: add Unicode support on Windows | |
544 | - common: add long path support on Windows | |
545 | - common: add NVML installer for Windows | |
546 | - pmem: make pmem_is_pmem() true for Device DAX only | |
547 | - obj: add pmemobj_wcsdup()/pmemobj_tx_wcsdup() APIs | |
548 | - obj: export non-inlined pmemobj_direct() | |
549 | - obj: add PMEMOBJ_NLANES env variable | |
550 | - cpp: introduce the allocator | |
551 | - cpp: add wstring version of C++ entry points | |
552 | - vmem: add vmem_wcsdup() API entry | |
553 | - pool: add pmempool_rm() function (pmem/issues#307) | |
554 | - pool: add --force flag for create command (pmem/issues#529) | |
555 | - benchmark: add a minimal execution time option | |
556 | - benchmark: add thread affinity option | |
557 | - benchmark: print 99% and 99.9% percentiles | |
558 | - doc: separate Linux/Windows version of web-based man pages | |
559 | ||
560 | Optimizations: | |
561 | - obj: cache _pobj_cached_pool in pmemobj_direct() | |
562 | - obj: optimize thread utilization of buckets | |
563 | - obj: stop grabbing a lock when querying pool ptr | |
564 | - rpmem: use multiple endpoints | |
565 | ||
566 | Bug fixes: | |
567 | - common: fix issues reported by static code analyzers | |
568 | - pmem: fix mmap() implementation on Windows | |
569 | - pmem: fix mapping addr/length alignment on Windows | |
570 | - pmem: fix PMEM_MMAP_HINT implementation on Windows | |
571 | - pmem: fix pmem_is_pmem() on invalid memory ranges | |
572 | - pmem: fix wrong is_pmem returned by pmem_map_file() | |
573 | - pmem: fix mprotect() for private mappings on Windows | |
574 | - pmem: modify pmem_is_pmem() behavior for len==0 | |
575 | - obj: add failsafe to prevent allocs in constructor | |
576 | - cpp: fix swap implementation | |
577 | - cpp: fix sync primitives' constructors | |
578 | - cpp: fix wrong pointer type in the allocator | |
579 | - cpp: return persistent_ptr::swap to being public | |
580 | - pool: treat invalid answer as 'n' | |
581 | - pool: unify flags value for dry run | |
582 | - pool: transform for remote replicas | |
583 | - rpmem: persistency method detection | |
584 | - benchmark: fix time measurement | |
585 | ||
586 | Experimental features/optimizations: | |
587 | - obj: pmemobjctl - statistics and control submodule | |
588 | (pmem/issues#194, pmem/issues#211) | |
589 | - obj: zero-overhead allocations - customizable alloc header | |
590 | (pmem/issues#347) | |
591 | - obj: flexible run size index (pmem/issues#377) | |
592 | - obj: dynamic range cache (pmem/issues#378) | |
593 | - obj: asynchronous post-commit (pmem/issues#381) | |
594 | - obj: configurable object cache (pmem/issues#515) | |
595 | - obj: add cache size and threshold tx params | |
596 | - obj: add CTL var for suppressing expensive checks | |
597 | - rpmem: add rpmem_set_attr() API entry | |
598 | - rpmem: switch to libfabric v1.4.2 | |
599 | ||
600 | Thu May 18 2017 Krzysztof Czurylo <krzysztof.czurylo@intel.com> | |
601 | ||
602 | * Version 1.2.3 | |
603 | Bug fixes: | |
604 | - test: extend timeout for selected tests | |
605 | - test: reduce number of operations in obj_tx_mt | |
606 | - test: define cfree() as free() in vmmalloc_calloc | |
607 | ||
608 | Other changes: | |
609 | - common: move Docker images to new repo | |
610 | ||
611 | Sat Apr 15 2017 Krzysztof Czurylo <krzysztof.czurylo@intel.com> | |
612 | ||
613 | * Version 1.2.2 | |
614 | Bug fixes: | |
615 | - pmempool: fix mapping type in pool_params_parse | |
616 | - test: limit number of arenas in vmem_stats | |
617 | - test: do not run pool_lock test as root | |
618 | - common: fix pkg-config files | |
619 | - common: fix building packages for Debian | |
620 | ||
621 | Tue Feb 21 2017 Krzysztof Czurylo <krzysztof.czurylo@intel.com> | |
622 | ||
623 | * Version 1.2.1 | |
624 | This NVML release changes the behavior of pmem_is_pmem() on Linux. | |
625 | The pmem_is_pmem() function will now return true only if the entire | |
626 | range is mapped directly from Device DAX (/dev/daxX.Y) without an | |
627 | intervening file system, and only if the corresponding file mapping | |
628 | was created with pmem_map_file(). See libpmem(7) for details. | |
629 | ||
630 | Bug fixes: | |
631 | - jemalloc: fix test compilation on Fedora 26 (rawhide) | |
632 | - test: fix cpp test compilation on Fedora 26 (rawhide) | |
633 | - common: use same queue.h on linux and windows | |
634 | - common: queue.h clang static analyzer fix | |
635 | - common: fix path handling in build-dpkg.sh | |
636 | - test: fix match files in pmempool_transform/TEST8 | |
637 | ||
638 | Fri Dec 30 2016 Krzysztof Czurylo <krzysztof.czurylo@intel.com> | |
639 | ||
640 | * Version 1.2 - Windows Technical Preview #1 | |
641 | This is the first Technical Preview release of NVML for Windows. | |
642 | It is based on NVML 1.2 version, but not all the 1.2 features | |
643 | are ported to Windows. In particular, Device DAX and remote access | |
644 | to persistent memory (librpmem) are not supported by design. | |
645 | ||
646 | NOTE: This release has not gone through the full validation cycle, | |
647 | but only through some basic tests on Travis and AppVeyor. | |
648 | Thus, it cannot be assumed "Production quality" and should not | |
649 | be used in production environments. | |
650 | ||
651 | Besides several minor improvements and bug fixes, all the other | |
652 | changes since NVML 1.2 release were related to Windows support: | |
653 | - win: port libvmem (and jemalloc) | |
654 | - win: benchmarks Windows port | |
655 | - win: fix mapping files of unaligned length | |
656 | - win: clean up possible race condition in mmap_init() | |
657 | - win: enable QueryVirtualMemoryInformation() in pmem_is_pmem() | |
658 | - test: check open handles at START/DONE | |
659 | - test: port all the remaining unit tests | |
660 | (scope, pmem_map, obj_debug, util_poolset, pmempool_*) | |
661 | - win: add resource files for versioning | |
662 | ||
663 | Known issues and limitations of Windows version of NVML: | |
664 | - Unicode support is missing. The UTF/USC-encoded file paths | |
665 | or pool set files may not be handled correctly. | |
666 | - The libvmmalloc library is not ported yet. | |
667 | - The on-media format of pmem pools is not portable at the moment. | |
668 | The pmem pools created using Windows version of NVM libraries | |
669 | cannot be open on Linux and vice versa. | |
670 | - Despite the fact the current version of NVML would work | |
671 | with any recent version of Windows OS, to take full | |
672 | advantage of PMEM and NVML features and to benefit from | |
673 | the PMEM performance, the recommended platforms needs be | |
674 | equipped with the real NVDIMMs hardware and should support | |
675 | the native, Microsoft's implementation of DAX-enabled file | |
676 | system (i.e. Windows Server 2016 or later). | |
677 | In case of using NVML with older versions of Windows or with | |
678 | the custom implementation of PMEM/DAX drivers, the performance | |
679 | might not be satisfactory. Please, contact the provider | |
680 | of PMEM/DAX drivers for your platform to get the customized | |
681 | version of NVML in such case. | |
682 | ||
683 | Thu Dec 15 2016 Krzysztof Czurylo <krzysztof.czurylo@intel.com> | |
684 | ||
685 | * Version 1.2 | |
686 | This NVML release causes a "flag day" for libpmemobj. | |
687 | The pmemobj pools built under NVML 1.1 are incompatible with pools built | |
688 | under NVML 1.2 and later. This is because an issue was discovered with | |
689 | the alignment of locks (pmem/issues#358) and, although rare, the issue potentially | |
690 | impacts program correctness, making the fix mandatory. | |
691 | The major version number of the pmemobj pool layout and the version | |
692 | of the libpmemobj API is changed to prevent the use of the potentially | |
693 | incorrect layout. | |
694 | ||
695 | Other key changes introduced in this release: | |
696 | - Add Device DAX support, providing that "optimized flush" mechanism | |
697 | defined in SNIA NVM Programming Model can safely be used, even | |
698 | if PMEM-aware file system supporting that model is not available, | |
699 | or if the user does not want to use the file system for some reason. | |
700 | - Add a package for libpmemobj C++ bindings. | |
701 | C++ API is no longer considered experimental. | |
702 | Web-based documentation for C++ API is available on https://pmem.io. | |
703 | - Add "sync" and "transform" commands to pmempool utility. | |
704 | The "sync" command allows one to recover missing or corrupted part(s) | |
705 | of a pool set from a healthy replica, while the "transform" command | |
706 | is a convenient way for modifying the structure of an existing | |
707 | pool set, i.e. by adding or removing replicas. | |
708 | - Add experimental support for remote access to persistent memory and | |
709 | basic remote data replication over RDMA (librpmem). Experimental | |
710 | support for remote replicas is also provided by libpmemobj library. | |
711 | ||
712 | New features: | |
713 | - common: add Device DAX support (pmem/issues#197) | |
714 | - obj: add C++ bindings package (libpmemobj++-devel) | |
715 | - obj: add TOID_OFFSETOF macro | |
716 | - pmempool: add "sync" and "transform" commands | |
717 | (pmem/issues#172, pmem/issues#196) | |
718 | ||
719 | Bug fixes: | |
720 | - obj: force alignment of pmem lock structures (pmem/issues#358) | |
721 | - blk: cast translation entry to uint64_t when calculating data offset | |
722 | - obj: fix Valgrind instrumentation of chunk headers and cancelled | |
723 | allocations | |
724 | - obj: set error message when user called pmemobj_tx_abort() | |
725 | - obj: fix status returned by pmemobj_list_insert() (pmem/issues#226) | |
726 | - obj: defer allocation of global structures | |
727 | ||
728 | Optimizations: | |
729 | - obj: fast path for pmemobj_pool_by_ptr() when inside a transaction | |
730 | - obj: simplify and optimize allocation class generation | |
731 | ||
732 | Experimental features: | |
733 | - rpmem: add support for remote access to persistent memory and basic | |
734 | remote data replication over RDMA | |
735 | - libpmempool: add pmempool_sync() and pmempool_transform() (pmem/issues#196) | |
736 | - obj: introduce pmemobj_oid() | |
737 | - obj: add pmemobj_tx_xalloc()/pmemobj_tx_xadd_range() APIs and | |
738 | the corresponding macros | |
739 | - obj: add transaction stage transition callbacks | |
740 | ||
741 | Thu Jun 23 2016 Krzysztof Czurylo <krzysztof.czurylo@intel.com> | |
742 | ||
743 | * Version 1.1 | |
744 | This NVML release introduces a new version of libpmemobj pool layout. | |
745 | Internal undo log structure has been modified to improve performance | |
746 | of pmemobj transactions. Memory pools created with older versions | |
747 | of the libpmemobj library must be converted to the new format using | |
748 | "pmempool convert" command. See pmempool-convert(1) for details. | |
749 | ||
750 | A new "libpmempool" library is available, providing support for | |
751 | off-line pool management and diagnostics. Initially it provides only | |
752 | "check" and "repair" operations for log and blk memory pools, and for | |
753 | BTT devices. | |
754 | ||
755 | Other changes: | |
756 | - pmem: deprecate PCOMMIT | |
757 | - blk: match BTT Flog initialization with Linux NVDIMM BTT | |
758 | - pmem: defer pmem_is_pmem() initialization (pmem/issues#158) | |
759 | - obj: add TOID_TYPEOF macro | |
760 | ||
761 | Bug fixes: | |
762 | - doc: update description of valid file size units (pmem/issues#133) | |
763 | - pmempool: fix --version short option in man page (pmem/issues#135) | |
764 | - pmempool: print usage when running rm without arg (pmem/issues#136) | |
765 | - cpp: clarify polymorphism in persistent_ptr (pmem/issues#150) | |
766 | - obj: let the before flag be any non-zero value (pmem/issues#151) | |
767 | - obj: fix compare array pptr to nullptr (pmem/issues#152) | |
768 | - obj: cpp pool.get_root() fix (pmem/issues#156) | |
769 | - log/blk: set errno if replica section is specified (pmem/issues#161) | |
770 | - cpp: change exception message (pmem/issues#163) | |
771 | - doc: remove duplicated words in man page (pmem/issues#164) | |
772 | - common: always append EXTRA_CFLAGS after our CFLAGS | |
773 | ||
774 | Experimental features: | |
775 | - Implementation of C++ bindings for libpmempobj is complete. | |
776 | Web-based documentation for C++ API is available on https://pmem.io. | |
777 | Note that C++ API is still considered experimental. Do not use it | |
778 | in production environments. | |
779 | - Porting NVML to Windows is in progress. There are MS Visual Studio | |
780 | solution/projects available, allowing to compile libpmem, libpmemlog, | |
781 | libpmemblk and libpmemobj on Windows, but the libraries are not fully | |
782 | functional and most of the test are not enabled yet. | |
783 | ||
784 | Thu Apr 07 2016 Krzysztof Czurylo <krzysztof.czurylo@intel.com> | |
785 | ||
786 | * Version 1.0 | |
787 | The API of six libraries (libpmem, libpmemblk, libpmemlog, | |
788 | libpmemobj, libvmem, libvmmalloc) is complete and stable. | |
789 | The on-media layout of persistent memory pools will be maintained | |
790 | from this point, and if changed it will be backward compatible. | |
791 | Man pages are all complete. | |
792 | This release has been validated to "Production quality". | |
793 | ||
794 | For the purpose of new features planned for next releases of NVML | |
795 | there have been some API modifications made: | |
796 | - pmem: pmem_map replaced with pmem_map_file | |
797 | - log/blk: 'off_t' substituted with 'long long' | |
798 | - obj: type numbers extended to 64-bit | |
799 | - obj: new entry points and macros added: | |
800 | pmemobj_tx_errno, pmemobj_tx_lock, pmemobj_mutex_timedlock, | |
801 | TX_ADD_DIRECT, TX_ADD_FIELD_DIRECT, TX_SET_DIRECT | |
802 | ||
803 | Other key changes since version 0.4 include: | |
804 | - common: updated/fixed installation scripts | |
805 | - common: eliminated dependency on libuuid | |
806 | - pmem: CPU features/ISA detection using CPUID | |
807 | - obj: improved error handling | |
808 | - obj: atomic allocation fails if constructor returns error | |
809 | - obj: multiple performance optimizations | |
810 | - obj: object store refactoring | |
811 | - obj: additional examples and benchmarks | |
812 | ||
813 | This release also introduces a prototype implementation | |
814 | of C++ bindings for libpmemobj. Note that C++ API is still | |
815 | experimental and should not be used in production environments. | |
816 | ||
817 | Fri Dec 04 2015 Krzysztof Czurylo <krzysztof.czurylo@intel.com> | |
818 | ||
819 | * Version 0.4 | |
820 | This NVML version primarily focuses on improving code quality | |
821 | and reliability. In addition to a couple of bug fixes, | |
822 | the changes include: | |
823 | - benchmarks for libpmemobj, libpmemblk and libvmem | |
824 | - additional pmemobj tests and examples | |
825 | - pool mapping address randomization | |
826 | - added pmempool "rm" command | |
827 | - eliminated libpmem dependency on libpthread | |
828 | - enabled extra warnings | |
829 | - minor performance improvements | |
830 | Man pages are all complete. | |
831 | This release is considered "Beta quality" by the team, having | |
832 | been thoroughly validated, including significant performance analysis. | |
833 | The pmempool command does not yet support "check" and "repair" | |
834 | operations for pmemobj type pools. | |
835 | ||
836 | Sun Sep 13 2015 Andy Rudoff <andy.rudoff@intel.com> | |
837 | ||
838 | * Version 0.3 | |
839 | NVML is now feature complete, adding support for: | |
840 | - pool sets | |
841 | - pmemobj local replication (active/passive) | |
842 | - experimental valgrind support | |
843 | - pmempool support for all pool types | |
844 | Man pages are all complete. | |
845 | This release is considered "Alpha quality" by the team, having | |
846 | gone through significant validation but only some performance | |
847 | analysis at this point. | |
848 | ||
849 | Tue Jun 30 2015 Andy Rudoff <andy.rudoff@intel.com> | |
850 | ||
851 | * Version 0.2 | |
852 | NVML now consists of six libraries: | |
853 | - libpmem (basic flushing, etc) | |
854 | - libpmemblk, libpmemlog, libpmemobj (transactions) | |
855 | - libvmem, libvmmalloc (volatile use of pmem) | |
856 | The "pmempool" command is available for managing pmem files. | |
857 | Man pages for all the above are complete. | |
858 | The only things documented in man pages but not implemented are: | |
859 | - pmem sets (ability to spread a pool over a set of files) | |
860 | - replication (coming for libpmemobj) | |
861 | The pmempool command does not yet support pmemobj type pools. | |
862 | ||
863 | Thu Sep 11 2014 Andy Rudoff <andy.rudoff@intel.com> | |
864 | ||
865 | * Version 0.1 | |
866 | Initial development done in 0.1 builds |