]> git.proxmox.com Git - ceph.git/blob - ceph/src/pmdk/ChangeLog
import ceph 16.2.7
[ceph.git] / ceph / src / pmdk / ChangeLog
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