Re: [PATCH v2 2/2] crypto: qat - Enforce valid numa configuration
On 10/13/2014 09:24 PM, Tadeusz Struk wrote: snip - node = adf_get_dev_node_id(pdev); - accel_dev = kzalloc_node(sizeof(*accel_dev), GFP_KERNEL, node); + if (num_possible_nodes() 1 dev_to_node(pdev-dev) 0) { + /* If the accelerator is connected to a node with no memory + * there is no point in using the accelerator since the remote + * memory transaction will be very slow. */ + dev_err(pdev-dev, Invalid NUMA configuration.\n); This is a lot better. Thank you for taking my comments into account here. Let's say I have a non-functional qat device and I see the above message in the boot log. The log doesn't say what to do ... so perhaps change it to dev_err(pdev-dev, FW_BUG numa node is set to %d. This can be overridden by using the numa_node module parameter., dev_to_node(pdev-dev)); and add a numa_node module parameter to let the user set that at module load time in case their FW is broken? I've found that sysadmins are knowledgeable about these types of things these days and are more than capable of looking at sysfs and numactl to determine where a device is. P. -- To unsubscribe from this list: send the line unsubscribe linux-crypto in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH v2 2/2] crypto: qat - Enforce valid numa configuration
On 10/14/2014 03:53 AM, Prarit Bhargava wrote: -node = adf_get_dev_node_id(pdev); -accel_dev = kzalloc_node(sizeof(*accel_dev), GFP_KERNEL, node); +if (num_possible_nodes() 1 dev_to_node(pdev-dev) 0) { +/* If the accelerator is connected to a node with no memory + * there is no point in using the accelerator since the remote + * memory transaction will be very slow. */ +dev_err(pdev-dev, Invalid NUMA configuration.\n); This is a lot better. Thank you for taking my comments into account here. Thanks for taking the time to review my patch and providing your comments. Let's say I have a non-functional qat device and I see the above message in the boot log. The log doesn't say what to do ... so perhaps change it to dev_err(pdev-dev, FW_BUG numa node is set to %d. This can be overridden by using the numa_node module parameter., dev_to_node(pdev-dev)); and add a numa_node module parameter to let the user set that at module load time in case their FW is broken? I've found that sysadmins are knowledgeable about these types of things these days and are more than capable of looking at sysfs and numactl to determine where a device is. But then what if there are two devices and each belongs to different node. In this case we would fix one and break the other. I think if the FW is broken then using on core encryption will be safer. If a sysadmins is really knowledgeable, then she or he can change the code to customize it for a given platform and rebuild the module. Other than that as far as I know module parameters are not encouraged. T -- To unsubscribe from this list: send the line unsubscribe linux-crypto in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH v2 2/2] crypto: qat - Enforce valid numa configuration
On 10/14/2014 10:50 AM, Tadeusz Struk wrote: On 10/14/2014 03:53 AM, Prarit Bhargava wrote: - node = adf_get_dev_node_id(pdev); - accel_dev = kzalloc_node(sizeof(*accel_dev), GFP_KERNEL, node); + if (num_possible_nodes() 1 dev_to_node(pdev-dev) 0) { + /* If the accelerator is connected to a node with no memory +* there is no point in using the accelerator since the remote +* memory transaction will be very slow. */ + dev_err(pdev-dev, Invalid NUMA configuration.\n); This is a lot better. Thank you for taking my comments into account here. Thanks for taking the time to review my patch and providing your comments. Let's say I have a non-functional qat device and I see the above message in the boot log. The log doesn't say what to do ... so perhaps change it to dev_err(pdev-dev, FW_BUG numa node is set to %d. This can be overridden by using the numa_node module parameter., dev_to_node(pdev-dev)); and add a numa_node module parameter to let the user set that at module load time in case their FW is broken? I've found that sysadmins are knowledgeable about these types of things these days and are more than capable of looking at sysfs and numactl to determine where a device is. But then what if there are two devices and each belongs to different node. In this case we would fix one and break the other. I think if the Oh, that's a really good point. But can you at least change the message to do a FW_BUG and dump the node information? That would be useful for debugging. P. FW is broken then using on core encryption will be safer. If a sysadmins is really knowledgeable, then she or he can change the code to customize it for a given platform and rebuild the module. Other than that as far as I know module parameters are not encouraged. T -- To unsubscribe from this list: send the line unsubscribe linux-crypto in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH v2 2/2] crypto: qat - Enforce valid numa configuration
On 10/14/2014 08:41 AM, Prarit Bhargava wrote: Oh, that's a really good point. But can you at least change the message to do a FW_BUG and dump the node information? That would be useful for debugging. But this not always will be a FW_BUG. If a user will not populate one of the nodes with memory this will happen as well. I could see this to be the main reason of this message to be printed. In this case num_possible_nodes() will be e.g. 2 and dev_to_node(pdev-dev) will be -1 so I don't really know what will be a useful info to print so we don't confuse the user. T -- To unsubscribe from this list: send the line unsubscribe linux-crypto in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH v2 2/2] crypto: qat - Enforce valid numa configuration
On 10/14/2014 01:18 PM, Tadeusz Struk wrote: On 10/14/2014 08:41 AM, Prarit Bhargava wrote: Oh, that's a really good point. But can you at least change the message to do a FW_BUG and dump the node information? That would be useful for debugging. But this not always will be a FW_BUG. If a user will not populate one of the nodes with memory this will happen as well. Hmmm ... let's maybe think about this. I wonder if there is some mechanism with which we can determine that? Larry Woodman -- is there any mm related call that we can make to determine if a node is memory-less? I could see this to be the main reason of this message to be printed. In this case num_possible_nodes() will be e.g. 2 and dev_to_node(pdev-dev) will be -1 so I don't really know what will be a useful info to print so we don't confuse the user. If you see -1, it means No node was assigned ... so -1 in a debug message is okay IMO. P. T -- To unsubscribe from this list: send the line unsubscribe linux-crypto in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH v2 2/2] crypto: qat - Enforce valid numa configuration
On 10/14/2014 01:27 PM, Prarit Bhargava wrote: On 10/14/2014 01:18 PM, Tadeusz Struk wrote: On 10/14/2014 08:41 AM, Prarit Bhargava wrote: Oh, that's a really good point. But can you at least change the message to do a FW_BUG and dump the node information? That would be useful for debugging. But this not always will be a FW_BUG. If a user will not populate one of the nodes with memory this will happen as well. Hmmm ... let's maybe think about this. I wonder if there is some mechanism with which we can determine that? Larry Woodman -- is there any mm related call that we can make to determine if a node is memory-less? I could see this to be the main reason of this message to be printed. In this case num_possible_nodes() will be e.g. 2 and dev_to_node(pdev-dev) will be -1 so I don't really know what will be a useful info to print so we don't confuse the user. If you see -1, it means No node was assigned ... so -1 in a debug message is okay IMO. Never mind -- I'm not thinking straight after a long weekend :) This is all okay. The message above will only print iff node 0, ie) -1. So I'll ack shortly. P. P. T -- To unsubscribe from this list: send the line unsubscribe linux-crypto in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH v2 2/2] crypto: qat - Enforce valid numa configuration
In a system with NUMA configuration we want to enforce that the accelerator is connected to a node with memory to avoid cross QPI memory transaction. Otherwise there is no point in using the accelerator as the encryption in software will be faster. Signed-off-by: Tadeusz Struk tadeusz.st...@intel.com --- drivers/crypto/qat/qat_common/adf_accel_devices.h |3 +- drivers/crypto/qat/qat_common/adf_transport.c | 12 +--- drivers/crypto/qat/qat_common/qat_algs.c |5 ++- drivers/crypto/qat/qat_common/qat_crypto.c|8 +++-- drivers/crypto/qat/qat_dh895xcc/adf_admin.c |2 + drivers/crypto/qat/qat_dh895xcc/adf_drv.c | 32 - drivers/crypto/qat/qat_dh895xcc/adf_isr.c |2 + 7 files changed, 30 insertions(+), 34 deletions(-) diff --git a/drivers/crypto/qat/qat_common/adf_accel_devices.h b/drivers/crypto/qat/qat_common/adf_accel_devices.h index 9282381..fe7b3f0 100644 --- a/drivers/crypto/qat/qat_common/adf_accel_devices.h +++ b/drivers/crypto/qat/qat_common/adf_accel_devices.h @@ -198,8 +198,7 @@ struct adf_accel_dev { struct dentry *debugfs_dir; struct list_head list; struct module *owner; - uint8_t accel_id; - uint8_t numa_node; struct adf_accel_pci accel_pci_dev; + uint8_t accel_id; } __packed; #endif diff --git a/drivers/crypto/qat/qat_common/adf_transport.c b/drivers/crypto/qat/qat_common/adf_transport.c index 5f3fa45..9dd2cb7 100644 --- a/drivers/crypto/qat/qat_common/adf_transport.c +++ b/drivers/crypto/qat/qat_common/adf_transport.c @@ -419,9 +419,10 @@ static int adf_init_bank(struct adf_accel_dev *accel_dev, WRITE_CSR_RING_BASE(csr_addr, bank_num, i, 0); ring = bank-rings[i]; if (hw_data-tx_rings_mask (1 i)) { - ring-inflights = kzalloc_node(sizeof(atomic_t), - GFP_KERNEL, - accel_dev-numa_node); + ring-inflights = + kzalloc_node(sizeof(atomic_t), +GFP_KERNEL, +dev_to_node(GET_DEV(accel_dev))); if (!ring-inflights) goto err; } else { @@ -469,13 +470,14 @@ int adf_init_etr_data(struct adf_accel_dev *accel_dev) int i, ret; etr_data = kzalloc_node(sizeof(*etr_data), GFP_KERNEL, - accel_dev-numa_node); + dev_to_node(GET_DEV(accel_dev))); if (!etr_data) return -ENOMEM; num_banks = GET_MAX_BANKS(accel_dev); size = num_banks * sizeof(struct adf_etr_bank_data); - etr_data-banks = kzalloc_node(size, GFP_KERNEL, accel_dev-numa_node); + etr_data-banks = kzalloc_node(size, GFP_KERNEL, + dev_to_node(GET_DEV(accel_dev))); if (!etr_data-banks) { ret = -ENOMEM; goto err_bank; diff --git a/drivers/crypto/qat/qat_common/qat_algs.c b/drivers/crypto/qat/qat_common/qat_algs.c index bd4bd27..7893a8b 100644 --- a/drivers/crypto/qat/qat_common/qat_algs.c +++ b/drivers/crypto/qat/qat_common/qat_algs.c @@ -599,7 +599,8 @@ static int qat_alg_sgl_to_bufl(struct qat_crypto_instance *inst, if (unlikely(!n)) return -EINVAL; - bufl = kmalloc_node(sz, GFP_ATOMIC, inst-accel_dev-numa_node); + bufl = kmalloc_node(sz, GFP_ATOMIC, + dev_to_node(GET_DEV(inst-accel_dev))); if (unlikely(!bufl)) return -ENOMEM; @@ -645,7 +646,7 @@ static int qat_alg_sgl_to_bufl(struct qat_crypto_instance *inst, struct qat_alg_buf *bufers; buflout = kmalloc_node(sz, GFP_ATOMIC, - inst-accel_dev-numa_node); + dev_to_node(GET_DEV(inst-accel_dev))); if (unlikely(!buflout)) goto err; bloutp = dma_map_single(dev, buflout, sz, DMA_TO_DEVICE); diff --git a/drivers/crypto/qat/qat_common/qat_crypto.c b/drivers/crypto/qat/qat_common/qat_crypto.c index 0d59bcb..828f2a6 100644 --- a/drivers/crypto/qat/qat_common/qat_crypto.c +++ b/drivers/crypto/qat/qat_common/qat_crypto.c @@ -109,12 +109,14 @@ struct qat_crypto_instance *qat_crypto_get_instance_node(int node) list_for_each(itr, adf_devmgr_get_head()) { accel_dev = list_entry(itr, struct adf_accel_dev, list); - if (accel_dev-numa_node == node adf_dev_started(accel_dev)) + if ((node == dev_to_node(GET_DEV(accel_dev)) || + dev_to_node(GET_DEV(accel_dev)) 0) +adf_dev_started(accel_dev)) break;