The Forefront of the Development for NVDIMM on Linux Kernel (Linux Plumbers c...Yasunori Goto
The document summarizes the current status and issues with NVDIMM support on the Linux kernel, specifically with Filesystem Direct Access (DAX). It discusses two main issues that have made Filesystem DAX experimental: 1) updating metadata when data is written directly without going through the page cache, and 2) unbinding a namespace that is currently in use can forcibly remove it. It also covers other challenges like enabling/disabling DAX on a per-inode basis and supporting copy-on-write features with a DAX filesystem. The presentation will go into more details on solving specific issues like supporting reflink/dedupe for filesystem DAX and fixing reverse mapping with NVDIMM.
29回勉強会資料「PostgreSQLのリカバリ超入門」
See also http://www.interdb.jp/pgsql (Coming soon!)
初心者向け。PostgreSQLのWAL、CHECKPOINT、 オンラインバックアップの仕組み解説。
これを見たら、次は→ http://www.slideshare.net/satock/29shikumi-backup
The Forefront of the Development for NVDIMM on Linux Kernel (Linux Plumbers c...Yasunori Goto
The document summarizes the current status and issues with NVDIMM support on the Linux kernel, specifically with Filesystem Direct Access (DAX). It discusses two main issues that have made Filesystem DAX experimental: 1) updating metadata when data is written directly without going through the page cache, and 2) unbinding a namespace that is currently in use can forcibly remove it. It also covers other challenges like enabling/disabling DAX on a per-inode basis and supporting copy-on-write features with a DAX filesystem. The presentation will go into more details on solving specific issues like supporting reflink/dedupe for filesystem DAX and fixing reverse mapping with NVDIMM.
29回勉強会資料「PostgreSQLのリカバリ超入門」
See also http://www.interdb.jp/pgsql (Coming soon!)
初心者向け。PostgreSQLのWAL、CHECKPOINT、 オンラインバックアップの仕組み解説。
これを見たら、次は→ http://www.slideshare.net/satock/29shikumi-backup
[db tech showcase Tokyo 2017] D33: Deep Learningや、Analyticsのワークロードを加速するには-Ten...Insight Technology, Inc.
Deep Learningでは、GPUを用いた、コンピューティング環境を用意される事が多いですが、こちらを加速させる足回りについてはあまり意識されてきていませんでした。また、SparkでのAnalyticsについても、Pipeline処理の高速化が可能となりました。ピュアストレージが最新のユースケースのご紹介も兼ねて、AI時代のワークロードを実現する方法をお伝えします。
49. libpmemの使用サンプル(open/mmap)
#include <libpmem.h>
#define PMEM_LEN 4096
int main(int argc, char *argv[])
{
int fd;
char *pmemaddr;
int is_pmem;
/* create a pmem file */
if ((fd = open("/pmem-fs/myfile", O_CREAT|O_RDWR, 0666)) < 0) {
perror("open");
exit(1);
}
/* allocate the pmem */
if ((errno = posix_fallocate(fd, 0, PMEM_LEN)) != 0) {
perror("posix_fallocate");
exit(1);
}
/* memory map it */
if ((pmemaddr = pmem_map(fd)) == NULL) {
perror("pmem_map");
exit(1);
}
/* pmemaddrに読み書き */
close(fd);
}
Copyright 2019 FUJITSU LIMITED48
50. libpmemの使用サンプル(cpu cache flush)
:
/* determine if range is true pmem */
is_pmem = pmem_is_pmem(pmemaddr, PMEM_LEN);
/* store a string to the persistent memory */
strcpy(pmemaddr, "hello, persistent memory");
/* flush above strcpy to persistence */
if (is_pmem)
pmem_persist(pmemaddr, PMEM_LEN);
else
pmem_msync(pmemaddr, PMEM_LEN);
Copyright 2019 FUJITSU LIMITED49
51. libpmemobjの使用例 (create/open)
int main(int argc, char *argv[])
{
const char path[] = "/pmem-fs/myfile";
PMEMobjpool *pop;
/* create the pmemobj pool or open it if it already exists */
pop = pmemobj_create(path, LAYOUT_NAME, POOL_SIZE, 0666);
if (pop == NULL)
pop = pmemobj_open(path, LAYOUT_NAME);
if (pop == NULL) {
perror(path);
exit(1);
}
/* ... */
pmemobj_close(pop);
}
Copyright 2019 FUJITSU LIMITED50
54. display bad block information (1/2)
# ndctl list -DRHMu
{
"regions":[
{
"dev":"region0",
"size":"250.00 GiB (268.44 GB)",
:
"mappings":[
{
"dimm":"nmem1",
:
},
{
"dimm":"nmem0",
:
}
],
:
(cont)
Copyright 2018 FUJITSU LIMITED
region 0 is
interleaved region
by nmem1 and nmem0
command to show
region info with
dimm, health and bad block info
(output is JSON format)
53
55. display bad block information (2/2)
:
],
"badblock_count":1,
"badblocks":[
{
"offset":65536,
"length":1,
"dimms":[
"nmem0"
]
}
],
:
:
#
Copyright 2018 FUJITSU LIMITED
Current ndctl displays
which DIMM has badblock
in this region
In this example,
nmem0 has broken block
badblock info in the region
(the previous ndctl showed only
this information)
54
56. Example of SMBIOS Handle of ndctl
# ndctl list -Du
[
{
"dev":"nmem1",
"id":"XXXX-XX-XXXX-XXXXXXXX",
"handle":"0x120",
"phys_id":"0x1c"
},
{
"dev":"nmem0",
"id":"XXXX-XX-XXXX-XXXXXXXX",
"handle":"0x20",
"phys_id":"0x10",
"flag_failed_flush":true,
"flag_smart_event":true
}
]
Copyright 2018 FUJITSU LIMITED
display DIMM infomation
with human readable format
(phys_id becomes Hexadecimal)
phys_id is SMBIOS handle of
these DIMM
0x10 is broken DIMM’s handle
in this example
(The nmem0 included broken block
in previous result)
55
57. dmidecode can show the location of DIMM
# demidecode
:
Handle 0x0010, DMI type 17, 40 bytes
Memory Device
Array Handle: 0x0004
:
:
Locator: DIMM-Location-example-Slot-A
:
Type Detail: Non-Volatile Registered (Buffered)
Copyright 2018 FUJITSU LIMITED
SMBIOS handle of DIMM
Locator: shows the place of the DIMM
56